zoukankan      html  css  js  c++  java
  • 180度360度sg90舵机的使用及代码程序

        大部资料都是在网上找到网友大神所共享的,在网上找了几种舵机的,刚接触有点懵,之后找得多了就理解了,想要控制一个硬件就要先了解这个硬件。这里有介绍180度舵机和360度舵机的具体使用,有网上大神的程序,这个更多的是一个网上对舵机使用的一个整合。如果若有不到之处,希望大家积极指出,

    模拟舵机:需要不断的发送目的地PWM信号,才能旋转到指定位置。例如:我现在让它旋转90度,我就需要不断的发送90度的PWM信号直到到达指定位置才能停止。我们使用的SG90就是一个模拟舵机
    数字舵机:只需给一个目的地PWM信号,即可旋转到指定位置。例如:我现在让它旋转90度,我只需要发送一次90度的PWM信号,它就可以旋转到90度。
    PWM信号:PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.
    占空比:高电平(或者低电平)占整个周期的时间就叫作占空比。
    了解了上面的基本知识我们就可以来认识我们今天的主角:sg90舵机


     

    上图就是我们今天的主角,有三条线,接线方法:
           

    棕色----------------------GND

    红-------------------------VCC

    橙色----------------------信号线


    原理:舵机内部有一个基准电压,微处理器产生的PWM信号通过信号线进入舵机产生直流偏置电压,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。当舵机开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动。


    那么我们如何获取这个 舵机呢。 
    首先我们上某宝能够找到180°、360°SG90舵机。

    我们先来讲的是180度的舵机。
    我们知道sg90舵机是一个模拟舵机,需要我们一直给指定的脉冲。那么这个指定的脉冲是什么?查资料可以知道180度舵机不同占空比与对应角度
    关系:
    高电平在一个周期(20ms)的持续时间对应的舵机角度,(在这20ms内每个周期高电平的占空比一致)

      高电平t占整个周期T(20ms)的时间
      
      舵机旋转的角度
      
      0.5ms
      
      0度
      
      1ms
      
      45度
      
      1.5ms
      
      90度
      
      2ms
      
      135度
      
      2.5ms
      
      180度
      

               如图可形象地表示脉冲与角度关系:

              
     
       
     
          知道了脉冲与角度关系,主要讲解一下如何写这个脉冲,这里所使用的是方法是定时器+中断,定时器每0.1ms中断一次,需要中断200次才能达到20ms。我们此时需要一个全局变量来记录中断的次数,当中断达到200次时,全局变量重新清零。当中断次数小于n时,信号线输出高电平,否则输出低电平。此时n的值对应关系如下。
    n=5>>0度   n=10>>45度   n=15>>90度   n=20>>135度   n=25>>180度

     

          某宝上可能还会有另一种90度sg90舵机,这个是一个另类的180度舵机,可以一样使用上面的程序,他与180度舵机不同的是不同占空比对应的舵机角度如图:
     

    360度舵机

    顾名思义,360度舵机可以360度旋转,因此与180度舵机有相当大的区别,首先360度舵机不能够控制旋转角度,一般的舵机是给一个特定的PWM,舵机会转到相应的角度,而360度舵机是只能够控制方向和旋转转速,所以360度舵机给定一个PWM,会以特定的速度和方向转动。
    PWM信号与360舵机转速的关系:

    0.5ms----------------正向最大转速;
    1.5ms----------------速度为0;
    2.5ms----------------反向最大转速;


    总结:无论是180度90度还是360度舵机,只要我们知道了它脉冲与角度的对应关系我们就可以利用定时器加中断的方法来产生这个相应的PWM信号,进而控制舵机旋转指定角度。


     

     1 #include<reg52.h>
     2 #define uchar unsigned char
     3 #define uint unsigned int
     4 
     5 sbit pwm=P1^0;      //信号输出
     6 sbit k1=P3^1;       //按键k1接P3^1,控制顺时针旋转
     7 sbit k2=P3^2;       //按键k2接P3^2,控制逆时针旋转
     8 
     9 uchar count=0;
    10 uchar n=5;       //初始位置-在0°附近  改变n值可以改变舵机的初始位置
    11           //这个n值在不同的舵机可能存在一点误差,可以改变他的值来试试具体位置
    12 void delay5ms()  //延时5ms
    13 {
    14     unsigned char a,b;
    15     for(b=19;b>0;b--)
    16         for(a=130;a>0;a--);
    17 }
    18 void key()  //按键处理
    19 {
    20     if(k1==0)
    21     {
    22         delay5ms();
    23         if(k1==0)
    24            {
    25             while(k1==0); //判断当键盘松开时
    26             if(n<=25)
    27             n++;      //判断是否旋转到180°
    28             else 
    29             n=26;           
    30            }
    31     }
    32     if(k2==0)
    33       {
    34         delay5ms();
    35         if(k2==0)
    36         {
    37             while(k2==0); //判断当键盘松开时
    38             if(n>=6) n--; //判断是否旋转到0°
    39             else n=3;
    40         }
    41       }
    42 }
    43 
    44 void InitTimer()  // 定时器设置 0.1ms   11.0592Mhz
    45 {
    46     TMOD = 0x01;
    47     TH0 = 0xFF;
    48     TL0 = 0XA3;
    49     EA = 1;
    50     ET0 = 1;
    51     TR0 = 1;
    52 }
    53 
    54 void main()
    55 {
    56     InitTimer();
    57         while(1)
    58         {
    59           key();
    60         }
    61 }
    62 
    63 void Timer() interrupt 1 //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1
    64 {              //3--定时器中断1,4--串口中断1
    65     TH0 = 0xFF;
    66     TL0 = 0xA3;
    67     count++;
    68     if(count<=200)
    69     {
    70         if(count<=n)
    71         {
    72             pwm=1;
    73         }
    74         else
    75         {
    76             pwm=0;
    77         }
    78     }
    79     else
    80     {
    81         count=0;
    82         pwm=0;
    83     }
    84 }
    查看全文
  • 相关阅读:
    Data Guard相关参数学习介绍
    Android打包失败Proguard returned with error code 1. See console
    Extjs4 类的定义和扩展
    c#中常用的异常类型
    cocos2d-x过程动作CCProgressTo示例学习笔记
    欧拉函数
    sae上屏蔽错误显示并查看错误日志
    在wdcp环境下架设VSFTPD虚拟用户只上传功能服务器
    Android开发匹配字符笔记
    setImageResource与setImageBitmap的区别
  • 原文地址:https://www.cnblogs.com/zhj868/p/12534787.html
  • 最新文章
  • springmvc获得项目根目录(绝对路径)
    freeMarker生成静态页面
    在Eclipse中,如何把一个java项目变成web项目
    【shell】shell编程(四)-循环语句
    【shell】shell编程(三)-if,select,case语句
    【shell】shell编程(二)-运算符
    Linux shell中的竖线(|)——管道符号
    linux 管道符号 | ,以及&& ||等等特殊符号笔记
    【shell】shell编程(一)-入门
    vi 和vim 的区别以及用法
  • 热门文章
  • linux与windows查看占用端口的进程ID并杀死进程
    【调试】JS断点调试
    JSP中include指令和include动作浅析
    解决Agent admitted failure to sign using the kye with ssh
    c#打印记忆功能
    狼追兔子问题C模拟解
    字符和文档识别的四十年研究
    罗塞塔石碑安装失败
    纯JavaScript实现HTML5 Canvas六种特效滤镜
    浅析linux中的fork、vfork和clone
Copyright © 2011-2022 走看看

聚圣源烩面石姓女孩起名字abcc式成语机械厂起起名大全仲字辈起名侵犯名誉权的民事起诉状马氏名称女孩起名云虞之欢起名大全部起名 叡可以斗牛的游戏大鱼吃小鱼2谭胖公原型恬字起名好莱坞之王起名大全免费取名字2019刘志军卓起名女孩名字影视墙壁纸效果图给猪猪起名字姓崔的起名字柯达扫描仪斗破苍穹三年之约第5集在线观看双城之战第二季什么时候出医道狂尊林阳苏颜全文免费阅读姬骑士王和王怎么起名字啊生鲜店铺起名的在哪个软件起名字好西部世界电影淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化