news 2026/5/6 7:47:45

探索 DSP 28377D:PWM 波与 ADC 程序代码实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
探索 DSP 28377D:PWM 波与 ADC 程序代码实践

dsp 28377d pwm波,adc程序代码模板,已配置3路epwm,4路adc,定时器中断,回调已写好,

最近在搞 DSP 28377D 的开发,今天就跟大家分享下配置 3 路 EPWM、4 路 ADC 以及定时器中断的相关代码模板,还有一些简单的分析。

在 DSP 28377D 里,PWM 波的输出和 ADC 的数据采集是非常常用的功能。比如在电机控制里,PWM 波可以用来控制电机的转速,而 ADC 则可以采集电机的电流、电压等信息。咱们先来看下代码。

代码片段 1:初始化 EPWM

void InitEPWM(void) { // 使能 EPWM 模块时钟 EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0; CpuSysRegs.PCLKCR2.bit.EPWM1 = 1; CpuSysRegs.PCLKCR2.bit.EPWM2 = 1; CpuSysRegs.PCLKCR2.bit.EPWM3 = 1; EDIS; // 初始化 EPWM1 EPwm1Regs.TBPRD = 1000; // 设置周期 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 计数模式 EPwm1Regs.CMPA.half.CMPA = 500; // 设置比较值 EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 比较值匹配时动作 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 初始化 EPWM2 EPwm2Regs.TBPRD = 1000; EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm2Regs.CMPA.half.CMPA = 500; EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 初始化 EPWM3 EPwm3Regs.TBPRD = 1000; EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm3Regs.CMPA.half.CMPA = 500; EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; EPwm3Regs.AQCTLA.bit.CAD = AQ_CLEAR; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; }

代码分析

这段代码主要是对 3 路 EPWM 进行初始化。首先,我们要使能 EPWM 模块的时钟,不然模块就没法工作。TBCLKSYNC这个寄存器先置 0,是为了在配置过程中让时基时钟同步暂时关闭,等配置完再打开。

然后对每一路 EPWM 进行单独配置。TBPRD寄存器设置了 PWM 波的周期,这里设为 1000。TBCTL寄存器的CTRMODE位设置了计数模式,这里用的是上下计数模式。CMPA寄存器设置了比较值,当计数器的值和比较值相等时,就会触发相应的动作,这些动作是由AQCTLA寄存器控制的。

代码片段 2:初始化 ADC

void InitADC(void) { // 使能 ADC 模块时钟 EALLOW; CpuSysRegs.PCLKCR0.bit.ADC_A = 1; CpuSysRegs.PCLKCR0.bit.ADC_B = 1; EDIS; // 复位 ADC AdcaRegs.ADCCTL1.bit.RESET = 1; AdcbRegs.ADCCTL1.bit.RESET = 1; DELAY_US(10); // 配置 ADC AdcaRegs.ADCCTL1.bit.ADCENABLE = 1; AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; AdcaRegs.ADCCTL1.bit.ADCREFSEL = ADC_REFERENCE_INTERNAL; AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; // 选择通道 0 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // 触发源 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14; // 采样保持时间 AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1; AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 5; AdcaRegs.ADCSOC1CTL.bit.ACQPS = 14; AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 5; AdcbRegs.ADCSOC0CTL.bit.ACQPS = 14; AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 5; AdcbRegs.ADCSOC1CTL.bit.ACQPS = 14; }

代码分析

这段代码是对 4 路 ADC 进行初始化。同样,先使能 ADC 模块的时钟。然后对 ADC 进行复位操作,等 10 微秒让它稳定下来。

接着配置 ADC 的一些参数。ADCENABLE位使能 ADC,ADCPWDNZ位让 ADC 从低功耗模式唤醒。ADCREFSEL选择内部参考电压。ADCSOCxCTL寄存器用来配置每个转换通道的参数,CHSEL选择通道,TRIGSEL选择触发源,ACQPS是采样保持时间。

代码片段 3:定时器中断配置

void InitTimer(void) { // 使能定时器时钟 EALLOW; CpuSysRegs.PCLKCR0.bit.TIMER0ENCLK = 1; EDIS; // 初始化定时器 CpuTimer0Regs.PRD.all = 1000000; // 定时器周期 CpuTimer0Regs.TPR.all = 0; CpuTimer0Regs.TPRH.all = 0; CpuTimer0Regs.TCR.bit.TSS = 0; // 启动定时器 CpuTimer0Regs.TCR.bit.TIE = 1; // 使能定时器中断 // 中断向量表配置 EALLOW; PieVectTable.TIMER0_INT = &timer0_isr; EDIS; // 使能中断 IER |= M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; }

代码分析

定时器中断在很多应用里都很重要,比如周期性地采集 ADC 数据。这里先使能定时器的时钟,然后配置定时器的周期。PRD寄存器设置了定时器的周期,这里设为 1000000。TSS位用来启动定时器,TIE位使能定时器中断。

接着把定时器中断的服务函数timer0_isr放到中断向量表中,这样当定时器中断发生时,就会跳转到这个函数执行。最后使能相应的中断。

回调函数我已经写好了,不过这里就不展示了,大家可以根据自己的需求在中断服务函数里实现相应的功能。

以上就是 DSP 28377D 配置 3 路 EPWM、4 路 ADC 以及定时器中断的代码模板和简单分析,希望对大家有所帮助。要是有什么问题,欢迎一起讨论!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 11:01:31

自动驾驶感知模块技术突破(激光雷达+摄像头+毫米波协同方案大揭秘)

第一章:自动驾驶Agent环境感知概述自动驾驶技术的核心在于让车辆具备“理解”周围世界的能力,这一能力主要依赖于环境感知系统。环境感知是自动驾驶Agent的“感官中枢”,通过融合多种传感器数据,实时识别道路、车辆、行人、交通标…

作者头像 李华
网站建设 2026/5/5 21:09:54

16bit高精度逐次逼近型SAR ADC电路设计成品,学习与应用的好帮手

16bit高精度逐次逼近型SAR ADC电路设计成品 单端结构原理清晰,加上目前写过的最详细的设计与仿真报告,用来入门学习不成问题。 而且各方面性能都很好,不像另外几个单端sar只能学习没有实用性,这款的性能不亚于比赛里用的全差分sar…

作者头像 李华
网站建设 2026/5/5 21:09:52

自动驾驶必须掌握的12项交通规则场景处理技术,少一个都不行!

第一章:自动驾驶交通规则处理的核心框架自动驾驶系统在复杂城市道路中运行时,必须实时解析并响应各类交通规则。这一过程依赖于一个分层协同的软件架构,将感知、决策与控制模块紧密结合,确保车辆合法、安全地行驶。规则解析引擎的…

作者头像 李华
网站建设 2026/5/5 21:09:47

双馈风机并网储能:电网频率一次调频仿真探索

双馈风机并网储能 电网频率一次调频仿真 双馈风力发电机结合并网储能系统实现电网频率支撑仿真,包含完整的MATLAB/Simulink仿真文件,到手可运行。 有一篇6页的英文参考文献,仿真模型采用的控制方法法与文献相近、采用的电力系统结构与文献Fig…

作者头像 李华
网站建设 2026/5/5 16:28:16

智能家居能源管理新突破(AI驱动的动态调度模型曝光)

第一章:智能家居能源管理新突破(AI驱动的动态调度模型曝光)近年来,随着物联网设备普及与家庭用电负载持续增长,传统静态能源分配策略已难以满足高效节能需求。一项由斯坦福大学与多家智能硬件厂商联合研发的AI驱动动态…

作者头像 李华