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 可以先固定在其中一片機構上再夾起來裝在車輪上,降低了組裝的複雜度。








2015年8月17日 星期一

[WheelLED] 自行車照明系統核心控制 WheelLED - Core

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

核心部分由三片不同功能的 PCB 組成,分別為 POWER、SENSOR、CONTROL,每一片 PCB 占 120 度,三片組成一個 360 度的圓形,此設計的好處在於可以任意更換不同功能,且在硬體升級上也可以依需求、區塊更新,不需要全部更新,對於日後改版、升級則可以降低成本。

目前規劃的放置與元件如下圖所示,Microsoft 的 visio 蠻好用的,雖然 PowerPoint 也很方便用來做這些小圖示,不過 visio 在形狀及製作上多了較多的功能與選擇,像交連集、合併、剪裁等,對圖有興趣可以從 Google 雲端硬碟 下載 visio 檔案。



POWER 部分主要負責供電給其他兩片 PCB 與充電。

SENSOR 部分主要負責感測自行車運動資訊,上面放有 MPU9250(加速度計、陀螺儀、磁力計)與預留的擴充感測器放置空間,像是可以擴充旋轉編碼器、光強度感測器...等。

CONTROL 部分主要負責讀取感測器、控制 WheelLED 與藍牙連線,SMT32 透過 MPU9250 取得輪胎加速度、角速度、磁場等資訊,經過演算法處理,得到轉速、角度、運動方向需要的控制資訊,並透過 Command port 向 WheelLED 傳送 LED 控制指令,來實現定像照明的功能,另外透過 BLE 模組來建立使用者與兩輪控制器之間的通訊。


目前實驗測試階段,僅先將感測器與穩壓部分做在一起,控制器獨立出來做實驗,在已知感測器的旋轉半徑的情況下先將基本照明功能先實現,之後在設計仔細設計細部的電路。






機構部分由翁偉吾大大製作,仍然以 3D Printer 來負責生產,為了就是容易讓想製做的人,可以更容易的模仿複製或是改造它。

機構部分分成兩大部分,電池盒與固定 PCB 部分,固定 PCB 部分由兩塊機構組成,中心部分設計成六邊形是為了使擴充的裝置或機構接觸面積增加,讓兩者間可以更好的固定組合,兩大部分透過兩根內六角螺絲來連接固定,內部加入類似橡膠的東西,增加軸心與機構的摩擦力,同時也當做與軸心間的固定緩衝,目前看起來大致上都沒有問題,有效讓 PCB 中心可以與輪胎的旋轉中心重合,至於騎車時的震動是否會引發其他問題,有待實際測試才會知道。















2015年8月11日 星期二

[Design] SmartIMU 更新測試

SmartIMU 更新已經在進行中了(原始的版本→SmartIMU),初步先更改兩部分,STM32F401C 更換成 STM32F411,從原本的 84MHz 工作頻率升級到 100 MHz,同時也增加了 RAM 的大小(96KB→128KB),另外則是更換氣壓計,本來打算使用 LPS25HB,不過目前淘寶上似乎買不太到,所以就暫時先用 LPS25H 來代替,氣壓計除了在體積上大大的縮小外,LPS25HB 精度也達到 1 pa RMS,大氣壓力與高度之關係為每上升9公尺,大氣壓降低100Pa,1 pa 相當於 9 cm 的精度,頗期待之後的實驗結果。

今天下午焊了兩片版子,把感測器都吹上去之後,覺得特別髒,就拿去清洗了,洗到一半才想到器壓計上面有一個孔...應該是用來測量氣壓用的,希望器壓計不會有問題才好...,錯愕了一會後,寫了一個GPIO的測試程式,測試了一下燒錄功能,兩個都可以正常燒錄,RGB LED 也都正常頻率閃爍,MCU 部分應該是沒有問題了,之後等有空時再來測試 MPU9250 與 LPS25H 是否有問題。

等都沒問題就來開始設計最新版的 SmartIMU 了,挑戰超小高效能的 IMU 開發板!

-補充
這次的 MCU 焊接沒有用吹的,而是直接用刀頭焊上去,細刀頭果然厲害,以後旁邊長腳的QFN應該都不是問題了,對好後成功率百分百。









2015年8月6日 星期四

[Tool] 新焊槍 FX-951 開箱

一個好的作品背後都有一個好的工具!
最近換了 HAKKO 的 FX-951 烙鐵,也從 GOOT 跳槽到 HAKKO 了。

這兩天拿到 PCB 正好測試一下焊接的效果,與之前用了幾年的 TQ-95 比較,在手把的地方不會發熱,而且更細,握起來很輕鬆,設計上透過卡榫的方式更換烙鐵頭,烙鐵頭的種類也頗多,另外買了細刀頭與細尖頭以應付不同的情況,銲槍座部分裝有微動開關,可以在放入銲槍時自動進入休眠降溫,這種設計應該是為了延長烙鐵頭的壽命吧,不過每次拿起銲槍,自動加熱到預定溫度時都會有嗶聲,雖然方便但有點吵...整體用起來很滿意也很方便。

HAKKO 官方的產品說明:https://www.hakko.com/english/products/hakko_fx951.html













2015年8月5日 星期三

[LinkIt] LINKIT ONE 開箱

比賽送的開發板,功能很豐富,不過還是不喜歡 arduino 的開發環境,編譯速度慢,IDE 的自由度低...,若與 STM32 相比,還是傾向於 STM32,畢竟在兩者都熟悉的形況下,STM32更容易把功能實現,實時性也較高,仿真除錯也比較方便。

官方說明:https://labs.mediatek.com/site/global/developer_tools/mediatek_linkit/whatis_linkit/index.gsp