久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14832|回復: 15
收起左側

初學單片機之PWM控制舵機的原理與C語言源程序

  [復制鏈接]
ID:375112 發表于 2018-8-22 11:22 | 顯示全部樓層 |閱讀模式
1、舵機圖片如下:
1534907065746.jpg

舵機有三根線、一般按順序依次來說是: 地(GND),電源(VCC),信號線 ;

2.舵機的工作原理是:
1534907494490.jpg

控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出到電機驅動芯片決定電機的正反轉。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。

3.舵機的控制:
舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍內的角度控制脈沖部分,總間隔為2ms。以180度角度伺服為例,那么對應的控制關系是這樣的:
   0.5ms--------------0度;1.0ms------------45度;  1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度

4 總結經驗:
舵機 簡單來說 就是給它高電平延時xms;然后在低電平延時(20-x)ms,然后while 循環,就可以了  ;具體的程序 在 附件下載(其中包含了 步進電機的程序 可忽略)

提供以下方式的驅動程序:
使用T0、T1兩個定時器產生PWM控制
使用T0一個定時器產生PWM控制
使用PCA的16位軟件定時器產生PWM控制單片機源程序如下:
  1. /***
  2. **項目名稱:舵機使用介紹(測試程序部分)
  3. **實現方法:使用PCA的16位軟件定時器產生PWM控制
  4. **編寫時間:2017.07.06
  5. **使用芯片:stc12c4052ad
  6. **時鐘頻率:使用外部晶振頻率12MHz
  7. **聯系方式:QQ群號-143867886
  8. *****更多內容可在微信公眾號(電子創客派 ID:e_diy_c)查看*****
  9. ***/

  10. #include <stc12c2052ad.h>
  11. #include <intrins.h>

  12. typedef unsigned char u8;
  13. typedef unsigned short int u16;

  14. sbit CTRL = P3^7;                                                                //舵機控制端口

  15. void delay_100ms(u16 x);

  16. u16 TIME = 20000;                                                                //PWM周期時間(單位us)
  17. u16 Min = 800;                                                                        //高電平最小持續時間
  18. u16 Max = 2200;                                                                        //高電平最大持續時間
  19. u16 aTime = 800;                                                                //高電平持續時間
  20. u8 Degree = 200;                                                                //單位時間寬度(最小是舵機死區設定大約10us)

  21. void main()
  22. {
  23.         CTRL = 0;
  24.        
  25.         //PCA0配置
  26.         CCAPM0 = 0x48;                                                                //設置PWM0為16位軟件定時器
  27.         CCAPM0 |= 0x01;                                                                //PCA0比較中斷使能
  28.         CL = 0;                                                                                                //PCA計數器低8位
  29.         CH = 0;                                                                                                //PCA計數器高8位
  30.         CCAP0L = aTime;                                                                //PCA0比較寄存器低8位
  31.         CCAP0H = aTime >> 8;                                        //PCA0比較寄存器高8位
  32.         CR = 1;                                                                                                //使能PCA計數
  33.         EPCA_LVD = 1;                                                                        //使能PCA中斷
  34.         EA = 1;                                                                                                //打開中斷總開關
  35.        
  36.         while(1)
  37.         {
  38.                 //逆時針旋轉
  39.                 while(aTime < Max)
  40.                 {
  41.                         delay_100ms(5);
  42.                         aTime += Degree;
  43.                 }
  44.                
  45.                 //順時針旋轉
  46.                 while(aTime > Min)
  47.                 {
  48.                         delay_100ms(5);
  49.                         aTime -= Degree;               
  50.                 }
  51.         }
  52. }


  53. void Delay100ms()                //@12.000MHz
  54. {
  55.         unsigned char i, j, k;

  56.         _nop_();
  57.         _nop_();
  58.         i = 5;
  59.         j = 144;
  60.         k = 71;
  61.         do
  62.         {
  63.                 do
  64.                 {
  65.                         while (--k);
  66.                 } while (--j);
  67.         } while (--i);
  68. }

  69. void delay_100ms(u16 x)
  70. {
  71.         while(x--)  Delay100ms();
  72. }


  73. //PCA中斷
  74. void _PCA_() interrupt 6 using 1
  75. {
  76.         static u8 flag = 1;
  77.        
  78.         //PWM0比較中斷
  79.         if(CCF0)
  80.         {
  81.                 CCF0 = 0;                                                                                //中斷標志位要軟件清零

  82.                 if(flag)                                                                                //如果之前PWM0_CTRL是高電平,則接下來產生時間寬度為TIME-aTime的低電平
  83.                 {
  84.                         CTRL = 0;
  85.                         CCAP0L = TIME;
  86.                         CCAP0H = TIME >> 8;
  87.                 }
  88.                 else                                                                                                //如果之前PWM0_CTRL是低電平,則接下來產生時間寬度為aTime的高電平
  89.                 {
  90.                         CTRL = 1;
  91.                         CL = 0;
  92.                         CH = 0;
  93.                         CCAP0L = aTime;
  94.                         CCAP0H = aTime >> 8;
  95.                 }
  96.                
  97.                 flag = 1 - flag;
  98.         }
  99. }
  100. ……………………

  101. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
