以下是有关STM32cube的PWM的花式操作,大佬们在看下面链接之前建议先看完本博客,个人觉得写的比较详细,欢迎大佬之指正!
STM32Cube的PWM控制基础篇(二)多路占空比不同的PWM
STM32Cube的PWM控制基础篇(三)定时器的PWM设置详解
STM32Cube的PWM控制应用篇(一)用一个定时器改变另一个定时器下的三个PWM波占空比
STM32Cube的PWM控制应用篇(二)用两个个定时器生成三个相位差120度的等效正弦波
PWM是脉冲宽度调制,PWM我个人理解为一个方波信号,其参数有两个
(1)占空比:脉冲的有效电平占整个周期的百分比。
(2)频率:整个PWM波的频率,1/一个脉冲周期
由上可知,一个PWM波形我们可以通过调整其频率和占空比来达到我们需要的波形或是等效电压。(3.3V的电压如果PWM调制的等效电压为3.3占空比【60%占空比电压等效为3.3V60%=1.98V】)具体内容如图所示:
由于PWM是一个有频率有脉冲宽度的方波,所以一定存在一个标准的时钟信号为PWM提供基准时钟,在STM32F1系列中,其中定时器TIM1、TIM8是挂在在APB2上的,而定时器TIM2、3、4是关在在APB1上的。所以我们需要在时钟树上调整其时钟源频率来满足PWM波形需要。
要求:构建一个500Hz,脉冲宽度为70%的PWM波
时钟源选择外部时钟,外部时钟为8MHz倍频9倍后变为72MHz后导入系统时钟,通过AHB分频后得到硬件时钟HCLK后分配给各个部件,图中标识了时钟频率最大值,根据后边的分频来保证各个部件不超过最大频率(按照需求配置,不要小于PWM的频率即可。PS:频率越低越节能,越高性能越好)
点击TIM1进入配置界面
我现在需要使PWM频率达到500Hz,此时时钟树APB2设置为72MHz,所以存在以下计算公式:
目的定时器频率=时钟源/(预分频系数*自动重载值)
时钟源:72MHz
目的定时器频率:500Hz
所以我们可以自己设置自动重载值和预分频系数使等式成立:
预分频系数:144
自动重载值:1000
由于计数是从0开始,所以需要在设置量上减1得到以下设置图
定时器设置完成后下拉定时器菜单可见PWM设置部分
PWM Mode为设置PWM输出模式
模式1: a、当定时器计数为向上计数,则计数小于占空比的部分为有效电平
b、当定时器计数为向下计数,则计数大于占空比的部分为有效电平
计数方式在下图第二行
模式2: a、当定时器计数为向上计数,则计数大于占空比的部分为有效电平
b、当定时器计数为向下计数,则计数小于占空比的部分为有效电平
总结:PWM mode 1和PWM mode 2互补
到这步设置完成,点击菜单栏
按照以上设置生成项目(会玩的根据自己的习惯搞)
在生成的项目的main.c部分添加如下代码
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 700);
/* USER CODE END 2 */
由于我们只设置了一路PWM,就启动一路就行,第一句是启动PWM,第二句是设置PWM的占空比,两个函数的第一参数都是定时器,第二参数为频道,设置占空比的第三参数为计数值,存在以下公式:
占空比=(计数值/自动重载值)*100%
自动重载值:定时器的自动重载值
到此为止,所有设置工作结束,编译,下载到板子上。
正所谓所有不给实验结果的博客都是流氓博客,所以在此花费几百大洋买了个逻辑分析仪来给大家展示一下测试结果
由于设置定时器的PWM后自动分配了PWM的输出引脚,我这里为PA8,所以我直接将逻辑分析仪频道0接到STM32的PA8引脚上,逻辑分析仪底线接地(PS:懒得接地的小伙子不怕分析仪烧了就不用接地了,哈哈哈哈哈嗝!!!!!)
我将逻辑分析仪频道0设置了对PWM的分析,方便大家查看(逻辑分析仪各人用的不一样,这里设置就不上图了,直接放结果)
以下是频率为500Hz,占空比为70%的PWM波:
由图可知,一个周期为20ms,所以
f=1/T=1/0.02s=500Hz
f:频率
T:周期
由图可知,占空比为70%达到了一开始的实验要求。
Good Game!!!!!!
接下来会推出一系列的关于PWM控制电机的分享,有需要的猿们敬请关注!!!!!
以上内容欢迎大家转载引用,标明出处即可!!!!!