L298MotorDriver

AmebaMotors 介紹
使用 L298N 模組控制直流馬達
重要參考1
重要參考2

材料準備

  • Aduino uno x 1
  • L298N H-Bridge x 1
  • 2輪車(含萬向輪)

L298N控制板用來控制馬達的模組,它可以驅動2個DC馬達。
這個範例將L298N用於2個DC馬達,所以材料上使用2輪車
4輪車套件通常含有以下內容:

  • 2個DC馬達
  • 2個輪子
  • 車體

價錢可能會因為一些額外的模組而有不同,有些會多加電池盒、藍芽模組、超音波測距模組、紅外線測距模組……。
建議寫程式並測試完馬達運作之後,再將車子組裝起來。

材料說明

  • DC馬達
    一般的DC馬達使用兩根線控制正反轉。如下圖,當我們將L接GND,R接3V3,馬達就會開始轉動,將L接3V3,R接GND,馬達就會反轉。如果將3V3改成5V就可以得到更高的轉速。馬達可以承受的電流要參考馬達的規格。

    一般買到的小車套件都已經為馬達包裝成適合加上輪子,我們可以測試一下它的轉向,底下是常見的包裝,中間有凸起來的地方代表這面裝輪子:
  • L298N H-Bridge(本範例不適用於含有74HC00邏輯閘的L298控制板)
    L298with74HC00控制板只要輸入四腳即可
    本範例適用沒有74HC00邏輯閘的L298控制板
    本範例不適用含有74HC00邏輯閘的L298控制板


    L298N模組在市面上可以看到不同包裝,但一般都會有底下這些pin
    • +12V: L298N的板子供電,不同模組可以接受的電壓不同,常見的range有+6V~+12V, +5V~+12V, +7V~+12V, >=+12V
    • GND: 接電源的GND
    • +5V: 如果L298N供電的部份大於+7V,那麼+5V的地方可以再供電給其它板子。+12V上面有個jumper,Jumper接上才有提供+5V。
    • OUT1, OUT2: 用來輸出並控制第一組馬達。它的接點使用螺絲,一般最多接兩條線,所以可以一次控制兩個馬達。(但要注意螺絲是否有鎖緊,或是有接觸不良的情況)
    • OUT3, OUT4: 用來輸出並控制第二組馬達
    • ENA, IN1, IN2: 接受輸入訊號來控制OUT1與OUT2
      • ENA用來控制第二組馬達轉速,一般會用PWM來控制。如果不需要控制轉速可以用jumper接到5V。
      • IN1與IN2控制第一組馬達正反轉:
        IN1 IN2 OUT1 OUT2
        LOW LOW LOW LOW
        HIGH LOW HIGH LOW
        LOW HIGH LOW HIGH

        底下這張表說明使用 IN1 與 IN2 控制 Motor A 的方法,Motor B 的控制邏輯也是一樣的,只是要改用 IN3 和 IN4 來控制。

        ENA(B) IN1(3) IN2(4)  OUT1  OUT2 若馬達異向則導線對調
        HIGH HIGH LOW  HIGH LOW  馬達正轉
        HIGH LOW HIGH  LOW  HIGH 馬達反轉
        HIGH IN1(3)=IN2(4) IN1(3)=IN2(4)  LOW  LOW 馬達快速停止
        LOW ingored ignored  LOW  LOW 馬達慢速停止
    • ENB, IN3, IN4: 接受輸入訊號來控制OUT3與OUT4
      • ENB用來控制第二組馬達轉速,一般會用PWM來控制。如果不需要控制轉速可以用jumper接到5V。
      • IN3與IN4控制第一組馬達正反轉:
        IN3 IN4 OUT1 OUT2
        LOW LOW LOW LOW
        HIGH LOW HIGH LOW
        LOW HIGH LOW HIGH

範例說明

這個範例會讓小車自己跑基本動作
打開範例 “Files” -> “Examples” -> “AmebaMotors” -> “car2wd_digit_control”。(如果沒看到範例,請參考前面的步驟確定library已安裝)
範例裡使用這幾根PIN:
ENA IN1 IN2 IN3 IN4 ENB
8 9 10 11 5 6

並且接線如下圖:

注意事項:

  • 這邊我們將Ameba的5V接到L298N的+12V供電的地方,但並不是每個L298N模組都可以使用5V供電。如果不行的話,請使用其它電源(Ex. +12V)供電給L298N的+12V接腳,再用L298N的+5V供電給Ameba
  • 馬達的接法可能會左右相反,可以在跑完測試程式之後再決定是否要交換。(建議在測試完之前不要組裝車子)
  • 為了接線方便,可以考慮花點時間將馬達的接線整理成杜邦線接頭。L298N的螺絲接頭也可以整理成杜邦線接頭。

接線完之後,在每次需要改動程式時,可以先將L298N的電源拔掉,避免馬達不預期地亂跑。然後再將Ameba接上電源。上傳完程式並確定開始測試時再將L298N的電源插上。
這裡我們將範例程式 car2wd_digital_control 編譯並上傳到Ameba。
這個程式會讓車子做以下的動作:
向前跑一秒→往後退一秒→原地順時鐘旋轉三秒→原地逆時鐘旋轉三秒→前進左拐半秒再右彎半秒→之後停止一秒,然後從頭依序循環測試永不停止……
底下是車子動作的控制說明:

  • 車子速度:ENA與ENB我們用PWM控制,頻率設定在200 (resolution=256)
  • 往前跑:
    IN1 IN2 IN3 IN4
    HIGH LOW HIGH LOW
  • 往後跑:
    IN1 IN2 IN3 IN4
    LOW HIGH LOW HIGH
  • 向右順時鐘旋轉:我們讓左邊的馬達往前跑,右邊的馬達往後跑:
    IN1 IN2 IN3 IN4
    HIGH LOW LOW HIGH
  • 向左逆時鐘旋轉:我們讓右邊的馬達往前跑,左邊的馬達往後跑:
    IN1 IN2 IN3 IN4
    LOW HIGH HIGH LOW
  • 前進右轉:完成這個動作的方式有兩種。
    • 第一種是讓兩邊的馬達轉速不同,但是市售的小車套件的輪胎可能抓地力不好,所以即使兩邊轉速不同,車子也可能直直往前跑
    • 第二種方式是讓右邊的馬達跑一下、停一下。因為這種方式適用於大多數的輪胎,所以我們使用這種方式。
      我們先將馬達設定成往前跑的模樣:
      IN1 IN2 IN3 IN4
      HIGH LOW HIGH LOW

      然後再將IN3設定成LOW,並維持80ms。然後再設定成HIGH,維持20ms。再設定成LOW,維持80ms……
      前進左轉、後退左轉、後退右轉,都使用同樣的方式。

  • 物件導向運用CltMotor程式庫對兩輪自走車進行狀態機的循環測試程式碼(列表如下:)
  • CltMotorStateMachine.ino 程式碼


測試完,如果反應正確,就可以組裝車子了。除了小車套件的零件固定完之外,一些細節可以使用像皮筋做固定。
底下是我們demo的影片:

Comments