一、SG90相关介绍
尺 寸:23mmX12.2mmX29mm
重 量:9克
扭 矩:1.5kg/cm
工 作 电 压: 4.2-6V
温 度 范 围:0℃--55℃
运 行 速 度:0.3秒/60度
死 带 宽:10微秒
?二、Cubemx配置
sys配置
RCC配置
?LED小灯
PWM输出一个周期时间为20ms,初始值为0.5ms
计算方法:Timer定时器时钟我们设置为72Mhz,这里我们将预分频设置为72-1,则一个周期为72Mhz/(71+1)=1Mhz(即1us),所以20ms的周期我们需要计数20000-1=19999个填入Counter Period参数中。
另外,我们还需要一个默认脉冲宽度为0.5ms的,0.5/20*20000=500
生成工程
?
?三、keil中代码配置
main.c
/* USER CODE BEGIN 0 */
void Set_SG90_angle(TIM_HandleTypeDef * htim,uint32_t Channel,uint8_t angle,uint32_t countPeriod,uint32_t CycleTime)
{
uint16_t compare_value=0;
if(angle<=180)
{
//角度转化为数值
compare_value=0.5*countPeriod/CycleTime+angle*countPeriod/CycleTime/90;
__HAL_TIM_SET_COMPARE(htim, Channel, compare_value);//调整占空比
}
}
/* USER CODE END 0 */
初始化,此处舵机到达0度位置
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
/* USER CODE END 2 */
while
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
//SG90从0°旋转到180°
for(uint8_t i=0;i<180;i++)//从0到180°递增
{
Set_SG90_angle(&htim3,TIM_CHANNEL_2,i,20000,20);//此函数i设置舵机到达的角度
HAL_Delay(5);
}
//SG90从180°旋转到0°
for(uint8_t j=180;j>0;j--)//从180°到0°递减
{
Set_SG90_angle(&htim3,TIM_CHANNEL_2,j,20000,20);//此函数设置舵机到达的角度
HAL_Delay(5);
}
/* USER CODE END WHILE */
以上代码实现了舵机在180度水平方向反复运动效果。因为初始化默认舵机停留在-90度位置,可以先注释while中的占空比,调整舵机角度。一定注意舵机供电5V。
链接: https://pan.baidu.com/s/1Gk949glHw9BW_1QC6eFV2g?pwd=8swi 提取码: 8swi?