聚丰项目 > 基于AB32VG1的工程师调试电源控制器

基于AB32VG1的工程师调试电源控制器

基于AB32VG1开发板实现一个可监控控制的USB调试电源,实现设备自动化控制自动化运行,解放工程师的双手。 在项目开发调试阶段总会遇到一些小问题,这时候工程师总会拿起电烙铁、示波器、逻辑分析仪一顿操作,但是这时候需要脱离市电操作。或者在量产下载时需要多个端口供电稳定的USB电源。我常常因为这些原因拿着线到处焊,效率低还不稳定。 正好发现RT-Thread联手中科蓝讯、沁恒微电子、电子发烧友开展本次RT-Thread X RISC-V 创新应用设计大赛。在之前使用过CH32V103的芯片而且在量产使用中了,感觉移植程序挺快的。现在国内都在发力造芯片,RISC-V作为一个开源开放的架构是很有取代ARM的趋势的。我作为一个嵌入式开发者,为RT-Thread和RISC-V贡献一点一点力量。所以我立马去申请AB32VG1开发板做这个USB电源。

CB电子 CB电子

分享
1 喜欢这个项目
团队介绍

CB电子 CB电子

团队成员

CB 嵌入式

分享
项目简介
基于AB32VG1开发板实现一个可监控控制的USB调试电源,实现设备自动化控制自动化运行,解放工程师的双手。 在项目开发调试阶段总会遇到一些小问题,这时候工程师总会拿起电烙铁、示波器、逻辑分析仪一顿操作,但是这时候需要脱离市电操作。或者在量产下载时需要多个端口供电稳定的USB电源。我常常因为这些原因拿着线到处焊,效率低还不稳定。 正好发现RT-Thread联手中科蓝讯、沁恒微电子、电子发烧友开展本次RT-Thread X RISC-V 创新应用设计大赛。在之前使用过CH32V103的芯片而且在量产使用中了,感觉移植程序挺快的。现在国内都在发力造芯片,RISC-V作为一个开源开放的架构是很有取代ARM的趋势的。我作为一个嵌入式开发者,为RT-Thread和RISC-V贡献一点一点力量。所以我立马去申请AB32VG1开发板做这个USB电源。
硬件说明

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的电流值、并且能控制电源通断。


img_20211208002540.png

img_20211208002540.png




img_20211208002502.png




软件说明

软件上,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)软件框架图

img_20211208002747.png







评论区(0 )