2013年5月6日 星期一

[ 認識與使用 Gertboard ] 第四部曲 - 馬達驅動控制器 ( Motor Controller )

學習樹莓派週邊不容錯過的學習利器 "Assembled Gertboard (Rev2.0)",心動不如馬上行動!!露天賣場:

Assembed Gertboard (Rev2.0) - 利用 Raspberry Pi (樹莓派) 學習與開發電子 (週邊) 的最佳拍檔

PiGertboard 套件 (A) - Raspberry Pi (樹莓派) Gertboard 嵌入式套件

PiGertboard 套件 (B) - Raspberry Pi (樹莓派) Gertboard 外接式套件

Gertboard - Motor Controller ( 粉紅色框線 ),source: Gertboard User Manual (Rev 2.0)
GertBoard 使用 ROHM BD6222HFP 做為馬達驅動控制器,可以驅動最大電壓 DC 18V 電流 2A 的直流有刷馬達。晶片 ( 如下圖 ) 有兩支接腳 MOTOR_AMOTOR_B 可以輸入高或低準位控制直流馬達轉動方向,並且可以在單一接腳輸入 PWM 訊號對馬達進行轉速的控制,這兩支接腳位於電路板中間偏右下的位置,標示名稱是 J5,接腳名稱為 MOTAMOTB
Gertboard - Open Collector Driver 電路圖,source: Assembled Gertboard Schematics
[5] 馬達驅動控制器 ( Motor Controller )

馬達控制器內建溫度保護電路 (TSD)、過電流保護電路 (OCP)、過電壓保護電路 (OVP)、防止低電壓誤動作電路 (UVLO) 等保護電路,因此能在各種條件下對驅動IC或負載提供保護,達到裝置的高可靠性。電流由 GertBoard 提供 2A 的保險絲保護。

GertBoard 控制直流有刷馬達是利用 J5MOTAMOTB 兩個接腳,對這兩支接腳輸入高、低準位或是 PWM 訊號會有不同的變化,不但可以控制轉向也可以控制轉速,如下表所示:
Gertboart - 直流有刷馬達驅動控制邏輯表,source: ROHM BD6222HFP Datasheet
表上的 FINRIN 分別代表 J5MOTAMOTB,VCC = VREF。


直流有刷馬達驅動 - 接線圖:

ROHM BD6222HFP 的電壓最大可到 18V,供應電壓應在 DC 6V 以上;PWM 操作頻率在 20 ~ 100kHz 之間。

在 GertBoard J19 提供四個螺絲端子座,上面的   接馬達驅動電源負極、MOT+ 接馬達驅動電源正極、MOTA 與 MOTB 分別接馬達的正負極。
直流有刷馬達控制接線圖,source: Gertboard User Manual (Rev 2.0)
直流有刷馬達控制接線照片

直流有刷馬達驅動 - 程式測試:

C 語言的測試程式為 motor ( hardware PWM ),Python 是 motor-rg.py ( software PWM ) 和 motor-wp.py ( hardware PWM ) ( "程式名稱-rg.py" 表示是使用 RPi.GPIO 函式庫, "程式名稱-wp.py"表示是使用 wiringpi 函式庫 ),程式的說明請自行參考 Assembled Gertboard Manual Rev2.0, Page 29 - 32。

不管是使用 software PWM 或是 hardware PWM 兩種方式的執行結果都一樣,請看如下影片的展示:

software pwm


hardware pwm



直流有刷馬達驅動 - 程式測試 ( 使用 wiringPi 函式庫 ):

接下來,我們要使用 C 語言搭配 wiringPi 函式庫來做 software PWM 和 hardware PWM 的測試程式。開始之前,照著下面指令下載程式的原始碼以及執行檔
pi@raspberrypi ~ $ mkdir codes
pi@raspberrypi ~ $ cd codes
pi@raspberrypi ~/codes $ wget -O - http://goo.gl/K9LB2 | tar -xvf -
... << 中間省略 >> ...
pi@raspberrypi ~/codes/temp $ ls -l
總計 4
drwxr-xr-x 2 pi pi 4096  5月  5 18:17 p_motor
pi@raspberrypi ~/codes $ cd p_motor/
pi@raspberrypi ~/codes/p_motor $ ls -l
總計 120
-rwxr-xr-x 1 pi pi 61440  5月  5 18:10 hwpwm_motor
-rw-r--r-- 1 pi pi  8245  5月  5 17:39 hwpwm_motor.c
-rwxr-xr-x 1 pi pi 11143  5月  5 17:22 swpwm_motor
-rwxr-xr-x 1 pi pi 10968  5月  5 17:51 swpwm_motor_2
-rw-r--r-- 1 pi pi 10777  5月  5 17:59 swpwm_motor_2.c
-rw-r--r-- 1 pi pi 10661  5月  5 17:21 swpwm_motor.c
pi@raspberrypi ~/codes/p_motor $

