入门小实验——STM32RC舵机控制(hal库版)

明确操控舵机需要用到什么:高级定时器(有死区和刹车功能),可以用TIM1和TIM8,但是有时候为了检测函数执行会用到串口,所以我建议用TIM8 

在cubeMX里配置时 有配置CH1 CH2等一下写代码时可以用其来定义舵机转180°和270°的PWM输出函数

配置分频因子和重载值(上图标红处)

分频因子配置144的原因:用于配置定时器频率f=72M/144=0.5M

计数一次的周期为T=1/0.5M=0.002ms

计数10000次 总周期时间为0.002×10000=20ms

又因为2.5ms——转180° 又0.5ms——转0°

所以2ms可以转180°  2ms/0.002ms=1000次 即1000次计数可以转180°

转一度的次数为1000/180 转x度需要250+x(1000/180)次

自己可以去定义一个舵机转动函数 形参为angle 函数里可以设置形参为

angle = 250+angle*(1000/180);

   然后用 __HAL_TIM_SetCompare()这个函数传入angle去设置对应通道输出的PWM值

可以定义在while函数里一个递增的变量i作为形参angle去不断地改变舵机角度

如果要配置死区刹车功能 有两种方法

第一种 根据数据手册找到TIMx_BKIN在cubeMX上去配置其GPIO——如TIM8的BKIN为PA6

由图可知 刹车输入高电平有效 所以一开始要置低(在cubeMX里配置)

所以刹车时 可以往对应的GPIO 里写入高电平

 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_RESET);

之后配置

这个配置之后才可以在刹车之后自动运行 不用去操控寄存器把对应寄存器恢复

第二种是一开始不配置Automatic Output Statue

在刹车后 将寄存器BDTR里的MOE置一

并将TIMx_BKIN对应的GPIO置低

之后就可以自由刹车或发动了

我们可以让key按键去控制刹车(我用的按键一开始配置的是上拉 如果检测到其为低电平 则进入刹车函数)

if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8)==0)  //检测按键是否为低电平
        { 
            //如果按键按下
            //在PA6 写入高电平刹车
                     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_SET);
        }
        else{

             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_RESET);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值