日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32CubeMX——霍尔编码器、L298N驱动电机

發(fā)布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32CubeMX——霍尔编码器、L298N驱动电机 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

人生如逆旅,我亦是行人。 ————蘇軾《臨江仙·送錢穆父》


目錄:

  • L298N電機(jī)驅(qū)動介紹
  • 編碼器介紹
  • 電機(jī)介紹
  • 新建工程
  • 編寫代碼
  • 實(shí)驗(yàn)結(jié)果

  • 一、L298N電機(jī)驅(qū)動介紹

    B站-視頻講解:l298n電機(jī)驅(qū)動模塊 電機(jī)正反轉(zhuǎn) 電機(jī)調(diào)速

    L298N是 ST 公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動芯片。該芯片采用 15 腳封裝。主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá)46V;輸出電流大,瞬間峰值電流可達(dá) 3A,持續(xù)工作電流為 2A ;額定功率 25W。內(nèi)含兩個H橋的高電壓大電流全橋式驅(qū)動器,可以用來驅(qū)動直流電動機(jī)和步進(jìn)電動機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影響的情況下允許或禁止器件工作有一個邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用 L298N 芯片驅(qū)動電機(jī),該芯片可以驅(qū)動一臺兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動兩臺直流電機(jī)。

    • 作用與用途:

    • 可實(shí)現(xiàn)電機(jī)正反轉(zhuǎn)及調(diào)速;
    • 啟動性能好,啟動轉(zhuǎn)矩大;
    • 工作電壓可達(dá)到 36V,4A;
    • 可同時驅(qū)動兩臺直流電機(jī);
    • 適合應(yīng)用于機(jī)器人設(shè)計及智能小車的設(shè)計;

    下面為最常見的一款L298N芯片,值得注意的是,它已經(jīng)內(nèi)置的5V供電,所以不必從外面再接5V輸入。屆時5V端子將成為5V輸出,為了保證L298N供電的穩(wěn)定性(供電不足可能引起L298N的燒毀),不建議使用此5V供電作為單片機(jī)的電源。

    接口介紹:

    一、12V供電

    理論上最高可以接入35v(沒試過最低和最高的電壓,此處是某寶賣家提供的參數(shù)),購買直流電機(jī)前,先看清楚直流電機(jī)的相關(guān)參數(shù)和性能,如果滿足L298N的使用要求,再進(jìn)行購買使用,否則容易燒毀L298N。

    二、GND共地

    顧名思義,接地線。但要注意的是,此處GND不但要接驅(qū)動電源的GND,如果是和別的單片機(jī)或者其他系統(tǒng)連接在一起的時候,一定要從這里再引出一根GND和單片機(jī)或者系統(tǒng)的GND相連。即整個系統(tǒng)的GND連接在一起,如果不連接在一起,電壓沒有參考電平,無法進(jìn)行正常的控制。

    三、5V供電

    這是一個特殊的端口。既可以做L298N的邏輯電壓的輸入,也可以做外部單片機(jī)或系統(tǒng)的5v供電口。具體切換在板載5v跳帽中介紹。

    四、板載5V跳帽

    • 12v供電口接≥5V的電源電壓時,板載5v跳帽不拔除,5v供電口有電壓輸出。數(shù)值具體大小自己用萬用表測,反正當(dāng)12v口接7.4v時,5v供電口是輸出5v的。
    • 12v供電口≤5v的電源電壓時,板載5v跳帽需要拔除,因?yàn)長298N需要邏輯驅(qū)動電壓來驅(qū)動板子。此時5v供電口就變成了L298N的邏輯電壓供電的輸入口。供電電壓在3.3v -5v之間。

    五、通道AB使能跳帽

    • 需要PWM控制就拔除,不需要PWM控制就不用拔除(老玩家就別管這句話了,就算不拔除也可以做到PWM調(diào)試的,應(yīng)該懂的都懂)。
    • PWM控制對于電機(jī)而言表現(xiàn)出來現(xiàn)象的就是轉(zhuǎn)速控制,在Arduino里用analogWrite(Pin,Value)語句來實(shí)現(xiàn) [Pin(對應(yīng)的針腳),Value(0-255之間的整型數(shù)字)]

    六、邏輯輸入

    • IN1和IN2為一組,對應(yīng)OutA(輸出A);
    • IN3和IN4為一組,對應(yīng)OutB(輸出B)。

    七、輸出AB

    直接接相應(yīng)的輸出即可。

    • 注意事項(xiàng):

    • 當(dāng)你的驅(qū)動電壓(上圖標(biāo)識為12V輸入,實(shí)際可以接受的輸入范圍是7-12V)為7V-12V的時候,可以使能板載的5V邏輯供電,當(dāng)使用板載5V供電之后,接口中的+5V供電不要輸入電壓,但是可以引出5V電壓供外部使用。(這種即為常規(guī)應(yīng)用!)
    • 當(dāng)驅(qū)動電壓高于12V,小于等于24V(芯片手冊中提出可以支持到 35V ,但是按照經(jīng)驗(yàn)一般 L298N 保守應(yīng)用最大電壓支持到24V已經(jīng)很了不起!)時,比如要驅(qū)動額定電壓為 18V 的電機(jī)。首先必須拔除板載 5V 輸出使能的跳線帽。然后在 5V 輸出端口外部接入5V 使能即 一個電平為 5V 的控制信號,當(dāng)此信號輸入有效時,且電機(jī)驅(qū)動模塊中電源供電正常時,電機(jī)驅(qū)動模塊輸出電流。否則即使電源供電正常,電機(jī)上也無電流。電壓對L298N內(nèi)部邏輯電路供電。(這種是高壓驅(qū)動的非常規(guī)應(yīng)用!)

    !!強(qiáng)調(diào)!!:L298N電機(jī)驅(qū)動、STM32單片機(jī)、編碼器電機(jī)三者在使用過程中,一定要把三者的GND連接在一起,也就是共地!!!驅(qū)動電壓可以接受的輸入范圍是7~12V,板子標(biāo)識為VCC輸入,一般都是使用航模電池或買電池盒。

    • 原理圖:

    • L298N引腳:

    • 情況一: 用L298N驅(qū)動兩臺直流減速電機(jī)的電路。引腳A,B可用于PWM控制。如果機(jī)器人項(xiàng)目只要求直行前進(jìn),則可將IN1,IN2和IN3,IN4兩對引腳分別接高電平和低電平,僅用單片機(jī)的兩個端口給出PWM信號控制使能端A,B即可實(shí)現(xiàn)直行、轉(zhuǎn)彎、加減速等動作。
    • 情況二: 用L298實(shí)現(xiàn)二相步進(jìn)電機(jī)控制。將IN1,IN2和IN3,IN4兩對引腳分別接入單片機(jī)的某個端口,輸出連續(xù)的脈沖信號。信號頻率決定了電機(jī)的轉(zhuǎn)速。改變繞組脈沖信號的順序即可實(shí)現(xiàn)正反轉(zhuǎn)。


    • L298N 驅(qū)動 A/B 控制邏輯:

    • IN1 和 IN2 為一組,對應(yīng) OutA(輸出A);
    • IN3 和 IN4 為一組,對應(yīng) OutB(輸出B)。
    使能端 A/B輸入引腳 1/3輸入引腳 2/4電機(jī)運(yùn)動方式
    110前進(jìn)(順時針轉(zhuǎn)動)
    101后退(逆時針轉(zhuǎn)動)
    111緊急停車
    100緊急停車
    0--停止(自由轉(zhuǎn)動)

    二、編碼器介紹

    B站-視頻介紹:【電工知識】編碼器是干什么用的,這下終于明白了!

    編碼器(encoder)是將信號(如比特流)或數(shù)據(jù)進(jìn)行編制、轉(zhuǎn)換為可用以通訊、傳輸和存儲的信號形式的設(shè)備。編碼器可以把角位移或直線位移轉(zhuǎn)換成電信號,是工業(yè)中常用的電機(jī)定位設(shè)備,可以精確地測試出電機(jī)的角位移和旋轉(zhuǎn)位置。其最直接的作用就是可以測量位移,通過位移就可以計算出速度。

    簡單的來說,學(xué)習(xí)電機(jī)上的編碼器,是為了能夠通過編碼器測出電機(jī)的轉(zhuǎn)速,從而能夠更好地控制電機(jī)進(jìn)行工作。


    1.編碼器的種類


    按輸出信號分:增量式和絕對式

    增量式:就是每轉(zhuǎn)過單位的角度就發(fā)出一個脈沖信號。通常為A相、B相、Z相輸出,A相、B相為相互延遲1/4周期的脈沖輸出,根據(jù)延遲關(guān)系可以區(qū)別正反轉(zhuǎn),而且通過取A相、B相的上升和下降沿可以進(jìn)行2或4倍頻;Z相為單圈脈沖,即每圈發(fā)出一個脈沖。
    絕對式:就是對應(yīng)一圈,每個 基準(zhǔn)的角度 發(fā)出 一個唯一與該角度對應(yīng)二進(jìn)制的數(shù)值,通過外部記圈器件可以進(jìn)行多個位置的記錄和測量。

    • 絕對式編碼器由機(jī)械位置決定的每個位置是唯一的,它無需記憶,無需找參考點(diǎn),而且不用一直計數(shù),什么時候需要知道位置,什么時候就去讀取它的位置,從而大大提高了編碼器的抗干擾能力、數(shù)據(jù)可靠性提高。

    區(qū)別在于:絕對式掉電不丟失讀取數(shù)值,增量式會丟失。


    按傳感技術(shù)分:光電式和霍爾式(光式、磁式、電容式)

    光電編碼器,是一種通過光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器。這是應(yīng)用最多的傳感器,由光源、光碼盤和光敏元件組成。
    霍爾編碼器是一種通過磁電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器。 是由霍爾碼盤(磁環(huán))和霍爾元件組成。

  • 光電式:當(dāng)光線穿過齒輪盤時,接收器會計一次數(shù),并傳送給CPU。不同的轉(zhuǎn)速,自然在相同時間內(nèi)的計數(shù)值不一樣,進(jìn)而達(dá)到測速的功能。

  • 霍爾式:霍爾碼盤是在一定直徑的圓板上等分地布置有不同的磁極。霍爾碼盤與電動機(jī)同軸,電動機(jī)旋轉(zhuǎn)時,霍爾元件檢測輸出若干脈沖信號,為判斷轉(zhuǎn)向,一般輸出兩組存在一定相位差的方波信號 (通常相差90°,我們稱為AB相)。

    測速可以通過計算相同時間內(nèi)的脈沖數(shù),判斷轉(zhuǎn)向:
    可以看到下圖,當(dāng)順時針旋轉(zhuǎn)時,A相處在下降沿時,B相是高電平。A相處在上升沿時,B相是低電平;當(dāng)逆時針旋轉(zhuǎn)時,(即把上面的波形從右向左看)A相處在下降沿時,B相是低電平。A相處在上升沿時,B相是高電平。進(jìn)而判斷正反轉(zhuǎn)。

  • 兩者的主要區(qū)別:

  • 檢測方式不同:霍爾編碼器是電磁檢測位置,光電編碼器是光電檢測位置
  • 精度不同:霍爾編碼器一般是精度不高,用作粗略的位置反饋,而光電編碼器精度高,可以實(shí)現(xiàn)高精度的位置檢測

  • 2. 霍爾編碼器實(shí)物圖接線


    接線表:

    霍爾編碼器的接口STM32單片機(jī)的IO口設(shè)置的工作模式
    VCCVCC(3.3V)-
    GNDGND-
    A相接單片機(jī)的脈沖檢測接口定時器編碼模式
    B相接單片機(jī)的脈沖檢測接口定時器編碼模式
    霍爾編碼器的接口L298N電機(jī)驅(qū)動的接口
    M+(電機(jī)線+)接電機(jī)驅(qū)動的輸出OUT1
    M-(電機(jī)線-)接電機(jī)驅(qū)動的輸出OUT2

    3. 倍頻原理

    我們通過軟件的方法實(shí)現(xiàn)四倍頻,首先可以看出圖中編碼器輸出的AB相波形,正常情況下我們使用M法測速的時候,會通過測量單位時間內(nèi)A相輸出的脈沖數(shù)來得到速度信息,常規(guī)的方法,我們只測量A相(或者B相)的上升沿或者下降沿,也就是圖中對應(yīng)數(shù)字1234中的某一個,這樣就只能計數(shù)3次,而四倍頻的方法是測量A相和B相編碼器的上升沿和下降沿。 這樣在同樣的時間內(nèi),可以計數(shù)12次(3個1234的循環(huán))。這就是四倍頻的原理。
    因?yàn)榫幋a器輸出的是標(biāo)準(zhǔn)的方波,所以我們可以直接用單片機(jī)進(jìn)行讀取,在軟件中的處理方法分兩種,自帶編碼器接口的單片機(jī)如STM32,可以直接使用硬件計數(shù),而沒有編碼器接口的單片機(jī)如51單片機(jī),可以通過外部中斷讀取,比如把編碼器A相輸出接到單片機(jī)的外部中斷輸入口,這樣就可以通過跳變沿觸發(fā)中斷,然后在對應(yīng)的中斷服務(wù)函數(shù)里面,通過B相電平來確定正反轉(zhuǎn)。如當(dāng)一個A相來一個跳變沿的時候,如果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ū)動轉(zhuǎn)矩,作為用電器或各種機(jī)械的動力源,發(fā)電機(jī)在電路中用字母G表示,它的主要作用是利用機(jī)械能轉(zhuǎn)化為電能。

    我所使用的也是一種減速電機(jī),即電機(jī)頭部有一個減速器,電機(jī)轉(zhuǎn)動帶動減速器里的齒輪后再通過減速器的輸出軸輸出相應(yīng)的轉(zhuǎn)速。比如減速比是 1: 30,表示電機(jī)轉(zhuǎn)動 30圈,電機(jī)的減速器轉(zhuǎn)動一圈

    M法測速

    • T0為自行設(shè)置的時間;
    • M0為在設(shè)定時間內(nèi)的脈沖數(shù);
    • C為單圈總脈沖數(shù)。(直流電機(jī)軸旋轉(zhuǎn)一圈 在霍爾傳感器每個引腳有 13個脈沖信號 輸出)

    最終接線表:(只使用 IN1 和 IN2 這一組,對應(yīng) OutA(輸出A))

    霍爾編碼器的接口STM32單片機(jī)的IO口
    編碼器VCC(5V)VCC(5V)
    編碼器GNDGND
    編碼器A相定時器編碼器模式的通道(TIMx_CH1)
    編碼器B相定時器編碼器模式的通道(TIMx_CH2)
    霍爾編碼器的接口L298N電機(jī)驅(qū)動的接口
    M+(電機(jī)線+)接電機(jī)驅(qū)動的輸出OUT1
    M-(電機(jī)線-)接電機(jī)驅(qū)動的輸出OUT2
    STM32單片機(jī)的IO口L298N電機(jī)驅(qū)動
    GNDL298N的GND
    輸出IO口高電平IN1
    輸出IO口低電平IN2
    PWM波產(chǎn)生通道(定時器PWM波產(chǎn)生通道)通道A使能端
    12V供電電池L298N電機(jī)驅(qū)動
    負(fù)極(黑線)L298N的GND(三個電源接入的最中間)
    正極(紅線)L298N的12V接口(三個電源接入的左邊)

    四、新建工程


    硬件:

    • 芯片: STM32F103RBT6(正點(diǎn)原子NANO開發(fā)板)
    • STM32CubeMX軟件
    • IDE:MDK-Keil 軟件
    • STM32F1xxHAL庫·
    • 上述所介紹的:L298N電機(jī)驅(qū)動模塊、帶有霍爾編碼編碼器的直流減速電機(jī)以及用來供電的 12V電池紅線:正;黑線:負(fù)

    1.打開STM32CubeMX軟件,點(diǎn)擊“新建工程”

    2. 選擇 MCU 和封裝

    3.配置時鐘



    具體學(xué)習(xí)可以參考:博客網(wǎng)站-RCC學(xué)習(xí)

    4.配置調(diào)試模式

    5.串口(USART1)配置

    6. 引腳(IO)配置

    配置兩輸出IO引腳,作為輸出電機(jī)驅(qū)動的IN1和IN2。

    7. 定時器配置為PWM輸出模式

    配置定時器1的通道1產(chǎn)生 PWM 波,用以連接 L298N 電機(jī)驅(qū)動模塊的輸出A的使能輸入。(將跳線帽拔掉

    8. 定時器配置為編碼器模式(Encoder)

    配置定時器2(TIM2)為編碼器模式(Encoder Mode),連接電機(jī)上面的編碼器的A相與B相。

    分頻系數(shù)表示對計數(shù)值進(jìn)行分頻,編碼器模式默認(rèn)時四倍頻。

    編碼器上的AB相應(yīng)該接編碼器模式對應(yīng)的引腳。 編碼器模式就相當(dāng)于一個專門計數(shù)的工具,當(dāng)編碼器的碼盤轉(zhuǎn)動時,A、B相輸出矩形波形脈沖,進(jìn)入PA0和PA1進(jìn)行計數(shù)(數(shù)脈沖)。

    9. 定時器配置中斷函數(shù)


    記得開啟定時器中斷,注:編碼器的更新中斷定時器最好要比10ms定時器的優(yōu)先級高,用來防止在更新中被打斷。

    10.生成代碼

    輸入項(xiàng)目名稱和路徑。(注:路徑中不允許出現(xiàn)中文。)

    選擇應(yīng)用的IDE,開發(fā)環(huán)境MDK-ARM V5

    每個外設(shè)生成獨(dú)立的 ’.c/.h’ 文件

    • 不勾: 所有初始化代碼都生成在 main.c
    • 勾選: 初始化代碼生成在對應(yīng)的外設(shè)文件。 如 GPIO 初始化代碼生成在 gpio.c 中。

      點(diǎn)擊 GENERATE CODE 生成代碼

    11.構(gòu)建工程

    • DeBug的模式根據(jù)不同的芯片進(jìn)行選擇:

    • 實(shí)物連接圖:



    五、編寫代碼

    • 在主函數(shù)main.c中添加代碼:
    /* USER CODE END 0 *//*** @brief The application entry point.* @retval int*/ int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();MX_TIM2_Init();MX_TIM3_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim3); //開啟10ms中斷HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //開啟PWMHAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_1); //開啟編碼器定時器HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_2); //開啟編碼器定時器__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE); //開啟編碼器定時器更新中斷,防溢出處理__HAL_TIM_SET_COUNTER(&htim2, 30000); //將編碼器定時器初始值設(shè)定為30000/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */ }
    • 編寫中斷處理函數(shù)HAL_TIM_PeriodElapsedCallback();:
    //中斷處理函數(shù) void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if(htim->Instance == TIM3){__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,20000);} }

    六、實(shí)驗(yàn)結(jié)果

    完成上述過程,結(jié)果是電機(jī)會轉(zhuǎn)動起來,如果電機(jī)沒有轉(zhuǎn)動起來,可以通過檢查線路,或者會出現(xiàn)板子燒毀的情況,會其他的情況。如果板子仍可以正常工作且接線無誤,則考慮是不是L298N電機(jī)驅(qū)動的問題,可以通過使用萬用表進(jìn)行測量OUT1和OUT2兩個引腳和GND之間是否有電壓差,如果測得電壓很小,則可能是驅(qū)動燒壞。換了新的驅(qū)動之后,測試有沒有用的時候,切記一定要記得L298N驅(qū)動模塊與STM32單片機(jī)要共地。(同一個電位參考)


    謝謝閱讀

    總結(jié)

    以上是生活随笔為你收集整理的STM32CubeMX——霍尔编码器、L298N驱动电机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。