找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5197|回复: 2
打印 上一主题 下一主题
收起左侧

stm32与51控制舵机108度来回运动的源程序与原理(动态图片演示)

[复制链接]
跳转到指定楼层
楼主
通过stm32实现舵机108度来回运动
根据工作原理,舵机的具体控制方法就是需要一个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变化,就能使舵机转动到对应的角度

舵机控制原理动态图片演示:




stm32单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "pwm.h"

  5. int main(void)
  6. {        
  7.          
  8.         
  9.         delay_init();                     //延时函数初始化         
  10.         LED_Init();                          //初始化与LED连接的硬件接口
  11.         TIM1_PWM_Init(199,7199);//不分频。PWM频率===(7200*200)/72000000=0.02=20ms
  12.            while(1)
  13.         {
  14.                
  15.                
  16.                   TIM_SetCompare1(TIM1,195);

  17.      delay_ms(500);

  18.     TIM_SetCompare1(TIM1,190);

  19.      delay_ms(500);

  20.     TIM_SetCompare1(TIM1,185);

  21.      delay_ms(500);
  22.                
  23.                 TIM_SetCompare1(TIM1,180);

  24.      delay_ms(500);
  25.                
  26.                 TIM_SetCompare1(TIM1,175);

  27.      delay_ms(500);
  28.                
  29.                 TIM_SetCompare1(TIM1,170);
  30.                
  31.                  delay_ms(500);
  32.                  
  33.                 TIM_SetCompare1(TIM1,175);
  34.                
  35.                  delay_ms(500);
  36.                  
  37.                  TIM_SetCompare1(TIM1,180);
  38.                
  39.                  delay_ms(500);
  40.                  
  41.                  TIM_SetCompare1(TIM1,185);
  42.                
  43.                  delay_ms(500);
  44.                  
  45.                
  46.                
  47.         }
  48. }

复制代码
51单片机:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit pwm=P0^0;
  5. sbit key7=P3^7;
  6. uchar count=0;


  7. void delayms(uint xms)
  8. {
  9.      uint i,j;
  10.          for(i=xms;i>0;i--)
  11.          for(j=110;j>0;j--);
  12. }

  13. void Timer0_Init()
  14. {
  15.       TMOD=0x01;
  16.             TH0=(65536-200)/256;
  17.             TL0=(66636-200)%256;
  18.             EA=1;
  19.             ET0=1;
  20.             TR0=0;
  21. }
  22. void Timer0()interrupt 1
  23. {
  24.      TH0=(65536-200)/256;
  25.          TL0=(66636-200)%256;
  26.          
  27.          if(count<30)
  28.             pwm=1;
  29.          else
  30.          pwm=0;
  31.          count++;
  32.          if(count==100)
  33.          {
  34.          TR0=0;
  35.          count=0;
  36.          }
  37.          
  38. }
  39. void keyscan()
  40. {
  41.     if(key7==0)
  42.         {
  43.             delayms(10);
  44.             if(key7==0)
  45.             {
  46.               while(!key7);
  47.                  
  48.                 TR0=1;
  49.             }
  50.         }
  51. }
  52.     void main()
  53.     {
  54.         Timer0_Init();
  55. ……………………

  56. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码





所有资料51hei提供下载:
PWM舵机.zip (3.04 MB, 下载次数: 126)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:385135 发表于 2019-3-10 20:03 | 只看该作者
感谢分享
回复

使用道具 举报

板凳
ID:440075 发表于 2019-8-4 15:14 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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