Skip to content
RM24-25超级电容控制板Lite & Plus_维护手册

RM24-25超级电容控制板Lite & Plus_维护手册

请按照标题序号一步步进行检查,确保板子所有硬件功能完全正常之后再装车使用。

1、焊接

焊接顺序

Lite

Plus

焊接问题示例:

注意检流电阻的焊接

黄色框框的检流电阻引脚应避免过多的焊锡附着在上面,可能会影响检流电阻的阻值(虽然经过拟合可以一定程度上减少误差,但是会导致不同板子的拟合参数有较大的变化而无法复用) 红色引脚是电流检测放大器的采样焊盘,若此引脚虚焊会爆炸💥。 参考阻值

名称中带有短杠-的需要两个表笔分别接触两个测量点进行测量;不带的则是对地阻值,黑色表笔接GND,红色表笔接触测量点进行测量。 以上的参考阻值,只能提供一个大概的数量级,只要不是短路或者开路基本都不会有问题。特别是电源轨阻值的测量,由于其存在较多的电容,阻值不会很准确。

24V短路

  • TVS炸了
  • 上下管天地通
  • 辅助电源炸了

10V短路

  • 栅极驱动炸了(MOS也可能炸了)

4V短路

  • TVS炸了
  • LDO炸了
  • 3.3V炸了

3.3V短路

2.第一次上电,测量电压是否正常

使用电源设定24V0.5A接入【电池】端口,若电源进入恒流保护,则说明板子焊接有问题。

测量10V,4V看看电压是否正常。

3.烧录代码,测量硬件是否正常运行

Lite烧录G431Lite_ADC_Fitting代码,观察到两个LED快速闪烁。

Plus烧录G431Plus_ADC_Fitting代码,观察到三个LED跑马灯。

  • 电池端口接入电源,设定24V5A,暂时不开启;
  • 电容端口接入电子负载,设定恒流5A,暂时不开启;
  • 开启电源,此时电子负载读到的电压,Lite大约为21V ± 5%;Plus大约为15V ± 5%,电源输出的电流小于0.1A(空载电流);
  • 开启电子负载,此时电子负载显示的电压会略微下降,电源所显示的电流会相应地提高,但是如果直接掉到5V以下则需进行检查。

若空载电流过大则检查是否有短路;

若输出电压不为上述值,则检查半桥焊接是否有问题,10V供电是否正常,MOS、驱动器是否损坏;

若无法带动5A负载,则检查半桥焊接是否有问题,10V供电是否正常,MOS、驱动器是否损坏。

上管栅极-GND,开关节点-GND,下管栅极-GND,在空载时的参考波形:

IMOS-GND是Plus版本需要关注测量的波形,如果波形不对,请检查运放或者RC滤波的值。

测量时,请使用X10探头(我用X1是因为我用测试冶具将测试点转成了SMA,直连示波器),除了IMOS-GND为交流耦合,其余均为直流耦合,尽量使用接地弹簧进行测量。

上管栅极-GND,开关节点-GND,下管栅极-GND,在带载5A时的参考波形:

IMOS-GND是Plus版本需要关注测量的波形,如果波形不对,请检查运放或者RC滤波的值。

关于此波形,需要关注他的上升下降沿是否震荡,高电平和低电平是否平稳,峰峰值是否正确。

  • 上管栅极—GND峰峰值应为:输入电压+10V(驱动电压);
  • 开关节点—GND峰峰值应为:输入电压;
  • 下管栅极—GND峰峰值应为:10V(驱动电压);

若电压不对,或者波形不对,请检查焊接。

4、测试CAN通信、延迟电路

CAN通信测试

选取两块PLUS板烧录G431_CAN_Break_TEST,接好CAN线、电源线(使用24V0.5A对电池端口供电)。

  1. 先给板①上电,其LED变化过程为:蓝灯闪烁一秒 -> 绿灯持续闪烁。
  2. 蓝灯闪烁代表其正在等待接收CAN信号,绿灯闪烁代表其未接收到CAN信号,转为发送CAN信号,成为主机。
  3. 当板①绿灯闪烁时,给板②通电,此时板②上电会接收到板①的CAN消息而成为从机。
  4. 随后主机会间隔向从机发送0、1、2循环的数据,从机接收到并回传。若此过程顺利完成,则主机与从机的LED会进行同步跑马灯闪烁。
  • 若两板同时绿灯闪烁,则说明双方都没有成功接收或发送消息,请检查接线或者焊接。
  • 若两板跑马灯运行断续、不流畅,则可能存在接线通信质量不佳,具体原因自行排查。

