第十一課:樹莓派控制電機

2020-08-08 20:24:18

第一課:什麼是樹莓派
第二課:基於樹莓派的10個經典專案
第三課:購買您的第一個樹莓派
第四課:如何安裝樹莓派系統
第五課:樹莓派C語言程式設計手冊
第六課:樹莓派led控制
第七課:樹莓派按鍵控制
第八課:樹莓派PWM(脈寬調製)
第九課:樹莓派數碼管顯示
第十課:樹莓派如何讀取溫溼度感測器(dht11)數據

我們要幹什麼

在學一個知識點的時候,特別是硬體相關的,選一個好的實驗方式,是很不錯的做法,如果一開始就要去控制一個大的裝置(比如雲台),機械手臂,智慧小車,你可能早早被問題擊垮了興趣。
下面 下麪就是我們在學電機的時候,最開始應該做的實驗,有兩個,一個是驅動一個小風扇,另一個是驅動一個輪子。我建議都做,因爲很便宜,每一個實驗只需要十幾塊錢。兩個都很好玩。
在这里插入图片描述

如何買到小風扇

這個小標題,我都在猶豫要不要寫,因爲在淘汰裏面一搜小風扇電機就可以了,但是我還是覺得給一個截圖吧,隔行如隔山,也許有些人就是不知如何動手,但是又極其感興趣。(不需要驅動板,也就是隻要3.6元)
在这里插入图片描述

不用程式如何讓電機轉起來

在这里插入图片描述
這裏說的不用程式讓電機轉起來,是什麼意思呢?
電機其實是不分正負的,只要給它電壓(電壓裏面的電流要足夠大),就可以讓它轉起來,然後電壓反接,就是反轉。這樣的話,我們一開始並不需要寫程式,直接用杜邦線把樹莓派的電源和地與電機的正負極接起來就可以讓小風扇轉起來了。

如何用程式控制電機轉

我們最終是要用程式控制的,當我們用上面的方法,讓小風扇轉起來的時候,其實我們心情是激動的。
可能,甚至,在想,我也可以做一個小風扇去賣,像這樣:
在这里插入图片描述
所以,我們有點迫不及待了,想着看能否寫程式自由控制,再找人開模,設計外形,市場推廣,擺地攤,推廣詞是:

全手工,連程式碼都是自己敲的

程式設計思路

我們計劃這樣,我們用也不用反轉,如果是做鼓風機,就要反轉,電風扇是向外吹的,鼓風機是向裡吹的,哈哈哈,鼓風機也可以設計了
靠,購買我專欄可以發財了,沒想到,連我寫這篇部落格都激動起來,不想睡覺,忘記了窗外,全神貫注了…
於是,我們一根線接地,另一根線用IO口控制,如果我這個IO口打高電平就轉動,打低電平就不轉,如果要加速再研究我講PWM那一段
https://blog.csdn.net/qq_27320195/article/details/107535749
程式碼就像這樣:

pi@xiajiashan:~/iotek/xw1908/wiringPi$ cat motor_fan.c -n
     1  //第一步:包含標頭檔案
     2  #include <wiringPi.h>
     3  #include <string.h>
     4  #include <stdlib.h>
     5  #include <stdio.h>
     6  #define MOTOR       7   //wiringPi編碼模式  7號腳
     7  int main()
     8  {
     9  //第二步:設定樹莓派引腳編碼模式
    10    if(wiringPiSetup()<0)
    11    {
    12      exit(-1);
    13    }
    14  //第三步:定義引腳功能
    15    pinMode(MOTOR,OUTPUT);//設定引腳爲輸出
    16  //第四步:回圈控制
    17    char ch=' ';
    18    while(1){
    19      printf("請輸入s啓動小風扇,p停止小風扇,q退出:");
    20      scanf("%c",&ch);
    21      getchar();
    22      if(ch=='s')
    23      {
    24          digitalWrite(MOTOR,1);//
    25      }else if(ch=='p'){
    26          digitalWrite(MOTOR,0);//
    27      }else if(ch=='q'){
    28          break;
    29      }else{
    30          printf("請輸入正確的命令\n");
    31      }
    32    }
    33    return 0;
    34  }

但是,我們發現,不轉,聽到嗡嗡響——嗡嗡響一般是因爲電流不夠,轉不起來
爲什麼呢?

IO口帶不動電機的原因

電機不轉的原因是:樹莓派的IO口輸出電流太小,帶不動電機。
怎麼辦呢,爲什麼我們用3.3v或者5V電源可以,用程式IO口就不行呢?
因爲,我們最開始做實驗直接用的是電源,電源的英文單詞是什麼power啊,就是強大的意思啊,同樣是3.3V,電源出來的3.3v,裏面的電流就很強了,但是我們IO口出來的3.3v(樹莓派的IO口不能出來5V),電流就很虛弱,這個怎麼理解呢?
就相當於,同樣大小的兩根水管,一根裏面的水流很急,另一根裏面的水流很緩慢。

