樹莓派基礎(chǔ)實(shí)驗(yàn)34:L298N模塊驅(qū)動直流電機(jī)實(shí)驗(yàn)

一、介紹

??直流電機(jī)是一種將直流電能轉(zhuǎn)換為機(jī)械能的電動機(jī),因其良好的調(diào)速性能而在電力拖動中得到廣泛應(yīng)用,用于驅(qū)動各種設(shè)備,如電風(fēng)扇、遙控小車、電動車窗等,也非常適合作為機(jī)器人的行走機(jī)構(gòu)。

??L298N是ST公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動芯片,內(nèi)含兩個H橋的高電壓大電流全橋式驅(qū)動器,可以用來驅(qū)動直流電動機(jī)和步進(jìn)電動機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號控制;具有兩個使能控制端。該芯片可以驅(qū)動一臺兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動兩臺直流電機(jī)。

二、組件

★Raspberry Pi 3主板*1

★樹莓派電源*1

★L(fēng)298N模塊*1

★DC3V-6V直流減速電機(jī)TT馬達(dá)*1

★微型數(shù)字直流電壓表頭*1(可選)

★18650可充電鋰電池*2

★面包板*1(可選)

★40P軟排線*1

★跳線若干

三、實(shí)驗(yàn)原理

L298N模塊
直流減速電機(jī)TT馬達(dá)
直流電壓表頭
18650可充電鋰電池串聯(lián)組

(一)、L298N模塊

L298N模塊解析圖

L298N雙H橋直流電機(jī)驅(qū)動模塊的引腳可以歸納成電源、控制和輸出等三大類,下面是各類引腳的功能說明。

1.電壓類引腳

VCC輸入:L298N芯片的電源正極,范圍可以是5V ~ 35V,如果需從模塊內(nèi)取電給樹莓派供電,則其范圍為7V~35V。

GND:L298N芯片的電源地,使用的時(shí)候應(yīng)該把樹莓派的GND接到這里,即兩者需要共地,否則電機(jī)不轉(zhuǎn)。

+5V輸出:L298N芯片輸出的5V電源,可以給外部設(shè)備供電,但要求VCC輸入要達(dá)到7V以上。

2.控制類引腳

ENA、ENB:A、B通道的使能端,高電平有效,可以用PWM來實(shí)現(xiàn)調(diào)速,向使能端輸入不同占空比的PWM脈沖信號就可以控制電機(jī)的轉(zhuǎn)速。使用時(shí),可以接到樹莓派的GPIO上,實(shí)現(xiàn)用程序進(jìn)行控制。

INA、INB、INC、IND:INA、INB為A通道的控制輸入,INC、IND為B通道的控制輸入。

控制方式及直流電機(jī)狀態(tài)表如下:


控制方式及直流電機(jī)狀態(tài)表
3.輸出類引腳

OUTA、OUTB為A通道輸出,為直流電機(jī)等設(shè)備提供電源。

OUTC、OUTD為B通道輸出,為直流電機(jī)等設(shè)備提供電源。

控制直流電機(jī)的轉(zhuǎn)向和轉(zhuǎn)速實(shí)際是通過給控制類引腳設(shè)置不同的值來實(shí)現(xiàn)的

L298N模塊參數(shù)

(二)、直流減速電機(jī)

在了解直流電機(jī)工作原理之前,先復(fù)習(xí)一下高中幾個物理知識:
第一.左手定則


左手定則

通電導(dǎo)線處于磁場中時(shí),所受安培力 F (或運(yùn)動)的方向、磁感應(yīng)強(qiáng)度B的方向 以及通電導(dǎo)體棒的電流I三者方向之間的關(guān)系的定律。
簡而言之,讓磁感線穿過手掌正面,手指方向?yàn)殡娏鞣较?,大拇指方向?yàn)楫a(chǎn)生磁力的方向

第二.右手定則


右手定則

右手定則,是產(chǎn)生感生電動勢,也是發(fā)電機(jī)的原理
讓磁感線穿過掌心,大拇指方向?yàn)檫\(yùn)動方向,手指方向?yàn)楫a(chǎn)生的電動勢方向。

1.直流電機(jī)的原理
直流電機(jī)工作原理

直流電機(jī)里邊固定有環(huán)狀永磁體,電流通過轉(zhuǎn)子上的線圈產(chǎn)生安培力,當(dāng)轉(zhuǎn)子上的線圈與磁場平行時(shí),再繼續(xù)轉(zhuǎn)受到的磁場方向?qū)⒏淖儯虼舜藭r(shí)轉(zhuǎn)子末端的電刷跟轉(zhuǎn)換片交替接觸,從而線圈上的電流方向也改變,產(chǎn)生的洛倫茲力方向不變,所以電機(jī)能保持一個方向轉(zhuǎn)動。

