标题: 通过三个按键PWM控制舵机程序 正点原子stm32 mini板 [打印本页]

作者: liushuiwuqing    时间: 2017-9-30 19:30
标题: 通过三个按键PWM控制舵机程序 正点原子stm32 mini板
我也来发一个,正点原子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. }
复制代码

所有资料51hei提供下载:
PWM控制舵机.rar (395.65 KB, 下载次数: 498)



作者: 孤独求败    时间: 2018-4-26 22:15
收下了
作者: 一波三折    时间: 2018-5-13 16:04
谢谢楼主
作者: WJHBCCM    时间: 2018-5-18 09:26
谢谢楼主
作者: 老规矩    时间: 2018-10-1 15:08
感谢感谢
作者: h348463963    时间: 2019-3-8 15:42
谢谢楼主
作者: sa549236986    时间: 2019-5-11 20:08
请问楼主方不方便加个QQ 我有许多地方请教一下 就差个主程序不会编了

作者: sa549236986    时间: 2019-5-11 20:09
QQ是549236986
作者: JamesGordan    时间: 2019-6-15 20:57
高手  感谢
作者: 18239311863    时间: 2019-8-2 10:09
好资料。值得学习
作者: 4591314    时间: 2019-12-7 15:35
f4的板子可以用么?
作者: 委曲求全    时间: 2019-12-18 08:46
请问舵机用什么型号的

作者: fatee    时间: 2023-4-25 00:43
太棒了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1