Arduino+Buck转换器自制一个冷启动电池电压波形发生器.docx
《Arduino+Buck转换器自制一个冷启动电池电压波形发生器.docx》由会员分享,可在线阅读,更多相关《Arduino+Buck转换器自制一个冷启动电池电压波形发生器.docx(10页珍藏版)》请在冰豆网上搜索。
Arduino+Buck转换器自制一个冷启动电池电压波形发生器
Arduino+Buck转换器,自制一个冷启动电池电压波形发生器
摘要
为了对车用电压预调节器进行测量,使用动态变化的输入电压源是常用的方法,这样可以确保它们即使在在冷启动造成的电池电压变化期间也能正常工作。
使用Arduino和大电流连续模式Buck转换器自制一个冷启动电池电压波形发生器并非难事,本文将对其需求和自制的方法进行详细描述。
1.概述
在开发以车辆电池作为电源的车用电子产品过程中,电路设计师需要根据ISO16750-2标准的要求使用具有各种电压曲线的电源对电子产品进行测试,其中最特别的当属车辆冷启动电池电压波形,它对各种应用来说可能都是致命的威胁,因为在此事件发生的时候,电池电压可能跌落得非常快,而且会跌落到很低的电压,会给它们的电源系统带来非常大的压力。
在通常情况下,可编程电源会被用来当作此类测试的信号发生器,但将以MCU为核心的ArduinoNano控制板和大电流Buck转换器如立锜科技的RT8131BGQW结合在一起来构成一个强大的电池电压曲线模拟器也是有可能的,本文就将说明这样一个电池电压曲线模拟器是如何设计、制作出来的,其程序设计和使用方法也将一一给出来供读者参考。
2.初步构想
要对车用电子产品使用的电压预调节器进行测量,需要使用ISO16750-2给出来的输入电压波动曲线,我们现在要考虑的是如何将此标准中描述的车用电池冷启动期间的电压波形模拟出来。
图1
图1给出的是一个实际测量获得的车用电池电压冷启动波形,它是在环境温度大约为-5℃的冬天测得的。
从此图可以看出,由于寒冷,电池电压在开始的时候就已经低于12V了,车子启动的时候它更是掉到了6.24V。
随着电池状态和其他负载状况的不同,电池电压可能掉得多一点或少一点。
当引擎被启动以后,发电机开始对电池充电,电池电压升高到了大约14.5V。
ISO16750标准对冷启动期间电池电压的下坠是这样描述的:
图2
典型的电池电压下降时间是5ms,电压可以下降到不同的水平,然后就上升到一个中间水平,紧接着就是由于引擎启动而造成的一个电压振荡过程,最后再回到它最初的电压水平上。
测试用的信号发生器应该具备生成类似波形的能力,而且应该具有容易调节其初始电压水平和电压下坠深度的能力,目的是方便检查最终产品在不同电压下降水平下的表现和其在恢复阶段的表现。
图3
图3给出了冷启动电池电压波形发生器的基本结构,其中包含一个ArduinoNanoMCU板,其作用是要生成一个可变的PWM输出信号来反向模拟出冷启动的电池电压波形,这个PWM信号经过滤波以后就可以得到一个与其变化对应的电压,再将此电压经过两只电阻引入大电流Buck转换器的反馈网络,通过调节可变电阻便能对注入反馈网络的电流进行调节。
如果注入反馈网络的电流多,Buck转换器的输出电压便会下降得多,反之亦然。
经过这样的处理,Buck转换器的输出就可以被用来对车用电子产品的电压预调节器进行测量了,因为其输出电压是完全可控的,可以很好地模拟出ISO16750-2所定义的电压波形,同时又有足够的供电能力,可以满足应用的要求。
3.冷启动电池电压发生器的实际电路
设计要用的Buck转换器以RT8131BGQW为核心,它是一颗以连续电流模式工作的Buck控制器,其封装引脚配置和应用电路如图4所示。
图4
RT8131BGQW是一颗电压模式控制架构的单相同步Buck控制器,可在5.5V~26V的输入电压范围内工作,其VCC引脚还需要一个独立的5V为其内部控制电路和MOSFET栅极驱动器供电。
它具有参数可调的过流保护,通过其VOS引脚可设定输出过压保护窗口。
它所采用的电流连续控制模式使其具有巨大的电流供应和吸入能力,这种特性使其具有快速改变输出电压的能力。
我们的设计需要使其输出电压为典型的12V,相应的补偿网络的参数可以用立锜电压模式转换器补偿网络设计工具计算求得。
我们可以将其过流保护阈值设定在比较高的水平上,这样可以让其具备供应和吸入大电流脉冲的能力,这在需要驱动大型外围元件及使用大容量输入电容的情况下就是很有必要的。
我们最后得到的RT8131B12V输出降压电路如图5所示。
图5
为了得到12V的输出,输入电压至少应有16V。
补偿网络的参数是根据输出电容C16的ESR参数计算得出的。
VOS引脚的连接位置与FB相同,目的是要拥有最大的过压保护窗口,避免在快速改变反馈调制信号的时候出现误触发。
下桥开关由两只MOSFET构成,目的是提高过流保护的触发阈值,避免在输出电压快速变化期间出现误触发。
与Arduino有关的电路部分见图6。
图6
Arduino的D5引脚用作PWM信号输出,D6用于驱动LED。
D2和D3用作两个按钮开关的输入,每按一次S2就生成一次冷启动信号,按一下S1则会以1.5s的周期输出30次冷启动信号。
为了检验设计的正确性,我们需要通过实际的测试来看看效果,图7中的黑色曲线是测量出来的波形,红色折线是模拟的曲线。
图7
Arduino的D5引脚输出的标准PWM信号频率是980Hz,这么低的频率就需要使用3dB带宽很低的低通滤波器,这样就提高了获得快速变化的输出电压波动的难度。
为了达成设计的目标,我们使用了特殊的命令来使ArduinoD5引脚输出62.5kHz的PWM信号,这就使得低通滤波器的3dB带宽可以做到1kHz,使生成快速变化的电压波动成为可能。
生成冷启动波形的PWM信号的变化与Buck转换器输出波形的变化是相反的,图8是对PWM波形的一个模拟,它是对Arduino生成PWM信号进行编程的一个基础。
图8
PWM调制信号是以RT8131B的反馈参考电压0.8V为基准的,这样就使得我们在减小可变电阻P1的值以增加调制的深度时不会造成基准电压的变化。
4.Arduino程序
这个项目需要用到的Arduino程序很简单,复制并直接粘贴下述代码到Arduino程序编辑窗口便可以使用。
//ProgramforArduinoNanoforself-madecarbatterycold-crankwaveformgeneratorincombinationwithRT8131BGQWBuckcontroller
//RolandvanRoy,RichtekEuropeFAEJanuary2021
voidsetup(){
TCCR0B=TCCR0B&B11111000|B00000001;//forPWMfrequencyof62500.00Hz,notedelay
(1)gives15.8usecdelay
pinMode(5,OUTPUT);//PWMoutputonpin5
pinMode(6,OUTPUT);//LEDmountedonpin6
pinMode(3,INPUT);//switchmountedonpin3
pinMode(2,INPUT);//switchmountedonpin2
analogWrite(5,42);//setPWMfor0.8Vinitialoutput
}
voidloop(){
if(digitalRead(3)==HIGH){//run1timeprofile
profile();
}
if(digitalRead
(2)==HIGH){//run30timesprofilewith1.5secinbetween
for(inti=1;i<=30;i=i+1){
profile();
delay(32000);//0.5sec
delay(32000);//0.5sec
delay(32000);//0.5sec
}
}
}
voidprofile(){//crankprofilesubroutine
digitalWrite(6,HIGH);//LEDON
//step1
for(inti=42;i<=192;i=i+1){
analogWrite(5,i);
delay
(1);//150stepsin1*15.8usec=2.37msecbutwillbe~5msecwhenincludingprogramdelay
}
//step2
delay(315);//delay5msec
//step3
for(inti=192;i>=129;i=i-1){
analogWrite(5,i);
delay(100);//63stepsin100*15.8usec=100msec
}
//step4
delay(3150);//50msec
//step5
for(inti=129;i>=105;i=i-1){
analogWrite(5,i);
delay(126);//25stepsin126*15.8usec=50msec
}
//step6
delay(3150);//delay50msec
//step7
for(inti=105;i<=129;i=i+1){
analogWrite(5,i);
delay(126);//25stepsin126*15.8usec=50msec
}
//step8
for(inti=129;i>=92;i=i-1){
analogWrite(5,i);
delay(85);//37stepsin85*15.8usec=50msec
}
//step9
delay(3150);//50msec
//step10
for(inti=92;i<=117;i=i+1){
analogWrite(5,i);
delay(126);//25stepsin126*15.8usec=50msec
}
//step11
for(inti=117;i>=67;i=i-1){
analogWrite(5,i);
delay(504);//50stepsin504*15.8usec=400msec
}
//step12
for(inti=67;i>=42;i=i-1){
analogWrite(5,i);
delay(13);//25stepsin13*15.8usec=5msec
}
digitalWrite(6,LOW);//LEDOFF
}
5.使用冷启动电压发生器
冷启动电压波形发生器可以用来对多种设备进行测试,如车用前置预稳压器、车用POC摄像头系统、车用USB-C充电器等等。
把18V电源连接到RT8131B的输入端,将Arduino板连接到RT8131BEVB的GND、VCC和反馈调制输入端,再把需要测试的东西连接到RT8131B的输出端即可。
图9显示的是使用冷启动信号发生器测量具有36V耐压、可输出5V/