目录
输出比较功能简介
PWM简介
输出比较通道(通用定时器)
输出模式控制器的执行逻辑(工作流程)
输出PWM波形及参数计算
输出比较通道(高级定时器)
舵机和直流电机
舵机
直流电机及驱动
参考手册
* 输出比较概述
输出比较,英文全称Output Compare,简称OC。它最主要的功能是 可以通过比较计数器CNT和捕获/比较寄存器(Capture/Compare Register)CCR值的关系,来输出电平进行置1、置0的翻转操作,用于输出一定频率和占空比的PWM波形。
每个高级定时器和通用定时器都拥有4个输出比较的通道,可以同时输出4路PWM波形,且高级定时器的前3个通道额外拥有死区生成电路和互补输出的功能(用于驱动三相无刷电机)。4个输出比较通道都有独立的CCR寄存器,但是它们共用同一个CNT计数器。
* PWM概述
PWM(Pulse Width Modulation),即脉冲宽度调制,PWM波形是一个数字输出信号,是由高低电平组成的,是一种对模拟电平信号进行数字编码的方法。在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。也就是说,使用PWM波形,是用来等效地实现一个模拟信号的输出。(例如,led呼吸灯,电机调速,如下解释)
以LED为例:GPIO的输出信号只能是数字信号,如果想通过数字信号输出模拟量,可以通过以下的方法实现:让LED不断点亮、熄灭、点亮、熄灭,当点亮、熄灭的频率足够大时,由于LED的余晖和人眼的视觉暂留效应,LED就会呈现出一个中等亮度。当调控点亮和熄灭的时间比例时就能让LED呈现出不同的亮度级别。
对于电机调速也类似:在高频率下不断让电机交替通断,由于电机断电后不会立刻停止,而是由于惯性转动后停下,电机的速度就能维持在一个中等速度。
PWM的秘诀是:天下武功,唯快不破! 需要注意的是:只有在具有惯性的系统中,才能用PWM对模拟信号进行编码。
从下图可以看出,高低电平跳变的数字信号可以被等效地表示为中间虚线所表示的模拟量。当上面电平时间长一点,下面电平短一点的时候,等效地模拟量就偏向于上面;当下面电平时间长一点,上面电平时间短一点的时候,等效地模拟量就偏向于下面。也就是说,占空比越大,等效的模拟量就越趋近于数字量的高电平;占空比越小,等效的模拟量就越趋近于数字量的低电平,且这个等效关系一般而言是线性一一对应的。
使用PWM波形,就可以在数字系统等效输出模拟量,就能实现LED控制亮度、电机控速等功能了。
* PWM参数
首先,明白Ts就是下图这里,Ts代表一个高低电平变换周期的时间
在使用PWM对模拟量进行编码时,以下三个参数尤其重要:
频率 :f = 1 / Ts(周期的倒数就是频率);变换越快=频率越大(PWM的频率越快,它等效模拟的信号就越平稳,不过同时性能开销就越大;一般来说PWM的频率在几kHz到几十kHz之间。)
占空比:q=Ton/Ts( Ton是高电平的时间,Ts是一个周期的时间。q就是高电平时间相对于整个周期时间的比例);占空比决定了PWM等效出的模拟电压的大小。一般用百分比表示。
分辨率:占空比的变化步距;分辨率就是占空比变化的精细程度。即,占空比最小能以百分之多少的精度变化,它的值可以是1%、0.1%。分辨率的大小要看实际项目的需求定。如果既要高频率,又要高分辨率,就需要硬件电路要有足够的性能。要求不高的情况下,1%的分辨率就足够使用了。
通用定时器的输出比较部分电路如下图所示:
上图对应的是通用定时器电路里的下图红框部分电路,左边是CNT和CCR比较的结果,右边是输出比较电路,最后通过TIM_CH1输出到GPIO引脚上,然后下面还有三个同样的单元,分别输出到CH2、CH3、CH4。
如上图125所示,图的左边是CNT计数器和CCR1第一路的捕获/比较寄存器,它俩进行比较,当CNT = CCR1或者CNT > CCR1时,输出模式控制器就会收到一个信号,输出模式控制器就会改变它输出的OC1REF的高低电平。REF是Reference的缩写,意为参考信号。上面有个ETRF输入(是定时器的一个小功能,一般不用,不需要了解)
接下来OC1REF信号兵分两路:一路以将REF信号映射到主模式控制器的TRGO上,去触发其他外设的功能;不过REF的主要去向还是下面这一路,通往一个极性选择电路,通过控制TIMx_CCER寄存器的值(0或1),可以选择是否将REF信号翻转(写0信号就会往上走,就是信号电平不翻转,进来哈样出去还是哈样;写1信号就会往下走,就是信号通过一个非门取反,输出的信号就是输入信号高低电平反转的信号,这就是极性选择,就是选择是不是要把高低电平反转一下),之后通往输出使能电路,可以控制是否输出,最后通往OC1引脚,即TIMx_CH1通道的引脚(在引脚定义表中即可找到具体的GPIO口)。
补充:
什么时候给REF高电平,什么时候给REF低电平?
输出比较拥有8种工作模式 ,其对应了输出模式控制器种的执行逻辑,这个模式控制器的输入是CNT和CCR的大小关系,输出是REF的高低电平,里面可以选择8种模式来更灵活地控制REF输出,8种输出模式可以通过TIM_CCMR1k寄存器进行配置,需要哪个模式就可以选哪个模式。输出模式控制器的执行逻辑如下表所示:
以PWM模式1、向上计数模式为例,PWM波形产生原理(输出PWM的基本结构)如下图所示:
在上图中,首先左上角是时间单元和运行控制部分,再左边是时钟源选择(省略上一小节内容),在这里我们不需要使用更新事件的中断申请(输出PWM暂时还不需要中断)这就是时基单元的部分。配置好了时基单元,这里的CNT就可以开始不断地自增运行了。然后,下面粉红区域就是输出比较单元了,总共有四路,输出比较单元的最开始是CCR捕获/比较寄存器,CCR是我们自己设定的,CNT不断自增运行,同时它俩还在不断进行比较;CCR捕获/比较寄存器后面是输出模式控制器,在这里以PWM模式1为例,是PWM模式1的执行逻辑,那它是怎么输出PWM波形的,解释如下,右上角图中,蓝色线是CNT的值,黄色线是ARR的值,蓝色线从0开始自增,一直增到ARR也就是99,之后清0继续自增,在这个过程中红色线是CCR,比如设置CCR为30,执行输出模式控制器里的逻辑,下面的绿色线就是输出,可以看到CNT
PWM的一个周期如上图中的下面绿色区段的红线区间,可以看出它始终对应着计数器的一个溢出更新周期,所以PWM的频率就等于计数器的更新频率
当CNT = CCR时电路已经置为低电平,故REF为高电平的时间为CNT从0变到29(30个数)的时间。
CCR的值应设置在0到ARR+1的范围里,CCR=ARR+1时占空比是100%,ARR越大,CCR的范围就越大,对应的分辨率就越大
参数计算公式如下所示:
- PWM频率:即计数器的更新频率 Freq = CK_PSC / (PSC + 1) / (ARR + 1)
- PWM占空比:Duty = CCR / (ARR + 1)
- PWM分辨率:即占空比变化的步距 Reso = 1 / (ARR + 1),以上定义的分辨率是占空比最小的变化步距。ARR越大,CCR的变化范围就越大,分辨率就越高。(占空比变化的越细腻越好)
这个电路仅作了解即可,不需掌握。
舵机是小型直流伺服电机的一种,是一种根据输入PWM信号占空比来控制舵机输出轴的角度的装置。它有三根输入线,其中两根是电源线,一根是PWM信号输入线。白色输出轴会固定在一个指定的角度不动,固定的位置是由信号线的PWM信号来决定的,这就是舵机的工作方式。
上边右图中可以看出,舵机其实并不是一种单独的电机,可以发现它是由一个直流电机、一个减速齿轮组、一个电位器(电压编码器)和一个控制板 4部分组成的整体。舵机不是一种单独的电机,它的内部是由直流电机驱动的。内部的控制电路板是一个电机的控制系统,整个舵机内部形成了一个闭环的控制系统。
PWM信号输入到控制板,给控制板一个指定的目标角度,然后这个电位器检测输出轴的当前角度,如果大于目标角度,电机就会反转,如果小于目标角度,电机就会正转,最终使输出轴固定在指定的角度,这就是舵机的内部工作流程(简而言之:输入一个PWM波形,输出轴固定在一个角度)。
“伺服”—词源于希腊语“奴隶”的意思,英文为Servo。人们想把某一个结构或系统当作一个得心应手的驯服工具,服从控制信号的要求而动作。伺服的主要任务是按照控制命令的要求,对输出信号和输出功率进行放大、变换与调控等处理,使驱动装置输出的力矩、速度和位置控制得非常灵活方便。由于它的“伺服”性能,因此而得名——伺服系统。它的优势在于:可以非常灵活地控制输出装置的力矩、速度和位置等物理参量。
交流伺服电机和直流伺服电机的共同点是:利用传感器(编码器)对转子的位置、转速、力矩、转向进行检测,斌且将得到的信号经由伺服驱动器反馈给伺服控制器,从而达到调节转子位置、转速、力矩、转向的目的; 二者的不同点在于,一般而言,交流伺服电机相较于直流伺服电机对转子有更高的控制精度。
输入信号脉冲宽度,周期是20ms,也就是一个上升沿到下一个上升沿之间的时间是20ms。
舵机对输入的PWM信号的要求如下:周期为20ms(对应50Hz),高电平宽度为0.5 ~ 2.5ms(就是占空比是这个范围,对应的输出角度如上图)。这时一个180° 的舵机,输出轴的角度是-90° 到+90° 或者你规定是0° 到180°,输入信号脉冲宽度与舵机输出轴转角的对应关系都是线性一一对应的,给个PWM,输出轴就会固定在一个角度。实际应用中,比如机器人、机械臂可以用舵机来控制关节,遥控车、遥控船可以用舵机来控制方向。这里的PWM波形实际上是作为一个通信协议来使用的,与用PWM波形等效出一个模拟输出的关系不大,将PWM当成一个通信协议也是一个比较常见的应用,因为很多控制器都有PWM输出的功能,而且PWM只需要一根信号线就行了,这也是一种应用形式。
接下来,看一下舵机的硬件电路,上图第一个是引脚定义图,在舵机上有三根线,分别是黑(电源负极GND)、红(电源正极+5V)、黄(PWM信号线)。上图第二个图中,在实际应用中,GND就接GND,电源+5V是电机的驱动电源(一般电机都是大功率设备,驱动电源也必须是大功率的输出设备,对于套件中,可以直接从STLINK的5v输出脚引一根线使用USB的5V供电),信号线PWM就直接接到STM32引脚上就行了,PWM只是一个通信线,是不需要大功率的。
可以用PWM来控制电机的速度。直流电机是一个单独的电机,里面是没有驱动电路的,所以我们就要外挂一个驱动电路来控制。直流电机是一种能将电能转换为机械能的装置,有两个电极。有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。上图所示的电机是130直流电机。直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作。本课程使用TB6612电机驱动芯片来驱动电机。
TB6612是一款双路H桥型的直流电机驱动芯片,其中有两个驱动电路,可以独立地驱动两个直流电机并且控制其转速和方向。如上左图,是电机驱动板,芯片是TB6612,外围电路只需三个滤波电容就行了。如上右图是H桥电路的基本结构,是由两路推挽电路组成的,比如左边上管导通,下管断开,那左边输出就是接在VM的电机电源正极;下管导通,上管断开,那就是接在PGND的电源负极;如果有两路推挽电路,中间接一个电机,左上和右下导通,电流就是从左流向右,右上和左下导通,电流的方向就反过来从右边流向左边,H桥可以控制电流流过的方向,所以它能控制电机的正反转。
电机驱动电路同样也是一个研究课题,市面上也有很多的电机驱动可供选择,常见的电机驱动芯片有TB6612、DRV8833、L9110、L298N等,另外还有用分立元件MOS管搭建的驱动电路,它可以实现更大的驱动功率。当然也可以自己用MOS管设计电路。
TB6612电机驱动模块的连接电路图和引脚定义图如下所示:
如上图
PWMA、AIN1和AIN2三个引脚控制电机正反转和速度:如上图下面的表,