2013年5月2日 星期四

[ 認識與使用 Gertboard ] 第三部曲 - ULN2803 開集極驅動 ( Open Collect Driver )

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

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

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

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

Gertboard - Open Collector Driver ( 黃色框線 ),source: Gertboard User Manual (Rev 2.0)
GertBoard 的 open collector driver ( 開集極驅動,位置位在 GertBoard 的右上方 ) 使用八通道 ULN2803 達靈頓驅動 IC,電壓輸出最大可達 DC 50V,每一通道最大電流可達 500mA,可以用來驅動 LEDs、直流馬達、步進馬達以及繼電器,但在 GertBoard 只開放六個通道做使用。

Gertboard - Open Collector Driver 電路圖,source: Assembled Gertboard Schematics
[1] 開集極驅動 ( Open Collector Driver )

有沒想過,當要控制一串 10 幾顆順向電壓 3.5V 的藍光 LED 開關或是亮度控制要怎麼做 ?DC 12V 直流馬達怎麼用 DC 3.3 V 或是 DC 5V 電壓輸出的微控制器作控制 ?

GertBoard 裡所使用的電壓是直流 3V3,因此想要控制大電壓或是需要大一點電流的設備裝置 ( 例如,直流馬達、步進馬達、繼電器、LEDs...等 ),就可以使用板子上所提供的 ULN2803 晶片所提供的開集極驅動的功能,使用外部電壓 ( Max. 50V / 500mA ) 來驅動所要驅動的設備裝置,每一個通道內部還有一顆用來做為保護的二極體,如下所示為 GertBoard 上單一通道的 ULN2803 線路示意圖。

