舵机简介
上有三根线引出,黄线:PWM信号;红线:VCC;灰线:GND。其中可接收的PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右。
如何确定周期/频率
根据公式:
若周期为20ms,则PSC=7199,ARR=199,Tclk=72M。
角度控制
- 0.5ms-------------0度; 2.5% 对应函数中CCRx为5。
- 1.0ms------------45度; 5.0% 对应函数中CCRx为10。
- 1.5ms------------90度; 7.5% 对应函数中CCRx为15。
- 2.0ms-----------135度; 10.0% 对应函数中CCRx为20。
- 2.5ms-----------180度; 12.5% 对应函数中CCRx为25。
编程实现
舵机每隔1s,转动一个角度:0度 --> 45度 --> 90度 --> 135度 --> 180度 --> 0度。
工程配置
其他配置与常规配置并没有不同的地方,所以不再赘述。在这里我们主要就是把定时器给配置好。
选用定时器TIM4,通道CH3的配置如下:
改写main.c
在STM32CubeMX中完成配置后,打开工程文件,进入Keil5中。因为相关的配置代码都已经自动生成完毕。所以我们只需要在主函数里面,加上相关代码,实现功能。
首先启用定时器:
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
每隔1s,加入延时函数:
HAL_Delay(1000);
以转动角度为0度为例,代码如下:
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 5);
依此类推转动其他角度,代码类似。
为了能循环角度转动,将相关代码加入while(1)循环体中。最后进行编译、下载入单片机观察现象即可。