“一個非常硬核的黑客項目,以極簡的設計,使用沁恒的 ch32v003,在不使用驅動芯片的前提下,實現支持 USB-C、觸控的 7 段 LCD 屏幕。”
?項目概覽在電子工程領域,通過創新的軟硬件協同設計,可以在極簡的硬件平臺上實現復雜功能,本項目即是對此理念的一次成功實踐。項目把一塊普通的7段LCD,轉化為一個具備觸摸感應能力并通過USB-C接口與主機通信的功能性設備。整個系統的核心是一顆 CH32V003 RISC-V 單片機,神奇的地方在于它本身并不具備 USB 通信、LCD 驅動或觸摸感應的專用硬件支持。
看下設計的原理圖,芯片就一個成本一塊多的 ch32v003 加一個 5V 轉 3.3 V 的 LDOXC6206P332MR-G,沒有任何額外的驅動芯片:
J1 也并沒有使用 USB 接插件,而是直接把 PCB 做成了插頭:
為了確保正常的拔插,要求:- PCB 厚度必須為 0.6 mm
- PCB 應使用 ENIG(化學鍍鎳浸金)工藝,而不是 HASL(熱風整平或噴錫),因為 HASL 可以提供更平滑、耐磨的接觸面。
CH32V003 無需預編程,只需能接觸到GND/SWIO/5V引腳即可燒錄引導加載程序(bootloader)。LCD 屏是淘寶上找來的,不帶驅動,驅動電壓為 3V,符合以下規格:


USB 協議的軟件實現
由于 CH32V003 并不帶原生的 USB 控制器,作者使用了 Bit-Banged 的技術理念,利用軟件直接操控 GPIO 引腳來模擬硬件協議,生成速率為 1.5Mbps 的差分信號。雖然會占用大量CPU開銷,但還是成功模擬了一個 USB1.1 設備。
當然,需要對這一做法進行權衡:雖然節省了 USB PHY 物理層和控制器硬件的成本,但犧牲了寶貴的CPU周期和系統的穩定性。
在此基礎上,還開發了自定義的引導加載程序(Bootloader),使得設備固件可以直接通過USB接口進行更新,無需借助外部編程器。
GPIO 直接驅動 LCD
對于無源 LCD 的驅動,項目通過單片機的 GPIO 引腳產生精確的時序脈沖,并利用其內部的上下拉電阻,以軟件模擬專用驅動芯片的功能,從而控制各筆段的顯示。與簡單的直流驅動 LED 數碼管不同,扭曲向列(Twisted Nematic, TN)液晶顯示器(LCD)需要交流(AC)驅動波形,以防止液晶材料發生電化學降解。完全通過軟件直接生成了這種復雜的驅動波形。對于基本的 LCD 輸出,可以使用一個簡單的10 階段波形:
-
階段 0-3= 依次將特定的 COM(公共電極)引腳驅動為低電平,同時將任何需要點亮的 SEG(段電極)引腳驅動為高電平。
-
階段 4= 空閑時間,確保沒有電壓差。這也有助于控制對比度。
-
階段 5-8= 依次將特定的 COM 引腳驅動為高電平,同時將任何需要點亮的 SEG 引腳驅動為低電平。
-
階段 9= 用于控制對比度的另一半空閑時間。

