目录
1,前言
2,实现过程
2.1 比较部分
2.2 输出部分
1,前言
电平,作为单片机的“肌肉”,承担着实践单片机的“想法“的重要任务。而PWM波,则是电平这个大类的重中之重,可以说,没有PWM波,单片机与外界的复杂信息交换就无法实现。
单片机的PWM波输出,依靠的是定时器的定时输出功能。在前两篇的博客中,我们对于定时器的时基单元与输入捕获功能有了完整的了解。定时器的基础是时钟,核心是”计数“与”比较“,通过设定数据与计量数据的比较,可以在预计时间内捕获、输出电平,并完成中断、DMA等功能。
定时器前文指路
时基单元:机器人是怎么计时的(通用定时器 - 时基单元)-CSDN博客
输入捕获:电平输入检测-定时器输入捕获-CSDN博客
2,实现过程
在定时器整体中,输出比较单元的框图如图2.0.1所示:
图 2.0.1 输出比较整体图
在单通道中(单独摘一条输出比较通道出来),输出比较单元框图如图2.0.2所示:
图 2.0.2 单通道输出比较
我们以图2为主,介绍输出比较的实现框架。
在图2的左上角,有”ETRF“信号的输入,这个信号的作用是强制拉低OC1REF信号,在我们PWM输出中,咱不涉及这个功能。"ETRF"的右边,有”至主模式控制器“功能,它能够映射到TRGO,连接至其它定时器,本文不做说明。
我们来介绍输出比较的其余功能。
2.1 比较部分
输出比较模块的比较是用过计数器(CNT)与捕获/比较寄存器(CCRx)实现的,CNT与CCRx中的数值时刻在进行比较,比较的结果会传入输出模式控制器(图2.0.2)。通过比较的结果,输出模式控制器能够控制输出OC1REF电平的极性。
输出模式控制器的输出动作由捕获/比较模式寄存器(CCMRx)的OC1M位设置(图2.0.2),OC1M位的功能如图2.1.1所示:
图 2.1.1 输出模式设置
我们常用的是110与111,即PWM模式1与PWM模式2,以PWM模式1为例,见图2.1.2:
图 2.1.2 PWM模式1
上图摘自江协科技
江协科技
计数总数为90,我们设置CCRx寄存器值为30,当CNT < CCRx时,OCxREF置高电平,就能够输出上图所示方波。
2.2 输出部分
OCxREF会抵达输出极性选择通道,由捕获/比较使能寄存器(CCER)的CC1P位配置极性选择。在输出模式中,CC1P位写0,为低电平有效;CC1P位写1 ,为高电平有效。即可以根据传递过来的信号,选择信号是否翻转:0为不翻转,1为翻转(图2.0.2中的非门)。
最后,通过捕获/比较使能寄存器(CCER)的CC1E位使能输出。
以上,就是输出比较部分
欢迎交流哦!