總共有三個程式,分別使用 wiringPi 函式庫中輸出入指令 ( digitalWrite() )、軟體 PWM 指令 ( softPwmWrite() )和硬體 PWM 指令 ( pwmWrite() ) 來完成 ROHM BD6222HFP 控制邏輯表 a - h 中的控制方式。

ROHM DB6222HFP 控制邏輯表中,a - d 是一般馬達正反轉 ( Forward,Reverse ) 的控制,使用時都是全速控制,另外還有怠速 ( Idling ) 及煞車 ( Break ) 的控制;e - h 是馬達的轉速控制,使用 PWM 調變的方式,分為低準位 PWM 控制和高準位 PWM 控制 ( 也就是上面的 PWM 控制模式 A 與 B ),主要不同是在停止時是在怠速模式還是在煞車模式。

每個程式使用不同的控制指令輸入 a -h 邏輯表中所需要的訊號,我們定義了兩個 GPIO 接腳 GPIO #17GPIO #18 在程式裡,分別叫做 MAMB,分述如下:
  • swpwm_motor.c
  • 由於 wiringPi 函式庫的問題,pin 一旦被定義為 Soft PWM 就無法被 disable,所以 a-d 執行之後可以跳到 e- h 執行,但是反過來就不行,必須重啟程式才可以正常控制馬達。
    • a - d
    • digitalWrite( MA/MB, HIGH/LOW )
    • e - h
    • digitalWrite( MA/MB, HIGH/LOW ),softPwmWrite( MA/MB, 0 ~ 100 )

  • swpwm_motor_2.c
  • swpwm_motor_2.c 修正了 swpwm_motor.c 的問題,全部使用軟體 PWM 調變的指令來完成 a - h 所需的輸入訊號,因為

    softPwmWrite( MA/MB, 0 ) 的結果等效於 digitalWrite( MA/MB, LOW )

    softPwmWrite( MA/MB, 100 ) 的結果等效於 digitalWrite( MA/MB, HIGH )

    • a - d
    • softPwmWrite( MA/MB, 0 / 100 )
    • e - h
    • softPwmWrite( MA/MB, 0 ~ 100 )

  • hwpwm_motor.c
  • 使用硬體 PWM 調變必須使用 GPIO #18,因此原本的 PWM 調變方式只剩下兩種 ( fg ) 可以做且調變的範圍變成 0 - 1024,而且

    pwmWrite( MA/MB, 0) 的結果等效於 digitalWrite( MA/MB, LOW )

    pwmWrite( MA/MB, 1024) 的結果等效於 digitalWrite( MA/MB, HIGH )

    • a - d
    • digitalWrite( MA/MB, HIGH/LOW ),pwmWrite( MA/MB, 0 / 1024)
    • e - h
    • digitalWrite( MA/MB, HIGH/LOW ),pwmWrite( MA/MB, 0 ~ 1024)

馬達驅動的接線方式都一樣,程式執行時會列出選單讓你選擇要執行的馬達驅動方式,swpwm_motor 和 swpwm_motor_2 有八種 ( 1- 8 ),hwpwm_motor 有六種 ( 1 - 4, 6 - 7)。執行之後的樣子如下所示,可以自己試試並看看這幾種驅動方式的不同之處。

      DC Brush Motor Control
---------------------------------
 1: Stand-by (idling) mode
 2: Forward mode
 3: Reverse mode
 4: Break (stop) mode
---------------------------------
 5: Forward (PWM control mode A)
 6: Reverse (PWM control mode A)
 7: Forward (PWM control mode B)
 8: Reverse (PWM control mode B)
---------------------------------
 0: EXIT
---------------------------------
MODEL: 5   ###  輸入馬達驅動方式再按下 <ENTER>
###  列出驅動馬達的方式,從樹莓派到 Gertboatd 再到輸出
--- Raspberry Pi ---
GPIO P1 |  MA  |  MB
        |  PWM |  L
--- Gertboard ---
ROHM    | FIN  |  RIN  |  VREF  |  OUT1  |  OUT2
MOTOR   |                       |  MOTA  |  MOTB
                                            ___
        | PWM  |   L   |  VCC   |   H    |  PWM

 MOTOR: FORWARD (PWM control mode A ...

speed:   0 %   ###  轉速百分比會顯示在這裡,從 0  100 再從 100  0

 Press <ENTER> to continue...   ###  完成動作之後等待使用者輸入 <ENTER>,再跳回去選單



以上就是 GertBoard 驅動直流有刷馬達的控制方式介紹,有關更詳細的資料,請下載 ROHM - BD6222HFP 資料手冊,相關需要的連結也在下方的資料文件下載區。

下一個單元,我們將說明 GertBoard 上的 ADC 與 DAC 晶片的使用方法。



賣場部落格 "認識 GertBoard " 系列文章:


<< Gertboard 相關資料文件下載>>

沒有留言:

張貼留言

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !