单片机PWM舵机控制原理

单片机PWM舵机控制原理舵机的控制一般需要一个 20ms 的时基脉冲 该脉冲的高电平部分一般为 0 5ms 2 5ms 范围内的角度控制脉冲部分 以 180 度角度舵机为例 那么对应的控制关系是这样的 0 5ms0 度 1 0ms45 度 1 5ms90 度 2 0ms 135 度 2 5ms 180 度

 

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

 

单片机PWM舵机控制原理

[cpp]  view plain   copy

 
在CODE上查看代码片
派生到我的代码片

  1. #include 
      
  2. unsigned char count;            //0.5ms次数标识  
  3. sbit pwm=P1^0;              //信号输出  
  4. sbit jia=P1^1;              //角度增加按键  
  5. sbit jan=P1^2;              //角度减小按键  
  6. char jd;                    //角度标识  
  7. void delay(unsigned int i)  
  8. {  
  9.     unsigned int j,k;  
  10.     for(j=i;j>0;j–)  
  11.         for(k=125;k>0;k–);  
  12. }  
  13. void Time0_init()           //定时器初始化  
  14. {  
  15.     TMOD=0x01;  
  16.     IE=0x82;  
  17.     TH0=0xff;  
  18.     TL0=0x19;               //12晶振,0.25ms  
  19.     TR0=1;                 //定时器开始  
  20. }  
  21. void Time0_int() interrupt 1            //中断程序  
  22. {  
  23.     TH0=0xff;  
  24.     TL0=0x19;  
  25.     if(count

    //输出count个高电平
      
  26.         pwm=1;  
  27.     else  
  28.     pwm=0;    //其余输出低电平  
  29.     count++;  
  30.     count=count%40;  //时钟保持40个count 即20ms  
  31. }  
  32. void keyscan()              //按键扫描  
  33. {  
  34.     if(jia==0)              //角度增加键是否按下  
  35.     {  
  36.         delay(50);          //按下延时,消抖  
  37.         if(jia==0)  
  38.         {  
  39.             jd++;           //角度标识加1  
  40.             count=0;        //按键按下,则20ms周期重新开始  
  41.             if(jd==50)  
  42.                 jd=9;            //已经是180°则保持  
  43.                 while(jia==0);   //等待按键放开  
  44.         }  
  45.     }  
  46.     if(jan==0)                   //角度减小键是否按下  
  47.     {  
  48.         delay(10);  
  49.         if(jd==0);  
  50.         {  
  51.             jd–;                //角度标识减1  
  52.             count=0;  
  53.             if(jd==0)  
  54.                 jd=1;  
  55.             while(jan==0);  
  56.         }  
  57.     }  
  58. }  
  59.   
  60. void main()  
  61. {  
  62.     jd=1;  
  63.     count=0;  
  64.     Time0_init();  
  65.     while(1)  
  66.     {  
  67.         keyscan();  
  68. //      display();  
  69.     }  
  70. }  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201688.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:50
下一篇 2026年3月20日 上午8:50


相关推荐

  • 图形推理1000题pdf_【3分钟模考】图形推理06组「建议收藏」

    图形推理1000题pdf_【3分钟模考】图形推理06组「建议收藏」考点遍历小模考(图形推理005组)平均错误率:36.1%4题对3题达标1.从所给四个选项中,选择最合适的一个,使之呈现一定规律性:2.要求你从四个图形中把与众不同的挑出来。3.4.左边给定的是纸盒的外表面,下面哪一项能由它折叠而成?答案解析第1题【答案】B【解析】本题属于位置类,主要考查数三角形。题干图形中,重叠数三角形个数依次为1、2、3、4、5,应选有6个…

    2025年10月10日
    6
  • Python websocket_php需要编译吗

    Python websocket_php需要编译吗这里很坑爹………地址换了….网上到处都是旧的github地址….更郁闷的是旧地址的代码在centos等各个linux都能编译通过,但是到了mac就郁闷了,各种报错…..坑爹来的然后很多人说hs没在维护了,那是因为他们看到的是旧的git代码地址….囧…..搞死我了,我还真以为他不更新了,看到git项目,3年没更新了,心都凉了……各种找错误各种…

    2022年8月24日
    7
  • centos7.6安装yum模块

    centos7.6安装yum模块准备阶段:查看系统版本:目的是为后面正确下载对应版本的安装包,包不对会让你走很多弯路#cat/etc/redhat-release版本号为:CentOSLinuxrelease7.6.1810(Core)一:卸载老的安装#检查老的安装rpm-qa|grepyum#卸载老的安装rpm-aq|grepyum|xargsrpm-e–nodeps…

    2022年5月6日
    48
  • 125 Valid Palindrome

    125 Valid Palindrome

    2022年2月5日
    46
  • linux x11vnc,X11vnc (简体中文)[通俗易懂]

    linux x11vnc,X11vnc (简体中文)[通俗易懂]WARNING:这将建立一个没有密码的VNC.意思是任何人都可以通过网络访问你的VNC并且能看到你的X界面.可以非常简单的通过SSH连接来避免这样的事情.设置x11vnc安装pacman-Sx11vnc运行首先你需要运行一个xserver服务器.使用startx或类似的.完成后运行startxx11vnc-display:0-auth~/.Xauthority如果失败,你…

    2025年8月10日
    6
  • Macbook pro/air 2013 late -2014 使用转接卡更换NVME SSD休眠不醒问题的解决办法

    Macbook pro/air 2013 late -2014 使用转接卡更换NVME SSD休眠不醒问题的解决办法、、1.手上512GMBP2013late差不多满了,因为穷,所以在淘宝上买了一个NVME转Macbookpcie,然后再买一个NVME2T的硬盘2.NVME因为需要最新的FirmwareRom支持,所以必须使用原装的硬盘(必须原装)安装Mac14以上,我安装了14.5.要不然识别不出来新安装的NVME硬盘3.买之前就知道是会有休眠问题的,问了卖家推荐了一些型号说不…

    2022年6月23日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号