色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

51單片機教程 使用PWM對舵機進行控制

冬至子 ? 來源:ZYuanBlogs ? 作者:激沄RagingWaves ? 2023-11-01 10:52 ? 次閱讀

舵機的控制方式

舵機的種類有很多,下面我所展示的是非常常見的SG90舵機(下面簡稱“舵機”),也是我們這次實驗室考核所使用的舵機。

篇幅有限,這里只簡單介紹了SG90舵機,想深入研究的同學可以自己去查閱資料

我們先來了解一下SG90舵機

1.jpg

SG90舵機有三根線:GND、VCC和信號線:

圖片

GND(負極)和VCC(正極)都是電源線,可以接在開發板相同標識的排針或與開發板相同的電源上,注意GND要與單片機共地(接在同一個負極上)。

信號線接在單片機的IO口上,我們使用IO口輸出PWM來控制舵機。

在對舵機進行控制時,像控制LED燈直接對信號線輸出1和0是不能夠正常控制的,要使用PWM進行控制:

圖片

↑不正確的控制方法,可能是醬紫的

圖片

↑使用PWM控制,能隨意改變角度

那么下面我們進入正題:使用PWM對舵機進行控制。

舵機能在其旋轉范圍內(0°~180°)旋轉至任意角度,但注意,這不是指能夠連續轉圈圈,而是像一把量角器,假設設置了30°,那么舵機就會旋轉至30°的位置并停下,而不是在原來的位置疊加上30°。

舵機的旋轉角度是通過PWM的占空比來調節的,PWM的周期一般為20ms,它們的關系如下表所示:

1.jpg

可以發現,要舵機停在0°的位置并不能將IO口直接置0,180°也不能直接置1。

示例程序

舵機的控制程序其實和LED亮度調節、呼吸燈的程序基本一致,都是使用PWM控制,只不過占空比有范圍而已。

下面的程序是在我之前發的PWM的程序上稍作修改得到的,PWM部分就不再解釋了,只解釋舵機的控制部分。

#include < reg52.h >


#define PWM_T 200                     //產生中斷的時間,因為是24MHz,200即100微妙(0.1毫秒)


int PWM_count0 = 0;                    //進入中斷的次數
int PWM_count1 = 0;                    //與上面的類似,用于計數
int PWM_F = 0;                        //一個用于計時的標志,作用類似定時器TF0、TF1


sbit servo = P2^0;                    //舵機信號線所連接的IO口


void PWM_Start()                      //PWM初始化函數,打開了定時器0
{
  EA = 1;
  ET0 = 1;
  TMOD |= 0x01;
  TR0 = 1;


  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;
}


int PWM(int PWM_value)                //控制PWM輸出的子函數
{
  if(PWM_count0 <= PWM_value)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}


void main()
{
  PWM_Start();                        //PWM開始運行


  while(1)
  {
    while(1)
    {
      servo = PWM(5);                  //旋轉至0°
      if(PWM_F == 1)                  //判斷標志是否為1,是則代表著過了1秒
      {
        PWM_F = 0;                    //將標志歸零
        break;                        //過了1秒,退出循環
      }
    }


    while(1)
    {
      servo = PWM(10);                //旋轉至45°
      if(PWM_F == 1)
      {
        PWM_F = 0;
        break;
      }
    }


    while(1)
    {
      servo = PWM(15);                //旋轉至90°
      if(PWM_F == 1)
      {
        PWM_F = 0;
        break;
      }
    }


    while(1)
    {
      servo = PWM(20);                //旋轉至135°
      if(PWM_F == 1)
      {
        PWM_F = 0;
        break;
      }
    }


    while(1)
    {
      servo = PWM(25);                //旋轉至180°
      if(PWM_F == 1)
      {
        PWM_F = 0;
        break;
      }
    }
  }
}