單一開集極驅動通道電路示意圖,source: Gertboard User Manual (Rev 2.0)
Raspi 點是接到樹莓派的輸出 ( RLY# ); 接外部電源負極,這是接到 ULN2803 的第 9 支接腳 GND,也是與 GertBoard 共地;common 是接驅動設備裝置的外部電源 ( RPWR ) 正極;當 Raspi 這點為高準位時,OUT 輸出為低準位,此時接在 commonOUT ( 這個就是電路圖上的 RELAY_1,電路板上的 RLY# ) 兩點之間的設備剛好一端為電源正極一端為電源負極,就可以供給設備電力。

簡單一點來說,驅動電源 ( GertBoard 的 GND ) 與設備電源要共地 ( 接在  ),然後將要被控制的設備 ( 例如直流馬達 ) 一端接在 common ( + ) 一端接在 OUT ( - ),因為是開集極所以可視為一個開關,因此你必須將外部電源的正極 ( + ) 再接到 common ( + ) 上,如此一來就可以看到馬達開始轉動了!

對照上面的三張圖,電路示意圖上的 Raspi 對應到 GertBoard 電路板上的 J4 ( RLY1 ~ 6 );電路示意圖上的 common 接腳對應到 GertBoard 電路板 J6、J12 ~ J17上標示為 RPWR 的接腳;電路示意圖上的 OUT 接腳對應到 GertBoard 電路板 J12 ~ J17上標示為 RLY1 ~ 6 的接腳。

下面實際看接線圖再想一下,對照上面的說明,應該就能清楚了 !!!


LEDs 驅動 - 接線圖:

下圖使用 GP4 控制 RLY1,再驅動控制兩顆 LED。若供應電壓為 DC9V ( 正極接 J6-RPWN,負極接 J6- ),驅動串連兩顆順向電壓 3.5V 的藍光 LED 並限流為 10 mA,則限流電阻可選 200 Ω ( 可耐 0.02 W 以上 ) 的電阻來用。這串聯的 LED 串,( 如圖 ) 正端與 DC 9V 的正極 ( 或 J6-RPWR ) 相接,另一端則接到 J6-RLY1,當 GP4 輸出為高準位時,LED 串亮起,反之則熄滅。
開集極驅動 LEDs 接線圖,source: Gertboard User Manual (Rev 2.0)
在 Gertboard User Manual 的 Page26 第二段說道:或許你會想,為什麼一定要將外部電源的正端接到 RPWR 而不接負極呢 ? 理由是因為這樣可以防止馬達或是繼電器線圈斷電時的電感逆壓回衝到電路,進而造成元件損壞,而 ULN 2803 每一個通道都有一顆二極體,可以避免回衝時電壓的衝擊,進而保護電路的安全。

所以就是這樣的接法才是正確的 !!!

LEDs 驅動 - 程式測試:

C 語言的按鈕測試程式為 ocol,Python 是 ocol-rg.pyocol-wp.py ( "程式名稱-rg.py" 表示是使用 RPi.GPIO 函式庫, "程式名稱-wp.py"表示是使用 wiringpi 函式庫 ),程式的說明請自行參考 Assembled Gertboard Manual Rev2.0, Page 26 - 27。

兩種程式的執行結果都一樣,請看如下影片的展示:


不管是要使用什麼方法驅動設備裝置,請注意每個元件都有它的使用限制,使用之前一定要先確認所要驅動的設備裝置電壓與電流的需求,再選擇適用的驅動元件。


另外,在 Gordons Projects 網頁裡,有一篇網頁 Higher Current Drivers ,使用GertBoard 上的 Buffer I/O 和 ULN2803 驅動七段顯示器來顯示樹莓派的系統時間。原始程式碼在 wiringPi 函式庫安裝目錄 $HOME/wiringPi/example 中,名稱是 7segments.c;如果系統中沒有安裝過 C / C++ 語言用的 wiringPi 函式庫,請看下面的補充說明。
Gertboard - ULN2803 驅動七段顯示器,from: projects.drogon.net
接下來的另一單元,我們將繼續介紹 GertBoard 的另一個功能區塊,直流馬達驅動控制器。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
補充資料:wiringPi 函式庫安裝 for C / C++,照著下面指令做一遍就可以了

pi@raspberrypi ~ $ sudo apt-get install git-core
... << 過程省略 >> ...
update-rc.d: using dependency based boot sequencing
pi@raspberrypi ~ $ git clone git://git.drogon.net/wiringPi
Cloning into 'wiringPi'...
... << 過程省略 >> ...
pi@raspberrypi ~ $ ls -l
總計 20
drwxr-xr-x 2 pi pi 4096  4月 29 15:27 Desktop
-rw-r--r-- 1 pi pi 5781  2月  3 13:07 ocr_pi.png
drwxrwxr-x 2 pi pi 4096  7月 21  2012 python_games
drwxr-xr-x 6 pi pi 4096  4月 29 15:37 wiringPi
pi@raspberrypi ~ $ cd wiringPi/
pi@raspberrypi ~/wiringPi $ ./build    # <-- 不要加 sudo
wiringPi Build script
=====================

The wiringPi I2C helper libraries will not be built.

WiringPi library
[UnInstall]
[Compile] wiringPi.c
[Compile] wiringPiFace.c
[Compile] wiringSerial.c
[Compile] wiringShift.c
[Compile] gertboard.c
[Compile] piNes.c
[Compile] lcd.c
[Compile] piHiPri.c
[Compile] piThread.c
[Compile] wiringPiSPI.c
[Compile] softPwm.c
[Compile] softServo.c
[Compile] softTone.c
[Link (Dynamic)]
[Install]

GPIO Utility
[Compile] gpio.c
[Link]
[Install]

All Done.

####### 測試 wiringPi 函式庫是否正確安裝
pi@raspberrypi ~/wiringPi $ gpio -v
gpio version: 1.12
Copyright (c) 2012 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

This Raspberry Pi is a revision 2 board.
pi@raspberrypi ~/wiringPi $ gpio readall
+----------+------+--------+------+-------+
| wiringPi | GPIO | Name   | Mode | Value |
+----------+------+--------+------+-------+
|      0   |  17  | GPIO 0 | IN   | High  |
|      1   |  18  | GPIO 1 | IN   | High  |
|      2   |  27  | GPIO 2 | IN   | High  |
|      3   |  22  | GPIO 3 | IN   | High  |
|      4   |  23  | GPIO 4 | IN   | High  |
|      5   |  24  | GPIO 5 | IN   | High  |
|      6   |  25  | GPIO 6 | IN   | High  |
|      7   |   4  | GPIO 7 | IN   | High  |
|      8   |   2  | SDA    | IN   | High  |
|      9   |   3  | SCL    | IN   | High  |
|     10   |   8  | CE0    | IN   | Low   |
|     11   |   7  | CE1    | IN   | Low   |
|     12   |  10  | MOSI   | IN   | Low   |
|     13   |   9  | MISO   | IN   | Low   |
|     14   |  11  | SCLK   | IN   | Low   |
|     15   |  14  | TxD    | ALT0 | High  |
|     16   |  15  | RxD    | ALT0 | High  |
|     17   |  28  | GPIO 8 | IN   | Low   |
|     18   |  29  | GPIO 9 | IN   | Low   |
|     19   |  30  | GPIO10 | IN   | Low   |
|     20   |  31  | GPIO11 | IN   | Low   |
+----------+------+--------+------+-------+
pi@raspberrypi ~/wiringPi $

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



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


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

沒有留言:

張貼留言

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

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

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