2.直流電機(jī)的種類

2.1有刷電機(jī)
顧名思義,就是有刷子,主要作用就是讓中間的轉(zhuǎn)子與電源有電氣連接,還可以轉(zhuǎn)動。


有刷電機(jī)原理

為了讓兩者之間既有接觸,能導(dǎo)電;又有轉(zhuǎn)動,實(shí)現(xiàn)電流的變相,一般的常見做法是在碳刷加一個彈簧。這樣,換向器與碳刷便有了頻繁的摩擦。所以碳刷很容易磨損,必須經(jīng)常進(jìn)行更換。并且磨損掉的碳渣渣在電機(jī)里面形成了積碳,需要經(jīng)常清理。

早期電機(jī)都是有刷電機(jī),后來為了解決磨損,有了無刷電機(jī)。

2.2無刷電機(jī)
無刷電機(jī)中,換相的工作交由控制器中的控制電路(一般為霍爾傳感器+控制器,更先進(jìn)的技術(shù)是磁編碼器)來完成。

無刷電機(jī)原理

無刷電機(jī)采取電子換向,線圈不動,磁極旋轉(zhuǎn)。無刷電機(jī),是使用一套電子設(shè)備,通過霍爾元件,感知永磁體磁極的位置,根據(jù)這種感知,使用電子線路,適時(shí)切換線圈中電流的方向,保證產(chǎn)生正確方向的磁力,來驅(qū)動電機(jī)。消除了有刷電機(jī)的缺點(diǎn)。

2.3直流減速電機(jī)
一般直流電機(jī)的轉(zhuǎn)速都是一分鐘幾千上萬轉(zhuǎn)的,所以一般需要安裝減速器。減速器是一種相對精密的機(jī)械零件,使用它的目的是降低轉(zhuǎn)速,增加轉(zhuǎn)矩。減速后的直流電機(jī)力矩增大、可控性更強(qiáng)。按照傳動級數(shù)不同可分為單級和多級減速器;按照傳動類型可分為齒輪減速器、蝸桿減速器行星齒輪減速器

減速電機(jī)

齒輪減速器:體積較小,傳遞扭矩大,但是有一定的回程間隙。
蝸輪蝸桿減速機(jī):具有反向自鎖功能,可以有較大的減速比,但是一般體積較大,傳動效率不高,精度不高。
行星減速器:結(jié)構(gòu)比較緊湊,回程間隙小、精度較高,使用壽命很長,額定輸出扭矩可以做的很大,但價(jià)格略貴。

(三)、直流電壓表頭

用于監(jiān)視18650電池組電壓,及時(shí)掌握電池電壓狀態(tài),便于及時(shí)充電。也可用于手機(jī)鋰電池、鎳氫電池組和其它電池組的電壓,以及摩托車、汽車等電瓶的電壓,也可用于其它電壓測量用途。

1、本電壓表接線簡單,常規(guī)用兩根線,紅接正,黑接負(fù),內(nèi)有反接保護(hù),接反不燒。

2、常規(guī)無需外接工作電源,可以用測量電壓直接工作,測量電壓范圍二線2.4-30V。

3、寬電壓工作,紅色最低測量電壓2.4V,最大安全承壓可達(dá)40V ,超過40V可能損壞。

4、在測量10V以下電壓時(shí),小數(shù)點(diǎn)后顯示兩位;在測量10V以上電壓時(shí),小數(shù)點(diǎn)后顯示一位。

(四)、18650電池組

由于電動機(jī)需要的電流遠(yuǎn)遠(yuǎn)大于樹莓派GPIO的供電能力,所以必須使用外接電源,選用大容量的18650電池是個不錯的選擇,許多充電寶和電動車電池組都是使用的這個。

同時(shí),使用電動機(jī)的場景總是移動的情況,所以電池組可能還要給樹莓派供電。以前購買套裝時(shí)贈送的18650電池,每次充滿電,只堅(jiān)挺了10分鐘,而且電壓掉得非??臁_@里我選用的某寶SupFire/神火電池,負(fù)極加了保護(hù)芯片的AB5-S,39元1顆,充電器還另算錢。不過效果好多了,充滿電后串聯(lián)兩顆電池初始8.23V,一天一個電動機(jī)的實(shí)驗(yàn)做下來,還有7.6V。

SupFire18650電池參數(shù)

四、實(shí)驗(yàn)步驟

