嵌入式开发学习日志32——stm32之PWM

说到PWM,其实在大学里经历过实验周的理工科学生应该或多或少都会有印象,而在stm32中,同样也有控制输出PWM的功能,而这个功能,和之前说的通用计时器之间也有所关联。

下面就正式来看一看PWM。

PWM中文意思为脉冲宽度调制,是一种利用微处理器的数字输出来控制模拟电路的有效方式,其控制起来十分简单,同时实时动态响应,应用很广泛。

由于PWM的输出是数字的,任意给定时刻要么是满幅度值的直流供电,要么完全没有,理论上,只要脉宽足够得大,PWM可以对任何模拟值进行编码。(这里涉及到部分通信里的知识)

例如,有一个正弦波模拟信号,它既有0V的部分,也有最高3.3v的部分,但是对于计算机系统来说,只能进行0和1的识别,stm32也只能输出0v或者3.3v,此时正弦波显然有不属于这两个数值的部分,那么只要有足够的脉宽,就可以用PWM进行编码,从而输出1.5v。

stm32的定时器除了6和7以外,其余的定时器都是可以产生PWM输出的,有的定时器甚至可以同时产生多路PWM输出。

那么既然PWM有这么优秀的功能,那该如何进行配置呢?

PWM实际上是通过改变占空比(高电平占整个周期的事件百分比)从而输出的方波信号,而这占空比,是通过一个寄存器------输入捕获和输出比较寄存器CCR来控制的,而PWM的实际输出频率是由自动重载寄存器ARR决定,这和定时器中断模块很相似。

占空比的公式为CCR/(ARR+1)。

说到CCR,这里还要提到另一个计数寄存器------CNT,它俩的比值决定了最终PWM输出电平的置1置0以及翻转操作。

那么具体如何操控,要看选择的PWM模式,在这里以最常见到的PWM1模式为例,计数器CNT以递增的方式进行计数,CNT的计数值如果小于CCR的,那么就会输出高电平,如果CNT>CCR,那么就会输出低电平。

同时在这里,不得不说定时器模块的三个时基单元(ARR,CNT,PSC)以及CCR可谓是贯穿了整个定时器功能的应用,想将stm32定时器模块的几个功能掌握,这几个好兄弟都得有掌握。

接下来就是对PWM相关配置的流程描述:

(1)首先还是将定时器、GPIO端口等等时钟都开启,同时设置IO端口输出为复用模式。

(2)初始化定时器参数,还是设置自动重载值,计数方式以及分频系数。

(3)初始化PWM,设置模式以及极性,使能PWM。

(4)开启定时器!!!

(5)修改占空比,使能ARR以及CCR的预装载寄存器。

附上一张PWM输出模式的内部图。

相关推荐
kkkkkkkkkk_Z2 小时前
学嵌入式和C语言编程数据结构|学习日记Day22:栈,二叉树,哈希存储
c语言·数据结构·学习
for_ever_love__5 小时前
python基础语法学习: 闭包
开发语言·python·学习·闭包
皮卡丘不断更6 小时前
从遥操作示范到可复现训练:LeRobot 0.6.1 的机器人学习工作流
人工智能·学习·机器人·开源·开发工具
IZero077 小时前
Elasticsearch 学习笔记筑基-文档操作篇
笔记·学习·elasticsearch
小白说大模型8 小时前
AI驱动的个性化学习路径:知识图谱与知识点关联的存储与推理
大数据·人工智能·学习·mysql·机器学习·prompt·知识图谱
Groundwork Explorer8 小时前
W5500 网卡编程初始化与使用指南
python·单片机
吃好睡好便好8 小时前
三伏天结束了
学习·生活·毕淑敏·心理游戏
单片机仿真设计9 小时前
【proteus仿真】基于 STM32 的智能垃圾桶设计(仿真图+程序)
c语言·stm32·stm32单片机·proteus·毕设·仿真
2501_931819709 小时前
方言标注标准化模板迭代优化诉求 泸州话标注公司学习信实翻译模板迭代方法论
学习
智闲电子设计10 小时前
STM32 SD 卡 + FatFS 实战:掉电丢数据?f_sync 和簇对齐写救你
stm32·单片机·嵌入式硬件