聚豐項(xiàng)目 > 基于AB32VG1的工程師調(diào)試電源控制器
基于AB32VG1開(kāi)發(fā)板實(shí)現(xiàn)一個(gè)可監(jiān)控控制的USB調(diào)試電源,實(shí)現(xiàn)設(shè)備自動(dòng)化控制自動(dòng)化運(yùn)行,解放工程師的雙手。 在項(xiàng)目開(kāi)發(fā)調(diào)試階段總會(huì)遇到一些小問(wèn)題,這時(shí)候工程師總會(huì)拿起電烙鐵、示波器、邏輯分析儀一頓操作,但是這時(shí)候需要脫離市電操作?;蛘咴诹慨a(chǎn)下載時(shí)需要多個(gè)端口供電穩(wěn)定的USB電源。我常常因?yàn)檫@些原因拿著線到處焊,效率低還不穩(wěn)定。 正好發(fā)現(xiàn)RT-Thread聯(lián)手中科藍(lán)訊、沁恒微電子、電子發(fā)燒友開(kāi)展本次RT-Thread X RISC-V 創(chuàng)新應(yīng)用設(shè)計(jì)大賽。在之前使用過(guò)CH32V103的芯片而且在量產(chǎn)使用中了,感覺(jué)移植程序挺快的?,F(xiàn)在國(guó)內(nèi)都在發(fā)力造芯片,RISC-V作為一個(gè)開(kāi)源開(kāi)放的架構(gòu)是很有取代ARM的趨勢(shì)的。我作為一個(gè)嵌入式開(kāi)發(fā)者,為RT-Thread和RISC-V貢獻(xiàn)一點(diǎn)一點(diǎn)力量。所以我立馬去申請(qǐng)AB32VG1開(kāi)發(fā)板做這個(gè)USB電源。
CB電子
CB電子
團(tuán)隊(duì)成員
CB 嵌入式
1.AB32VG1開(kāi)發(fā)板部分
AB32VG1開(kāi)發(fā)板的主要功能是控制usb板的電壓輸出和oled顯示,以及采集按鍵和電流采樣的數(shù)據(jù)。使用芯片的硬件部分 ADC、uart、和gpio等等,等以后有時(shí)間了再增加藍(lán)牙與手機(jī)通信,音頻播放提示音等功能
USB供電板的主要由USB HUB芯片F(xiàn)E1.1S和電源控制、電壓采樣、電流采樣、OLED顯示和按鍵電路。電壓采樣和電流采樣使用了TL431做基準(zhǔn)參考電壓來(lái)計(jì)算值。
同時(shí)USB端口板上面有一個(gè)CH340芯片連接USB HUB的port1 和AB32VG1的uart1,可以通過(guò)PC端的modbus主機(jī)軟件查詢到USB1、USB2、USB3的電流值、并且能控制電源通斷。
軟件上,AB32VG1開(kāi)發(fā)板肯定首選是rt-thread操作系統(tǒng),因?yàn)閞t-thread有AB32VG1的bsp而且有g(shù)pio、uart、adc等驅(qū)動(dòng),對(duì)于一個(gè)經(jīng)常使用rtthread的人來(lái)說(shuō)真的是太方便了。
1.rt-thread的設(shè)備驅(qū)動(dòng)
我的項(xiàng)目比較簡(jiǎn)單,主要使用gpio、adc、uart,在RT-Thread Studio中創(chuàng)建了一個(gè)基于AB32VG1的工程后,打開(kāi)RT-Thread Setting工具,將硬件欄里的uart1 adc0 使能,這個(gè)時(shí)候保存編譯下載到開(kāi)發(fā)板,在msh中輸入 list_device 查看設(shè)備 adc0 和 uart1都在,OK第一步就準(zhǔn)備好了。
msh >list_device
device type ref count
-------- -------------------- ----------
adc0 Miscellaneous Device 0
uart1 Character Device 1
uart0 Character Device 2
pin Miscellaneous Device 0
2.軟件包選擇
由于我需要驅(qū)動(dòng)oled和使用modbus功能,所以我再次打開(kāi)了RT-Thread Setting工具。
軟件包-》IOT -》small_modbus 軟件包勾選
軟件包-》drivers-》ssd1306 軟件包勾選
3.軟件架構(gòu)和程序流程
整個(gè)項(xiàng)目的功能主要是一個(gè)虛擬io和三個(gè)線程相互配合實(shí)現(xiàn)的。
(1)虛擬io,負(fù)責(zé)存儲(chǔ)modbus線圈數(shù)據(jù)寄存器數(shù)據(jù),是按照modbus數(shù)據(jù)格式存儲(chǔ)的。
(2)slave modbus從機(jī)線程,負(fù)責(zé)uart1的modbus從機(jī)處理功能,當(dāng)modbus主機(jī)來(lái)查詢讀寫(xiě)數(shù)據(jù)時(shí),都會(huì)最終讀寫(xiě)到虛擬io的存儲(chǔ)區(qū)。這部分主要由small modbus軟件實(shí)現(xiàn)。
(3)scanio 的功能比較繁重費(fèi)時(shí),主要是按一定周期循壞 掃描按鍵、采集adc值換算結(jié)果、更新電源輸出狀態(tài)。
adc采集比較簡(jiǎn)單主要采集五路的adc,第一路是tl431的基準(zhǔn)電壓2.5v,通過(guò)這路adc的值就可以計(jì)算出每個(gè)單位adc代表的精準(zhǔn)的電壓值。讓后推算出第二路的5V電壓,三到五的電流值,三到五路的電流值是經(jīng)過(guò)運(yùn)算放大器放大的mv電壓值,精度應(yīng)該在ma級(jí)。
按鍵掃描主要是掃描三個(gè)按鍵狀態(tài),并存儲(chǔ)到虛擬io中以便modbus查看,同時(shí)檢測(cè)到按鍵上升沿變化時(shí)會(huì)切換對(duì)應(yīng)的USB電源狀態(tài),并同時(shí)oled的信號(hào)量立即更新oled畫(huà)面。
(4)還有一個(gè)main主線程,main函數(shù)里面運(yùn)行著oled顯示的任務(wù)。平常oled是通過(guò)sem_oled_update的信號(hào)量每500ms超時(shí)來(lái)更新畫(huà)面數(shù)據(jù)的。
(5)線程列表
msh >ps
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
slave 8 suspend 0x00000168 0x00000800 18% 0x00000009 000
scanio 9 suspend 0x000000bc 0x00000800 12% 0x0000000a 000
tshell 20 running 0x000000fc 0x00000800 26% 0x00000009 000
drv 18 suspend 0x000000f0 0x00000200 46% 0x00000001 000
tidle0 31 ready 0x00000098 0x00000200 29% 0x0000001e 000
timer 4 suspend 0x000000a8 0x00000100 65% 0x00000009 000
main 10 suspend 0x000000c4 0x00000800 16% 0x00000005 000
(5)軟件框架圖