延迟电路测试(仅PLUS)

PLUS板烧录G431_CAN_Break_TEST,使用24V0.5A对电池端口供电。

分别测量与门、或门的输出信号,红色箭头与黄色箭头分别对应两个通道的波形。

红色是定时器的Break信号,高电平时定时器输出PWM,低电平时引脚被拉低,禁止输出PWM。

黄色是PMOS的开关控制信号,高电平时PMOS导通,低电平时PMOS关断。

请务必确保红色正脉宽长度比黄色正脉宽长度短,并且黄色包住红色;即PMOS先导通后输出PWM(图中有大约3ms延迟),PWM先停止后关断

PMOS(图中有大约7ms延迟),要求这两个延迟均在ms级别(不建议太长)。

若延迟时间不准确,可以对R52与C56的值进行调整,增大延长时间,减小缩短时间。

如果延迟时间太短,在PWM输出时PMOS没有导通,在PWM停止输出时PMOS已经关断了,这两种情况均有概率会使得电感的能量被PMOS挡住,而产生一个电压尖峰导致半桥被击穿。

5、进行电压、电流的拟合校准

如果你所使用的电阻值与原理图中一致,可以尝试使用本例中的拟合参数,一般来说误差不会很大,若出现明显误差的时候再进行拟合即可,减少工作量。

在进行此步骤之前,请先确保板子运行没有任何问题,否则数据无效。

获取STM32的96位UID

方法一:

获取UID存储的地址

途径一

查找芯片对应的Reference manual,G4系列是RM0440,搜索“Unique device ID”,在2120页,找到“ Base address: ”这一项,这是芯片内部记录96位唯一ID的地址。

途径二

打开代码,在stm32g431xx.h文件中搜索UID_BASE,其中定义的内容就是芯片内部记录96位唯一ID的地址。

#define UID_BASE              (0x1FFF7590UL)        /*!< Unique device ID register base address */

读取地址所对应的数据

准备STlink,CubePrg,连接好电脑和单片机。在左上角的Address中填入前边所获取的UID地址,下面的第一行内容就是以UID地址为开头的单片机中存储的十六进制数据。其中前三个分别对应UID0,UID1和UID2。

方法二:

在单片机代码中定义一个uint32_t数组,如uint32_t a[3];,然后使用以下代码进行UID的读取:

//定义一个全局变量
uint32_t a[3];

int main(void)
{

//CubeMX生成的初始化代码

a[0] = HAL_GetUIDw0();
a[1] = HAL_GetUIDw1();
a[2] = HAL_GetUIDw2();

}

然后使用debug,或者其他方式,查看数组中所存储的十六进制值。

使用此方法读到的UID,会因为显示问题,高位的0不显示,若数据不足8位,则需自行在前边补上对应数量的0。

读取出96位唯一UID之后,找到SuperCapCtrl.c中的csADC_Fit_Parameters结构体数组,将自己板子的UID替换,或者增加到结构体数组中,并且进行ADC参数拟合。

const ADC_Fit_ParametersTypeDef csADC_Fit_Parameters[50] = {
    // UID0     ,UID1      ,UID2       ,Vbat_A  ,Vbat_B  ,Vcap_A  ,Vcap_B  ,Ibat_A  ,Ibat_B  ,Icap_A  ,Icap_B
    {0x003B0057, 0x54315005, 0x20333830, 0.0094f, 0.0680f, 0.0068f, 0.0079f, 0.0034f, 0.0237f, 0.0175f, -47.279f},
    这里加入你自己板子的拟合参数
    //其他板子的UID和拟合参数。。。
};

进行电压、电流数据的测量

Lite烧录G431Lite_ADC_Fitting代码,运行Debug进行数据读取。

Plus烧录G431Plus_ADC_Fitting代码,运行Debug进行数据读取。

此时使用电源接入【电池】端口,电子负载接入【电容】端口。

电源设定24V输出时,电子负载读到的电压,Lite大约为21V ± 5%;Plus大约为15V ± 5%。

Lite版本ADC的参考值如下:

Plus版本ADC的参考值如下:

电压通道数值会因为分压电阻误差的不同,产生几十到几百的区别。电流通道则不应该产生过大的误差,否则需要检查焊接或者芯片。

电压测量与记录

