1.软件准备
(1)编程平台:Keil5
(2)CubeMX
2.硬件准备
(1)F1的板子,本例使用经典F103C8T6
(2)一个捡来的舵机
(3)ST-link 下载器
(4)杜邦线若干
3.关于舵机控制原理
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
4.CubeMX配置
(1)芯片选择
(2)配置RCC、SYS、时钟树
配置RCC
配置SYS
配置时钟树
(3)配置定时器产生PWM波形
此时产生PWM波形频率:72M / 719 / (1999+1) = 50HZ
波形周期:1 / 50 = 20ms
初始占空比为:0%
(4)设置路径、生成代码工程
5、Keil5代码
(1)main函数
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//***定时器初始化
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
int i=1000; //循环时间间隔1s
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,50); //相当于一个周期内(20ms)有0.5ms高脉冲
HAL_Delay(i);
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250); //相当于一个周期内(20ms)有2.5ms高脉冲
HAL_Delay(i);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
可以通过修改句柄__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250)里的参数可以实现舵机角度控制。