网上看了很多资料,感觉对刹车后的互补输出通道的解释都有点乱,我分享一下我的思路,如果有问题,请指出~
首先,要明确一个概念是,刹车的信号可以来自刹车输入引脚,也可以来自时钟安全系统CSS的时钟失败事件(晶振异常,时钟源异常等),这里不讨论时钟存不存在的问题。
看刹车和死区寄存器TIMx_BDTR,其中的位15有以下描述,
MOE位,控制了输出比较通道OC和互补输出OCN的输出。当刹车输入时,就会被清0,即禁止OC和OCN输出或强制为空闲状态。注意这里的或,说明OC和OCN输出什么还需要其它的因素。
在手册中有这么一句,”由OSSI位选择“。
刹车和死区寄存器TIMx_BDTR的位10(即OSSI位)有以下描述,
OSSI位是用于当MOE=0(也就是刹车输入清0),这里就需要结合另一个表看,看下表中红色框选部分。
当OSSI位为0,异步地执行OCx=CCxP(也就是输出无效电平,可以简单举个例子,如果输出有效电平,OCREF=1,CCxP=1,OCx=CCxP=1高电平,但是由于CCxP=1,此时高电平是无效电平。),OCxN=CCxNP类似,以及OCx_EN=0和OCxN_En=0关闭输出。这里我有个疑惑没得到解决,就是我的OSSI位是0,根据描述输出使能会被禁止,但是当我MOE再次打开时,PWM又能正常输出。(希望大佬解惑!!!)
当OSSI位为1,异步地执行OCx=CCxP(也就是输出无效电平,可以简单举个例子,如果输出有效电平,OCREF=1,CCxP=1,OCx=CCxP=1高电平,但是由于CCxP=1,此时高电平是无效电平。),OCxN=CCxNP类似,以及OCx_EN=1和OCxN_En=1开启输出,但是其实此时MOE是为0的,输出没有真正输出。我理解这个功能是为了后续MOE置1开启输出时,不需要再次配置。
OSSI位不管是0还是1,都会在一个死区时间后OCx=OISx, OCxN=OISxN,也就是空闲状态,
看TIM1和TIM8控制寄存器2(TIMx_CR2),
位8 OIS1的解释就是当MOE=0(也就是刹车输入清0),OC1输出该位的值,就是说OIS1值是1,OC1输出高电平;OIS1值是0,OC1输出低电平。“如果实现了OC1N,则死区后“就是说如果OC1的互补通道也使用了,在死区时间后才会输出高低电平。其实很好理解,死区时间的作用就是要防止输出互补通道重叠,如果互补通道没用,只用了一个通道,就不需要在死区时间后了。
位 9 OIS1N解释类似位8,当MOE=0(也就是刹车输入清0),OC1N输出该位的值,就是说OIS1N值是1,OC1N输出高电平;OIS1N值是0,OC1N输出低电平。
下面的pwm信号,配置互补通道的有效电平都是高电平,所以OC的无效电平是低电平。同时设置OC的空闲电平是高电平。所以当刹车信号输入时,会先输出无效电平低电平,然后又马上被拉高为空闲电平。(这个配置得刹车信号在OC刚好是高电平的时候输入才能观测到)