一、HAL库
Servo.c
#include <main.h>
#include <tim.h>
uint16_t pwm_angle(uint8_t angle)
{
return angle*2000/180+500;
}
void SET_angle_1(uint8_t angle)
{
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_3,pwm_angle(angle));
}
void SET_angle_2(uint16_t angle)
{
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_4,pwm_angle(angle));
}
void Servo_init()
{
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
}
Servo.h
#ifndef __SERVO_H
#define __SERVO_H
void SET_angle_1(uint8_t angle);
void SET_angle_2(uint16_t angle);
void Servo_init();
#endif
二、README
舵机的tim时钟周期为20ms。
更具占空比0~100,变化角度
将角度转换成pwm
uint16_t pwm_angle(uint8_t angle)
{
return angle*2000/180+500;
}