当使用刹车功能时,输出使能信号和无效电平会根据附加控制位(TIMx_BDTR
寄存器中的MOE
、OSSI
和OSSR
位,TIMx_CR2
寄存器中的OISx
和OISxN
位)进行修改。在任何情况下,OCx
和OCxN
的输出不能在给定时间内被同时设置为有效电平。
刹车(BRK)通道的信号源可以是连接到BKIN
引脚的外部信号源,也可以是以下内部信号源之一:
- 内核
LOCKUP
输出 PVD
输出SRAM
奇偶校验错误信号CSS
检测器生成的时钟故障事件- 比较器输出
注意,可以由软件主动产生一个刹车事件,通过设置TIMx_EGR寄存器中的BG
位。
BG: 刹车信号生成
此位由软件设置,以便生成事件,它由硬件自动清除。
0
: 无动作1
: 将生成一个刹车事件。MOE
位被清除并且BIF
标志被设置。并可以产生相关的中断或DMA传输(如果使能的话)。
当退出复位时,刹车电路被禁用,并且MOE
位为低。您可以通过设置TIMx_BDTR
寄存器中的BKE
位来启用刹车功能。刹车信号的输入极性可以通过在同一寄存器中配置BKP
位来选择。BKE
和BKP
可以被同时修改。当BKE
和BKP
位被写入时,会在写入生效之前施加1个APB
时钟周期的延迟。因此,需要等待1个APB
时钟周期,以便在写入操作之后正确地读回相应的位。
因为MOE
下降沿可以是异步的,所以在实际信号(作用于输出的)和同步控制位(在TIMx_BDTR
寄存器中访问)之间插入了再同步电路。这会导致异步信号和同步信号之间出现一些延迟。特别是,如果在MOE
为低的情况下将其写入1,则必须在正确读取之前插入延迟(伪指令)。这是因为您写入异步信号并读取同步信号。
当刹车信号发生时(刹车输入端上选择的电平):
MOE
位被异步清除,使输出处于无效状态、空闲状态或复位状态(由OSSI
位选择)。即使MCU晶振是关闭的,此功能也能正常工作。- 一旦
MOE=0
,每个输出通道都会用TIMx_CR2
寄存器OISx
位中编程的电平进行驱动。如果OSSI=0
,则定时器释放输出使能,否则输出使能保持高电平。 - 当使用互补输出时:
- 输出首先置于复位状态无效状态(取决于极性)。这是异步完成的,因此即使定时器没有时钟它也能工作。
- 如果定时器时钟仍然存在,则死区时间生成器将重新激活,以便在死区时间之后用
OISx
和OISxN
位中编程的电平驱动输出。即使在这种情况下,OCx
和OCxN
也不能被同时驱动为有效电平。请注意,由于MOE
上的再同步功能,死区持续时间会比平时长一点(大约2个ck_tim
时钟周期)。 - 如果
OSSI=0
,则定时器释放输出使能,否则一旦CCxE
或CCxNE
位中的一个为高,输出使能会保持不变或变高。
- 刹车状态标志(
TIMx_SR
寄存器中的BIF
位)被置位。如果TIMx_ DIER
寄存器中的BIE位被置位,则可以产生中断。 - 如果
TIMx_BDTR
寄存器中的AOE
位被置位,则MOE
位在下一更新事件UEV
处被再次自动置位。例如,这可以用于执行输出的调节。否则,MOE
将保持低电平,直到您再次将其写入'1'
。在这种情况下,它可以用于一些安全场合,您可以将刹车输入端连接到来自电源驱动器、热传感器或任何安全组件的警报信号上。
注意:刹车的输入是作用于电平的。因此,当刹车的输入激活时(既不是自动的,也不是通过软件),不能设置MOE
。与此同时,无法清除状态标志BIF
。
刹车可以由极性可编程的BRK
输入信号和TIMx_BDTR
寄存器中的使能位BKE
产生。
除了刹车输入和输出管理之外,在刹车电路内部还实现了写保护,以保护应用程序。它允许您冻结几个参数的配置(死区持续时间、OCx/OCxN
极性和禁用时的状态、OCxM
配置、刹车使能位和极性)。您可以从TIMx_BDTR
寄存器LOCK
位选择的3个保护级别中进行选择。请参阅第290页第13.4.18节:TIM1刹车和死区时间寄存器(TIM1_BDTR
)。在MCU复位后,LOCK
位只能写入一次。
图77,显示了一个输出响应刹车的行为示例。
据说,能读懂这张图的人寥寥无几。你的懂,也许未必真的懂!
问题是:
- 为什么序号6中,两通道的波形允许同时为高,却还要插入死区时间?
- 为什么序号9中,刹车到来后,没有插入死区时间,以及为什么在OISx, OISxN同时为1,或同时为0时波形是一样的?
如果你不能回答,说明被STM32官方的库和demo毒害的太深啦!
先说简单的,图中,序号1,2,3,4只有1个通道输出波形,MOE=1时的波形与CCxP有关,这里不解释,前文已讲过。由于只有一个通道,Table 46
不起作用。当刹车信号到来时,MOE立即为0,输出的电平取决于空闲电平OISx。
图中的5,6,7,8,9都可以用同一个规则来解释,首先是MOE=1时的波形,要看Table 46
,前文已解释,这里略过。另外就是刹车到来时,由于这5个序号中都是至少有一个通道使能,因此根据Table 46
,输出波形的电平首先打为对应通道的极性值(CCxP,CCxNP),然后在一个死区时间之后(图中的delay),分别打为空闲电平(OISx, OISxN)。
好,开始解答问题。第一个问题是序号6,注意看,CCxNP为1,是低电平为有效电平,而另一个的CCxP=0,有效电平为高,芯片只保证两个通道不同时为有效电平!而跟高低无关。
第二个问题,当OISx, OISxN同时为1时,按理死区过后要把两个通道都打为1,但电平1都是它们的有效电平,这样是非法的,所以配置无效,全部打0.