如何使用L298N電機驅動板

要解決這個問題,我們需要新增一個L298N的驅動板
在这里插入图片描述
這個驅動板的作用就是——四兩撥千斤,我們只需要給IO口一個小的電流,通過L298N就可以產生很大的電流,電流大就會帶來很大的熱量,晶片容易發燙,所以,我們看到板子上有一個很大的散熱片,這個小版主的面積比手掌小些。

L298N電機的接線方法

在这里插入图片描述
L298N的接線很好懂,首先它可以帶兩個電機,那麼我們這裏就用一個,比如你用右邊這個(只用一個,左邊不接),然後找一個9V或者12V的電源,你可以用一組電池拼接起來,也可以用一個可充電電池組
电池盒不带电池,建议买右边的充电电池,很好使

先看現象

現象就是,當我們在鍵盤輸入s的時候,啓動小風扇,輸入p的時候停止轉動,速度很快,很給力
在这里插入图片描述

但是,我們不能實現反轉(也就是不能做鼓風機),因爲我們把其中一個腳接到了地,這樣這個腳上的電平就一直是低,然後另一個腳給高電平就轉,低電平就停,無法實現反轉,怎麼辦呢?

兩個引腳如何控制

要解決上面的問題,我們需要引入兩根腳
在这里插入图片描述

如何實現小風扇的加減速

小風扇的加減速是通過pwm來實現的,而樹莓派的PWM分硬體PWM和軟體PWM功能,硬體PWM只支援第1腳,但是如果有多個引腳就無法實現硬體PWM,我們這裏就用軟體PWM實現。關於軟體PWM和硬體PWM請參考:
https://blog.csdn.net/qq_27320195/article/details/107535749
完整程式碼:

pi@xiajiashan:~/pi_c_study/pwm$ cat -n my_moto_pwm.c 
     1  #include <wiringPi.h>
     2  #include <stdio.h>
     3  #include <stdlib.h>
     4  #include <unistd.h>
     5  #include <string.h>
     6  //軟體pwm
     7  #define m1     28  //wiringPi編碼第28腳-----pwm
     8  #define m2     29  //wiringPi編碼第29腳-----pwm
     9  int main()
    10  {
    11     //第一步:啓動樹莓派設定wiringPi編碼模式
    12     if(wiringPiSetup()<0)
    13     {
    14        perror("啓動樹莓派失敗....");
    15        exit(1);//退出進程
    16     }
    17     //第二步:設定軟體PWM功能
    18     softPwmCreate(m1,0,100);//設定m1爲軟體PWM輸出功能
    19     softPwmCreate(m2,0,100);//設定m2爲軟體PWM輸出功能
    20     //第三步:調製PWM
    21     int i;
    22     char buf[10]="";
    23     while(1)
    24     {
    25         printf("請輸入ac加速,dc減速(end退出):");fflush(stdout);
    26         fgets(buf,10,stdin);//從鍵盤獲取字串
    27         if(strncmp(buf,"ac",2)==0){
    28            for(i=0;i<100;i+=5){
    29                softPwmWrite(m1,i);//m2=0,m1從0~100加速
    30                usleep(100000);
    31            }
    32         }
    33         if(strncmp(buf,"dc",2)==0){
    34            for(i=100;i>0;i-=5){
    35               softPwmWrite(m1,i);//m2=0,m1從100~0加速
    36               usleep(100000);
    37            }
    38         }
    39         if(strncmp(buf,"end",3)==0) break;
    40         memset(buf,0,10);
    41     }
    42     return 0;
    43  }
pi@xiajiashan:~/pi_c_study/pwm$ 

初學者在學習電機的時候,會被五花八門的名字搞混淆,我們接下來進行一下梳理,僅作概念上的區別。

什麼是電機

樹莓派裝上了電機,就相當於人有了兩條腿(一般都是跑的),那裝上什麼就像兩隻手呢?
——機械手臂
那裝上什麼就有了翅膀呢?
——螺旋槳
(突然想到人的手,到底是手還是翅膀,或者說是翅膀退化成手,還是手進化成翅膀?總覺得人是鳥變的,我就是一個這樣思想容易走神的人…)
電機——就是用利用電(流)讓軸轉起來的一種裝置
在这里插入图片描述

