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

这篇具有很好参考价值的文章主要介绍了DSP28335学习笔记-产生PWM波 ——从应用角度出发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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


一、示波器检测PWM波

1、对应引脚说明

此次实验用J4模块引脚的XPWM1和XPWM2分别产生ePWM1A和ePWM1B,对应芯片GPIO0和GPIO1引脚。
DSP28335学习笔记-产生PWM波 ——从应用角度出发
DSP28335学习笔记-产生PWM波 ——从应用角度出发

2、PWM波形

DSP28335学习笔记-产生PWM波 ——从应用角度出发
黄色线为EPWM1A,紫色线为EPWM1B。从示波器波形中我们可以看到PWM的要求:配置EPWM1频率为10khz,1A和1B互补,死区延时5us,死区延时设置为A上升沿延时和B下降沿延时。如何设置频率和死区延时时间下文会讲。

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

DSP28335学习笔记-产生PWM波 ——从应用角度出发
PWM模块可以分为时基模块(TB)、计数比较器模块(CC)、死区产生模块(DB)、斩波模块(PC)和事件触发模块。PWM的频率主要是对时基模块的和计数比较器模块的寄存器进行设置,死区模块自然就是设置死区。

1.时基模块寄存器配置

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

TB寄存器非常多。但我们只需要对颜色框内进行设置,其他为默认值。
红色框——TBCTL(时基控制寄存器):
DSP时钟为150MHZ,我们PWM-TBCLK只需要75MHZ。那怎么办呢?CLKDIV和HSPCLKDIV寄存器的作用就体现出来了:对系统时钟(SYSCLKOUT)进行分频
DSP28335学习笔记-产生PWM波 ——从应用角度出发
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倍分频后为75MHz
	EPwm1Regs.TBCTL.bit.CTRMODE         =0x2;  //使用增减计数模式

绿色框——TBPRD(时基周期寄存器):
用来设置PWM波周期。周期设定好,倒数频率就设定好了。我们的要求是10MHZ,上下计数模式为向上或向下计数模式的两倍周期,即
DSP28335学习笔记-产生PWM波 ——从应用角度出发

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

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

代码如下(示例):

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

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

计数比较模块是以时基计数器的值作为输入,与比较寄存器CMPA和比较寄存器CMPB不断进行比较,当时基计数器的值等于其中之一时,就会产生相应事件。
DSP28335学习笔记-产生PWM波 ——从应用角度出发
①产生比较事件具体取决于编程时是采用寄存器 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; //上升沿死区时间5us
	EPwm1Regs.DBFED               =375;	//下降沿死区时间5us

	EPwm1Regs.ETSEL.bit.INTEN   =1;	//EPwm中断使能
	EPwm1Regs.ETSEL.bit.INTSEL  =2;	//EPwm中断条件为CTR=PRD
	EPwm1Regs.ETPS.bit.INTPRD   =1;	//事件分频寄存器,每发生一次事件,中断一次

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

3.死区产生模块