可以看到,使用 USB 會把事情搞砸,因為當 USB 運行時,它無法將 SEG 引腳的電壓穩定在VCC的一半。
對于觸摸功能,輸出會通過內部上拉電阻從低電壓狀態重復釋放,同時使用 ADC 測量電壓以獲取觸摸量。
這看起來很完美,直到 USB 來攪局。
基于 ADC 的電容式觸摸感應
這或許是項目最具創新性的部分。它在沒有任何額外硬件的情況下,將 LCD 的引腳轉變成了電容式觸摸傳感器。這一功能的實現,巧妙地利用了 CH32V003 內置的10位模數轉換器(ADC)。其測量過程是一個經過精確計時的序列:
-
首先將線路驅動至低電平,以對任何電容進行放電。
-
在啟動 ADC 采樣的同時,為 LCD 的所有端口應用上拉電阻。ADC 的設置和采樣時間點必須精確對齊到Fcpu/2。
-
這個過程使得 LCD 引腳上的電壓開始上升,其上升速率與引腳上的總電容成反比。當手指觸摸玻璃時,會引入額外的人體電容,從而減緩電壓上升的速度。
-
通過高速、多次的采樣(即過采樣技術),系統能夠從噪聲中提取出這一微弱的電容變化信號,從而判斷觸摸事件的發生。
-
為提高輸入的可靠性,軟件層面還集成了遲滯算法,用以有效區分真實的“按下”與“釋放”動作,防止了誤觸發。
并發性的挑戰
該項目的核心成就不僅在于實現了以上三項功能,更在于讓它們在一個資源極其有限(2KB SRAM, 16KB Flash)的單核MCU上并發運行。
這三項任務對系統資源的要求是相互沖突的:USB 需要高優先級時序來保證其比特流的完整性;LCD 需要一個持續、有節奏的刷新率(約30-60 Hz)來避免閃爍;而觸摸感應則需要一個安靜、穩定的模擬環境以進行精確的 ADC 讀數。
波形圖中的干擾現象,是系統運行在其能力極限的典型癥狀。來自 USB 任務的中斷可能會延遲 LCD 的刷新,導致可見的閃爍,或者擾亂觸摸感應的 ADC 采樣窗口,導致錯誤的讀數。與基于硬件的解決方案相比,這是位沖撞(軟件)方法最主要的缺點和風險。
該項目的成功嚴重依賴 于CH32V003 的青稞 V2A 內核及其 GPIO 端口的特定且可預測的性能特征。將此代碼移植到另一個 MCU,即使規格相似,也極有可能需要對所有時序關鍵的循環和中斷處理程序進行全面的重新校準。所以說這并非一個可移植的解決方案。太黑科技了!
一定要那么省錢?那么黑科技么?
該方案過于黑科技,對技術要求的門檻較高,且不易移植,主要目的是炫技+裝逼 :P。從產品開發的角度看,這可能并不是一個好的方案,雖然成本很低、BOM極簡,但同時帶來了系統不穩定的問題。因此,基于不同的場景,需要采用的方案。作為對比,我們完全可以使用性能更強、外設更多的 MCU,下表是一個 MCU 解決方案的對比,可做參考:
同樣的,如果不拘泥于成本,對穩定性要求較高,我們也完全可以使用外部的驅動芯片,這樣會極大的降低固件的復雜性,對開發人員更友好,也利于縮短開發難度和周期。下圖是一個簡單的對比:
當然,除了升級硬件、使用外部 IC 外,也可以使用更直接的方法:購買與集成的顯示模塊,比如直接采購 SparkFun 的串行7段顯示器(板載ATMega328)。結束語
該項目成功地將無連接器 USB-C 設計、軟件實現的 USB 通信以及新穎的電容式觸摸感應方法整合在一套極低成本的硬件方案中。它充分展示了在資源受限的微控制器上,憑借對電子原理的深刻理解和精巧的軟件工程,依然能夠開發出功能豐富且實用的嵌入式系統。當然,黑客的項目雖然很酷,但在實際的產品設計中并不常用。我們應該根據不同的需求、場景,制定合理的方案。這也是硬件開發好玩的地方!最后,項目的倉庫在這里:https://github.com/cnlohr/ch32v003_3digit_lcd_usb/
有興趣的小伙伴可以自己嘗試復刻!-
usb
+關注
關注
60文章
8438瀏覽量
284442 -
LCD驅動
+關注
關注
4文章
94瀏覽量
27314 -
RISC-V
+關注
關注
48文章
2887瀏覽量
52938 -
沁恒微電子
+關注
關注
4文章
32瀏覽量
2219 -
ch32
+關注
關注
0文章
74瀏覽量
1250
發布評論請先 登錄
用沁恒CH32V003在沒有USB、觸摸、LCD驅動芯片的情況下實現3位7段LCD顯示
評論