PWM控制舵机角度(keilc
本文主要关于参数配置:arr,psc,ccrx(setcompare函数参数)
TIM相关配置简单提一嘴:
(涉及到寄存器,但仅有库函数知识不妨碍实践)
配置时最关键的两个参数:
- 自动装载值寄存器中的arr;
- 分频寄存器中的psc;
arr在TIM_TimeBaseInit的结构体中的TIM_Period配置,其决定着pwm周期(period英文意思时也是周期);psc在结构体中的TIM_Presaler配置,其决定了分频系数,
分频是什么呢?哟西,引脚所用的时钟不完全等于时钟源产生的,而是经过处理的,最大的处理就是分频,分频有啥好处呢?时钟源只能产生特定频率的时钟,而我们的外设有自己的时钟,只有当两者的时钟相符时,外设才能正常工作,分频就是将大块频率的时钟分割(除法)成小块时钟,供外设使用,
好,那么就涉及计算了:
Tout(溢出时间,周期时间单位是s)=(ARR+1)(PSC+1)/Tclk(Tckl是APB1*倍频来的,一般是72M,即常数)
通过pwm波原理,我们需要往ccrx寄存器中写入一个数值(介于0到srr之间)
这时,需要拿起笔来在纸上算一算:我们将一个周期的事件映射到arr上:
void TIM3_PWM_Init(u16 arr,u16 psc);
TIM3_PWM_Init(199,7199);
周期:(199+1)*(7199+1)/72000=0.02s
arr约为200;
那么arr中的1相当于0.1ms(数学映射思想)
由舵机控制原理知道:(sg90)要求0.5ms~2.5ms对应 0至180°(数学映射思想),那么我i们在写入setcompare函数参数范围为5至25;
此外,一般stm32io口输出为3.3v电压,而低配的sg90电机驱动电压要求4.2到6.0,如果3.3v强行驱动则会出现舵机抖动强烈,不稳定的情况。