news 2026/9/25 12:25:20

探索 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/9/25 1:14:12

农业物联网Agent通信安全加固(零信任架构落地实践)

第一章:农业物联网Agent通信安全加固(零信任架构落地实践)在现代农业物联网系统中,大量分布在田间地头的传感器与控制设备(即Agent)持续采集环境数据并执行远程指令。这些Agent通常资源受限且部署环境开放&…

作者头像 李华
网站建设 2026/9/24 7:51:35

三相维也纳Vienna架构SVPWM整流器Matlab仿真模型探究

三相维也纳Vienna架构SVPWM整流器Matlab仿真模型文件。 PF大于0.99,THD小于3%, 输入380V输出800V纹波小于1v,功率30kw,SVPWM,羊角波马鞍波合成,中点电位平衡小于1v, 正负序分离锁相环PLL,三相输入电压不平衡处理&#…

作者头像 李华
网站建设 2026/9/23 16:13:32

Fluent 中 UDF 并行版实现振荡 3D 等直机翼气弹运动计算

Fluent计算振荡3d三维等直机翼(截面naca0012)气弹运动的算例case及用户自定义函数udf并行版 航空航天,船舶航海,土木工程必备 直升机旋翼,风力机叶片,压气机叶片颤振研究神器在航空航天、船舶航海以及土木工程领域&…

作者头像 李华
网站建设 2026/9/24 22:00:53

【三甲医院都在用的AI康复引擎】:方案实时调优的4个核心算法揭秘

第一章:医疗康复Agent方案调整的核心挑战在医疗康复领域,智能Agent的引入显著提升了患者个性化治疗的效率与精准度。然而,随着临床需求的动态变化和数据环境的复杂化,调整Agent方案面临多重核心挑战。数据异构性与隐私保护的平衡 …

作者头像 李华
网站建设 2026/9/24 14:58:50

探索Comsol中有损金属的高品质因子

Comsol有损金属的高品质因子。在科研和工程领域,我们常常会与各种复杂的物理现象和材料特性打交道。今天咱们就来唠唠Comsol里有损金属的高品质因子,这可是个相当有趣又实用的话题。 什么是高品质因子? 简单来说,高品质因子&#…

作者头像 李华