2015年8月26日 星期三

[WheelLED] 自行車照明系統照明控制 WheelLED - Light

自行車照明系統照明控制部分簡介

照明部分由 7 片 PCB 組成一個圓形,剛好與車輪的內圈相同大小,每一片 PCB 上面都有一個微控制器與連接 2*8 個 LED 燈,微控制器採用 TSSOP20 的 STM32F031F4,ARM CortexM0,最高工作頻率 48MHz,詳細規格可以參考→ST官方,分配 1 個 LED 做為指示燈(也可以用來擴充功能), 8 個 PWM 輸出分別接到 LED 的驅動電路,剩下 1 個 UART 用來接收控制指令。




7 片 PCB 之間,透過杜邦公座母座連接 UART,整個圓(7 片 PCB)形成一個類似先進先出的暫存器(FIFO),指令從模組的 RX 輸入,經過每一個微控制器,最後從 TX 出來,每一片 PCB 都有自己獨立的編號,也就是說可以透過這種方式來獨立控制圓上的 8*7 LED 中每一顆 LED 燈的亮度、開關。



設計的指令格式如下表:

  • SET_DEVICE_x_OUT 指令是用來設定 LED 的輸出,CHANNEL 是設定要輸出的 LED 通道 1 ~ 8,D[7:0] 是設定 LED 亮度 0 ~ 255。
  • CMD_RUN_MODE 是用來進入 RUN_MODE,在 RUN_MODE 下才能控制 LED。
  • CMD_SET_MODE 是用來進入 SET_MODE,在 SET_MODE 下才可以設定一些預設參數。
  • CMD_IAP_MODE 是用來進入 IAP_MODE,在 IAP_MODE 下可以直接升級韌體,不須再經過燒錄器來燒錄,詳細方法請參考→基於 STM32 的 IAP 程式更新
  • CMD_SET_RESTORE 是用來還原預設的參數。
  • CMD_SET_DEVICEID 是用來設定裝置編號,透過這個指令可以讓每次燒錄不需更改編號,減少開發時間。
  • CMD_SET_BAUDRATE 用來設定鮑率的指令。
  • 最後預留了兩個保留的指令。
/* EXAMPLE(Set DeviceID) */
UART_Send16Bit(CMD_SET_MODE);     // 進入 SET_MODE
UART_Send16Bit(CMD_SET_DEVICEID); // 設定 DeviceID
UART_Send16Bit(CMD_RUN_MODE);     // 返回 RUN_MODE

目前製作這個 WheelLED - Light 的 PCB 版本,將 LED 與 PCB 分開,兩著之間透過杜邦接頭連接,方便更換車燈的顏色與維修,基本上除了 IAP 與鮑率的設定還沒實現外,其他部分都已經實現,整個 WheelLED - Light 只需要連接電源與 UART 就可以使用,模組化的程度也算是頗高了。

但最近實際的實驗發現,目前設計的 LED 驅動部分,因為採用 PNP 電晶體,加上電源端(4.2V)大於控制端(3.3V)電壓,導致再關閉 BJT 時,因壓差的關係無法完全關閉,換句話說就是沒辦法全暗...所以預計下一版本的PCB將會採用 NPN BJT 來解決此問題。



2015.09.06 更新

新版的機構測試版本出爐了,由翁偉吾大大設計&製作,初步測試找到幾個可以改進的地方,但不影響實際的應用,新的機構除了配合新版本的 PCB 外,也讓 PCB 可以先固定在其中一片機構上再夾起來裝在車輪上,降低了組裝的複雜度。








沒有留言:

張貼留言