在空载情况下,调节电源电压逐个产生15、18、21、24、27五个电压值。万用表分别测量电池端口与电容端口的电压,然后使用Excel进行记录。

如果你想省事,其实也可以只测量18V和24V对应的电流值,但是这会导致精度有所下降(可能也不会影响多少)

此时使用电源接入【电池】端口,其他端口除了接入万用表进行电压测量,其他设备均不能接入。

由于现在是空载情况,没有产生线损,所以【电池】端口可以直接读电源显示的电压值(除非你的电源精度很烂)。

【电池】端口的电压值,对应sADC_Value_AVG.Vbat的数值;【电容】端口的电压值对应sADC_Value_AVG.Vcap的数值。

Lite版本的示例数据:

Plus版本示例数据

数据记录保留两位小数即可(控制板的采样精度为一位小数),同一组数据,ADC值放在上边,测量值放在下边,才能够保证转成散点图的时候,横轴X对应的是ADC值,纵轴Y对应的是测量值,这样拟合出来的系数才是正确的。

若数据存在大幅度非线性的情况,请更换运放或者单片机。

电流测量与记录

在此步骤中,请将电源电压设定为24V,调节电子负载为恒流模式,逐步产生0、2、4、6、8、10六个电流值(0就是空载)。由于电流不会因为导线产生线损,所以可以直接读取电源的显示电流,或者电子负载的显示电流作为标准值(除非你的电源和电子负载精度很烂)。

如果你想省事,其实也可以只测量2A和10A对应的电流值,但是这会导致精度有所下降(可能也不会影响多少)

在此步骤中,Ibat与Icap需要分开进行测量。

在测量Ibat时,【电池】端口接入电源,设定24V输出;电子负载接入【底盘】端口,使用恒流模式逐个电流值进行测量,可以直接读取电源的显示电流,或者电子负载的显示电流作为标准值(除非你的电源和电子负载精度很烂)。

此时电源的显示电流,或者电子负载的显示电流值对应sADC_Value_AVG.Ibat的数值进行拟合。

在测量Icap时,【电池】端口接入电源,设定24V输出;电子负载接入【电容】端口,使用恒流模式逐个电流值进行测量,可以直接电子负载的显示电流作为标准值(除非你的电源和电子负载精度很烂)。

此时电子负载显示的电流值对应sADC_Value_AVG.Icap的数值进行拟合。

若不分开进行数据测量拟合,则实际使用的时候,Ibat将会产生+0.5A左右的误差。

Lite版本示例数据:

Plus版本示例数据:

数据记录保留两位小数即可(G431Lite控制板的采样精度为一位小数),同一组数据,ADC值放在上边,测量值放在下边,才能够保证转成散点图的时候,横轴X对应的是ADC值,纵轴Y对应的是测量值,这样拟合出来的系数才是正确的。

若数据存在大幅度非线性的情况,请更换运放或者单片机

可以看到,电池电流的曲线近似从原点出发,但是电容电流的曲线在x轴有个交点,ADC值继续减小就会变成负值,这是电容电流方向发生了改变。充电的时候,电流值是正的,放电的时候,电流值是负的。由于G431Lite控制板只需要对充电电流进行闭环,所以只需要测量拟合正电流即可。

线性回归方程的计算

将四组数据分别进行拟合之后,就可以填入代码中的csADC_Fit_Parameters结构体数组了。请注意与UID进行一一对应。

浮点数填入代码的时候,请务必以f结尾,否则编译器可能会把他初始化成double型数据,导致运算速度下降

其实同一批板子,只要没有改动分压电阻,其拟合参数都不会差太多,可以先用同一套参数,如果误差太大再重新进行拟合。

6、装车

接线、CAN通信

有关超级电容的接线、参数、指示灯、CAN通信报文请查看以下文章

【RM2025超级电容模组Plus使用手册】桂林理工大学-群星战队-RoboMaster 社区

最终代码

最终代码分为两部分,一部分是CubeMX生成的初始化工程,一部分是超级电容控制库,这两个文件分别放在不同的链接里,由于超级电容控制库仍在持续更新,并且同时兼容Lite与Plus,所以把CubeMX与库文件分开存放是为了方便管理。

CubeMX

[开源]【RM24-25超级电容控制板Lite & Plus「CubeMX篇」】桂林理工大学-群星战队-RoboMaster 社区

超级电容控制库

[开源]【RM24-25超级电容控制板Lite & Plus「软件篇」】桂林理工大学-群星战队-RoboMaster 社区

RoboMaster论坛文章