【STM32F4系列】【HAL库】舵机模块驱动

目录

概述

波形

180°

360°

代码

pwm产生

函数

成品


概述

舵机g90系列,这些都是同样的控制方法 

舵机一般是指只能转动180°的

本程序兼容180°和360°舵机

调用不同的函数即可 

舵机是5V供电,使用3V3单片机使需要使用开漏外接上拉电阻输出5V电平 

波形

180°和360°舵机均为周期是20ms的PWM波

180°

将舵机转到最边上(触发到限位装置),此时将最前方当作参考方向

下图的箭头为参考方向

图中的圆为舵机可以转过的区域

将目前下图中的运动状态设为0°

此图是俯视图,也就是将电机轴对向自己,也就是第二个图的指示方向

 -90° 

 

 -45°

 

 0°

45° 

 90°

  

 所以说可以看出角度从-90°到90°变化时pwm的高电平宽度在0.5ms-2.5ms内成线性变化

高电平时间为 t 单位ms

角度制角度为 \theta 单位°

对应关系为t= \frac{\theta }{180}+1.5

360°

同样是20ms的PWM波

高电平时间0-0.5ms控制电机正转(电机轴朝向自己顺时针)

在范围内时间越短转速越快

高电平时间1.5-2.5ms控制电机正转(电机轴朝向自己 逆时针)

在范围内时间越长转速越快

当 高电平时间为1.5ms时电机静止

代码

pwm产生

通过定时器中断,通过计数模拟产生PWM波

需要1个GPIO(开漏浮空输出,外接5V上拉电阻)

注意:GPIO建议选择最高等级,避免出现问题

定时器中断20us触发一次

  

函数

控制变量

uint16_t Steering_Engine_Count = 0;
uint16_t Steering_Engine_Num = 0;

在定时器中断调用

//定时器中断调用
void Steering_Engine_Action(void)
{
    Steering_Engine_Count++;
    if (Steering_Engine_Count < Steering_Engine_Num)
        HAL_GPIO_WritePin(Steering_Engine_GPIOx, Steering_Engine_GPIO_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(Steering_Engine_GPIOx, Steering_Engine_GPIO_Pin, GPIO_PIN_RESET);
    if (Steering_Engine_Count >= 1000)
        Steering_Engine_Count = 0;
}

 360舵机

// R_L为0正转,1逆转 Speed取值范围0-50 越大越快
void Steering_Engine_360(uint8_t R_L, uint8_t Speed)
{
    if (Speed >= 50)
        Speed = 49;
    if (R_L == 0)
    {
        Steering_Engine_Num = 75 - Speed;
    }
    else if (R_L == 1)
    {
        Steering_Engine_Num = 77 + Speed;
    }
}

180舵机 

//输入旋转到的角度,以舵机轴可以面向自己的面为0°,面向左为-90°
void Steering_Engine_180(uint8_t Angle)
{
    if (Angle >= 180)
        Angle = 180;
    Steering_Engine_Num = 25 + ((float)Angle / 180 * 100);
}

 舵机停止

void Steering_Engine_Stop(void)
{
    Steering_Engine_Count = 0;
    Steering_Engine_Num = 0;
}

成品

GitHubhttps://github.com/HZ1213825/HAL_STM32F4_Steering_Engine

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值