聚丰项目 > 基于AB32VG1的工程师调试电源控制器
基于AB32VG1开发板实现一个可监控控制的USB调试电源,实现设备自动化控制自动化运行,解放工程师的双手。 在项目开发调试阶段总会遇到一些小问题,这时候工程师总会拿起电烙铁、示波器、逻辑分析仪一顿操作,但是这时候需要脱离市电操作。或者在量产下载时需要多个端口供电稳定的USB电源。我常常因为这些原因拿着线到处焊,效率低还不稳定。 正好发现RT-Thread联手中科蓝讯、沁恒微电子、电子发烧友开展本次RT-Thread X RISC-V 创新应用设计大赛。在之前使用过CH32V103的芯片而且在量产使用中了,感觉移植程序挺快的。现在国内都在发力造芯片,RISC-V作为一个开源开放的架构是很有取代ARM的趋势的。我作为一个嵌入式开发者,为RT-Thread和RISC-V贡献一点一点力量。所以我立马去申请AB32VG1开发板做这个USB电源。
CB电子
分享CB电子
团队成员
CB 嵌入式
1.AB32VG1开发板部分
AB32VG1开发板的主要功能是控制usb板的电压输出和oled显示,以及采集按键和电流采样的数据。使用芯片的硬件部分 ADC、uart、和gpio等等,等以后有时间了再增加蓝牙与手机通信,音频播放提示音等功能
USB供电板的主要由USB HUB芯片FE1.1S和电源控制、电压采样、电流采样、OLED显示和按键电路。电压采样和电流采样使用了TL431做基准参考电压来计算值。
同时USB端口板上面有一个CH340芯片连接USB HUB的port1 和AB32VG1的uart1,可以通过PC端的modbus主机软件查询到USB1、USB2、USB3的电流值、并且能控制电源通断。
软件上,AB32VG1开发板肯定首选是rt-thread操作系统,因为rt-thread有AB32VG1的bsp而且有gpio、uart、adc等驱动,对于一个经常使用rtthread的人来说真的是太方便了。
1.rt-thread的设备驱动
我的项目比较简单,主要使用gpio、adc、uart,在RT-Thread Studio中创建了一个基于AB32VG1的工程后,打开RT-Thread Setting工具,将硬件栏里的uart1 adc0 使能,这个时候保存编译下载到开发板,在msh中输入 list_device 查看设备 adc0 和 uart1都在,OK第一步就准备好了。
msh >list_device
device type ref count
-------- -------------------- ----------
adc0 Miscellaneous Device 0
uart1 Character Device 1
uart0 Character Device 2
pin Miscellaneous Device 0
2.软件包选择
由于我需要驱动oled和使用modbus功能,所以我再次打开了RT-Thread Setting工具。
软件包-》IOT -》small_modbus 软件包勾选
软件包-》drivers-》ssd1306 软件包勾选
3.软件架构和程序流程
整个项目的功能主要是一个虚拟io和三个线程相互配合实现的。
(1)虚拟io,负责存储modbus线圈数据寄存器数据,是按照modbus数据格式存储的。
(2)slave modbus从机线程,负责uart1的modbus从机处理功能,当modbus主机来查询读写数据时,都会最终读写到虚拟io的存储区。这部分主要由small modbus软件实现。
(3)scanio 的功能比较繁重费时,主要是按一定周期循坏 扫描按键、采集adc值换算结果、更新电源输出状态。
adc采集比较简单主要采集五路的adc,第一路是tl431的基准电压2.5v,通过这路adc的值就可以计算出每个单位adc代表的精准的电压值。让后推算出第二路的5V电压,三到五的电流值,三到五路的电流值是经过运算放大器放大的mv电压值,精度应该在ma级。
按键扫描主要是扫描三个按键状态,并存储到虚拟io中以便modbus查看,同时检测到按键上升沿变化时会切换对应的USB电源状态,并同时oled的信号量立即更新oled画面。
(4)还有一个main主线程,main函数里面运行着oled显示的任务。平常oled是通过sem_oled_update的信号量每500ms超时来更新画面数据的。
(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)软件框架图