找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11577|回复: 12
收起左侧

通过三个按键PWM控制舵机程序 正点原子stm32 mini板

  [复制链接]
ID:201949 发表于 2017-9-30 19:30 | 显示全部楼层 |阅读模式
我也来发一个,正点原子stm32 mini板通过三个按键PWM控制舵机的程序。

根据工作原理,舵机的具体控制方法就是需要一个20ms左右的时基脉冲,
该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。
脉冲宽度从0.5ms~2.5ms,相对应舵盘的位置为0~180度,呈线性变化。

***************一般舵机脉冲宽度20ms,高电平宽度与角度对应关系***********
0.5ms————0度;
1.0ms————45度;
1.5ms————90度;
2.0ms————135度;
2.5ms————180度;

根据上面的原理,我们知道单片机只要产生20ms的脉冲信号,通过改变高电平时间从0.5ms到2.5ms变化,就能使舵机转动到对应的角度


单片机源程序如下:

  1. /*
  2.      此程序是从网上找到的,本人修改了下
  3.      程序小白,如有错误,请见谅^_^      
  4. */


  5. #include "led.h"
  6. #include "delay.h"
  7. #include "sys.h"
  8. #include "pwm.h"
  9. #include "key.h"
  10. #define key1 PCin(5)
  11. #define key2 PAin(15)
  12. #define key3 PAin(0)       

  13. u16 cout;
  14. int main(void)
  15. {       
  16.           cout=1850;
  17.                 KEY_Init();
  18.                 delay_init();                            //延时函数初始化          
  19.                 LED_Init();                                    //初始化与LED连接的硬件接口
  20.                 TIM1_PWM_Init(1999,719);    //PWM频率===(2000*720)/72000000=0.02=20ms
  21.            while(1)
  22.         {         
  23.       if(key3==0&&key1==0)   //key1按下,舵机缓慢正向转动
  24.                          {  
  25.                                  if(key1==0)
  26.                            {  
  27.                                          delay_ms(5);
  28.                              cout+=1;
  29.                                  }
  30.                                  
  31.          
  32.                          }
  33.                   else        if(key3==1&&key1==0)  //key1、key3同时按下,舵机加速转动
  34.                            {  
  35.                                          delay_ms(5);
  36.                              cout+=5;
  37.                                  }
  38.                       if(key1==1&&key2==1&&key3==0)    //舵机回到90度(起始位置)
  39.                                                 {  
  40.                                                         cout=1850;                
  41.                                                 }

  42.                         if(key3==0&&key2==0)      //key2按下,舵机缓慢反向转动
  43.                             {       
  44.                                                         delay_ms(5);
  45.                                 cout-=1;
  46.                                         }
  47.                         else        if(key3==1&&key2==0)   //key2、key3同时按下,舵机加速转动
  48.                            {  
  49.                                          delay_ms(5);
  50.                              cout-=5;          
  51.                                  }
  52.                                                                                
  53.               TIM_SetCompare1(TIM1,cout); //PWM输出
  54.               delay_ms(50);

  55.        
  56.          
  57. }
  58.                          
  59. }
复制代码
0.png
所有资料51hei提供下载:
PWM控制舵机.rar (395.65 KB, 下载次数: 493)

评分

参与人数 2黑币 +54 收起 理由
菜鸡一只314159 + 4 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:228939 发表于 2018-4-26 22:15 | 显示全部楼层
收下了
回复

使用道具 举报

ID:317046 发表于 2018-5-13 16:04 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:332728 发表于 2018-5-18 09:26 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:403519 发表于 2018-10-1 15:08 | 显示全部楼层
感谢感谢
回复

使用道具 举报

ID:486944 发表于 2019-3-8 15:42 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:535707 发表于 2019-5-11 20:08 | 显示全部楼层
请问楼主方不方便加个QQ 我有许多地方请教一下 就差个主程序不会编了
回复

使用道具 举报

ID:535707 发表于 2019-5-11 20:09 | 显示全部楼层
QQ是549236986
回复

使用道具 举报

ID:470508 发表于 2019-6-15 20:57 | 显示全部楼层
高手  感谢
回复

使用道具 举报

ID:380985 发表于 2019-8-2 10:09 来自手机 | 显示全部楼层
好资料。值得学习
回复

使用道具 举报

ID:620272 发表于 2019-12-7 15:35 | 显示全部楼层
f4的板子可以用么?
回复

使用道具 举报

ID:574789 发表于 2019-12-18 08:46 | 显示全部楼层
请问舵机用什么型号的
回复

使用道具 举报

ID:1073927 发表于 2023-4-25 00:43 | 显示全部楼层
太棒了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表