(我竟然很長時間,才讓軸這個字,在我腦海裏面固定一個場景出來,我覺得這個跟我小時候的生活有關,我們那裏很少有板車,所以對"車軲轆"這個詞也沒有意境,腦神經需要我主動激發它去找看過的一些北方電影和電視劇場景,而不能變成一種潛意識的東西,腦神經不需要激發,好像就存在頭皮層,眼睛看到這個詞,或者耳朵聽到這個詞就想到什麼)
在这里插入图片描述

什麼是馬達

在这里插入图片描述

總體來說:
馬達是電(動)機和發動機的統稱,不是很精確的說法。

所以,在我們程式設計領域,電機跟馬達是等同的,下面 下麪是在淘寶中搜馬達的結果
在这里插入图片描述

所以說,電機,馬達就是這樣的東西:
在这里插入图片描述

直流電機,交流電機, 伺服電機 , 步進電機

直流電機的定義:

直流電機是依靠直流工作電壓執行的電機,廣泛應用於收錄機、錄像機、影碟機、電動剃鬚刀、電吹風、電子錶、玩具等。
功耗低,省電
噪音小
速度低,力矩小
我們上面做的小風扇就是直流電機的經典應用了

什麼是交流電機

交流電機的定義:
在这里插入图片描述

交流電機的樣子和價格:
淘寶搜尋舵機顯示商品如下:在價格上交流電機比直流電機要貴
在这里插入图片描述
交流電機的工作原理:
交流電機和直流電機的原理相似,只不過是220V的交流電壓,功率大,危險。
在这里插入图片描述
直流電機的應用行業:
船舶,飛機,工業,大型裝置,加工業

什麼是步進電機

步進電機的定義:
在这里插入图片描述
步進電機的樣子和價格:
淘寶搜尋步進電機顯示商品如下:
在这里插入图片描述
步進電機工作原理:
參考部落格:https://www.moons.com.cn/article/cn-techschool-stepmotor-00006-step-motor-basics
在这里插入图片描述
簡單的脈衝信號控制

在这里插入图片描述
步進電機經典應用:
在这里插入图片描述
掃描器(包括現在商務印表機裏面的掃描器)經常有一個動作,就是在真正掃描之前,掃描器要從滑軌一頭先快速運動到另一頭。其實那是系統在找位置零點。那裏面用的是一個步進電機,它驅動掃描器運動。但是開始執行掃描任務時,系統並不知道那個掃描器的確切位置(因爲沒有反饋裝置),所以它只能先驅動掃描器向滑軌另一邊走。在滑軌的那個盡頭,有一個觸碰開關,一旦掃描器碰到它,就會產生電信號。這樣系統就知道掃描器走到了盡頭,這時候就確定了掃描器的位置,這樣就可以開始掃描了。這個步進電機在執行完任務後會關閉(因爲功耗不低),因此一旦有震動什麼的,掃描器很容易移位。所以下一次步進電機上電以後,要重新執行一遍前面說的那個動作去確定掃描器的位置。

什麼是伺服電機

伺服電機的定義:
在这里插入图片描述
伺服電機的樣子和價格:
淘寶搜尋舵機顯示商品如下:(很顯然伺服電機要貴些,因爲精度高)

在这里插入图片描述
伺服電機工作原理:
伺服系統(servomechanism)是使物體的位置、方位、狀態等輸出被控量能夠跟隨輸入目標(或給定值)的任意變化的自動控制系統。伺服主要靠脈衝來定位,基本上可以這樣理解,伺服電機接收到1個脈衝,就會旋轉1個脈衝對應的角度,從而實現位移。
因爲,伺服電機本身具備發出脈衝的功能,所以伺服電機每旋轉一個角度,都會發出對應數量的脈衝,這樣,和伺服電機接受的脈衝形成了呼應,或者叫閉環,如此一來,系統就會知道發了多少脈衝給伺服電機,同時又收了多少脈衝回來,這樣,就能夠很精確的控制電機的轉動,從而實現精確的定位,可以達到0.001mm。
伺服電機典型應用:
https://www.ymgk.com/article/24539.html
這是一個數控機牀的,機械臂,控制進度能夠達到0.001mm。
在这里插入图片描述

總結歸納

在这里插入图片描述

END

越精密,越快的電機越複雜,我們這裏這是給大家在概念上做一個歸納比較,希望對大家有幫助
有幫助就收藏吧

第一課:什麼是樹莓派
第二課:基於樹莓派的10個經典專案
第三課:購買您的第一個樹莓派
第四課:如何安裝樹莓派系統
第五課:樹莓派C語言程式設計手冊
第六課:樹莓派led控制
第七課:樹莓派按鍵控制
第八課:樹莓派PWM(脈寬調製)
第九課:樹莓派數碼管顯示
第十課:樹莓派如何讀取溫溼度感測器(dht11)數據