C2000学习笔记7——SPWM生成及触发ADC
继上节更新EPWM已经很久了,这次来更新SPWM的生成以及EPWM触发ADC的用法
一、SPWM
关于SPWM的介绍网上都有很多,这里就不过多介绍,我在使用他时更多的是做电源相关,PWM已经满足不了使用需求了。我所理解的SPWM就是占空比按照正弦规律变化的波,当然还有很多不同类别的SPWM:双极性、单极性,这些就自己去了解了。接下来就说明如何使用EPWM模块来配置。
1.导入空模板
导入的过程就不过多赘述了,之前的文章写的很详细忘记了可以翻找看看,这里我也直接将工程的名字和主函数文件名称都更改了,也添加了专门用来放.c .h文件的文件夹切记不要忘记添加文件夹路径到工程中。
2.引入fpu计算
C2000是支持fpu加速计算的,所以我们只需要引入相关的库文件即可
首先右键工程来到工程设置中
找到这两项并设置为图下所示
再然后点击C2000 Linker找到File Search Path点击在如下所示中添加文件
添加三个文件
这三个路径分别在
ccs1281\ccs\tools\compiler\ti-cgt-c2000_22.6.1.LTS\lib\rts2800_fpu32_eabi.lib
c2000\C2000Ware_5_05_00_00\libraries\math\FPUfastRTS\c28\lib\rts2800_fpu32_fast_supplement_eabi.lib
c2000\C2000Ware_5_05_00_00\libraries\math\IQmath\c28\lib\IQmath_fpu32_eabi.lib
其中ccs1281和c2000文件夹需要根据你安装的实际路径进行选择
并且这三个文件的顺序也需要与上面对应 且这三个文件在最上面首先编译
最后的顺序如下所示
点击文件选中再点击红色框中的按钮即可调整顺序
然后再来到下面这个页面
将红框中的strict换为relaxed
最后点击右下角的Apply and Close
这样就添加成功了
3.EPWM的配置
这里生成SPWM多用于电源 所以一般都会同时多输出一个反相的波形 其他的配置与上一篇的一样 主要区别在EPWM Dead-Band中 同时由于是生成SPWM 所以计数方式也需要更改为增减计数
接下来EPWM Counter Compare中可以不选择配置 因为后面需要编写函数来进行修改
然后是EPWM Action Qualifer中的配置需要修改 也与之前的增计数方式的不同
这里主要是对COMPA的进行选择 同理COMPB也是一样
这里需要仔细分辨COMPA的选择是COMPA COMPB的选择则对应的是COMPB 这里生成PWM画幅图很好理解
因为选择了当计数值大于等于COMPA的值是为高电平 所以对应为PWM的高 当计数值小于等于COMPA的值时设为低则对应为PWM的低 对于COMPB也是同理
然后是Dead Band中的配置
使其能够反相的选项就是Rising Edge Delay Polarity和Falling Edge Delay Polarity这两个选项 需要将Falling Edge Delay Polarity配置为DB polarity is inverted 这里就是将B的输出反相
下面几个就是使能死区和配置死区时间
接下来配置EPWM的中断
首先使能中断 中断时机设定为高电平中点也就是计数值最大时发生中断 这样的好处是在一个时间周期内部更改占空比 防止发生未知错误 然后是一个事件触发一次中断 也就是每个周期都触发一次中断
下面的是使能ADC的中断触发源 参数同上
最后是设定引脚
注意一定要勾选Enable Interrupt in PIE 否则不会产生中断
这里我们的EPWM就配置完了 接下来是初始化代码 首先添加一个专门的SPWM的.c.h文件 另外可以添加一个专门放置头文件的.h文件 可以避免忘记包含头文件 也大大简化了代码结构
然后来到SPWM.c文件中添加初始化函数
首先定义相关变量
来到函数内部 根据填入的载波和调制波的频率算出ARR的值从而设定分频的值使用
EPWM_setTimeBaseCounter(myEPWM0_BASE,ARR);进行设定
其他则是计算需要生成正弦相关的参数角速度w 每单位步进时间t0 以及调制度mol
然后编写中断函数
根据正弦函数来理解各参数
Spwm_t表示的是x轴上的数字 spwm_uref是此时ARR对应的值 这个值就是正弦函数在ARR范围内的映射 可以根据公式进行推导 这样就实现了占空比呈正弦变化
最后在config.h文件中引用math库 定义pai
主函数中不要忘记添加
编译下载看看效果
可以看到确实是正弦变化且上下是反相的 说明我们的配置是成功的
二、ADC配置
然后是ADC的配置 继续来到syscfg的配置
ADC的配置按照下面来配置
配置完后来到ASYSCTL中将ADC的参考源选择为内部1.65V
添加ADC的.c.h文件
添加中断函数到adc.c文件中
使用ADC_readResult来读取adc的值 编译下载看看效果
通过Debug观察ADC采集到的值 此时是将A0连接到了板子上的GND引脚 所以输出为0
现在连接到3.3V上观察变量
可以看到采集到的值变为4095 达到满量程 符合预取 此时就实现了EPWM触发ADC采集