制作步進電機控制模塊_C51程序.zip (5.28 KB, 下載次數: 67)

評分

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

查看全部評分

回復

使用道具 舉報

ID:375112 發表于 2018-8-22 11:23 | 顯示全部樓層
如果使用 51 單片機控制多個的話 考慮到 功率問題 可以加個 三極管;(放大信號
回復

使用道具 舉報

ID:1 發表于 2018-8-22 17:22 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:389000 發表于 2018-8-22 18:40 | 顯示全部樓層
學到了,學到了
回復

使用道具 舉報

ID:316572 發表于 2018-8-24 10:27 | 顯示全部樓層

如果使用 51 單片機控制多個的話 考慮到 功率問題 可以加個 三極管;(放大信號
回復

使用道具 舉報

ID:461204 發表于 2019-1-3 18:21 | 顯示全部樓層
厲害了
回復

使用道具 舉報

ID:482847 發表于 2019-3-1 17:07 | 顯示全部樓層
可以的,非常詳細的資料
回復

使用道具 舉報

ID:385135 發表于 2019-3-8 23:14 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:543113 發表于 2019-5-20 19:14 | 顯示全部樓層
感謝分享,謝謝
回復

使用道具 舉報

ID:594378 發表于 2019-8-2 23:12 | 顯示全部樓層
學到了,點贊
回復

使用道具 舉報

ID:592852 發表于 2019-8-3 15:53 | 顯示全部樓層
謝謝分享,點贊
回復

使用道具 舉報

ID:375382 發表于 2019-8-5 18:33 | 顯示全部樓層
51黑上面的好資料
回復

使用道具 舉報

ID:639952 發表于 2019-11-12 11:17 | 顯示全部樓層
Mr.wang7 發表于 2018-8-22 11:23
如果使用 51 單片機控制多個的話 考慮到 功率問題 可以加個 三極管;(放大信號

三極管是加在哪里的呢,因為是初學者不是特別明白
回復

使用道具 舉報

ID:110278 發表于 2020-3-17 15:02 | 顯示全部樓層
不錯。
回復

使用道具 舉報

ID:729395 發表于 2020-4-14 23:44 | 顯示全部樓層
大神好厲害
回復

使用道具 舉報

ID:725873 發表于 2020-5-7 09:19 | 顯示全部樓層
很好感謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品久久久久久久久 | 精品久久久久久久久久久久久 | 中文字幕一区二区三区在线视频 | 欧美成人一区二区三区 | 国产高清免费在线 | 日韩电影免费在线观看中文字幕 | 日韩精品视频在线 | 日日夜夜精品视频 | 日日摸日日添日日躁av | 欧美一区二区三区视频在线播放 | 精品99久久久久久 | 国产一区二区三区在线 | 国产精品久久久久久久久久免费看 | 中文字幕一区在线观看视频 | 欧美精品v国产精品v日韩精品 | 91视频大全| 色爱av| 国产欧美一区二区久久性色99 | 99精品国产一区二区三区 | 超碰97免费| 国产午夜精品久久久久 | 久久精品99国产精品 | 精品一二三区在线观看 | 国产视频中文字幕 | 亚洲国产一区二区三区四区 | 久久久.com| 美美女高清毛片视频免费观看 | 在线国产一区 | 日韩精品视频在线观看一区二区三区 | 欧美久久精品一级c片 | 成人黄视频在线观看 | 红桃视频一区二区三区免费 | 欧美一区免费在线观看 | 日日碰狠狠躁久久躁婷婷 | 99成人| 日韩在线免费电影 | 久热免费| 日本不卡一区二区 | 国产区免费视频 | 美女福利视频网站 | 亚洲精品久久久一区二区三区 |