十、TIM输出比较

本文探讨了STM32如何通过输出比较功能实现PWM波形,进而控制LED、舵机和直流电机,展示了电机控制的原理和实际应用案例。
摘要由CSDN通过智能技术生成

输出比较

输出比较功能主要是用来输出PWM波形,PWM波形是驱动电机的必要条件。可以用STM32结合输出比较功能做一些有电机的项目,比如智能车、机器人等。
本小节共有三个程序:1.PWM驱动led呼吸灯;2.PWM驱动舵机;3.PWM驱动直流电机。
第一个程序的现象LED不断的变换亮度,实现呼吸灯的效果。GPIO口是数字输出的端口,输出电平不是高电平就是低电平,按理说led只有完全量和完全灭两种状态。由于PWM实现led连续的调控亮度。
第二个程序PWM驱动舵机,按下按键舵机输出轴的角度不断变换,另外OLED上也显示当前的角度。每按一下角度变量就变一次,舵机也会随即跟随变化到指定的角度固定下来。这个角度可以任意设置。
第三个程序PWM驱动直流电机。按下按键电机转起来,OLED上显示当前的速度值,每按一次按键,速度值发生改变:20、40、60、80、100(正向满速旋转),再按一下速度由正100变为-100,电机立刻变为反向慢速旋转,然后-80、-60、-40、-20、0(电机停止)。可以任意地设置电机旋转的方向和速度。

输出比较OC(output compare)、输入捕获IC(input capture)、输入捕获和输出比较的单元CC(capture compare)。

输出比较:

输出比较电路可以通过比较CNT计数器与CCR捕获/比较寄存器值的关系,来对输出电平进行置1置0或翻转的操作,用于输出一定频率和占空比的PWM波形,这就是输出比较模块的最主要的功能。
CNT是时基单元里面的计数器,CCR是捕获/比较寄存器(capture compare register),这个捕获/比较计算器是输入捕获和输出比较共用的:当使用输入捕获时是捕获寄存器,当使用输出比较时是比较寄存器。CNT计数自增,CCR是我们给定的值,当CNT大于CCR小于CCR或者等于CCR时,输出就会对应地输出1、0、1、0……输出电平跳变的PWM波形。这就是输出比较的基本功能。
在这里插入图片描述
每个高级定时器和通用定时器都拥有4个输出比较通道,并且高级定时器的前3个通道额外拥有死区生成和互补输出的功能。基本定制器没有输入捕获和输出比较的功能。通用定时器和高级定时器都有4个输出比较的通道,可以同时输出4路PWM波形,这四个通道有各自的CCR寄存器,但共用一个CNT计数器。高级定时器前三个输出比较通道额外具有死区生成和互补输出的功能,用于驱动三相无刷电机。
输出比较的用途就是用来输出PWM波形的。

PWM波形在这里插入图片描述

PWM(Pulse Width Modulation)意思是脉冲宽度调制。PWM波形数字输出信号(由高低电平组成的连续变化电平信号)。在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域,也就是使用PWM波形等效地实现模拟信号的输出。
数字输出端口控制LED,LED只有完全亮和完全灭两种状态。通过PWM波形就可以实现LED亮度的不断变化。(让LED不断点亮熄灭,当这个点亮熄灭的频率足够大时,LED就不会闪烁了,而是呈现出中等亮度。当我们调控这个点亮和熄灭的时间比例时,就能让LED呈现出不同的亮度级别;电机调速是以一个很快的频率给电机通电断电,使得电机的速度能维持一个中等速度。)
PWM的应用场景必须是惯性系统(LED在熄灭的时候,由于余辉和人眼视觉暂留现象,LED不会立马熄灭,而是有一定的惯性,过一会儿才熄灭;电机也是,当电机断电时,电机的转动不会立马停止,而是有一定的惯性,过一会儿才停,这样具有惯性的系统才能使用PWM)
高低电平跳变的数字信号可以等效为中间虚线所表示的模拟量。当这个上面电平时间长一点,下面电平时间短一点的时候,那等效的模拟量就偏向于上面;当下面电平时间长一点,上面电平时间短一点的时候。等效的模拟量就偏向于下面。在这里插入图片描述

PWM中重要的参数

