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.libc2000\C2000Ware_5_05_00_00\libraries\math\FPUfastRTS\c28\lib\rts2800_fpu32_fast_supplement_eabi.libc2000\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采集