有一个FT5325M数字舵机用pwm驱动,已知所选TIM通道的时钟信号为90mhz,想要舵机转30°时psc、arr、ccr应设置为多少?
要让 FT5325M 数字舵机转 30°,需要先计算出舵机每转 1° 所需的脉冲数,再根据 PWM 的输出频率计算出 PWM 的计数器计数值。
假设舵机每转 1° 所需的脉冲数为 N,那么转 30° 所需的脉冲数就是 N*30。
PWM 的输出频率可以通过计数器的计数值和时钟频率计算出来,公式为:
频率 = 时钟频率 / (PSC+1) / (ARR+1)
所以计算出舵机每转 1° 所需的脉冲数后,可以倒推出 PSC 和 ARR 的值,CCR 的值就是所需脉冲数。
示例代码如下:
// 计算舵机转动角度所需的脉冲数
int pulse_per_degree = calculate_pulse_per_degree();
// 计算脉冲频率
int pulse_frequency = 90e6 / (pulse_per_degree * 30);
// 计算 PSC 和 ARR 的值
int psc = pulse_frequency / (TIM_CLOCK_FREQUENCY / (PSC+1));
int arr = pulse_frequency / (TIM_CLOCK_FREQUENCY / (PSC+1) / (ARR+1));
// 计算 CCR 的值
int ccr = pulse_per_degree * 30;
// 设置 TIM 的 PSC、ARR、CCR 值
TIMx->PSC = psc;
TIMx->ARR = arr;
TIMx->CCRx = ccr;