找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2969|回復: 1
打印 上一主題 下一主題
收起左側(cè)

基于STC89C52單片機的舵機SG90驅(qū)動程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:593642 發(fā)表于 2019-8-1 17:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式



        本人是初學單片機,若有不到之處,希望大家積極指出,共同學習!                         下面說一下驅(qū)動舵機SG90過程中的一些經(jīng)驗:
1.了解舵機基本運動機理
    舵機內(nèi)部結(jié)構(gòu)及運動原理詳細解析
       (重要的是看舵機運動原理)


2.注意我們使用的是模擬舵機(模擬舵機和數(shù)字舵機驅(qū)動方法不同)
     模擬舵機:需要不斷的發(fā)送PWM信號,才可旋轉(zhuǎn)到指定位置。
    數(shù)字舵機:只需給一個PWM信號,即可旋轉(zhuǎn)到指定位置。


3. 使用PWM信號控制—詳細代碼如下
  1. /***************************************************
  2. /*舵機控制
  3. /*開關(guān)K1控制順時針旋轉(zhuǎn)  開關(guān)K2控制逆時針旋轉(zhuǎn)
  4. /*每次旋轉(zhuǎn)角度由定時器1控制 定時器周期越短 精度越高
  5. ****************************************************/
  6. #include <reg52.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int

  9. sbit pwm=P1^0;
  10. sbit k1=P3^0;        //k1順時針旋轉(zhuǎn)
  11. sbit k2=P3^1;        //k2逆時針旋轉(zhuǎn)

  12. uchar count=0;
  13. uchar n=14;                //初始位置-在90°附近   

  14. void delay5ms()
  15. {
  16.     unsigned char a,b;
  17.     for(b=19;b>0;b--)
  18.         for(a=130;a>0;a--);
  19. }
  20. void key()
  21. {
  22.   if(k1==0)
  23.   {
  24.             delay5ms();
  25.           if(k1==0)
  26.           {
  27.              while(k1==0); //判斷當鍵盤松開時
  28.                    if(n<=25) n++;//判斷是否旋轉(zhuǎn)到180°
  29.                  else 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--; //判斷是否旋轉(zhuǎn)到0°
  39.                  else n=5;
  40.           }
  41.   }
  42. }

  43. void InitTimer()//0.1ms 12Mhz
  44. {
  45.     TMOD = 0x01;
  46.     TH0 = 0xFF;
  47.     TL0 = 0x9C;
  48.     EA = 1;
  49.     ET0 = 1;
  50.     TR0 = 1;
  51. }

  52. void main()
  53. {
  54.     InitTimer();
  55.         while(1)
  56.         {
  57.           key();
  58.         }
  59. }

  60. void Timer() interrupt 1
  61. {
  62.     TH0 = 0xFF;
  63.     TL0 = 0x9C;
  64.         count++;
  65.         if(count<=200)
  66.         {
  67.            if(count<=n)
  68.            {
  69.                       pwm=1;
  70.            }
  71.            else
  72.            {
  73.                       pwm=0;
  74.            }
  75.         }
  76.         else
  77.         {
  78.            count=0;
  79.            pwm=0;
  80.         }
  81. }
復制代碼

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:593642 發(fā)表于 2019-8-2 15:55 | 只看該作者
講的不錯
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表