文章目录

  • 前言
  • 一、示波器检测PWM波
    • 1、对应引脚说明
    • 2、PWM波形
  • 二、寄存器配置及代码实现
    • 1.时基模块寄存器配置
    • 2.计数比较模块和动作模块
    • 3.死区产生模块
  • 总结

前言

关于DSP28335的书籍有很多,但都是从乏味的寄存器开始入手。对于新手可能不是很友好,因此关于DSP的学习记录我打算从应用入手去学习寄存器的用法和配置。


一、示波器检测PWM波

1、对应引脚说明

此次实验用J4模块引脚的XPWM1和XPWM2分别产生ePWM1A和ePWM1B,对应芯片GPIO0和GPIO1引脚。

2、PWM波形


黄色线为EPWM1A,紫色线为EPWM1B。从示波器波形中我们可以看到PWM的要求:配置EPWM1频率为10khz,1A和1B互补,死区延时5us,死区延时设置为A上升沿延时和B下降沿延时。如何设置频率和死区延时时间下文会讲。

二、寄存器配置及代码实现


PWM模块可以分为时基模块(TB)、计数比较器模块(CC)、死区产生模块(DB)、斩波模块(PC)和事件触发模块。PWM的频率主要是对时基模块的和计数比较器模块的寄存器进行设置,死去模块自然就是设置死区。

1.时基模块寄存器配置