(1)频率=1/T(s)。T(s)代表一个高低电平变换周期的时间。周期的倒数是频率,PWM频率越快,其等效模拟的信号就越平稳,但性能开销就越大。(一般的,PWM的频率几千到几十千Hz,已经足够快了)
(2)占空比=T(on)/T(s)。T(on)是高电平的时间。占空比就是高电平时间相对于整个周期时间的比例,一般用百分比来表示。(若占空比为50%,则是高低电平时间相等的方波;若占空比为20%,则高电平占20%。低电平占80%;占空比为100%。则一直是高电平;占空比0%。则一直是低电平)。占空比决定了PWM等效出来的模拟电压的大小,占空比越大,等效的模拟电压越趋近于高电平;占空比越小,等效的模拟电压越趋近于低电平。且等效关系是线性的。(若高电平是5V,低电平是0V。50%占空比就等效于中间电压2.5V;20%占空比就等效于1/5处的电压就是1V)
(3)分辨率=占空比变化步距。(如:有的波形占空比只能是1%、2%、3%…这样以1%的步距跳变,那它的分辨率就是1%;若是1.1%、1.2%、1.3%…这样以0.1%的布局调变,那其分辨率就是0.1%。故,分辨率就是占空比变化的细腻程度。)分辨率需要多高看实际项目的需求。
PWM参数如何计算?
PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)=计数器的更新频率
PWM占空比: Duty = CCR / (ARR + 1)
PWM分辨率: Reso = 1 / (ARR + 1)

如何输出PWM波形(电路分析)

通用定时器的输出比较部分电路

在这里插入图片描述
左边是CNT和CCR比较的结果,右边就是输出比较电路。最后通过TIMCH1输出到GPIO引脚上,(下面还有三个同样的单元,分别输出到CH2、CH3、CH4)
在这里插入图片描述
最左边就是CNT计数器和CCR1第一路的捕获/比较寄存器。当CNT>CCR1或CNT=CCR1时,就会给输出模式控制器传信号,输出模式控制器就会改变输出oc1ref的高低电平,ref(reference)参考信号实际上就是这里信号的高低电平。接着这个ref信号可以前往主模式控制器,可以将REF映射到主模式的TRGO输出上去;不过ref的主要去向还是下面一路,这里是一个极性选择(给这个寄存器写0信号往上走,信号电平不翻转,进来啥样出去还是啥样;写1信号往下走,通过一个非门取反,输出的信号就是输入信号高低电平反转的信号。这就是极限选择,就是选择是不是要把高低电平反转一下。)后面是输出使能电路了,选择要不要输出。最后是OC1引脚,这个引脚是CH1通道的引脚。

输出模式控制器的执行逻辑

模式控制器的输入是CNT和CCR的大小关系,输出是ref的高低电平。模式控制器里面可以选择多种模式来更加灵活地控制REF输出,模式可以通过寄存器来进行配置,需要哪个模式就可以选那个模式。
输出比较的八种模式,输出模式控制器里面的执行逻辑。什么时候给ref高电平。什么时候给ref低电平在这里插入图片描述
重点是后面两个模式:PWM模式1和PWM模式2,可以用于输出频率和占空比都可调的PWM波形,也是主要使用的模式。PWM模式2实际上就是PWM模式1输出的取反。改变PWM模式1和PWM模式2,就只是改变了REF电平的极性。使用PWM模式1的正极性和PWM模式2的反极性最终的输出是一样的。(输出比较电路里面设计灵活:输出模式里可设置极性,最终输出之前也可设置极性。)

PWM模式1如何输出频率和占空比都可调的PWM波形。(重点)

首先左上角这里是时基单元和运行控制部分,再往左是时钟源选择。配置好时基单元CNT开始不断的自增运行。下面就是输出比较单元X4:CCR捕获/比较计算器(自己设置),CNT不断自增运行,两者不断进行比较;后面就是输出模式控制器(以PWM模式1为例子来讲解)。里面是PWM模式1的执行逻辑。在这里插入图片描述

如何输出PWM波形(原理分析)

