ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

重温STM32基础:定时器(5)

重温STM32基础:定时器(5) 文章目录简写框图中的输出比较功能什么是PWM概念理解主要参数定时器输出比较模块输出PWM的机制通用定时器输出比较的通路输出模块控制器output mode controllerPWM模式1工作机制高级定时器作用死区生成电路的作用实验硬件舵机电机电机工作机制电机驱动模块引脚为什么要供两个电压为什么VCC要和控制器电压一致电机、电机驱动模块、控制器的选型中的电压考量两个实验的硬件PWM相关实验准备摘要本文围绕 PWM脉冲宽度调制展开从概念理解、主要参数到定时器输出比较模块的 PWM 产生机制再到实验硬件舵机与电机的选型与电压考量系统梳理了 PWM 在嵌入式控制中的核心原理与典型应用。文章以通用定时器为重点讲解输出比较通路、输出模式控制器及 PWM 模式 1 的工作机制并简要介绍高级定时器的死区生成电路最后通过舵机与电机两个实验对比“控制”与“驱动”两类模块的差异帮助读者建立从原理到实践的完整认知。简写OC: output compareIC: input captureCC: capture/compare - 表示输入捕获和输出比较的单元CCR: capture/compare register框图中的输出比较功能主要看通用定时器的输出比较功能。框图中CCR部分是输入捕获和输出比较共用的红框绿框为一个“比较”单元比较的是CNT的值和我们给定的CCR里面的值。根据CNT 或 CCR来输出0或者1。下图是通用定时器可以看到它有4个输出比较通道。它们可以各自输出PWM有各自的CCR寄存器但它们是共用一个CNT计数器的什么是PWM概念理解在PPT中有这样一句话在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。PWM这个东西老早就听说了似乎也理解它是什么么但是开始的这段“在具有惯性的系统中”就让我懵了这怎么还扯上惯性系统了。看来我确实没有思考过PWM到底是什么。。大家都知道PWM本身就是个数字信号只有0和1但它能被用来等效实现一个模拟输出。这半句话我个人的理解是被接收PWM的系统认为这是一个模拟输出。而实现让系统认为它是个模拟量就是基于系统本身的“惯性”系统响应速度远远低于PWM的开关速度这个系统感受不到PWN从0到1的瞬时切换它能够感受的是一段时间内的平均效果。这个平均效果可以从PWM的一个常见的公式看出来占空比D t T D\frac{t}{T}DTt​平均电压U a v g D ∗ U m a x U_{avg} D * U_{max}Uavg​D∗Umax​系统感受到的是这个平均电压的效果。如果系统没有惯性系统对信号从0v切换到3.3V立刻响应那么这个系统看到的只是普通的开关方波。上图是PPT中的图展示的是如何理解“PWM等效于模拟量”。绿框部分数字信号1的时间占比比较多所以对应于曲线这个模拟量接近于U_max.一个例子就是用PWM来控制LED等的亮暗程度它的惯性体现在灯的余晖和人眼视觉暂留现象给一个v3.3v的脉冲灯亮了一下然后慢慢熄灭在还没完全暗掉的时候再给一个3.3V脉冲让它再用全亮度量一下。只要速度够快在这两次脉冲的间隔里我们人眼感受到的是一个亮度的平均值。再记录一个老师的语录PWM的秘诀就是“天下武功唯快不破”只要闪得足够快你就发现不了我是闪着亮的还是一个一直亮的。主要参数频率一般K~几十kHz占空比100%就是高电平0%就是低电平决定了PWM等效的模拟电压的大小比如最高电压是5V50%占空比等效于2.5V%20占空比等效于1V分辨率占空比变化步距即占空比变化的细腻程度。高频率高分辨率就对硬件电路要求很高了。定时器输出比较模块输出PWM的机制基本定时器没有输出比较功能高级定时器的输出比较比较复杂。先看通用定时器的输出比较电路。通用定时器输出比较的通路下图标明了RM截图的Figure127在整个框图中的位置。oc1ref信号会有两个出处但是这里主要关注红色的那一路。紫色框部分是一个极性选择要不要把左边过来的高低电平反转一下写入0那么就是上面通直接把左边的信号输出写入1那么就是下面通左边过来的信号通过一个非门电平取反则输出和左边反过来的信号。OC1就是TIMx_CH1输出模块控制器output mode controller有8种模式就是决定这个模块“什么时候给oc1ref高电平什么时候给低电平”的执行逻辑。可以通过OC1M寄存器来配置用哪种模式。这8种模式可以在TIMx_CCMR1中找到。在课程中PPT里有个表格。但是我感觉上面的内容和RM中稍微有点出入特别是对“冻结”的描述个人感觉还是以RM为准上图种这8种模式用三种颜色的框分了类。虽然不需要记忆但是可以分组来理解。冻结CNT和CCR的比较不起作用而不是像表格里写的CNTCCR的时候第2~4种模式对“有效电平”和“无效电平”课程中老师解释这是在用“高级定时器”时的说法。可以先理解过“有效电平”就是低电平“无效电平”就是高电平。“匹配时”的意思就是CNTCCR。对于2和3用处不是太大但是4可以用来产生一个频率可调、占空比为50%的PWM。第5和6种模式强制无效/有效电平类似于“冻结”此时CNT和CCR比较不起作用强制输出一个电平。PWM模式1和模式2重要的模式。可以基于这两个模式输出频率和占空比都可调的PWM。这两个模式只是相同的CNT和CCR关系下输出的极性不同。其他都一样。通常就选择PWM模式1的向上计数情况。PWM模式1工作机制又要搬上PPT里面的图了。左边的部分是时基单元。如果要用“定时器定时中断”的功能那么时基单元就会输出中断。但是这里不是而是图中来到了CCR/捕获比较器处。以上图为基于PPT里的内容右上角部分又添油加醋紫色和黄色阴影。可以发现ARR不变增加CCR则占空比变大减少CCR则占空比变小。增加ARR则频率变低减小ARR则频率变高PWM主要参数公式频率F r e q C K _ P S C ( 1 P S C ) ( A R R 1 ) Freq \frac{CK\_PSC}{(1 PSC)(ARR 1)}Freq(1PSC)(ARR1)CK_PSC​这个公式似曾相识啊~它就是计数器溢出频率。PWM占空比D u t y C C R A R R 1 Duty \frac{CCR}{ARR1}DutyARR1CCR​PWM分辨率基于上面对分辨率得定义R e s o l u t i o n 1 A R R 1 Resolution \frac{1}{ARR 1}ResolutionARR11​也就是计时分辨率。ARR越大分辨率越高占空比变化得越细腻越好高级定时器就先简单了解一下吧。高级定时器太高级了。下图中如果把蓝色阴影部分去掉其实基本就是通用定时器的电路。作用要理解高级定时器得输出比较的作用要从它外面的电路说起。高级定时器每个通道有两个输出端口OCx和OCxN。这两个分别接上推挽电路的两个接口。下面图片的右侧是从RM的GPIO章节里面截取的推挽电路。复习推挽电路上管导通下管断开中间输出高电平上管断开下管导通中间输出低电平上下管同时导通就是短路不允许OCx和OCxN就是控制这两个管的导通和断开控制中间输出高还是低电平。名字里的“N”可以理解为negative的意思。1个通道看起来好像没啥用但是高级定时器可是准备了三个输出比较通道。当然这也不是瞎准备的2组这样的通道推挽电路就组成H桥可以控制直流电机正反转。3个这样的组合可以控制三相无刷电机。死区生成电路的作用死区生成电路的作用理想情况这俩个管输出口的输出电平是互补的一个高必定另一个低但是都说了这是理想情况意思就是实际不是这样。即使软件这么写实际硬件可能做不到上下两个变化正好错开可能会存在上下管都导通的瞬间这就短路了这样会导致功率损耗引起器件发热。死区生成电路dead-time generator就是为了避免这种情况发生。简单理解就是它会在上下管切换开关状态的瞬间加入一个两个管都处于关闭状态的一个延时目的是保证正在关断的管子彻底断流之后再允许另一个管子导通关闭。这个“延时”是硬件产生的。查了一下加入这个当然也不是没有代价的这会导致输出电压失真。死区延时我们可以配置在TIMx_BDTR寄存器中。这个域只有8个bit。死区允许的值是有范围的而我们只能按照某个分辨率来选择。简单理解它的高3位选择的是“挡位”而低5位选择的是在这个挡位里的步进值。以后用到了可以算一下。实验硬件舵机输入PWM舵机固定在对应角度。实验用的这个硬件不是一个单独的电机它内部由直流电机驱动并且有一个控制电路板由一个电位器检测舵面当前角度形成一个闭环角度控制回路。当然这个控制我们是不需要管的。我们只需要产生输入的PWM也就是期望的舵面角度即可。可以发现这里的PWM不是用来被等效一个模拟输出而是作为一种“通信协议”这也是PWM的一个常见应用。很多控制器可以输出PWM并且把它用作“通信协议”去控制其他机械只需要一根线。电机是一个大功率设备它的驱动电源必须是一个大功率输出设备。它最好是直接接在电源。我们使用的STM32设备正常工作电压是3.3V所以不能像之前那样直接把电机的正接最小系统板的3.3V输出口。在实验套件的STLINK上有一个5V输出口可以用这个给电机供电。电机电机工作机制直流电机电机控制芯片课程用到的电机控制芯片是一个H桥型芯片4个开关H桥可以控制电流的流向也就能控制电机转动的方向。有2路H桥芯片意味着它可以独立控制两个电机电机驱动模块引脚VM用于驱动电机需要达到被驱动的电机的额定电压。VCC逻辑电压和控制器也就是产生PWM等的设备比如STM32Arduino等的电源或者说逻辑电平保持一致。对于实验用的STM32F103这里就是接3.3V。为什么要供两个电压VM是供给电机旋转的功率级高压VCC也是有供电作用的但是它当然不是给控制器STM32等供电而是给自己内部的逻辑电路供电。为什么VCC要和控制器电压一致电机驱动模块里面也有逻辑电路这一部分是弱电比如接收PWM。我们已经直到PWM就是由高低电压形成的一个数字信号但是多高的电压算1多低电压算0如果只是单纯的一根PWM线电机驱动模块不知道如何判断1和0的。这里需要一个“标准电压”也就是由VCC提供。控制器STM32送出的数字信号高低电压就是以它自己的电平3.3v为基准送出的电机驱动模块要“解码”高和低0和1也要用相同的标准。如果VCC输入的是5V而STM32实际送出的是0和3.3V这个电压永远低于5V那么电机驱动模块就一致认为这是0。所以VCC并不是用于供电而是提供电机驱动模块内部判断“高电平”还是“低电平”的参考电压。电机、电机驱动模块、控制器的选型中的电压考量从上面的电压讨论可以发现在构成一个电机控制系统的时候其实要考虑相互之间电压的匹配在位一个电机选择驱动模块的时候或者反过来电机有一个驱动电压要考虑电机驱动模块是否可以承受这个电压同样电机驱动模块需要一个参考电压VCC但是它内部电路不是能够承受任何电压的在选择控制器或者位控制器选择电机驱动模块的时候要看控制器的工作电压能否被电机驱动模块的VCC接受上面这些VM和VCC范围都可以在三者的相关文档里找到。这在选型的时候需要注意。两个实验的硬件舵机里面也有电机那和第二个实验的电机有什么区别两套实验都有”控制电路“它们又有什么区别PWM都控制什么其实舵机里的电机和第二个实验的电机本质上是一样的它们只有两根输入线用于接收电压它们不一样的地方在于输入之前的部分一个是位置闭环控制电路。STM32产生的PWM对应一个角度设定值。控制电路给电机输出经过控制律的控制信号必须有传感器反馈。这一套都是做在我们实验硬件模块里面的。一个是电机驱动电路。TB6612FNG简单理解就是直接把STM32产生的PWM转手出去当然这个模块的功能应该不至于此比如还有功率放大、保护等等其他作用至于电机正转反转以及转速都是STM32来决定的。但是由于没有反馈电路这里是无法控制电机的旋转角度的。注意这里的名字控制 VS 驱动两个模块是不一样的身份理想情况可以对电机实验设备做一点改造实现“转速和转动方向可调的舵机” 隐含着舵面角度可控加上传感器反馈给STM32STM32接收传感器数据并且实现一个角度控制律输出PWM。但基于第一个舵机实验就做不到这点因为这是一个已经封装好的角度伺服没有暴露转速/方向这类内环的量给我们操作。
返回列表