STM32定时器输出比较应用中的几个话题 不论STM8还是STM32的定时器它们的结构大体差不多,都分为三类。高级定时器、通用定时器、基本时基时钟。其中高级定时器与通用定时器相比,主要多了马达控制方面的互补输出通道,带刹车功能和死区控制,有HALL接口。那基本时基时钟就是单纯的一个定时器,没那些IC、OC通道等。 这里以stm32 MCU为例,跟大家分享下有关通用或高级定时器的输出比较应用中如下几个常见话题。 1、OCxREF与OCx关系问题 2、OCx极性选择问题 3、带互补输出时的几个概念及相关寄存器介绍 4、带刹车功能的互补通道的控制位及输出对照表的解读 一、OCxREF与OCx关系的话题 OCxREF信号就是在选定输出比较模式后,在某种条件下输出模式控制器产生的一个中间参考信号。说它属于中间参考,是因为该信号跟对应的OCx通道输出信号之间存在一个极性选择器,即下方红色方框部分。经过极性选择后的信号最终输出还得受输出使能电路的控制。 上面提到输出比较模式指如下几种模式【以某定时器通道1为例】: 前面提到的“某种条件”在上面的几种模式中都提到,无须多解释了。 其中冻结模式就是CCRx与Timx_CNT寄存器的值对输出没影响,此时可以一般作普通计数器来用。其它几种模式可以划分为强制输出、比较输出、PWM输出三类。 要注意的是,这里的输出比较结果只说到OCxREF信号,至于OCx端的信号,还取决于极性选择。另外,这里有个重要约定:ORxREF信号为高电平时称为有效电平,反之为无效电平。 顺带提下,经常有人在使用PWM输出模式或切换模式时,希望让输出通道OCx端的电平在某时刻或某时段临时切换为想要的电平。一般有两种办法,一种是使用上面提到的强制输出模式;如果是PWM输出模式,可以通过修改CCR的值等于0或大于等于ARR来实现。具体怎么配置要结合你的模式选择、极性选择及OCx端所期望的电平。当采用修改CCR值方式时,如果希望立即生效的话,记得将相应通道的预装载使能功能禁用掉。 二、OCx极性选择问题 从上面第一幅图可以直观的看出OCxREF跟后面的OCx信号可能是同相或者反相关系,由寄存器TIMx_CCER 的CCxP位确定。下面是高级定时器有关极性配置的文字截图。 当CCxP=0时,OCx输出高电平有效,为1时OCx低电平有效。 如果单独看这个地方,多少显得有些突兀。对于一个电平高低本无所谓,这里硬加上个有效无效,有些让人费解。我们基于上面第一幅图和关于OCxREF电平的重要约定来探讨下。 当CCxP=0时,OCxREF直达OCx端。因约定OCxREF为高时算有效电平,那OCx信号的高电平也就对应着ORxREF的有效电平。所以约定OCx端的高电平为有效电平。 而当CCxP=1时,OCxREF反相后到达OCx端。有效高电平OCxREF经极性选择器反相到达OCx端变为低电平,此时OCx信号的低电平就对应着OCxREF的有效电平。所以约定此时的OCx端的低电平为有效电平。 做极性选择的实质其实是做OCx/OCxN端有效电平的选择。至于如何选择有效电平,那得结合具体外部驱动需要。当OCx或OCxN端输出无效电平时的状态为无效状态。 结合极性选择的配置和有效电平的定义,我们可以得出两个推论: 1、对于某OCx通道,当OCx端的电平与其极性选择位【0或者1】一致时,该电平一定是无效电平。 2、对于某正常运行的OCx通道,OCx端电平可看作极性选择位【0或者1】跟OCxREF电平异或后的结果。即 OCx=OCxREF xor CCxP【这里没考虑死区】 理解上面2个推论很重要,不然在看那张“带刹车功能的互补通道的控制位及输出对照表”的相关描述时可能就很费解。 对于通用定时器,是没有互补输出功能的。通用定时器的标准OCx输出通道的电平输出状态相对比较简单。 当OCx通道的输出使能被禁止时,其输出固定为0,当开启后OCx端电平由OCxREF与极性选择器共同确定。如果是高级定时器启用互补输出通道时,OCX/OCXN端的电平确认要比通用定时器复杂,它往往跟多个控制位有关。 三、带互补输出时的几个概念及相关寄存器介绍 在ST MCU里面只有高级定时器带互补输出。高级定时器里有几个概念和专有的寄存器需要了解下。一般来说,定时器做互补输出使用驱动马达设备,为安全起见,控制电路往往配有死区控制、刹车控制。在高级定时器里有个关于刹车及死区控制的寄存器。 其中有三个位MOE,OSSR,OSSI需要特别了解下。 MOE:当发生刹车时,该位被硬件清零。OCx和OCxN将呈无效状态或空闲状态或输出禁止状态。 OSSR:运行模式【run mode】下关闭状态的输出选择位。 此时MOE=1。针对开启了互通输出通道但其中某一通道的输出使能被禁止的情形,比方虽然TimX_CH1和TimX_CH1N的比较输出模式都开启了,而CH1的输出使能被禁止了。该位决定OC1端运行模式下的最后输出状态。 强调:OSSR针对运行模式下互补输出通道才有效。 这里提醒下: 对于一对互补通道OCx/OCxN,如果同时输出使能并均为高电平有效极性选择时,OCx跟OCxREF是同相的,OCxN跟OCxREF是反相的。如果说只使能其中一个通道,并做高电平有效极性选择,不论OCX还是OCXN都跟OCXREF同相。 OSSI:空闲模式【idle mode】下关闭状态【off state】的输出选择。 空闲模式是相对运行模式而言,发生刹车事件时MOE=0。对于已经配置为比较输出模式而其输出使能被禁止的通道,该位决定OCx或OCxN在空闲模式下的最后输出状态。 强调:OSSI针对空闲模式下的输出通道有效。 ***上面提到的“inactive”理解为某通道的输出控制使能被禁用的情形。 还有两个寄存器位OISx、OISxN需要了解下,是有关空闲状态【MOE=0】下OCx/OCxN端的空闲电平的选择问题。 四、带刹车功能的互补通道的控制位及输出对照表的解读 STM32各系列参考手册的定时器介绍部分都有一张表格,即带刹车功能的互补通道的控制位及输出对照表。说实话咋看这个表真不太好懂。 为了便于介绍,我把那张表截成了两部分,一部分是运行模式下【MOE=1】各控制位与通道输出情况的对应关系表;另一部分是空闲模式下【MOE=0】各控制位与通道输出状态的对应表。 表格里多处标注Output Disabled和Off-state,这里简单说明下。 **Output Disabled:通道输出禁止状态。此时该通道不受TIMER驱动。相应的OCX或OCXN输出使能禁止,输出端的电平为0。【别把输出禁止状态跟通道的输出使能控制混淆了】 下面两幅图中椭圆形红色圆圈配置的地方,CCxE或CCxNE=0,OCx或OCxN=0,都是输出禁止状态的情形。 **Off-state:通道关闭状态。相应通道输出使能,但输出无效状态。这个无效状态是指某互补通道中的一路或两路输出无效电平时的状态。 先看看运行模式下【MOE=1】的情形: 运行模式时下,当OSSR=0时,如果某通道的输出使能禁止,即CCxE或CCxNE=0,则该通道输出为输出禁止状态。 运行模式时下,当OSSR=1时。如果互补通道中的某一路的输出使能禁止,即CCxE或CCxNE=0,则该通道输出无效电平,呈关闭状态,或者说无效输出状态。 **关于下面表格有三地方需提醒下: 1、上面图表中关闭状态【offstate】处有类似下面的描述: OCx=CCxP , OCx_EN=1或者 OCxN=CCxNP , OCxN_EN=1; 前面讲极性选择时提过,当OCx或OCxN端的输出电平与其极性选择位【CCxP或CCxNP】一致时,该电平一定为无效电平。这里就是表示输出无效电平。 2、表格中有诸如 OCx =OCxREF xor CCxP的写法,这点在前面也提过,实际上就是OCxREF信号经过极性选择后在OCx端输出的意思。 3、红色三角形标注的两个地方,互补通道中只有1路输出被使能,此时的OCx或OCxN通道的输出是基于OCxREF信号配合各自的极性选择后输出。再看看红色箭头标注的两个地方,因为此时两个互补通道同时被使能,OCx通道的输出是基于OCxREF配合自己的极性选择,而OCxN通道的输出则是基于OCXREF的反相信号再结合其极性选择后输出。 最后来看看空闲模式下即MOE=0结合不同控制配置位的OCx/OCxN的输出情形。 空闲模式下的OC输出相对简单,OCx/OCxN输出无非呈现2种状态,一种是输出禁止状态,一种是无效输出状态,即关闭状态。 当MOE=0, OSSI=0时,OCx与OCxN均呈输出禁止状态。此时OC控制器不受TIMER驱动,相应的OCx或OCxN输出使能禁止,输出端的电平为0。【上图中椭圆形标注的地方】 当MOE=0, OSSI=1,互补通道中至少1路输出使能,OCx与OCxN都呈关闭状态。相应的OCx或OCxN输出无效电平或空闲电平,【电平有效性依据极性选择CCxP/CCxNP而定,空闲电平依据OSIx/OSxN而定】但至少1路输出无效电平。 表格下方的那句注释,当某通道的两互补通道都没使用时,即CCxE=CCxNE=0时, CCxP\CCxNP\OISx\OISxN都将被清零。这句有助于理解图表中输出禁止状态时的相关描述。 文章出处: 茶话MCU |