在进行舵机控制的PWM设置上,发现PWM的MCC图形化配置只能精度按照1%进行调节。如下图所示,你所设置的参数会按照四舍五入进行取整。
需求:
SG90舵机的控制是用50Hz频率的PWM波进行控制的,即周期为20ms
而高电平持续时间为0.5ms~2.5ms
即对应的占空比为2.5%~12.5%
为了实现精细化调节,该如何做呢?
我们可以对配置好的代码进行观察,发现初始化代码中以下内容是跟周期与占空比相关的寄存器设施。
//PWMPRL 135;
PWM1PRL = 0x87;
//PWMPRH 19;
PWM1PRH = 0x13;
//PWMS1P1L 150;
PWM1S1P1L = 0x96;
//PWMS1P1H 0;
PWM1S1P1H = 0x00;
另外MCC提供了以下函数进行相同的操作。因此我们可以利用该函数实现精细化调节的重新配置,或修改以上代码实现。
void PWM1_16BIT_WritePeriodRegister(uint16_t periodCount)
{
PWM1PRL = (uint8_t)periodCount;
PWM1PRH = (uint8_t)(periodCount >> 8);
}
void PWM1_16BIT_SetSlice1Output1DutyCycleRegister(uint16_t registerValue)
{
PWM1S1P1L = (uint8_t)(registerValue);
PWM1S1P1H = (uint8_t)(registerValue >> 8);
}
0x1387对应十进制的4999
0x0096对应十进制的150
150/(4999+1)=0.03
因此我们只需要修改0x0096到一个合适的位置让新的数字除以5000=0.025即可
也就是0.025*5000=125
所以我们修改
//PWMS1P1L 125;
PWM1S1P1L = 0x7d;
//PWMS1P1H 0;
PWM1S1P1H = 0x00;
其他不变
即可实现初始化时候为2.5%的占空比。
过程中还可以调用以上函数进行占空比的精细化修改。
|