强制逻辑框图
PWM Source Select Register (DTSRCSEL)
DTSRCSEL寄存器可以配置子模块对应的SEL,选择PWM23以及PWM45的输出源,即死区逻辑的源
00b—SM0PWM45为VAL比较产生的脉冲
01b—SM0PWM45为VAL比较产生的脉冲取反
10b—由SWCOUT寄存器配置的高低二进制电平
11b—外部确定
Control 2 Register (SM0CTRL2 - SM3CTRL2)
当需要动态更该死区逻辑的话,也就是既想输出PWM,又想输出高低电平,来配置六步的输出组合。那么就需要配置好FORCE_OUT事件,因为DTSRCSEL寄存器配置的位需要在产生FORCE_OUT事件时才被生效。
通过配置CTRL2寄存器FORCE_SEL寄存器来选择FORCE_OUT事件产生源。
000b—本地信号,来自CTRL2[FORCE]用于强制更新,这个信号其实是CTRL2的FORCE位
001b—来自子模块0的主强制信号,但不能在子模块0中使用,会导致FORCE_OUT信号一直为0
010b—本地重装载信号用于强制更新而且不考虑LDOK的状态
011b—如果设置了LDOK状态,则来自子模块0的主重载信号用于强制更新。不应在子模块0中使用此设置,因为它会将FORCE OUTPUT信号保持为逻辑0。
101b - 来自子模块0的主同步信号用于强制更新。不应在子模块0中使用此设置,因为它会将FORCE OUTPUT信号保持为逻辑0。
110b - 来自PWM模块外部的外力信号EXT_FORCE导致更新。
111b - 来自PWM模块外部的外部同步信号EXT_SYNC导致更新。
在控制电机时需要可以动态更改输出方式,那么就需要一个按照需求可控的FORCE_OUT事件触发源,本地重装载信号正好合适。
Software Controlled Output Register (SWCOUT)
之后配置好想要的高低输出电平。OUT23为PWM_A的输出,OUT45为PWM_B的输出。
在配置好了FORCE_OUT事件触发源后,按照需求配置DTSRCSEL选择PWM输出源,如果选择由SWCOUT决定,那么配置SWCOUT寄存器配置各个子模块A\B的输出高低电平,有一点需要注意的就是当配置同一个子模块的PWM_A与PWM_B为互补输出时,配置完PWM_A的二进制电平后,PWM_B的输出电平就已经确定了,无论你配置什么电平,B都为为A的互补电平。
举个例子
那么方波控制中的六步换相输出组合就可以配置出来。
举一个例子,电机A相调制,B相接地,C相悬空,程序如下: