完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 基础知识
1.1 PWM基本知识 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 例如上图中,矩形脉冲是stm32输出的数字信号,当这个信号接到外设上时,效果可以等效为这个正弦波。 一个周期内高电平的持续时间占总周期的比例成为占空比,通过修改占空比,可以改变输出的等效模拟电压。例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。此外PWM输出的频率也会影响最终的PWM输出效果,PWM输出的频率越高,最终输出的“连续性”越好,越接近模拟信号的效果,频率低则会增强离散性,最终的输出效果会有比较强的“突变”感。 脉冲调制有两个重要的参数,第一个就是输出频率,频率越高,则模拟的效果越好。第二个就是占空比。占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。 1.2 PWM工作原理 为了实现PWM功能,需要使用定时器中的比较寄存器(TIMx_CCRx)。 当定时器以PWM模式工作时,会自动将TIMx_CCRx的值与TIMx_CNT(计数寄存器)中的值做比较,当TIMx_CNT中的值小于TIMx_CCRx的值时,PWM输出引脚输出高电平,大于时则输出低电平。 因此知道了PWM信号的周期和占空比可以通过设置比较寄存器TIMx_CCRx和定时器重载寄存器TIMx_ARR来控制。PWM的占空比可以通过下图公式计算: 以下图为例,该定时器的重载值为8,比较寄存器值为4,输出信号为OCXREF,则其占空比为44.4%。 一个定时器工作在PWM输出模式下时,有4个通道可以进行PWM信号的输出,每一个定时器都有对应标号的比较寄存器,比如5号定时器的1号通道对应的比较寄存器为TIM5_CCR1。 修改比较寄存器TIMx_CCRx的值来控制PWM输出的占空比。在函数aRGB_led_show中,首先通过与运算与移位运算提取出对应的alpha,R,G和B通道值,然后用透明度alpha与R,G,B三者依次相乘,最后将其赋值通过__HAL_TIM_SetCompare函数给对应的比较寄存器TIM5-》CCRx。 如图所示 其中,ARR为自动重装载值,相当于一个最大可达到的值,CCRx 是用来控制占空比的,对应这幅原理图,超过CCRx的时间段为高电平。计数的频率也可以在图中通过t2、t4 - t2、等计算得到。其中单片机定时器的计数模式有以下三种情况,如图所示。 我们可以根据自己的需要灵活选择计数模式。 2. 程序的学习 2.1 PWM在CubeMX的配置 1、在CubeMX中设置定时器14的通道1为PWM输出。可以注意到这个通道对应的引脚正是之前的实验中使用的LED引脚。 这里这个定时器14为特殊情况,下面我们以定时器5为例给大家讲解一下正常情况。 一般情况下,我们选择内部时钟为pwm时钟,然后根据自己的需要打开pwm输出、输入等模式。 2、现在我们对定时器14进行相关的配置,如图所示 2.2 代码讲解 1、HAL_TIM_PWM_Start函数介绍 为了使定时器开始PWM输出,除了要通过HAL_TIM_Base_Start使定时器开始工作,还需要在初始化时调用HAL库提供的PWM初始化函数HAL_TIM_PWM_Start。 HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) 这个函数的返回值为HAL_StatusTypeDef,HAL库定义的几种状态,如果成功使定时器开始工作,则返回HAL_OK; 该函数的作用在于使对应定时器的对应通道开始PWM输出; 该函数有两个参数, (1)*htim 定时器的句柄指针,如定时器1就输入&htim1,定时器2就输入&htim2 (2)Channel 定时器PWM输出的通道,比如通道1为TIM_CHANNEL1 代码我已经放到了我的GitHub仓库,如有需要可以下载使用: 总结 这篇博客学习的PWM输出功能可以用于舵机和电机控制,是非常常用的控制信号,需要熟练掌握其原理。 下一次我们要了解其他几个需要pwm的外设,大家可要好好复习消化一下哟。 今天实际的操作比较简单,但是原理大家还是要仔细研究一下啦。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 08:26 , Processed in 0.686170 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号