网站改版公告,阿里云装wordpress慢,网站可分析,长沙发布致全体互补PWM波配置 STM32F407VET6的高级定时器TIM1、TIM8可以生成互补的PWM波#xff0c;用HAL库配置非常方便。
我们使用高级定时器TIM1#xff0c;选择一个通道#xff08;我这里选择通道二#xff09;#xff0c;然后选择PWM Generation CH2 CH2N。这里N的意思是互补…互补PWM波配置 STM32F407VET6的高级定时器TIM1、TIM8可以生成互补的PWM波用HAL库配置非常方便。
我们使用高级定时器TIM1选择一个通道我这里选择通道二然后选择PWM Generation CH2 CH2N。这里N的意思是互补CH2N是与CH2的PWM互补的。 此时我们可以看到CH2输出以及其互补通道输出PWM波的IO口。 我的时钟主频配置的是100Mhz当你配置的时候要注意自己的始终主频涉及后面的PWM波的频率计算、死区时间计算。 时钟源选择Internal Clock。选择不分频Prescaler1由于我需要配置100Khz频率的PWM波所以我的Counter Period值填写的是999ARR999。
pwm波的周期 而主频为100Mhz其周期为 所以Counter Period值应该为 同理如果要配置10Khz频率的PWM波则ARR的值应该为9999.
死区时间计算
我们可以看到有一个Dead Time的值需要我们填写。
其计算规则如下图所示。 乍一看很复杂我来解释一下计算步骤。
首先我们需要确定时钟的主频上图为8Mhz所以其时钟周期T0为 第二步又要分为4种情况
1步长为T0(125ns)乘数范围是0-127此时得出的范围是步长 x 乘数
0-127*T0 即 0-15.875us.
2步长为2T0(125ns)乘数范围是64-127此时得出的范围是步长 x 乘数
128-254*T0 即16us-31.75us.
3步长为8T0(125ns)乘数范围是32-63此时得出的范围是步长 x 乘数
256-504*T0 即 32us-63us.
4步长为16T0(125ns)乘数范围是0-127此时得出的范围是步长 x 乘数
512-1008*T0 即 64us-126us.
需要配置的死区时间在哪种情况的范围内则是哪一种情况。
第三步
1如果是情况1可以直接用需要配置的死区时间除以步长T0就是需要填入DeadTime那一栏的DTG寄存器的值.
因为情况1的步长值为0乘数位置为DGT[6:0]那么其合在一起还是看DGT[6:0]的大小所以可以直接使用需要配置的死区时间除以步长T0。 2如果是情况二其步长值为二进制10
公式为此处的DeadTime和配置处需要填入的不一样配置处填入的是寄存器数值这里的是期望的死区时间
解出DTG[5:0]的值将其转化为二进制与 前面的步长值10拼在一起。
例如DTG[5:0]为31其二进制就是011111合在一起后就是10011111即159.
所以需要填入DeadTime的值就是159就是这一栏Dead Time所需要填入的数值。 3如果是情况三其步长值为二进制110
同理解出DTG[4:0]的值将其转化为二进制与 前面的步长值110拼在一起。
公式为
4如果是情况四其步长值为二进制111
同理解出DTG[4:0]的值将其转化为二进制与 前面的步长值111拼在一起。
公式为
主要思想就是把DTG寄存器拆成两部分前面的部分决定步长取0、10、110、111后面的部分为DTG的值两者拼在一起就是DeadTime处需要填入的数值。