void Timer0() interrupt 1
{
  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;


  PWM_count0++;


  if(PWM_count0 == 200)                //過了20ms,完成了一個PWM周期
  {
    PWM_count0 = 0;                    //清零,重新開始計數
    PWM_count1++;
    if(PWM_count1 == 50)              //PWM_count0清零了50次,也就是說過了20ms*50=1000ms=1s
    {
      PWM_count1 = 0;                  //清零,重新開始計數
      PWM_F = 1;                      //標志置1,說明已經過了2s
    }
  }
}

我在程序中并沒有使用軟件延時(delay()函數),這在PWM那篇文章中也說過了,軟件延時期間無法改變IO口的高低電平輸出,PWM也就失效了。

我的做法是設置一個標志PWM_F(也可以直接判斷PWM_count1的值),當達到設定的時間就退出循環,否則就回到循環進行PWM輸出。

如果你覺得這樣做比較麻煩,也可以調用另一個定時器來計時,不過定時器的數量是有限的(51只有兩個,52、STC15F2K60S2有三個)。

在寫PWM的程序時,可以參考我上面的做法,每0.1ms進入一次中斷,進入200次(20ms)就完成一次PWM中斷,對應著舵機所要求的PWM周期長度,控制起來也會方便很多。

另外,頭文件建議使用與單片機型號所匹配的,上面例程中包含reg52.h是為了有較高的兼容性,但這樣就有一些資源無法調用。例如STC15F2K60S2,P4引腳(如P47)只有在包含STC15F2K60S2.h時才能被調用。

假如你的舵機不能正常運行,可能是下面的原因:

1.單片機晶振或定時器沒有設置正確,例如上面例程對應的是24MHz的頻率,下載時選擇了默認的11.0592MHz;
2.電源供電不足,可以使用充電寶供電試試。

總結

學會PWM后,舵機的控制其實非常容易,稍作一下改動就行。對舵機感興趣的同學可以去了解一下其他類型的舵機,使用PWM控制的只是其中一種。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 51單片機
    +關注

    關注

    274

    文章

    5705

    瀏覽量

    124093
  • PWM控制
    +關注

    關注

    7

    文章

    194

    瀏覽量

    26381
  • 舵機
    +關注

    關注

    17

    文章

    280

    瀏覽量

    41149
  • GND
    GND
    +關注

    關注

    2

    文章

    540

    瀏覽量

    38849
  • SG90
    +關注

    關注

    0

    文章

    9

    瀏覽量

    11521
