STM32CubeMX——霍尔编码器、L298N驱动电机
前言
人生如逆旅,我亦是行人。 ————蘇軾《臨江仙·送錢穆父》
目錄:
一、L298N電機(jī)驅(qū)動(dòng)介紹
B站-視頻講解:l298n電機(jī)驅(qū)動(dòng)模塊 電機(jī)正反轉(zhuǎn) 電機(jī)調(diào)速
L298N是 ST 公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動(dòng)芯片。該芯片采用 15 腳封裝。主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá)46V;輸出電流大,瞬間峰值電流可達(dá) 3A,持續(xù)工作電流為 2A ;額定功率 25W。內(nèi)含兩個(gè)H橋的高電壓大電流全橋式驅(qū)動(dòng)器,可以用來(lái)驅(qū)動(dòng)直流電動(dòng)機(jī)和步進(jìn)電動(dòng)機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測(cè)電阻,將變化量反饋給控制電路。使用 L298N 芯片驅(qū)動(dòng)電機(jī),該芯片可以驅(qū)動(dòng)一臺(tái)兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動(dòng)兩臺(tái)直流電機(jī)。
-
作用與用途:
- 可實(shí)現(xiàn)電機(jī)正反轉(zhuǎn)及調(diào)速;
- 啟動(dòng)性能好,啟動(dòng)轉(zhuǎn)矩大;
- 工作電壓可達(dá)到 36V,4A;
- 可同時(shí)驅(qū)動(dòng)兩臺(tái)直流電機(jī);
- 適合應(yīng)用于機(jī)器人設(shè)計(jì)及智能小車的設(shè)計(jì);
下面為最常見的一款L298N芯片,值得注意的是,它已經(jīng)內(nèi)置的5V供電,所以不必從外面再接5V輸入。屆時(shí)5V端子將成為5V輸出,為了保證L298N供電的穩(wěn)定性(供電不足可能引起L298N的燒毀),不建議使用此5V供電作為單片機(jī)的電源。
接口介紹:
一、12V供電
理論上最高可以接入35v(沒試過(guò)最低和最高的電壓,此處是某寶賣家提供的參數(shù)),購(gòu)買直流電機(jī)前,先看清楚直流電機(jī)的相關(guān)參數(shù)和性能,如果滿足L298N的使用要求,再進(jìn)行購(gòu)買使用,否則容易燒毀L298N。
二、GND共地
顧名思義,接地線。但要注意的是,此處GND不但要接驅(qū)動(dòng)電源的GND,如果是和別的單片機(jī)或者其他系統(tǒng)連接在一起的時(shí)候,一定要從這里再引出一根GND和單片機(jī)或者系統(tǒng)的GND相連。即整個(gè)系統(tǒng)的GND連接在一起,如果不連接在一起,電壓沒有參考電平,無(wú)法進(jìn)行正常的控制。
三、5V供電
這是一個(gè)特殊的端口。既可以做L298N的邏輯電壓的輸入,也可以做外部單片機(jī)或系統(tǒng)的5v供電口。具體切換在板載5v跳帽中介紹。
四、板載5V跳帽
- 12v供電口接≥5V的電源電壓時(shí),板載5v跳帽不拔除,5v供電口有電壓輸出。數(shù)值具體大小自己用萬(wàn)用表測(cè),反正當(dāng)12v口接7.4v時(shí),5v供電口是輸出5v的。
- 12v供電口≤5v的電源電壓時(shí),板載5v跳帽需要拔除,因?yàn)長(zhǎng)298N需要邏輯驅(qū)動(dòng)電壓來(lái)驅(qū)動(dòng)板子。此時(shí)5v供電口就變成了L298N的邏輯電壓供電的輸入口。供電電壓在3.3v -5v之間。
五、通道AB使能跳帽
- 需要PWM控制就拔除,不需要PWM控制就不用拔除(老玩家就別管這句話了,就算不拔除也可以做到PWM調(diào)試的,應(yīng)該懂的都懂)。
- PWM控制對(duì)于電機(jī)而言表現(xiàn)出來(lái)現(xiàn)象的就是轉(zhuǎn)速控制,在Arduino里用analogWrite(Pin,Value)語(yǔ)句來(lái)實(shí)現(xiàn) [Pin(對(duì)應(yīng)的針腳),Value(0-255之間的整型數(shù)字)]
六、邏輯輸入
- IN1和IN2為一組,對(duì)應(yīng)OutA(輸出A);
- IN3和IN4為一組,對(duì)應(yīng)OutB(輸出B)。
七、輸出AB
直接接相應(yīng)的輸出即可。
-
注意事項(xiàng):
- 當(dāng)你的驅(qū)動(dòng)電壓(上圖標(biāo)識(shí)為12V輸入,實(shí)際可以接受的輸入范圍是7-12V)為7V-12V的時(shí)候,可以使能板載的5V邏輯供電,當(dāng)使用板載5V供電之后,接口中的+5V供電不要輸入電壓,但是可以引出5V電壓供外部使用。(這種即為常規(guī)應(yīng)用!)
- 當(dāng)驅(qū)動(dòng)電壓高于12V,小于等于24V(芯片手冊(cè)中提出可以支持到 35V ,但是按照經(jīng)驗(yàn)一般 L298N 保守應(yīng)用最大電壓支持到24V已經(jīng)很了不起!)時(shí),比如要驅(qū)動(dòng)額定電壓為 18V 的電機(jī)。首先必須拔除板載 5V 輸出使能的跳線帽。然后在 5V 輸出端口外部接入5V 使能即 一個(gè)電平為 5V 的控制信號(hào),當(dāng)此信號(hào)輸入有效時(shí),且電機(jī)驅(qū)動(dòng)模塊中電源供電正常時(shí),電機(jī)驅(qū)動(dòng)模塊輸出電流。否則即使電源供電正常,電機(jī)上也無(wú)電流。電壓對(duì)L298N內(nèi)部邏輯電路供電。(這種是高壓驅(qū)動(dòng)的非常規(guī)應(yīng)用!)
!!強(qiáng)調(diào)!!:L298N電機(jī)驅(qū)動(dòng)、STM32單片機(jī)、編碼器電機(jī)三者在使用過(guò)程中,一定要把三者的GND連接在一起,也就是共地!!!驅(qū)動(dòng)電壓可以接受的輸入范圍是7~12V,板子標(biāo)識(shí)為VCC輸入,一般都是使用航模電池或買電池盒。
-
原理圖:
-
L298N引腳:
- 情況一: 用L298N驅(qū)動(dòng)兩臺(tái)直流減速電機(jī)的電路。引腳A,B可用于PWM控制。如果機(jī)器人項(xiàng)目只要求直行前進(jìn),則可將IN1,IN2和IN3,IN4兩對(duì)引腳分別接高電平和低電平,僅用單片機(jī)的兩個(gè)端口給出PWM信號(hào)控制使能端A,B即可實(shí)現(xiàn)直行、轉(zhuǎn)彎、加減速等動(dòng)作。
- 情況二: 用L298實(shí)現(xiàn)二相步進(jìn)電機(jī)控制。將IN1,IN2和IN3,IN4兩對(duì)引腳分別接入單片機(jī)的某個(gè)端口,輸出連續(xù)的脈沖信號(hào)。信號(hào)頻率決定了電機(jī)的轉(zhuǎn)速。改變繞組脈沖信號(hào)的順序即可實(shí)現(xiàn)正反轉(zhuǎn)。
-
L298N 驅(qū)動(dòng) A/B 控制邏輯:
- IN1 和 IN2 為一組,對(duì)應(yīng) OutA(輸出A);
- IN3 和 IN4 為一組,對(duì)應(yīng) OutB(輸出B)。
| 1 | 1 | 0 | 前進(jìn)(順時(shí)針轉(zhuǎn)動(dòng)) |
| 1 | 0 | 1 | 后退(逆時(shí)針轉(zhuǎn)動(dòng)) |
| 1 | 1 | 1 | 緊急停車 |
| 1 | 0 | 0 | 緊急停車 |
| 0 | - | - | 停止(自由轉(zhuǎn)動(dòng)) |
二、編碼器介紹
B站-視頻介紹:【電工知識(shí)】編碼器是干什么用的,這下終于明白了!
編碼器(encoder)是將信號(hào)(如比特流)或數(shù)據(jù)進(jìn)行編制、轉(zhuǎn)換為可用以通訊、傳輸和存儲(chǔ)的信號(hào)形式的設(shè)備。編碼器可以把角位移或直線位移轉(zhuǎn)換成電信號(hào),是工業(yè)中常用的電機(jī)定位設(shè)備,可以精確地測(cè)試出電機(jī)的角位移和旋轉(zhuǎn)位置。其最直接的作用就是可以測(cè)量位移,通過(guò)位移就可以計(jì)算出速度。
簡(jiǎn)單的來(lái)說(shuō),學(xué)習(xí)電機(jī)上的編碼器,是為了能夠通過(guò)編碼器測(cè)出電機(jī)的轉(zhuǎn)速,從而能夠更好地控制電機(jī)進(jìn)行工作。
1.編碼器的種類
按輸出信號(hào)分:增量式和絕對(duì)式
增量式:就是每轉(zhuǎn)過(guò)單位的角度就發(fā)出一個(gè)脈沖信號(hào)。通常為A相、B相、Z相輸出,A相、B相為相互延遲1/4周期的脈沖輸出,根據(jù)延遲關(guān)系可以區(qū)別正反轉(zhuǎn),而且通過(guò)取A相、B相的上升和下降沿可以進(jìn)行2或4倍頻;Z相為單圈脈沖,即每圈發(fā)出一個(gè)脈沖。
絕對(duì)式:就是對(duì)應(yīng)一圈,每個(gè) 基準(zhǔn)的角度 發(fā)出 一個(gè)唯一與該角度對(duì)應(yīng)二進(jìn)制的數(shù)值,通過(guò)外部記圈器件可以進(jìn)行多個(gè)位置的記錄和測(cè)量。
- 絕對(duì)式編碼器由機(jī)械位置決定的每個(gè)位置是唯一的,它無(wú)需記憶,無(wú)需找參考點(diǎn),而且不用一直計(jì)數(shù),什么時(shí)候需要知道位置,什么時(shí)候就去讀取它的位置,從而大大提高了編碼器的抗干擾能力、數(shù)據(jù)可靠性提高。
區(qū)別在于:絕對(duì)式掉電不丟失讀取數(shù)值,增量式會(huì)丟失。
按傳感技術(shù)分:光電式和霍爾式(光式、磁式、電容式)
光電編碼器,是一種通過(guò)光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器。這是應(yīng)用最多的傳感器,由光源、光碼盤和光敏元件組成。
霍爾編碼器是一種通過(guò)磁電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器。 是由霍爾碼盤(磁環(huán))和霍爾元件組成。
光電式:當(dāng)光線穿過(guò)齒輪盤時(shí),接收器會(huì)計(jì)一次數(shù),并傳送給CPU。不同的轉(zhuǎn)速,自然在相同時(shí)間內(nèi)的計(jì)數(shù)值不一樣,進(jìn)而達(dá)到測(cè)速的功能。
霍爾式:霍爾碼盤是在一定直徑的圓板上等分地布置有不同的磁極。霍爾碼盤與電動(dòng)機(jī)同軸,電動(dòng)機(jī)旋轉(zhuǎn)時(shí),霍爾元件檢測(cè)輸出若干脈沖信號(hào),為判斷轉(zhuǎn)向,一般輸出兩組存在一定相位差的方波信號(hào) (通常相差90°,我們稱為AB相)。
測(cè)速可以通過(guò)計(jì)算相同時(shí)間內(nèi)的脈沖數(shù),判斷轉(zhuǎn)向:
可以看到下圖,當(dāng)順時(shí)針旋轉(zhuǎn)時(shí),A相處在下降沿時(shí),B相是高電平。A相處在上升沿時(shí),B相是低電平;當(dāng)逆時(shí)針旋轉(zhuǎn)時(shí),(即把上面的波形從右向左看)A相處在下降沿時(shí),B相是低電平。A相處在上升沿時(shí),B相是高電平。進(jìn)而判斷正反轉(zhuǎn)。
兩者的主要區(qū)別:
2. 霍爾編碼器實(shí)物圖接線
接線表:
| VCC | VCC(3.3V) | - |
| GND | GND | - |
| A相 | 接單片機(jī)的脈沖檢測(cè)接口 | 定時(shí)器編碼模式 |
| B相 | 接單片機(jī)的脈沖檢測(cè)接口 | 定時(shí)器編碼模式 |
| M+(電機(jī)線+) | 接電機(jī)驅(qū)動(dòng)的輸出OUT1 |
| M-(電機(jī)線-) | 接電機(jī)驅(qū)動(dòng)的輸出OUT2 |
3. 倍頻原理
我們通過(guò)軟件的方法實(shí)現(xiàn)四倍頻,首先可以看出圖中編碼器輸出的AB相波形,正常情況下我們使用M法測(cè)速的時(shí)候,會(huì)通過(guò)測(cè)量單位時(shí)間內(nèi)A相輸出的脈沖數(shù)來(lái)得到速度信息,常規(guī)的方法,我們只測(cè)量A相(或者B相)的上升沿或者下降沿,也就是圖中對(duì)應(yīng)數(shù)字1234中的某一個(gè),這樣就只能計(jì)數(shù)3次,而四倍頻的方法是測(cè)量A相和B相編碼器的上升沿和下降沿。 這樣在同樣的時(shí)間內(nèi),可以計(jì)數(shù)12次(3個(gè)1234的循環(huán))。這就是四倍頻的原理。
因?yàn)榫幋a器輸出的是標(biāo)準(zhǔn)的方波,所以我們可以直接用單片機(jī)進(jìn)行讀取,在軟件中的處理方法分兩種,自帶編碼器接口的單片機(jī)如STM32,可以直接使用硬件計(jì)數(shù),而沒有編碼器接口的單片機(jī)如51單片機(jī),可以通過(guò)外部中斷讀取,比如把編碼器A相輸出接到單片機(jī)的外部中斷輸入口,這樣就可以通過(guò)跳變沿觸發(fā)中斷,然后在對(duì)應(yīng)的中斷服務(wù)函數(shù)里面,通過(guò)B相電平來(lái)確定正反轉(zhuǎn)。如當(dāng)一個(gè)A相來(lái)一個(gè)跳變沿的時(shí)候,如果B相是高電平就認(rèn)為是正轉(zhuǎn),低電平就認(rèn)為是反轉(zhuǎn)。
三、電機(jī)介紹
電機(jī)(英文:Electric machinery,俗稱“馬達(dá)”)是指依據(jù)電磁感應(yīng)定律實(shí)現(xiàn)電能轉(zhuǎn)換或傳遞的一種電磁裝置。
電機(jī)在電路中是用字母M(舊標(biāo)準(zhǔn)用D)表示,它的主要作用是產(chǎn)生驅(qū)動(dòng)轉(zhuǎn)矩,作為用電器或各種機(jī)械的動(dòng)力源,發(fā)電機(jī)在電路中用字母G表示,它的主要作用是利用機(jī)械能轉(zhuǎn)化為電能。
我所使用的也是一種減速電機(jī),即電機(jī)頭部有一個(gè)減速器,電機(jī)轉(zhuǎn)動(dòng)帶動(dòng)減速器里的齒輪后再通過(guò)減速器的輸出軸輸出相應(yīng)的轉(zhuǎn)速。比如減速比是 1: 30,表示電機(jī)轉(zhuǎn)動(dòng) 30圈,電機(jī)的減速器轉(zhuǎn)動(dòng)一圈。
M法測(cè)速
- T0為自行設(shè)置的時(shí)間;
- M0為在設(shè)定時(shí)間內(nèi)的脈沖數(shù);
- C為單圈總脈沖數(shù)。(直流電機(jī)軸旋轉(zhuǎn)一圈 在霍爾傳感器每個(gè)引腳有 13個(gè)脈沖信號(hào) 輸出)
最終接線表:(只使用 IN1 和 IN2 這一組,對(duì)應(yīng) OutA(輸出A))
| 編碼器VCC(5V) | VCC(5V) |
| 編碼器GND | GND |
| 編碼器A相 | 定時(shí)器編碼器模式的通道(TIMx_CH1) |
| 編碼器B相 | 定時(shí)器編碼器模式的通道(TIMx_CH2) |
| M+(電機(jī)線+) | 接電機(jī)驅(qū)動(dòng)的輸出OUT1 |
| M-(電機(jī)線-) | 接電機(jī)驅(qū)動(dòng)的輸出OUT2 |
| GND | L298N的GND |
| 輸出IO口高電平 | IN1 |
| 輸出IO口低電平 | IN2 |
| PWM波產(chǎn)生通道(定時(shí)器PWM波產(chǎn)生通道) | 通道A使能端 |
| 負(fù)極(黑線) | L298N的GND(三個(gè)電源接入的最中間) |
| 正極(紅線) | L298N的12V接口(三個(gè)電源接入的左邊) |
四、新建工程
硬件:
- 芯片: STM32F103RBT6(正點(diǎn)原子NANO開發(fā)板)
- STM32CubeMX軟件
- IDE:MDK-Keil 軟件
- STM32F1xxHAL庫(kù)·
- 上述所介紹的:L298N電機(jī)驅(qū)動(dòng)模塊、帶有霍爾編碼編碼器的直流減速電機(jī)以及用來(lái)供電的 12V電池(紅線:正;黑線:負(fù))
1.打開STM32CubeMX軟件,點(diǎn)擊“新建工程”
2. 選擇 MCU 和封裝
3.配置時(shí)鐘
具體學(xué)習(xí)可以參考:博客網(wǎng)站-RCC學(xué)習(xí)
4.配置調(diào)試模式
5.串口(USART1)配置
6. 引腳(IO)配置
配置兩輸出IO引腳,作為輸出電機(jī)驅(qū)動(dòng)的IN1和IN2。
7. 定時(shí)器配置為PWM輸出模式
配置定時(shí)器1的通道1產(chǎn)生 PWM 波,用以連接 L298N 電機(jī)驅(qū)動(dòng)模塊的輸出A的使能輸入。(將跳線帽拔掉)
8. 定時(shí)器配置為編碼器模式(Encoder)
配置定時(shí)器2(TIM2)為編碼器模式(Encoder Mode),連接電機(jī)上面的編碼器的A相與B相。
分頻系數(shù)表示對(duì)計(jì)數(shù)值進(jìn)行分頻,編碼器模式默認(rèn)時(shí)四倍頻。
編碼器上的AB相應(yīng)該接編碼器模式對(duì)應(yīng)的引腳。 編碼器模式就相當(dāng)于一個(gè)專門計(jì)數(shù)的工具,當(dāng)編碼器的碼盤轉(zhuǎn)動(dòng)時(shí),A、B相輸出矩形波形脈沖,進(jìn)入PA0和PA1進(jìn)行計(jì)數(shù)(數(shù)脈沖)。
9. 定時(shí)器配置中斷函數(shù)
記得開啟定時(shí)器中斷,注:編碼器的更新中斷定時(shí)器最好要比10ms定時(shí)器的優(yōu)先級(jí)高,用來(lái)防止在更新中被打斷。
10.生成代碼
輸入項(xiàng)目名稱和路徑。(注:路徑中不允許出現(xiàn)中文。)
選擇應(yīng)用的IDE,開發(fā)環(huán)境MDK-ARM V5
每個(gè)外設(shè)生成獨(dú)立的 ’.c/.h’ 文件
- 不勾: 所有初始化代碼都生成在 main.c
- 勾選: 初始化代碼生成在對(duì)應(yīng)的外設(shè)文件。 如 GPIO 初始化代碼生成在 gpio.c 中。
點(diǎn)擊 GENERATE CODE 生成代碼
11.構(gòu)建工程
- DeBug的模式根據(jù)不同的芯片進(jìn)行選擇:
-
實(shí)物連接圖:
五、編寫代碼
- 在主函數(shù)main.c中添加代碼:
- 編寫中斷處理函數(shù)HAL_TIM_PeriodElapsedCallback();:
六、實(shí)驗(yàn)結(jié)果
完成上述過(guò)程,結(jié)果是電機(jī)會(huì)轉(zhuǎn)動(dòng)起來(lái),如果電機(jī)沒有轉(zhuǎn)動(dòng)起來(lái),可以通過(guò)檢查線路,或者會(huì)出現(xiàn)板子燒毀的情況,會(huì)其他的情況。如果板子仍可以正常工作且接線無(wú)誤,則考慮是不是L298N電機(jī)驅(qū)動(dòng)的問(wèn)題,可以通過(guò)使用萬(wàn)用表進(jìn)行測(cè)量OUT1和OUT2兩個(gè)引腳和GND之間是否有電壓差,如果測(cè)得電壓很小,則可能是驅(qū)動(dòng)燒壞。換了新的驅(qū)動(dòng)之后,測(cè)試有沒有用的時(shí)候,切記一定要記得L298N驅(qū)動(dòng)模塊與STM32單片機(jī)要共地。(同一個(gè)電位參考)
謝謝閱讀
總結(jié)
以上是生活随笔為你收集整理的STM32CubeMX——霍尔编码器、L298N驱动电机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [css] position的rela
- 下一篇: [vue] 你有使用做过vue与原生ap