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