收藏 人收藏

    評論

    相關推薦

    一文解析51單片機PWM舵機控制(附程序)

    本文主要介紹的是51單片機PWM舵機控制,具體的跟隨小編來了解一下。
    發表于 04-18 14:18 ?2.6w次閱讀

    51單片機控制舵機程序

    51單片機控制舵機程序,希望對你有幫助,謝謝頂一下
    發表于 11-02 17:35 ?102次下載

    51單片機控制舵機

    利用簡單的51單片機PWM的脈沖控制信號來很方便的控制
    發表于 11-10 15:25 ?104次下載

    單片機產生7路舵機控制PWM波的方法

    單片機產生7路舵機控制PWM波的方法。
    發表于 03-21 15:33 ?25次下載

    單片機實現舵機轉角控制

    單片機實現舵機轉角控制單片機實現舵機轉角控制單片機實現舵機轉角
    發表于 04-28 14:57 ?24次下載

    51單片機控制舵機程序

    僅提供參考 51單片機控制機器人數字舵機的示例程序。程序比較簡單,但演示了控制的方法。作為入門級的學習,還是可以參考的。
    發表于 06-23 18:14 ?171次下載

    使用51單片機進行舵機控制實驗的手冊資料免費下載

    本文檔的主要內容詳細介紹的是使用51單片機進行舵機控制實驗的手冊資料免費下載。
    發表于 04-02 08:00 ?27次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>進行</b><b class='flag-5'>舵機</b><b class='flag-5'>控制</b>實驗的手冊資料免費下載

    使用51單片機控制舵機的電路圖和程序免費下載

    這里用到PCF8591 ADDA芯片 和51單片機,和一個電位器。通過 控制 電位器,產生PWM波,
    發表于 09-25 17:17 ?28次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>控制</b><b class='flag-5'>舵機</b>的電路圖和程序免費下載

    使用51單片機PWM舵機控制的詳細資料和程序概述

    為什么要寫這篇博客、因為我在調我的51單片機wifi小車的雙舵機攝像頭的時候。從一開始對PWM很陌生到完全理解 PWM調節并調好了兩個
    發表于 08-27 17:29 ?14次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>PWM</b>雙<b class='flag-5'>舵機</b><b class='flag-5'>控制</b>的詳細資料和程序概述

    使用51單片機進行藍牙舵機控制超聲波測距模塊的開發資料說明

    本文檔的主要內容詳細介紹的是使用51單片機進行藍牙舵機控制超聲波測距模塊的開發資料說明。
    發表于 07-02 17:42 ?13次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>進行</b>藍牙<b class='flag-5'>舵機</b><b class='flag-5'>控制</b>超聲波測距模塊的開發資料說明

    如何使用51單片機按鍵控制舵機旋轉

    本文檔的主要內容詳細介紹的是如何使用51單片機按鍵控制舵機旋轉主要內容包括了:1.舵機的與單片機
    發表于 06-18 17:44 ?23次下載
    如何使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>按鍵<b class='flag-5'>控制</b><b class='flag-5'>舵機</b>旋轉

    基于51單片機舵機控制器設計

    進行了大幅度的升級,用52單片機定時器0輸出兩路PWM波來控制兩個自由度的舵機,用定時器1組成波特率發生器
    的頭像 發表于 11-19 09:35 ?7244次閱讀

    51單片機舵機控制

    51單片機舵機控制系統概述硬件設計程序設計概述在這篇博客中,將介紹一個基于51單片機
    發表于 11-05 11:06 ?21次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>舵機</b><b class='flag-5'>控制</b>

    最簡單DIY基于51單片機舵機控制

    基于51單片機舵機控制器文章目錄51單片機物聯網智能小車系列文章目錄前言一、最簡單DIY基于
    發表于 11-20 18:36 ?22次下載
    最簡單DIY基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>舵機</b><b class='flag-5'>控制</b>器

    51單片機-步進電機-舵機

    51單片機-步進電機-舵機
    發表于 11-23 17:06 ?23次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>-步進電機-<b class='flag-5'>舵機</b>
    主站蜘蛛池模板: 久草在线精彩免费视频 | 日本全彩黄漫无遮挡 | 夜月视频直播免费观看 | 又黄又湿免费高清视频 | 在线播放国产视频 | 香蕉久久一区二区三区啪啪 | 成人欧美尽粗二区三区AV | 24小时日本在线观看片 | 色多多污污在线播放免费 | 美女爽到嗷嗷嗷叫 | 中国女人hd | 久久WWW免费人成一看片 | 国产午夜在线精品三级a午夜电影 | 偷拍自怕亚洲在线第7页 | 美女裸露胸部100%无遮挡 | 日本高清无人区影院 | 国产白丝精品爽爽久久蜜臀 | 超碰免费视频caopoom9 | 日本人的xxxxxxxxx69 | 免费一级片网站 | 高h浪荡文辣文神奇宝贝 | 2019夜夜 | 播色屋97超碰在人人 | 婷婷六月激情综合一区 | 佐山爱痴汉theav | 99日影院在线播放 | 亚洲三级大片 | 18黄女脱内衣| 国产精品久久久久婷婷五月色婷婷 | 免费人成在线观看视频不卡 | 日韩综合网 | 出租屋交换人妻 全文 | 俄罗斯17vidio| 久草热在线 | 亚洲乱亚洲乱妇13p 亚洲乱色视频在线观看 | 国产毛多水多高潮高清 | 亚洲精品另类有吗中文字幕 | 999久久久国产 | 公交车被CAO到合不拢腿 | 真实国产乱子伦精品一区二区三区 | 三级在线观看网站 |