![在这里插入图片描述](https://img-blog.csdnimg.cn/602276220d6145f7866516a27439ab56.png#pic_center

TB寄存器非常多。但我们只需要对颜色框内进行设置,其他为默认值。
红色框——TBCTL(时基控制寄存器):
DSP时钟为150MHZ,我们PWM-TBCLK只需要75MHZ。那怎么办呢?CLKDIV和HSPCLKDIV寄存器的作用就体现出来了:对系统时钟(SYSCLKOUT)进行分频

CLKDIV设为1,HSPCLKDIV设为2。CTRMOOE选择向上-下计数模式,时基控制寄存器部分代码如下

 SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC   =0; //禁止使用EPwm时钟,可使所有EPwm模块同步使用时基时钟EPwm1Regs.TBCTL.bit.CLKDIV          =TB_DIV1; //时钟不分频EPwm1Regs.TBCTL.bit.HSPCLKDIV       =TB_DIV2; //系统150MHz经过2倍分频后为75MHzEPwm1Regs.TBCTL.bit.CTRMODE         =0x2;  //使用增减计数模式

绿色框——TBPRD(时基周期寄存器):
用来设置PWM波周期。周期设定好,倒数频率就设定好了。我们的要求是10MHZ,上下计数模式为向上或向下计数模式的两倍周期,即

EPwm1Regs.TBPRD             =3750; //pwm频率为10khz

黄色框(时基相位寄存器和)

代码如下(示例):

     EPwm1Regs.TBPHS.half.TBPHS  =0; //相位为0

2.计数比较模块和动作模块

计数比较模块是以时基计数器的值作为输入,与比较寄存器CMPA和比较寄存器CMPB不断进行比较,当时基计数器的值等于其中之一时,就会产生相应事件。

①产生比较事件具体取决于编程时是采用寄存器 A 或者 B:
CTR=CMPA:时基计数器的值与比较寄存器A的值相同
CTR=CMPB:时基计数器的值与比较寄存器B的值相同
②动作模块 AC恰当配置后可以控制 PWM 的占空比。
③采用影子寄存器来更新比较值可以有效防止在 PWM 周期内出现故障以及毛刺。

 EPwm1Regs.CMPCTL.bit.SHDWAMODE   =1;EPwm1Regs.CMPCTL.bit.SHDWBMODE   =1; //CMPB寄存器采用直接模式EPwm1Regs.CMPA.half.CMPA         =1875;  //占空比初值50%EPwm1Regs.AQCTLA.bit.CAU   =2;   //CTR=CMPA增计数时,EPwmA输出高电平EPwm1Regs.AQCTLA.bit.CAD   =1;    //CTR=CMPA减计数时,EPwmA输出低电平EPwm1Regs.AQCTLB.bit.CAU   =1;    //CTR=CMPA增计数时,EPwmB输出低电平EPwm1Regs.AQCTLB.bit.CAD   =2;    //CTR=CMPA减计数时,EPwmB输出高电平EPwm1Regs.AQSFRC.all       =0;EPwm1Regs.AQCSFRC.all      =0;  //动作软件强制与连续软件强制寄存器均不启用EPwm1Regs.DBCTL.bit.IN_MODE   =2;  //EPwm1A为上升沿延时,1B为下降沿延时EPwm1Regs.DBCTL.bit.POLSEL    =1; //1A翻转EPwm1Regs.DBCTL.bit.OUT_MODE  =3; //使能上升沿和下降沿延时EPwm1Regs.DBRED               =375; //上升沿死区时间5usEPwm1Regs.DBFED               =375; //下降沿死区时间5usEPwm1Regs.ETSEL.bit.INTEN   =1;    //EPwm中断使能EPwm1Regs.ETSEL.bit.INTSEL  =2;  //EPwm中断条件为CTR=PRDEPwm1Regs.ETPS.bit.INTPRD   =1; //事件分频寄存器,每发生一次事件,中断一次

以上就是计数比较模块和动作模块的代码,画幅图利于理解上述代码。
因为这PWM用于H桥电机可逆系统,所以一开始我们设置占空比为50%。后续再设置中断调节运行时的占空比。总的意思就是我们只调用CMPA比较寄存器来改变EPWMA和EPWMB,既然是H桥,那必须设置延时,不然容易导致两组晶闸管同时导通,容易照成事故。

3.死区产生模块

对于死区模块,我们只需要对(IN_MODE和OUT_MODE)、(DBRED和DBFED)这两组寄存器设置即可,具体见代码注释,具体死区时间见下文公式。

代码如下(示例):

 EPwm1Regs.DBCTL.bit.IN_MODE   =2;  //EPwm1A为上升沿延时,1B为下降沿延时EPwm1Regs.DBCTL.bit.POLSEL    =1;    //1A翻转EPwm1Regs.DBCTL.bit.OUT_MODE  =3; //使能上升沿和下降沿延时EPwm1Regs.DBRED               =375; //上升沿死区时间5usEPwm1Regs.DBFED               =375; //下降沿死区时间5us

死区设置遵循A上升沿延时,B下降沿延时。
延时时间一般1-5us,假设延时时间为1us。计算公式如下

总结

以上就是DSP28335产生PWM波的主程序部分,完整代码还需要加入中断。完整代码见本人发布的资源PWM_code

DSP28335学习笔记-产生PWM波 ——从应用角度出发相关推荐

  1. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  2. STM8学习笔记---利用PWM功能输出SPWM波

    要生成SPWM波,其关键是要生成一组正弦规律变化的数字,然后将数字对应成PWM输出的占空比,按照顺序输出占空比就行.生成正弦波的方法在 使用C语言产生正弦波数据 这篇博客有详细说明,这里就不说了. 本 ...

  3. java学习笔记之斐波那契数列

    斐波那契数列计算公式为: f(n) = f(n-1)+ f(n-2) 基于此写了一个方法,用于输出一个长度为指定的斐波那契数列(从正数1开始, 即1,1 ,2 ,3 ,5 ....): static ...

  4. 树莓派用c语言pwm控制电机,树莓派学习笔记之PWM控制直流电机转速

    树莓派控制PWM控制电机转速 一.硬件 树莓派 12V直流电机 L298N电机驱动器 220V转12V变压器 二.连线 树莓派与L298N需要共地 L298N驱动模块 树莓派接线 三.树莓派pytho ...

  5. 算法学习笔记五 斐波那契数列

    斐波那契数列 一.最基本的 所以,只要知道这个数列的前两项,就可以求出之后所有项了. 核心部分(最简单的递推方法,但是范围是n<=48,否则会超时and溢出): #include <cst ...

  6. DSP28335学习笔记——McBSP配置为SPI

    由于28335硬件外设上只有一个SPI接口,所以当SPI接口不够用时,可以将McBSP配置为SPI接口. 参考28335的数据手册,当DSP为主机时,配置McBSP为SPI所用到的接线如下图所示. 另 ...

  7. 【机器视觉学习笔记】双线性插值实现图片任意角度旋转(C++)

    目录 原理 源码 RotateImage_BilinearInterpolation 主函数 效果 与最近邻插值比较 原图 最近邻插值效果(局部) 双线性插值效果(局部) 完整源码 平台:Window ...

  8. MSP430F5529 DriverLib 库函数学习笔记(六)定时器A产生PWM波

    目录 1.通过Timer_A_outputPWM配置产生PWM波 初始化函数 计算 修改占空比的函数 整体程序 效果 2.单定时器产生多路PWM信号 初始化函数 实验结果 3.对称PWM信号的产生 初 ...

  9. STM8学习笔记---定时器输出7路PWM波

    STM8S003F3P6单片机共有三个定时器定时器1.定时器2.定时器4.其中定时器1为16位高级定时器,定时器2为16位通用定时器,定时器4为8位基本定时器.定时器1和定时器2可以输出PWM波.其中 ...

最新文章

  1. python学习笔记(四)、条件、循环及其他语句
  2. R语言实战应用精讲50篇(三)-多重线性回归系列之模型评估与诊断应用案例
  3. 斯坦福CS229机器学习课程的数学基础(概率论)翻译完成
  4. 济南女子用计算机付款,山东一女子带孩子买鞋,用计算机假装付款,店员:给孩子做个榜样...
  5. python创建函数、可以接受任意多个整数参数并求和_pythonxlwt:求和函数最大参数限制?...
  6. 知识图谱之语言计算与信息抽取
  7. 一张图讲清如何正确应用可视化图表,学会后再也不会用错图表
  8. 20 位行业专家共话选型经验,CSDN「选型智囊团高端研讨会」圆满落幕!
  9. 移动端页面开发资源总结
  10. 软件资源消耗测试,综合测试:性能与资源消耗堪称完美
  11. 美国军方称密切关注量子加密,法国国防部重金投资量子技术
  12. 安装之后如何激活冰点还原软件?
  13. 堪萨斯大学计算机硕士,堪萨斯大学计算机工程硕士专业入学要求及费用
  14. Forth语言简明教程
  15. vue获取地址栏参数值
  16. 解决《CPU设计实战》第四章实践交叉编译时报错mipsel-linux-ld: section .MIPS.abiflags LMA overlaps section .data LMA
  17. 苹果任性,降低iPhone电池容量,用户需要多买个充电宝奶妈
  18. SpringCloud Alibaba 实战之《服务门户:Spring Cloud Gateway 如何把好微服务的大门》
  19. 【转】欧盟物联网研究战略路线图(4)
  20. redis哨兵模式出现connected_slaves:0解决办法

热门文章

  1. GSoC 2022 Blender VSE: 第一周总结
  2. Python 模拟键盘鼠标操作实战教程
  3. svm+特征提取做分类
  4. uboot2021.10-nandflash-3.initr_nand
  5. linux下system函数
  6. 百度地图查询数据结果
  7. OSChina 周三乱弹 —— 生活终于对我这只小猫咪动手啦
  8. 华为交换机批量处理端口
  9. 无偏性 VS 一致性
  10. Linux存储性能观测——vmstat命令详解