??第1步: 連接電路。

樹莓派(name) T型轉(zhuǎn)接板(BCM) L298N模塊
GPIO4 G23 INA
GPIO5 G24 INB
GPIO1 G18 EMA
GND GND GND
L298N模塊 電池組 電壓表頭 馬達(dá)
VCC + +
GND - -
OUTC +
OUTD -
L298N模塊驅(qū)動直流電機(jī)電路圖

這里必須說一下,上面的電路圖是使用電子設(shè)計(jì)自動化軟件Fritzing畫的,易學(xué)好用,但是必須要學(xué)習(xí)哈,光看是半天搞不懂滴!

特別是元件庫里找不到的電子元件,只能自己創(chuàng)建,就需要自己畫SVG圖(Scalable Vector Graphics,意思為可縮放的矢量圖形),這里我用的是Inkscape,一款外國開發(fā)的開源矢量圖形編輯軟件。畫圖中的一個重要經(jīng)驗(yàn)是:在Friting里找到并導(dǎo)出類似的元件SVG圖,然后在Inkscape里修改,最后又導(dǎo)入Friting里合成。

學(xué)會第一次雖慢,但是以后就難不倒你了,而且畫得很快!

Fritzing下載地址https://fritzing.org/download/
Inkscape下載地址https://inkscape.org/release/inkscape-1.0/

L298N模塊驅(qū)動直流電機(jī)實(shí)物接線圖

??第2步: 基礎(chǔ)實(shí)驗(yàn)里我只用L298N的B通道控制了一個電機(jī),控制命令也很粗糙,后面我會做智能小車的綜合實(shí)驗(yàn),會實(shí)現(xiàn)圖形界面控制和自動循跡。
??當(dāng)輸入r0 ~ r9,速度由0到快;當(dāng)輸入f0 ~ f9,反方向速度由0到快;當(dāng)輸入b時(shí),電機(jī)制動。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time

ENB = 18  #使能信號
INC = 23  #信號輸入1
IND = 24  #信號輸入2

GPIO.setwarnings(False)  #關(guān)閉警告信息

def setup(enable_pin,in1_pin,in2_pin):
    '''初始化引腳'''
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(enable_pin, GPIO.OUT)
    GPIO.setup(in1_pin, GPIO.OUT)
    GPIO.setup(in2_pin, GPIO.OUT)
    
def pwm(enable_pin): 
    '''初始化PWM(脈寬調(diào)制)'''   
    pwm = GPIO.PWM(enable_pin, 500)
    pwm.start(0)
    return pwm

def changespeed(pwm,speed):
    '''通過改變占空比改變馬達(dá)轉(zhuǎn)速'''
    pwm.ChangeDutyCycle(speed)
    
def clockwise(in1_pin,in2_pin):
    '''馬達(dá)順時(shí)針轉(zhuǎn)的信號'''
    GPIO.output(in1_pin, 1)    
    GPIO.output(in2_pin, 0)
 
def counter_clockwise(in1_pin,in2_pin):
    '''馬達(dá)逆時(shí)針轉(zhuǎn)的信號'''
    GPIO.output(in1_pin, 0)
    GPIO.output(in2_pin, 1)
    
def brake(pwm,in1_pin,in2_pin):
    '''馬達(dá)制動的信號'''
    GPIO.output(in1_pin, 0)
    GPIO.output(in2_pin, 0)
    changespeed(pwm,100) 
    #使能信號為高電平,IN1和IN2都為0或1時(shí)馬達(dá)制動

def loop():
    while True:
        '''通過輸入的命令改變馬達(dá)轉(zhuǎn)動'''
        cmd = input("Command, f/r/b 0..9, E.g. f5 :")
        direction = cmd[0]
        if direction == "f":
            clockwise(INC,IND)
        if direction == "r":
            counter_clockwise(INC,IND)
        if direction == "b": #剎車制動,
            brake(ENB_pwm,INC,IND)
            continue
            
        speed = int(cmd[1]) * 10 #通過輸入0~9的數(shù)字更改占空比0~90%
        changespeed(ENB_pwm,speed)

def destroy():
    ENB_pwm.stop()
    GPIO.cleanup()                     # Release resource

if __name__ == '__main__':     # Program start from here
    
    try:
        setup(ENB,INC,IND) #初始化引腳
        ENB_pwm=pwm(ENB)   #初始化PWM
        loop()
    except KeyboardInterrupt:  # When 'Ctrl+C' is pressed
        destroy()
    finally:
        destroy()

??實(shí)驗(yàn)結(jié)果示例:

命令輸入示例
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容