這是一個基於Nuvoton NUC2201LE3AE微控制器的SC8903自動升降壓芯片控制器,具有以下主要功能:
- PWM控制SC8903的輸出電壓和電流
- 輸入/輸出電壓及電流檢測
- LCD顯示界面 (主要視圖與設定選單視圖)
- 按鈕控制界面
- 設定參數保存與讀取 (Data Flash)
- 支持 USB 虛擬串口 (VCOM) 遠程監控與控制
- Nuvoton NUC2201LE3AE 微控制器 (使用3.3V電源)
- SC8903 自動升降壓芯片
- 系統時鐘:內部高速RC振盪器(HIRC 72MHz),配合 USB Crystal-Less 功能
- 接口定義:
- SC8903 控制:
- DISABLE 腳位 - PA6 (0=Enable, 1=Disable)
- 電壓控制PWM - PA14 (PWM2, 20kHz)
- 電流控制PWM - PA13 (PWM1, 20kHz)
- ADC 狀態檢測:
- 輸入電壓檢測 - PA0 (ADC0,上分壓100KΩ,下分壓10KΩ)
- 輸出電壓檢測 - PA1 (ADC1,上分壓100KΩ,下分壓10KΩ)
- 輸出電流檢測 - PA2 (ADC2,採樣電阻可配置(預設10.0mΩ,範圍0.1~100.0mΩ),經INA199A1DCKR放大50倍)
- 人機界面 (HMI):
- 狀態指示燈 (LED) - PA5 (啟動輸出時亮)
- 蜂鳴器 (Buzzer) - PA12 (PWM0, 2.73kHz)
- 加按鈕 (Up) - PB8
- 減按鈕 (Down) - PA11
- 確定/中按鈕 (Middle) - PB15
- 設置按鈕 (Set) - PA10
- LCD SPI接口:
- SPI0_CLK - PC1
- SPI0_MOSI - PC3
- DC - PB2
- RST - PB3
- CS - PC0
- BL (背光) - PA15 (PWM3)
- 放電控制:
- 放電腳位 - PA4 控制N通道FET。輸出高於設定電壓 1V,或關閉輸出時,啟動自動放電。
- 遠程控制:
- USB 接口 (D+/D-),用作 VCOM (Virtual COM Port)。不使用傳統 UART (PB0/PB1 已釋放為普通 GPIO)。
- 溫度檢測 (NTC):
- NTC 10kΩ B3950 接於 PC7 (ADC7)。
- 接線方式:3.3V --- 2.20kΩ (固定) --- ADC7 腳位 --- NTC --- GND。
- SC8903 控制:
- 通過 PWM 產生模擬電壓,經過 RC 低通濾波與運算放大器後,注入 SC8903 的 FB 及 ICTRL 腳位,從而精要調節輸出電壓與電流。
- PWM頻率固定為 20kHz。
- 額外 PWM0 用於蜂鳴器頻率為 2.73kHz。
- 實時獲取 ADC 值,並提供 4 階移動平均濾波 (Moving Average Filter)。
- 輸入電壓保護:輸入電壓若異常(低於 4.5V 或高於 24V),將自動保護並關閉輸出。
- 溫度監測:集成 NTC B3950 溫度檢測,實時顯示當前環境或元件溫度。
- Main View (主視圖):支持 3 種佈局切換 (在主視圖時短按
PA11切換):- Layout 0 (標準版):顯示 Vin, Vout, Vset, Iout, Iset, Time, Cap, Power。
- Layout 1 (大字體版):顯示大號 Vout/Iout,以及 Power, Capacity (Ah), Energy (Wh), Temperature (°C), Timer。
- Layout 2 (圖表版):顯示當前 V/I 數值及 160 點 電流歷史曲線圖 (1px/sec)。
- Menu View (菜單視圖):包含 6 個設定項,支持滾動顯示 (每次顯示 4 項):
- V-Set: 電壓設定
- I-Set: 電流設定
- Calib: 電壓校準百分比 (-10.0% ~ 10.0%)
- Cap Lim: 容量限制設定 (到達限制會自動斷電保護)
- Reset T&C: 重置運行時間、容量與能量
- R-Sns: 採樣電阻設定 (0.1~100.0mΩ,預設10.0mΩ)
- 智能刷新機制:結合
UpdateDisplay旗標與ClearScreenAndResetLastValues,僅在數值改變並達到顯示更新間隔 (60秒) 時局部或全局更新畫面,減少 SPI 頻寬佔用。
- PB15 (中按鈕/確定):
- 長按 (>1000ms):在主視圖且輸出關閉時,開始輸出 (Enable SC8903)。
- 短按:在菜單視圖時返回主視圖;或在輸出狀態時作為緊急暫停鍵 (關閉輸出)。
- PA10 (設置按鈕):
- 長按:在主視圖與菜單視圖之間互相切換。
- 短按:在主視圖時短按切換到菜單視圖;在菜單視圖時短按則為向下滾動設定項。
- PB8 (加按鈕):
- 長按:在菜單中粗調設定值 (電壓±1V, 電流±100mA, 容量限制±1Ah, 採樣電阻±1mΩ)。若游標在 Reset 項目時執行數據重置。
- 短按:在菜單中微調設定值 (電壓±0.1V, 電流±10mA, 容量限制±0.1Ah, 採樣電阻±0.1mΩ)。若游標在 Reset 項目時執行重置。
- PA11 (減按鈕):
- 長按:在菜單中粗調設定值 (同上)。
- 短按:在主視圖時切換 LCD 佈局佈局 (Layout 0/1/2);在菜單視圖時微調設定值。
- 使用 FMC (Flash Memory Controller) 將設定保存至 Data Flash (自定義地址
0xF000)。 - 系統會自動檢測設定值是否被修改,當參數修改完成且穩定停留超過 2 秒後,會自動將參數寫入 Flash,斷電不遺失。
當專案中定義了 IS_VCOM_CTRL 1,MCU 會列舉成標準的 USB CDC 虛擬串口,隨插即用,取代傳統的 UART 通訊。通信參數隨意配置即可 (推薦 115200 bps)。
設備每 200ms 自動往上位機回報一次系統狀態,格式如右:
Vin:12000,Vout:5000,Vset:5000,Iout:100,Iset:1000,Time:10,Cap:5,Power:0.50,Calib:0,CapLim:5.0,Out:1,Rsns:100,Temp:35.5,TLim:85
| 欄位 | 說明 | 單位 |
|---|---|---|
| Vin / Vout / Vset | 入/出/設 電壓 | mV |
| Iout / Iset | 出/設 電流 | mA |
| Time | 運行時間 | 秒 |
| Cap / CapLim | 容量/容量限制 | mAh / Ah |
| Power | 輸出功率 | W |
| Calib | 電壓校準 | 0.1% |
| Out | 輸出開關狀態 | 0(關閉) / 1(開啟) |
| Rsns | 採樣電阻值 (×0.1mΩ 整數,即實際值需÷10) | ×0.1mΩ |
| Temp / TLim | 當前溫度 / 溫度上限 | °C |
由 PC 下發指令時,必須以換行符號 \n 或是 \r 做為結尾。
| 指令格式 | 說明 | 範例 |
|---|---|---|
Vxxx |
設定輸出電壓 (mV) | V12000 (設為 12V) |
Ixxx |
設定輸出電流 (mA) | I2000 (設為 2A) |
P0 / P1 |
關閉/開啟輸出 | P1 (開啟輸出) |
Cxxx |
設定校準值 (%) | C-30 (校準為 -3.0%) |
Lxxx |
設定容量限制 (Ah) | L5.5 (限制為 5.5Ah) |
Sxxx |
設定採樣電阻 (×0.1mΩ整數,1~1000) | S100 (設為 10.0mΩ),S1 (設為 0.1mΩ) |
Txxx |
設定溫度上限 (°C) | T85 (設為 85°C) |
Bxxx |
設定蜂鳴器音量 (Duty) | B5000 (音量 5000/65535) |
R |
重置時間與容量 | R (清零) |
-
GPIO 中斷分配
PB.15(中按鈕):獨立綁定至EINT1_IRQn,必須在EINT1_IRQHandler中處理。PA.10,PA.11,PB.8:統一由GPAB_IRQn管轄,在GPAB_IRQHandler中通過GPIO_GET_INT_FLAG區分。- 所有按鍵均啟用了 LIRC (10kHz) 時鐘驅動的硬體防抖 (Debounce)。
-
USB Crystal-less 修整機制 (Trim) 本專案使用了 MCU 內建 48MHz HIRC,並依賴 USB 的 SOF (Start of Frame) 封包進行頻率的硬體自我修整以達到不需要外部晶振(Crystal)就可以實現高精度 USB 通訊目的 (
IS_VCOM_CTRL與CRYSTAL_LESS同時為真)。在主循環中不可移除SYS->HIRCTCTL的修正維護邏輯,否則可能造成 USB VCOM 連線的脫機與不穩定。 -
Data Flash 架構與解鎖 在運用 FMC 寫入韌體內部時,除了須知悉位址起始點
DATA_FLASH_BASE(0xF000) 之外,存取前必須呼叫SYS_UnlockReg();解開暫存器防寫鎖定;對 Data Flash 的更新必須是以整頁擦除 (FMC_Erase) 為單位再分字寫入 (FMC_Write) 操作。 -
UART 資源釋放 為避免腳位浪費並提升專案簡潔度,
main.c已廢棄硬體UART0外部通訊,全面遷移至 USB VCOM,從而釋放了PB.0及PB.1腳位。UART0模組僅保留內部用於cdc_serial.c的 LineCoding 邏輯。 -
定時器分配
Timer0: 1ms 系統滴答 (System Tick),用於按鍵計時與 1秒任務。Timer1: 1ms 顯示刷新與 ADC 掃描觸發。Timer2: 單次觸發模式,用於delay_1ms函數。