欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 【STM32】舵机SG90

【STM32】舵机SG90

2025/2/22 2:04:00 来源:https://blog.csdn.net/yyqzjw/article/details/145621297  浏览:    关键词:【STM32】舵机SG90

1.舵机原理

舵机内部有一个电位器,当转轴随电机旋转,电位器的电压会发生改变,电压会带动转一定的角度,舵机中的控制板就会电位器输出的电压所代表的角度,与输入的PWM所代表的角度进行比较,从而得出一个旋转的方向与角度。
该舵机可以控制0°~180°旋转
在这里插入图片描述
舵机0°~180°旋转对应高电平的时间为500us ~2500us,而一般舵机的频率为50Hz,也就是周期为20ms,对应的占空比就是2.5% ~12.5%,2.5%对应舵机转0°,12.5%对应舵机转180°,7.5%就对应着转90°。

2.简单使用

使用旋转编码器对舵机进行控制,旋转编码器转一圈是20个脉冲,也就是计数40次,为了让旋转编码器与舵机旋转对应上,也就是旋转编码器最大计数20就可以了,对应舵机的半圈
在这里插入图片描述
舵机的PWM输入引脚为PB8,我们需要将PB8设置为PWM输出引脚

在这里插入图片描述
而PB8也是定时器4的通道3
在这里插入图片描述

在这里插入图片描述
代码:

#define MAX_COUNT 20
int main(void)
{HAL_TIM_Encoder_Start(&htim1,TIM_CHANNEL_ALL);//编码器启动HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);//PWM输出启动int count=0;int duty=0;//舵机高电平对应的计数次数while (1){ count=__HAL_TIM_GET_COUNTER(&htim1);//统计编码器count=20就是转半圈if(count>60000)//反转{count=0;__HAL_TIM_SET_COUNTER(&htim1,0);}else if(count>MAX_COUNT){count=MAX_COUNT;__HAL_TIM_SET_COUNTER(&htim1,MAX_COUNT);}//限制编码器最多输出10个脉冲,20次计数duty=(10*(count/(float)MAX_COUNT)+2.5)/100.0*2000;__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,duty);}}
  duty=(10*(count/(float)MAX_COUNT)+2.5)/100.0*2000;

count/MAX_COUNT在0~1之间
10*(count/MAX_COUNT)在0~10之间
10*(count/MAX_COUNT)+2.5在2.5~12.5之间
(10*(count/(float)MAX_COUNT)+2.5)/100.0在2.5%~12.5%之间
2000为自动重装值,*2000,就是看比较寄存器的值应该放多少,形成占空比
count/MAX_COUNT整形/整形还是整形,为了不舍弃,强转为float

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词