DSP28335学习笔记-产生PWM波 ——从应用角度出发对于死区模块,我们只需要对(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; //上升沿死区时间5us
	EPwm1Regs.DBFED               =375;	//下降沿死区时间5us

死区设置遵循A上升沿延时,B下降沿延时。
DSP28335学习笔记-产生PWM波 ——从应用角度出发延时时间一般1-5us,假设延时时间为1us。计算公式如下
DSP28335学习笔记-产生PWM波 ——从应用角度出发

总结

以上就是DSP28335产生PWM波的主程序部分,完整代码还需要加入中断。完整代码见本人发布的资源PWM_code文章来源地址https://www.toymoban.com/news/detail-464581.html

到了这里,关于DSP28335学习笔记-产生PWM波 ——从应用角度出发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于DSP28335的CAN通信(附代码)

    在学DSP28335的时候由于寄存器数量多且配置复杂,网上各路大神给出的代码基本上都不太能跑的通(可能是我移植的时候有些寄存器没配置好),所以在看了好几遍官方数据手册并且自己动手写了一遍代码之后,将一些容易错的地方记录了下来,文末也附上了一份代码,希望能对

    2024年02月11日
    浏览(57)
  • STM32 F103C8T6学习笔记5:定时器输出不同占空比PWM驱动舵机旋转角度

    现在学习使用STM32 F103C8T6的定时器PWM模式,使用PWM驱动舵机转动不同角度,文章提供源码,测试工程,测试动态效果图。 目录 基础原理:  实验目标: 测试视频结果: 测试工程下载: 这次依旧拿出之前学习过的舵机DS3115,它的基础原理不多加介绍,在往期讲MSP432的文章有所

    2024年02月13日
    浏览(41)
  • STM32笔记——定时器输出比较功能(产生PWM波)

    目录 一、概述 二、PWM简单介绍  三、通用定时器输出比较 3.1 输出比较简介 3.2 输出比较通道 3.3 产生PWM的过程 四、实验硬件介绍及PWM模块程序 4.1 舵机简介 4.2 直流电机及驱动芯片TB6612  4.3 PWM模块驱动程序         主要介绍通用定时器输出比较功能,在GPIO口输出PWM来控

    2024年02月13日
    浏览(43)
  • DSP28335使用SPI从AD2S1210(旋变芯片)读取位置

    精准的转子位置对于电机精确控制来说至关重要,利用旋转变压器获取转子位置角度是一种常见方案。因此在电控程序中只需要通过主控芯片(以 DSP28335 为例)与旋变解码芯片(以 AD2S1210 为例)进行通信(以 SPI通信 为例)。 在实际操作中,通过SPI从旋变芯片读取绝对位置时,读取

    2024年02月13日
    浏览(40)
  • 线程和进程的区别(从JVM角度出发)

    线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。 根本区别:进程是操作系

    2024年01月22日
    浏览(91)
  • C++学习笔记——从面试题出发学习C++

    C++博大精深,在学习过程中我也有看过《Effective C++》、《Efficient C++》、《C++ Prime》这样一些C++的经典大作,但是个人感觉是由于语法太多,很难抓住重点,在工作中如果不很经常用到某个语法,即使在书籍上有看过也会很快忘记。而刷面试题是一个很好的查漏补缺的方式,

    2024年02月13日
    浏览(38)
  • 从计算机视觉(Computer Vision)的角度出发,从传统机器学习的特征工程、分类器设计和优化,到深度学习的CNN架构设计、训练优化、模型压缩与推理部署,详细阐述了图像识别领域最新的技术发展方向

    作者:禅与计算机程序设计艺术 在现代信息技术的快速发展过程中,图像识别技术越来越重要。早期的人工智能算法主要侧重于特征提取、分类或回归任务。近几年,随着神经网络(Neural Networks)在图像识别领域的不断突破,很多研究人员将目光投向了深度学习(Deep Learni

    2024年02月10日
    浏览(43)
  • STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    ​  本次课程采用单片机型号为STM32F103C8T6。 ​  课程链接:江科大自化协 STM32入门教程   往期笔记链接:   STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出   STM32学习笔记(二)丨STM32程序调试丨OLED的使用   STM32学习笔记(三)丨中断系统丨EXTI外部中断

    2023年04月19日
    浏览(54)
  • STM32产生PWM实现正弦输出

    本文使用 STM32-G070RB的定时器TIM1产生PWM波,并外接一阶低通滤波器,实现DAC效果,最终在示波器上显示正弦输出。主要分为两步:实现 PWM 输出,实现DAC功能。 实验用具 STM32-G070RB STM32CubeMX STM32CubeIDE PWM输出正弦波原理 1 个 PWM 波形假设为 500Hz(目标定时器频率) ,等效正弦波

    2024年02月06日
    浏览(41)
  • DSP_TMS320F28377D_ADC学习笔记

    DSP各种模块的使用,基本上就是 GPIO复用配置、相关控制寄存器的配置、中断的配置。本文主要记录本人对ADC模块的学习笔记。TMS320F28377D上面有24路ADC专用IO,这意味着不需要进行GPIO复用配置。 只需要考虑相关控制寄存器和中断的配置。看代码请直接跳到最后。 在放代码之前

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包