蓝色线:CNT值;黄色线:ARR值;红色线:CCR;绿色线:输出
CNT从零开始自增直至ARR,之后清零继续自增。在这个过程中,设置CCR值为30,执行PWM模式1的逻辑。CNT<CCR,输出置高电平;CNT>=CCR,输出置低电平;当CNT溢出清零后,CNT又小于CCR,输出置高电平;再之后CNT>=CCR,输出低电平。这样一直持续下去,REF的电平不断变化,且其占空比受CCR值调控(若CCR值设置高一些,输出的占空比变大,CCR值低一些,输出的占空比变小。这就是PWM模式的工作流程。这里REF是一个频率可调、占空比也可调的PWM波形。
最终再经过极性选择、输出使能,最终通向GPIO口。这样就完成PWM波形的输出。

高级定时器的输出比较电路。在这里插入图片描述

外围电路:外面通常要接一个电路,上面是正极,接着是一个大功率开关管(一般都是MOS管,一种大功率电子开关),然后再来一个MOS管,最后到GND。第一个MOS管左边是控制级,比如说给高电平MOS管就导通,低电平就断开。下面也有一个控制极,高电平导通低电平断开。这就是一个最基本的推挽电路。
推挽电路工作流程:中间是输出,若上管导通下管断开,输出高电平;若下管导通上管断开,输出低电平;若上下管都导通,电源短路,这样是不允许的;若上下管都断开,输出是高阻态。
电路用途:若有两个这样的推挽电路,就构成了H桥电路,可以控制直流电机正反转;若有三个这样的推挽电路,可以用于驱动三相无刷电机。(若直接用单片机来控制这样的两个推挽电路,需要两个控制器,且这两个控制级电平相反,就是互补。因为上管导通下管就必须断开,下管导通上管就必须断开。)
知道了外围电路的需求,再来理解内部电路结构。
互补输出:右端的OC1和OC1N就是两个互补的输出端口,分别控制上MOS管和下MOS管的导通和关闭。(在切换上下管导通状态时,若在上管关断的瞬间,下管立刻打开,可能会因为器件的不理想,上管还没有完全关断,下管就已经导通了,出现了短暂的上下管同时导通的现象,这会导致功率损耗,引起气件发热,为了避免这个问题,就有了死区生成电路。)
死区生成电路:死区生成电路会在上管关闭的时候延迟一小段时间再导通下管,下管关闭的时候延迟一小段时间再导通上管,这样就可以避免上下管同时导致的现象了。
到这里STM32内部如何产生PWM波形的就说完了。

STM32的外部设备

舵机、直流电机(可以用PWM控制电机的速度)

舵机

(用PWM信号占空比来控制舵机输出轴的角度)
在这里插入图片描述
舵机的工作方式:三根输入线,两根电源线,一根信号线。(棕线电源负,红线电源正,橙线信号线)PWM是这个信号线来控制舵机的。输出轴(固定在一个指定的角度不动,由信号线的PWM信号来决定固定在哪个位置。)
在这里插入图片描述
舵机并不是一种单独的电机,内部由直流电机驱动,里面还有控制电路板,是电机的控制系统。大概的执行逻辑是PWM信号输入到控制板,给控制板一个指定的目标角度,电位器检测输出轴的当前角度,如果大于目标角度,电机就会反转,如果小于目标角度,电机就会正转,最终使输出轴固定在指定角度。(输入一个PWM波形,输出轴固定在一个角度。)
在这里插入图片描述
输入PWM信号的要求:周期为20ms,对应50Hz,高电平宽度(占空比)为0.5ms~2.5ms,
这个范围对应的输出角度:这是一个180度的舵机,输出轴的角度是-9090度(也可以规定到0180度)输入信号脉冲宽度周期是20ms(此上升沿到下一个上升沿之间的时间是20ms)。0.5ms对应-90度,2.5mm对应正90度,中间的对应关系都是线性分配的。给一个PWM,输出轴就会固定在一个角度。(这里PWM波形其实是当做一个通信协议来使用的,跟之前用PWM等效一个模拟输出没什么关系,把PWM当成通信协议,也是一个比较常见的应用。因为很多控制器都有PWM输出的功能,且PWM只需要一根信号线。这也是一种应用形式)
实际应用:机器人、机械臂用舵机来控制关节,遥控车、遥控船用舵机来控制方向。
在这里插入图片描述在这里插入图片描述
舵机的硬件电路板。
黑色线接电源负极GND,红色电源线正极5V,黄色接PWM信号。

直流电机

在这里插入图片描述
直流电机是一个单独的电机,里面没有驱动电路,需要外挂一个驱动电路来控制。
直流电机是一种将电能转化为机械能的装置(通电就转),有两个电极,当电极正接时电机正转,当电极反接时电极反转。
属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作。(电机这类器件基本上都属于大功率设备的,必须要加驱动电路才能控制。)课程中使用TB6612电机驱动芯片来驱动电机(使用现成的芯片,电路设计好集成在芯片里,直接用)
在这里插入图片描述
TB6612是一款双路H桥形的直流电机驱动芯片,可以驱动两个直流电机,并控制其转速和方向,这个芯片里有两路驱动电路,又因为它是H桥形的驱动电路,里面一路有四个开关管,所以可以控制正反转。(像有些芯片。比如ULN2003 里面一路只有一个开关管,只能控制电机在一个方向转)

在这里插入图片描述
H桥电路的基本结构,由两路推挽电路组成。若左上管导通,下管断开,左边输出就接在VM的电机电源正极,下管导通上管断开,输出就接在PGND的电源负极。两路推挽电路中间接一个电机,左上和右下导通,电流从左向右流;右上和左下导通,电流反过来,从右流向左。H桥可以控制电流流过的方向,所以可以控制电机正反转。

电机驱动模块的硬件电路

在这里插入图片描述在这里插入图片描述
VM:电机电源的正极(接一个可以输出大电流的电源)。
VCC:逻辑电平输入端(和控制器的电源保持一致,如使用的STM32 是3.3V的器件,接3.3V;若是51单片机是5V的器件,接5V)
GND:接系统的负极。(板子右边还有两个GND,它们在板子内部都是连通的,随便选一个GND用即可)
AO1AO2BO1BO2:两路电机的输出,可以分别接两个电机。
AO1AO2是A路的两个输出,其控制端是上面PWMA、AIN2、AIN1,这三个引脚控制下面A路的一个电极。(对应关系用灰色填充标出)。这三个引脚直接接到单片机的GPIO口,其中PWMA引脚接PWM信号输出端,其他两个引脚可以任意接两个普通的GPIO口。给这三个引脚给一个低功率的控制信号,驱动电路就会从VM汲取电流输出到电机,使得低功率的控制信号控制大功率设备。
BO1BO2是A路的两个输出,其控制端是上面PWMB、BIN2、BIN1,这三个引脚控制下面B路的一个电极。AB两路的功能和操作方法完全一样。最后还剩一个STBY(Stand By)引脚,待机控制脚。接GND,芯片不工作,处于待机状态;接逻辑电源VCC,芯片就正常工作。若不需要待机模式,可以接VCC3.3V;若需要,可以任意接一个GPIO,给高低电平就可以控制了。
PWMA、AIN2、AIN1这三个引脚如何控制电机正反转和速度?
在这里插入图片描述
若IN1和IN2全都接高电平,两个输出都为低电平,两个输出没有电压差,电机不会转的;
若IN1和IN2全都接低电平,输出直接关闭,电机也不会转。
反转:
若IN1给低电平、IN2给高电平,电机处于反转状态。转与不转取决于PWM,若PWM给高电平,输出一高一低,有电压差,电机转(反转);若PWM给高电平,输出两个低电平,电机不转。这就是反转的逻辑:IN1给低电平、IN2给高电平,PWM高转低不转。若PWM是一个不断翻转的电平信号,则电机快速的反转、停止、反转、停止,若PWM频率足够快,那电机就可以连续稳定的反转了,且速度取决于PWM信号的占空比,这就是反转的工作流程。在这里,PWM等效一个模拟量的功能。
正转:
若IN1给高电平、IN2给低电平,电机处于反转状态。这样电机就是正转状态,转与不转取决于PWM,PWM高转低不转。若PWM频率足够快,那电机就是连续稳定的正转了,且速度取决于PWM信号的占空比。

芯片TIM0是一种定时器模块,它具有多种输出比较模式输出比较模式是用来比较定时器计数器的值与比较寄存器的值,在比较结果满足条件时产生相应的输出。 最常见的比较模式是PWM(脉宽调制)输出模式。在PWM输出模式下,可以通过设置比较寄存器的值和定时器计数器的初始值来控制输出的脉冲宽度和周期。当定时器计数器的值小于比较寄存器的值时,输出为高电平;当定时器计数器的值大于比较寄存器的值时,输出为低电平。通过调整比较寄存器的值和定时器计数器的初始值,可以实现不同脉宽占空比的PWM输出信号,用于控制电机速度、灯光亮度等应用。 另外,TIM0还支持其他的输出比较模式,如上升沿输出、下降沿输出和双边沿输出等。在上升沿输出模式下,当定时器计数器的值与比较寄存器的值相等时,输出信号由低电平变为高电平。在下降沿输出模式下,输出信号则从高电平变为低电平。而在双边沿输出模式下,输出信号在定时器计数器的值与比较寄存器的值相等时,在每个周期内都会由低电平变为高电平,再由高电平变为低电平。 综上所述,芯片TIM0的输出比较模式可以通过设置比较寄存器的值和定时器计数器的初始值来实现不同的输出信号,如PWM输出、上升沿输出、下降沿输出和双边沿输出等。这些不同的输出比较模式可根据具体应用需求来选择和配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值