为了这盘醋包的这瓶饺子,一个小型高速电子负载
简介
论做一个程控电子负载需要几个单片机引脚,要选什么功率管,要选什么运放?实现一个基于STC8G1K08A的小型电子负载。
简介:论做一个程控电子负载需要几个单片机引脚,要选什么功率管,要选什么运放?实现一个基于STC8G1K08A的小型电子负载。开源协议
:CC BY-NC 3.0
(未经作者授权,禁止转载)描述
参数特征描述:(想跳过小作文只看这里就可以了)
设计主题:一个小巧简单的高速响应程控电子负载,恒流模式,使用单色OLED屏幕与轻触按键进行交互
输入电压范围:2.5V~50V(额外提供辅助电源时的负载输入电压),无辅助电源输入时范围为4.5V~50V
输入电流最大:4A
主要功能:程控恒流模式,示波器,可免辅助电源,过热保护,防反接
最大持续功率(25℃环境):6W(不带散热底座外壳自然风冷)/10W(带散热底座外壳自然风冷)/22W(带散热底座外壳水冷)
峰值功率:50W
全量程电流上升下降时间:0.5uS(0.1A~4A)(方波调试状态)
负载输入模式:USB输入 + 负载接口输入
供电模式:USB辅助电源 + 负载供电
制作成本:元器件约50元,外壳约20元
成品图:
以下是小作文啰嗦环节:
某日,突然想到一个问题:
论做一个简单的程控电子负载,最少需要多少个单片机引脚?
简单统计(经过了内心无数次简与繁的撕逼(▼ヘ▼#))一下:
1个PWM做DAC(用DAC芯片功能多有逼格有速度,不了不了,说好的要简单),
1个内部ADC做电压采集(用ADC芯片位数高速度快有逼格,不了不了,说好的要简单),
1个内部ADC做电流采集(用ADC芯片位数高速度快有逼格,不了不了,说好的要简单),
2个IO做IIC单色OLED屏幕控制(搞个彩屏多炫酷多缤纷,不了不了,说好的要简单),
1个ADC做按键读取(弄个键盘触摸屏旋钮交互多方便多炫酷,不了不了,说好的要简单),
加起来6个,
巧了,刚好可用一个8引脚单片机实现,(怎么一个多的引脚都没有啊啊啊(╯‵□′)╯︵┻━┻)
那就用一个国之重器STC8G1K08A真的牛逼吧。
既然这个电子负载想要简单,那么也顺便做成小巧吧,
也顺便做成高速响应,做成恒压恒阻恒功率的,做成智能联网的,做成可以点烟的......
(不了不了,说好的要简单)
那就定设计目标:
一个小巧的高速响应程控电子负载,只有恒流模式,使用单色OLED屏幕与轻触按键交互。
为了整体性,建模打印CNC钣金亚克力面板我都不会选一个外壳吧,
选定一个用于电机驱动器的全铝外壳:
这个外壳拥有较好的散热效果(烧热之后从哪儿下手拿都烫手)和较小的体积(体积大的铝壳买不起,PCB也不能白嫖)。
首先来(经过五次版本迭代)定义设计目标:
100V,10A(电压采集和发热很难处理);
40V,3A(电压电流经过测试过可以再放开一点);
输入电压范围:2.5V~50V,最大输入电流:4A;
这个电压范围是折中了电路结构复杂度和器件耐压,可以覆盖常用电压,也可以满足1S~11S锂电池测试。
而且这款单片机是真10bit的ADC,要满足0.1V的测量,最高测量电压只能到50V(冗余0.5 位示值)。
电流范围是折中了散热条件和高速响应目标(后会展开聊)。
鉴于部分小型与DIY电子负载是采用单独的12V电源供电,使用不是特别方便,
所以使用了双电源供电模式:
USB辅助电源 + 负载供电
辅助电源接入时使用辅助电源,无辅助电源时自动切换为负载供电模式,直接从负载取电;
需注意:当负载电压低于4.5V时,需要使用辅助电源提供大于4.5V的供电电压。
辅助电源使用目前最常用的USB TypeC 的接口供电,使用手机充电器或电脑都可以提供辅助电源,
USB辅助电源也可以做负载输入(对USB带载)。
TypeC接口连接了CC的5.1K电阻,可以对C2C模式取电5V,板上没有诱骗功能(USB输入耐压可以到20V)
使用5V输入电压作辅助电源相比12V来说其实是不太舒服的,
内部运放都只能使用低压版本的,运放输出的电压净空余量也比较小;
而且这个电压不能直接用于可靠驱动MOS管,这也是本设计选用三极管的原因之一;
但最不舒服的还是4.5V~50V的宽输入电压作辅助供电输入 (╯‵□′)╯︵┻━┻
而且考虑到噪声处理难度能处理但是懒得弄和电感式DCDC无法很好适应宽电压的特性(纹波电流问题)和简单简单简单的初衷
所以这一版本选择了使用线性稳压的方式。
这意味着辅助电源要能在4.5V的低压下要能保证内部器件正常工作,以及承受50V输入时的耗散问题;
为此,这个设计使用了双供电的方式进行折中,
在接入USB电源时使用USB的5V进行供电,未接入USB电源时使用负载供电;
这样可以在高压输入时提供可选的使用较低电压的辅助供电输入,减轻线性稳压电源的压力。
电子负载核心的内容之一:负载功率管部分
现在大多数电子负载都使用MOS管做主功率管,然后使用运放进行闭环控制。
MOS管具有很多优秀的特点,响应速度快,导通压降低,大家都在用的东西应该是好的吧?!
但是我个人认为,MOS管终究是电压控制电阻的器件,总感觉做恒流应用时转了一道不太直接,
既然也是做实验,那就试试更加直接的方案:
请出(来点灯光音乐闪亮登场):水龙头 三极管 吧!(ノ´▽`)ノ♪
用电流控制电流,这器件用与恒流电路看起来是多么般配啊(~ ̄▽ ̄)~
那我们来选三极管吧 (。◕ˇ∀ˇ◕) 50V,4A,看起来很多选择嘛!
不!设计初衷有一点:高速响应 (`゚Д゚´)ゞ 不谈响应速度的电子负载都不是好电源
虽然响应速度受多方面的影响(反正也是玩),但功率管是很重要的一环;
小信号三极管的特征频率能轻松到100MHz以上,大功率的三极管的电流能轻松上5A(我当然全都想要)
但是小信号三极管的额定电流通常只有几百毫安,大功率三极管的特征频率一般只有10MHz以内甚至都不提了;
天下没有免费的午餐但是有可以白嫖的PCB
那为了速度和电流都能满足,那就来点祖传的力大砖飞法:
并管!
晶体管的并联,响应速度和电压是保留单个管子的性能,但额定电流是叠加的,当然漏电和驱动电流之类也是叠加的,
并管要处理电流均衡的问题,管子的不一致性影响会随着数量的增加而变得更糟糕,
用40个5551进行并联似乎有点夸张,而且SOT23的封装散热不太好,SOT-89的散热也不是特别理想
经过三天三夜翻淘宝翻立创商城后,最终选用了TO-252(买得起的)小功率管分进行并联,
型号推荐可选 2SD1815 或 2SD669 (如果能选用到性能更佳的管子也可以的);
虽然管子标称的额定电流有 3A ,但是在数据手册的图表中可以得知,放大倍数在200mA后开始下降,300mA后放大倍数小于100
(UTC_2SD669_增益带宽与集电极电流关系曲线图)
(安森美_2SD1815_增益带宽与集电极电流关系曲线图)
那么意味着这个管子如果想要获得最佳的频率响应和放大倍数(大于100倍),
单个管子只能设置不超过300mA的电流 没用到的电流能不能退钱?!(▼ヘ▼#)
太多的管子装不下也太夸张,太少的管子总电流也太少,16只管子刚好可以挤下,并联可以满足4.8A的电流。
为减少因管子不匹配造成的影响,分成了4组进行并联。
由于每只三极管需要300mA输出电流,基极电流最少要保证3mA,这显然使用运放直接单级输出给三极管并不现实,
所以使用两级三极管构成达林顿以满足输出电流和降低板内辅助电源的压力;
但是达林顿结构会增加最终输出的饱和压降(增加了一个管子的Vbe),
所以使用三极管做功率级会限制最低输入电压,这也是多数现代电子负载不使用三极管的原因之一。
本次设计舍掉低压输入范围,以此来展现三极管的电流处理能力。
电子负载核心的内容之二:环路控制部分
简单逛逛可以了解到:目前多数开源的电子负载,速度高一点的就选用TL084,速度低的就选用LM358;
TL082、TL072类的带宽大概是3MHz左右,358类的带宽大概是1MHz左右;
那么这个带宽和实际最终的响应速度又有什么关联呢?应该选怎样的运放才合适呢?
以下来聊聊乱吹一波我的看法:
我们先从运放最基本的黑盒分析思路来引入:
运放的基本公式:Uo=Ao * (Up - Un)
Uo 是输出电压,Ao 是开环增益,Up 是输入正端电压,Un 是输入负端电压。
式子挪一挪:Uo / Ao = (Up - Un)
当 Ao 趋向+∞时,Up = Un,也就是很多人所谓的“虚短”
但我更喜欢用:
“运放在构成负反馈时,会想方设法使 Up 和 Un 相等”
来描述这个现象。
这个现象是最常用于简单计算的,也是用于构建表达式的简化条件之一。
但如果 Ao 不是 +∞ 呢?Up 还依旧等于 Un 吗?
在直流情况下,现代运放的开环增益 Ao 可以轻松达到80dB以上(10k倍),高增益的产品可以达到130dB(3M倍)
但是为了稳定性,运放设计时会主动抑制高频的开环增益,让开环增益随频率增加而下降,
控制增益下降的速度要比内部晶体管本身特性快,且下降速度是比较稳定的(大概每增加10倍频率增益下降20dB(10倍));
当开环增益降低到 0dB (1倍)时,定义这个频率为运放的带宽。
那么如果把开环增益 Ao = 1 这个条件再代入到运放的基本公式里面去呢?
那就剩下了 : Uo = Up - Un ,输出等于输入两端电压差。
那么在这个状态下也就没有什么 “虚短” 的说法了。
LM358的开环增益与频率关系
然后我们把这个特性代入进去常用的同相放大电路中,
计算其关系式:
Up = VIN ,Un = (Uo - 0V) * (R1 / (R1 + R2)) + 0V
(负端电压等于输出与GND之间R1与R2的分压)
根据 Uo = Ao * (Up - Un) ,
得出 Uo = VIN / ( (1 / Ao) + (R1 / (R1 + R2) ) )
(输出电压等于 VIN 除以 Ao 的倒数 加上R1和R2的电阻分压比)
Ao 为 +∞ 时,放大倍数就是我们常见的 (1+R2 / R1)
可见,1/Ao 是放大倍数中导致误差的部分,Ao越小,导致误差越大。
既然这个误差可以写到式子中,那么应该也是有办法去补偿的。
以下是这个设计中使用的差分电压控制电流简化电路:
在直流中,各个环节的放大倍数分析比较容易得出,
但在交流中,就需要把寄生参数和器件的频域特性加入了,但主要的关系式是不变的,只是参数多了。
当 R1/R2 = R3/R4 时,基本的关系式:
然而在实际的负反馈电路中,我们往往会遇到这样的输入输出现象:
输出要么想要快但是过冲了,要么想要稳定但是过慢了 (╯‵□′)╯︵┻━┻
应对这种问题,也有很多的解决办法,也就是环路补偿的方法,
最常见的就是在频域上进行系统零极点的分析,然后进行补偿,这种方法很多大牛都有讲解。
但频域分析有一点不太友好,就是一般我们无法获得足够的系统参数来进行模型搭建,
而且大多数情况下实验室也没有配备相频特性的扫描设备。
所以在系统负反馈设计中更多的会使用时域的方式去进行分析,尽量从时域上获取需要的信息。
对于环路响应的设计,我个人是偏向于找短板,让快的器件去等慢的器件,
先是确认每个传递环节的开环响应,看看最后是谁拖了后腿,
然后再让快的器件速度慢下来,最后尽量让整个链路实现阻抗匹配。
个人认为开环特性在闭环中也是很重要的,开环不好看闭环也很难调。
好了,东扯西扯一轮后,开始实操了。
先是测量功率级三极管的开环响应,给CTR输入一个0~3V的方波阶跃(上升速度小于10nS),测量检流电阻R16上的电压:
测出的波形:
可以看到输出的电流波形是非常跟随输入的控制信号,在开环下没有什么过冲 (~ ̄▽ ̄)~
然后可以观察到在我们需要的1A(一个管子250mA)时,电流上升时间需要200nS,
可见这个功率级的开环特性很漂亮,给多少就输出多少,比例近乎稳定,那我们就可以大胆地开干了。
得到了功率级的响应后,下一步就是选择运放了。
那么就引入了一个问题:200nS 对应多少的带宽呢?
一般来说带宽都是按照正弦波的频率来定义的,正弦波对应的是三角函数奇变偶不变,符号看象限#@¥%**#
我们先来计算期望的电流斜率 (1A/200nS) 对应的频率:
A 为纵轴的系数,f 为频率,斜率为 k,时间为 t 。
A * sin(2 * pai * f * x) 函数的最大斜率点是 t=0 的时候,t=0 时的导数就是 d = A * 2 * pai * f
因为其他时刻的斜率都小于这个斜率,所以获得最大的斜率也就等于获得了这个最高的频率成分。
斜率: k = A / t = A * 2 * pai * f = 5A/uS ,求得 f = 0.796MHz 。
回到上面差分电压控制电流的图,虽然整个差分放大电路是 R3/R4 倍的关系,
但其实对于运放真正的放大倍数是同相放大那一边,也就是 R3/R4 的衰减而产生的放大倍数
当 R3/R4 = 0.1 时,运放闭环放大倍数为 1.1,
那么实际运放需要闭环放大的带宽就是电流的频率乘上放大倍数 = 0.796 * 1.1 = 0.876MHz
0.876MHz带宽,看起来好像也不是很高,
但是别忘了,前面提及到,运放的开环增益是造成闭环增益误差的成分,
如果选用的是一个0.876MHz带宽的运放,那么在此时的开环增益只有1,误差和放大系数比例高达 11倍
那么就是说,运放在 0.876MHz 这个频率点上,如果开环增益能更大,导致的误差就会更小。
假设我们选用一个10MHz带宽的运放,按照一般每10倍频率开环增益下降20dB的规律,
那么可以获得在10MHz时候,运放的开环增益大概在 Ao = ((Fbw / F) / 10) * 20dB = 22.8dB(13.9倍)
把这个开环增益代入到前面提到的同相放大电路式子中,
可以获得在5MHz频率时的关系:Uo = VIN * ( (1 / 18) + (10 / 11) ) = VIN * 0.981
和直流下的理想状态 Uo = VIN * 0.909 的误差有6% 。
如果使用5MHz带宽的运放,误差大约是26% 。
知道了需要放大的闭环带宽,那么来算一下补偿的事情,我们尝试在时域的角度来看待这个问题:
这个电路中,条件:VIN_N = VOUT_N = 0V , VIN_P = 0~3V ,Rsense电流 0~1A,运放使用5MHz带宽,
VIN_P 经过了R1和R2的分压后,进入运放正端的电压 Vp 就是 0~0.2727V
运放负端 Vn 的电压在开环增益变小 (28.6dB) 的影响下 = VRsense * ( (1 / Ao) + (R4 / (R3+ R4) ) = 0.2943V
此时 Vp 和 Vn 的电压差就是 0.2727V - 0.2943V = -21.6mV
我们用时刻分析的角度,当实际电流到达1A时,运放输入负端电压其实已经等于正端电压,此时运放应该停下来,
但由于开环增益导致的误差,我们就需要在输入端补上这个电压差才能使运放停止继续摆动。
下图为实际电路的简化图,描述了功率级输出和反馈补偿的主要回路
为了让运放负端添加这个补偿电压,如图在反馈回路中加入了R5,R6和C1,
R5和C1是组成RC充电功能,提供一个在一定时间建立的电压,用于在变化时刻对负端电压进行补偿,
R6的主要作用是可以隔离开 R3 和 R4 分压的阻抗,更好地调节负端电压受RC充电回路的影响,
当然,这里用频域的角度去分析就是调整零极点的数量和位置了。
上图运放的补偿回路中通常有一点会被忽略,就是运放的输出端的电压摆动是形成补偿的重要信号源,
如果运放输出端在负载电流变化的过程中没有形成电压变化,那么补偿回路也将是无用的,
除非补偿环路的信号源连接到了一个有相关性的存在电压摆动的位置,或者使用跨阻放大器之类的形式。
如上图中的参数,可以得出,输出在1A电流时,运放输出端电压约等于 VRsense + VQ2be + VR8 + VQ1be + VR7 = 1.82V
当输出电流在接近0A时(三极管保持微导通状态),运放输出端电压约等于 1.4V (实际Vbe的电压会偏低到0.6V左右)
当阶跃电流为1A时,运放的电压摆动约为0.4V,可以提供给运放负端最大的补偿压差约为 0.4 - 0.2727 = 0.127V
在此时可以发现,如果因开环增益导致的误差电压大于补偿电路可以提供的压差,再调整补偿环路将降低速度,
需要加大补偿源电压摆幅对信号的比例或者选用更高带宽的运放。
反馈补偿的电路可以看成是一组电阻分压结构,电容 C1 用RC充电的时域方法分析。
RC回路的阻值R5和R6为了减少运放输出的压力,选取 KΩ 数量级的,时间常数在1uS以下,电容量就在pF级别,
由于功率级的电流建立时间在200nS,那么我们需要在200nS时,给运放负端提供约 21mV 的补偿电压,
补偿的总电压差是127mV,初定R5 = R6时,电容在200nS时需要充85mV的电压,也就是67%,
电容值C1选取一个最小且一般能忽略寄生电容的值 20pF,得出 R 大概在 9KΩ 左右。
不同的R5和R6比值可以获得不同的响应特性:
R5用于限制电容补偿的比例,容性占比越大低频的误差也越大(直流成分也被补偿了)
R6是提供需要的RC常数剩余的R部分,同时也补偿R5和C1吃掉剩下的电压以满足足够的补偿成分进入运放负端。
当然,计算只能给实际电路作指导作用,各种寄生参数和器件实际的参数都会造成影响,最后还需要进行微调。
然而,使用RC补偿回路考虑了充电,还有放电,所以最终的响应时间还需要加200nS。
得出的结果是整个环路的速度上限大概就是功率级开环速度的一半,
运放速度越快需要补偿的成分越少,误差也越小。
这种以阶跃为分析思路的方法其实并不能直接与实际情况对应,因为现实中的变化并不是阶跃而是连续的,
运放也不会停在那里一动不动地等,但也算是提供一种分析的思路而已。
针对时域的调试方法:
在不添加补偿环路时,输入一个阶跃的方波信号,查看输出波形,如果波形边沿是偏慢的,那么就是运放速度不够快;
如果波形上升边沿足够快,出现了超调,那就是运放速度足够,需要添加补偿环路;
如果只添加电容超调可以压下来而且上升速度没有减少太多,那就不增加电阻;
如果只添加电容超调下来了,但是上升速度太慢了,就添加电阻提高速度,如此反复尝试趋势。
对运放选型搭配的简单总结就是:
先对功率级控制输入阶跃来确定开环输出的最高速度,最终整个环路的最高速度大概是开环速度的一半,
对比设计目标,看是否满足速度要求,计算出此时摆率对应的频率;
选取几款符合实际情况(采购、库存等因素)的运放,计算此时因运放开环增益造成的误差,
观察误差能否满足此时摆率的需求,最后根据这个误差来计算补偿环路需要的值。
实测结果:
电流上升时间约在500nS内完成,且无明显过冲,下降时间较长,是由于三极管拖尾且基极电阻较大造成的。
这里可能会有疑问:既然电流控制是直流输出的,为什么还在意这个电流响应速度呢?
是因为信号的波动可以转化成环路中的其中某段的变化,比如把设置的波动转移到输入电压的波动,
就是如果输入电压是波动的,电流还可以按照这个响应速度去保持恒定,以尽量等效成一个恒流源。
以下是各部分电路的简单描述:
工程指引:
电源输入部分:
USB电源输入接到 USB_VINP ,经过两个PMOS并联做负载切换开关,这里可以选用其它型号单只也可以的,
这里最大电流是4A,由于封装是SOT-23,耗散需要尽量不大于0.3W,
3401的内阻大概在 60~80mΩ @Vgs4.5V,而且是个量大便宜的型号,并联两只也不过分。
Q8是用于控制切换USB负载输入的,SW_P连接到切换开关,高电平(约1.4V)有效。
负载从P6端子输入,经过D2进入负载管。
D1和D2做防反接和防倒灌,最大输入电流是4A,电压50V,二极管选用SS56型号。
测试过用两个同型号二极管并联压降只减少了10%,所以还是使用单管;
而且根据肖特基的特性,温度更高时压降更低,只要温度不过热就单管更划算燃烧吧肖特基!~~( ⓛ ω ⓛ *);
(反向漏电也会增大,但这里正常导通的情况下不存在突然反向的情况,所以不影响)。
辅助电源输入部分:
USB输入经过 D3 连接到线性稳压输入,用于优先使用 USB 电源作辅助供电。
负载输入经过 D4 和 Q9 连接到线性稳压输入,Q9 用于控制在USB接入时停止从负载获取辅助供电;
Q11是让USB接入电压(大于1.4V)时关闭Q9的输出;
R65和R67两端由于需要承受50V电压,所以串联增加耐压(0603普通电阻两端建议不超过50V);
Q10,Q12和R70组成恒流源,用于在4.5~50V输入范围内给Q9提供相对稳定的驱动电流,使用电阻适配这个电压范围功耗较大;
Q9虽然只承担最大约40mA电流,Ibe理论上满足0.4mA甚至更少(β大于100)就足够,
但三极管的饱和Vbe是根据实际的 β 来变化的,为了获得较低的Vce,通常需要将β压到10以下;
长电 MMBT5401 Vce 与 Ic 的关系表
所以给Q9的基极使用了恒流源驱动,提供约2.7mA,β虽然在15左右,但Vce实测已经在0.1V左右了,
更大的驱动电流会导致高压输入时功耗过大,而且对降低Vce压降的贡献并不大;
USB输入作辅助电源给线性稳压输入中间压降最大约0.4V,负载输入端供电损耗最大约0.5V,
线性稳压输出是3.3V的,由于电路结构的原因输入输出压差需要大于0.6V,
加上切换电路的损耗,刚好可以满足最低4.5V的输入电压;
这里可能会有疑问,这里既然考虑压降,那为什么Q9不适用PMOS,
原因是:这里使用MOS管还需要给管子GS做钳位,而且这个耐压的MOS价格比三极管高得多,
三极管自带高耐压和稳定钳位的特性,在很多场景还是很好用的三极管牛逼!
由于线性稳压输入电容是陶瓷电容,具有超低ESR的特性,热插拔时容易和导线电感形成谐振升压,
所以R79和R64的作用是增加链路阻尼,把谐振点压下来,避免在热插拔时出现过高的电压尖峰。
C22和C23串联是为了提高耐压,因为超过50V的陶瓷电容价格高用量少。
要注意的是,OLED屏幕的供电电流会持续有一个10KHz左右的三角波,估计是电荷泵的电流,
由于电路储能电容较小,所以总的供电输入会产生加大的电压纹波,从而使陶瓷电容啸叫,
因为考虑到温度较高的原因没有使用铝电解电容,钽电容的耐压不足而且死贵死贵的。
这个现象是正常的,而且在辅助供电电压较高时明显。
所以各位小伙伴不要忽略OLED屏幕工作时的电流对其它部分的影响。
辅助电源稳压部分:
设计使用了分立器件搭建的线性稳压器,因为集成方案耐压一般不超过40V。
Q14,Q15,R71,R75,R76组成恒流源给431和Q13基极供电,电流约2.7mA(431需要保证大于1mA的供电)
由于是三极管扩流的方式,C24用于降低431对输出的响应速度我愿称之为自欺电容,使环路稳定。
第一级稳压3.3V主要用于给运放供电,让运放拥有更多的输出电压裕量,同时也给MCU部分提供电源;
第二级稳压3.0V主要用于给MCU供电,同时给ADC采集和DAC输出提供参考电压。
注:431芯片可以替换各种厂家的,只要脚位相同,基准电压变化可以调整分压电阻。
电流采样与电流设置部分:
左边是负载电流采样电路,右边是负载电流设置电路。
电流采样使用低侧采样方式(因为对外接口只有一个负极回路,不存在电流分支的问题)
电流采样电阻的阻值是在满足功耗和压降要求的前提下越大越好,因为电阻转换电流的增益是便宜且稳定的,
这里设计最大采样电流是4A,20mΩ的电阻产生80mV的电压差和320mW的功耗,可以满足要求。
为降低由于铜箔温漂与电压采样的影响,电流采样使用差分模式,(电压采样使用单端模式)
电流到电压的系数为 4.5A->3.0V ,R8和C5是用于给ADC采样电容提供和吸收电荷的(真不是为了滤波(;′⌒`))
电流设置的DAC采用了PWM滤波的方式,这种方式简单且拥有非常优秀的线性度。
但缺点也是明显的,就是没法同时获得平滑的输出和快速的变化,所以一般适合用于直流场景。
V_D_PWM连接单片机PWM输出引脚,由于电源是由431提供稳定的参考电压,所以方波的幅度也看作稳定的。
R9,C6,R10,C7组成的滤波取值是有依据的,因为这里单片机DAC位数是10位的,频率约为10KHz
那输出的DAC电压抖动应该需要小于 1/11 位,也就是 1/2048 ,当然更低也是可以,但是速度会更慢;
所以这里的滤波电路需要将输入的基波成分衰减到 1/2048 也就是 -66dB 以下才能满足要求,
多级的滤波器衰减dB数是相加的,而且两级滤波可以更好兼顾衰减倍数和变化速度(频响拐点更陡峭)。
实际设计时基于现有用料的考虑,使用10K,1uF,100nF的组合,10KHz时衰减-92dB。反正直流为主你管我有多慢
RP1电位器是用于把输出改成方波电流模式,方波模式时不焊接 U3 和 C6,C7,R12,电阻R9与R10改为0Ω,
此时单片机将无法读取输出电流,负载的电流约为10KHz的方波,幅度由电位器RP1调整,程控电流改变占空比。
这里的运放选用8552这款自校零的轨对轨运放,自校零功能省去了对失调电压的补偿工作,
而且这款型号用量较大(据说是电子烟用量很大),价格也比较低。
注:这里也可以使用其它型号或厂家的运放,没有带宽要求,但失调电压需要尽量低于0.1mV(电流采样)
电压采集部分:
来到这个最多此一举的部分了
电压采集使用单端的电阻分压形式,MCU的0V参考单点连接输入端子的0V,
由于需要切换采集USB和负载输入的电压,但是MCU又没有多的引脚,对,这个就是我自找的折磨自己的
所以外加了一个模拟开关来切换采集电压,而且负载输入和USB输入的分压比要保持一致,
负载输入与USB输入的切换是外部开关控制的,全程MCU都不知情,采集到的就是加载到功率管的电压。
C14是靠近ADC引脚的储能电容,用于给ADC的采样电容提供电荷。
然后会发现分压上电阻上还并联了C9和C10两个小电容,这是作甚的呢?
对头,就是为了示波器的功能!
因为我们为了采样可靠性,没办法减少次级和ADC侧的电容,上电阻又是较大的阻值,
如此一来形成了一个低截止频点的低通滤波器,而且分压比例随频率变化而变化,
既然次级没办法减少,那就在初级也增加一个交流通路,使交流成分能绕过电阻进入到次级,
那这个电容的比例是多少呢?
就是上电容和下电容的比例和电阻的分压比一致,而且注意这里包含了回路所有的寄生电容。
示波器表笔上的微调电容就是这个上电容,调整好比例后就可以在全频段获得稳定的衰减比例了。
这个设计由于示波器需要的精度不高,所以没有进行精确配比,
但要注意100pF和1nF尽量都使用NP0或C0G的电容,减少温漂和误差。
温度保护部分:
温度保护的NTC放在功率管板上,温度变化导致阻值变化,(注意功率板上的NTC千万不要焊成定值电阻!(╯▔皿▔)╯)
三极管自带一个很好用的基准电压Vbe,这里就用Q1的Vbe来比较NTC阻值是否降低到一定值了,
Q3用于提高增益,使保护时的触发点更加陡峭,输出把进入ADC的电压值拉低,
单片机判断到测量的ADC值过低,就会触发欠压保护,从而实现过热保护。
此处调整 R22 的值就可以改变温度保护的触发值。
由于温敏电阻与功率管之间热阻的存在,以及多管并联的不一致性,所以建议温度保护值设置需要相对保守。
按键电路:
这里采用模拟量分压的方式来读按键,这种方式的可靠性一般,但一般不受潮是问题不大的。
这几个阻值是列方程解出来的,分压比例分布相对均匀,可以比较可靠地识别所有按键的单按和多个同时按下。
功率级输出电路:
功率级输出使用达林顿方式搭建,降低运放输出和辅助电源的压力,也增加了电流放大倍数。
这里使用了 Q1 和 Q6 是为了可以在需要截至时电流可以快速下降,给功率管的Ib放电。
C1,D1,D2,R11 是为两个推动管提供偏置,C1 提供 Q6 交流时的驱动电压,使需要 Q6 导通时基极可以低于0V。
功率级满载的最低压降为:VR16 + VR12 + VQ3be + VR2 + VR1 + VQ1ce = 1.4V
但由于前级还有防反接二极管和总检流电阻,还需要加上0.8V左右,还有一些导线插座内阻,所以最低输入电压最少2.3V。
这里的 R1,R6,R12~R15 默认是0Ω,也可以更改这里的阻值对响应来进行调整。
功率管 Q2~Q5 可以根据实际情况进行型号更换,也可以尝试不同管子的性能表现。
功率管的基极电阻是用于平衡管子不一致性产生的Vbe,基极电阻越大平衡效果越好,但是会降低速度。
例如在1A总电流输出时,4个管子之间Vbe的最大误差为20mV,那么47Ω的电阻上就会形成0.4mA的电流差值,
占2.5mA基极电流总的16%,假设管子的β接近,那么均分的功率误差也在20%左右。
当然也可以在三极管的发射极增加平衡电阻,但电路特性将不太一样。
由于采用了四组功率管,所以这里原理图使用了复用图块功能,但由于PCB布局不一致,所以PCB没有复用。
运放输出控制部分:
这里的运放补偿参数适用于5MHz~10MHz带宽的型号,但具体参数还需要根据实际情况微调。
实测3MHz及以下带宽的运放不能达到500nS内的电流上升时间,建议使用5MHz以上带宽的运放。
(实测使用 COS722,SGM722等可以获得不错的效果)
要注意运放的失调电压会影响输出电流的最小值和多路的一致性,也会影响设置的电流的精度。
这个电路是用于在停止输出时可靠关断运放输出。
因为运放的失调电压会使在设置电压为0V的时候还会有电流输出,
所以这里使用 R23 来在PWM停止的时候进行上拉,使运放输入设置的负端电压高于正端,从而可靠停止输出电流。
V_D_PWM 连接到PWM输出脚,Q2充当二极管和增加输入阻抗的功能,C15用于保持Q4导通,R27用于停止时放电。
Q5 是用于点亮负载电流开启的指示灯。
Q4 需要用内阻尽可能小的型号来降低正常工作时的压降,Q5由于栅极需要高输入阻抗所以才使用MOS管。
PCB描述:
本设计一共由三块PCB组成:主控板,功率板,显示板
主控板安装在上层,功率板安装在主控板下方,显示板安装在主控板前方。
由于空间比较拥挤,所以没有在PCB上标识位号,但是有单独的器件值图层便于装贴器件。
下单时可以选客编加在指定位置,这样客编就会放置在安装后不起眼的位置。
器件均为正面贴装,只有屏幕是在背面焊接。
建议使用SMT代工或者使用预热台进行焊接,功率板尽量不要使用烙铁焊接螺丝柱和三极管。
主控板:
注:PCB需要选1.6mm厚,背面的阻焊开窗和正面的螺丝孔位置尽量不要额外上锡,以免影响螺丝按照平整。
功率板:
注:PCB需要选1.0mm厚,背面阻焊开窗尽量不要额外上锡,以免影响装配平整。
PCB上的飞线是几个供电螺母之间的提示,最终由主控板连接,底板忽略即可。
显示板(TOP层为安装背面):
注:PCB需要选1.0mm厚
PCB都绘制了元件装配层:
可以单独导出这一层为PDF或者按照这一层高亮来焊接元件。
附件中的ASM开头的pdf就是装配层导出的PDF。
装配描述:
BOM表的器件值以器件名称为准,器件名前有 * 号的意思是默认不贴装。
附件的BOM表做了按键和插座的名称修正。
设计中的大容量(4.7uF及以上)陶瓷电容除了标识50V耐压的,其余均可以用10V以上耐压的型号。
小信号三极管的型号耐压能满足50V以上就可以替换。
主控板:
轻触按键的长度建议使用8~10mm的,这样组装后比较容易按到按键;
由于MCU烧录口共用按键采样口,所以 C3 电容(按键滤波电容)需要在烧录前拆掉,烧录后再焊接上;
自锁开关选用5.8*5.8卧插封装,需要装一个大于等于5mm的键帽才比较好按;
功率板:
功率板上的这些焊盘是焊接M3螺母的,注意规格有点特殊,常见的规格外径是不符合的。
底下一排螺母用于的固定和导电,所以主控板拧螺丝要拧紧,上面两个只是用于限位,甚至可以不拧螺丝。
要注意焊接贴片螺母一定要紧贴PCB按到底且保持平整,不然装配时候会连接不上和板子变形。
贴片螺母的规格:
注意底座最宽的直径是4.5mm,焊盘只有5mm,太宽的直径装不下
显示板:
显示板的LED是朝向装配后的正面的,也就是板子的Bottom层,可以使用倒装编带或者手工焊接。
贴片的8P排母需要尽量焊正,不然装配后屏幕会歪。
屏幕使用0.91寸的单色OLED屏,IIC接口的,
排线在背面焊接好后把屏幕折向正面即可,屏幕背后粘胶固定就可以,
注意排线的折弯半径不能太小,不然容易把排线折断。
实物图:
只有PCB是白嫖的,没有立创的SMT赞助,全是手工焊接的⊙﹏⊙∥
安装好的状态:
组装方式:
注意主控板焊接完后直插引脚需要尽量剪平,以免与功率板碰撞。
主控板和功率板通过M3螺丝和排针排母进行连接的,螺丝建议使用M3*5mm高度。
排母建议使用3.5mm塑高的,这样底下的贴片排针使用常规的6mm针长就可以连接上。
如果排母使用更高的塑高,那么贴片排针对应的高度也需要更长才能保证可靠连接。
三块PCB组装好后,在功率管背面贴上绝缘的硅胶导热垫,一定要绝缘的!
硅胶垫的厚度建议在0.5mm以下,建议硅胶垫尽量整块完整以免与外壳存在电气连接。
安装到外壳底座上(卷边外壳):
上两个固定孔使用M3*5的螺丝进行固定,下两个固定孔使用M3*12的尼龙柱进行固定
如果是带鳍片的外壳,底座的安装孔需要自行安装5mm螺柱才能上螺丝(使用5mm垫高柱也可以)
带鳍片的外壳底座:安装孔只留了四个攻了机牙的M3螺丝孔
装上四颗M3*5的不锈钢螺柱:
(由于外壳是铝的,不知道使用铜柱有没有影响,好像说是可以相互反应形成电池的,望指正)
检查主控板的插件引脚有没有碰到功率板的器件,以及检查螺丝是否太紧导致PCB变形严重:
烧录好程序后戴上头盔装好上盖:
关于程序:
程序主要功能包含:
程控电流,测量值显示,可调欠压保护,过功率保护,MCU欠压保护,示波器功能;
区区一个电子负载还加什么示波器啊?!?
示波器功能包括:
自动幅值调整,峰峰值测量,可调时基,上下沿触发,正常模式与自动模式扫描;
最高采样频率为100KHz,10bit 分辨率,最高刷新率>60帧/秒;
程控电流参数:
PWM是10位精度的,直接取系统时钟进行满10位计数,没有纠结实际的频率是多少,
设置的电流是按照每一位分辨率实际对应的电流来显示的,加减也是按照实际的PWM装载值加减1,
所以会看到设置的电流总是不为整数,对强迫症有很好的治疗效果。
(实用为主,如果为了示值圆整而处理,会丢失分辨率或者做示值的欺骗性舍入)
这次主要想挑战8引脚MCU的制作,顺便挑战一下8K的代码空间,所以也不用问为什么不用更大空间的MCU。
然而8K的代码空间实现完这些功能对我来言确实是比较困难了 (T ^ T)
代码写到最后就是东挤一挤西挪一挪把空间让出来,最后字库实在也是没办法放在EEPROM区了。
本来还计划加入软件校准功能的,但最后实在挤不出这点空间了,只能通过直接修改hex来进行补偿校准了。
程序采用任务切片模式,使用简单的任务调度,可动态加入或结束任务,提高资源利用率;
在设计开始加入了菜单功能,但由于空间有限就去掉了,菜单框架的代码是在其它项目里实现好的了;
程序使用了硬件乘除法功能,显著地减少了代码空间和运算时间,硬件运算非常强大。
屏幕显示没有使用显存模式,所有内容都是按需刷新,全屏刷新率一般大于40帧/秒(如果使用SPI可以更快);
ADC采样全局都没有使用滤波,都是读取直接用,数据最大抖动±1bit,属实真10位ADC。
你如果看见数据在跳动,那么要么是在四舍五入,要么就是信号真的在跳动。
由于为了压缩代码空间,代码比较乱,所以就不展示源码了,有兴趣的小伙伴可以单独讨论代码部分。
程序下载说明:
程序下载使用STC官方的 STC-ISP 工具下载。
主代码下载到代码区,字库下载到EEPROM区,选择不擦除EEPROM后下次下载就不用再下载字库。
主代码烧录固件为 “Dig_Loader_日期.hex” ,字库固件为 “font.hex”
烧录时用2.54mm间距的测试探针或者排针或者杜邦线顶住单片机旁边的四个烧录触点就可以,
顺序是:先在ISP软件上点击下载,再顶上单片机的烧录触点,等到烧录结束后松开触点即可。
烧录时只对烧录触点供电即可,供电用3.3V或5V都可以,板子不要上电。
校准方法:
修改文件的 0x1FA0 地址数据可以对电压电流进行校准:
数据显示是16进制的,高位在前,把十进制在计算器里面换算一下就知道十六进制的数值应该是多少。
比如说实测的电压比显示的电压高5%,那么就把默认值乘上 1.05 再填入对应的数据储存位置后下载即可。
记得不要勾选重新装载目标文件,不然修改固件的内容会被恢复掉。
第一次把固件烧录好后,后面烧录时就可以取消勾选下载需要修改硬件选项,且不用加载EEPROM文件。
数据储存位置:
0x1FA0 储存最大采样电流值,单位mA,16位无符号变量,默认4500
0x1FA2 储存最大采样电压值,单位mV,16位无符号变量,默认51000
0x1FA4 储存最大设置电流值,单位mA,16位无符号变量,默认4000
使用说明:
主界面描述:
主界面显示负载实际的电流,负载输入的电压,负载电流设置值,欠压保护设置值,和负载开关状态
指示灯描述:
LOAD_ON 指示灯用于指示负载电流是否开启;
LOAD_INPUT 指示灯用于指示负载电压是否加载;
USB_LOAD 指示灯用于指示USB是否接入负载;
按键描述:
ON/OFF 按键用于开启和停止负载电流;
+ 按键用于增加当前设置的数值,部分数值支持长按快加;
- 按键用于减少当前设置的数值,部分数值支持长按快减;
SET 按键为多功能键:
主菜单下短按进入示波器功能,欠压保护值设置状态短按生效设置值,
示波器功能时长按退出示波器功能,短按停止或运行示波器扫描;
USB_LOAD_SW 开关用于控制是否将USB输入接入负载,按下输入,弹起断开;
注意尽量避免USB与负载输入端口同时接入,即使内部有防倒灌二极管;
组合按键:
1,在主界面同时按下 + 与 - 键,进行欠压保护值设置,进入后欠压保护设置示值背景高亮,
再按下 + 或 - 键进行数值设置,最后按下 SET 键生效设置。
2,示波器界面下同时按下 + 与 - 键切换上下沿触发。
3,示波器界面下同时按下 - 与 SET 键切换自动扫描模式与正常扫描模式。
错误报告:
欠压错误: 显示 "LOW INPUT VOLTAGE !"
当负载电压低于设置的欠压保护值时启动负载电流触发,
错误在显示1秒自动清除。
过功率错误: 显示 “INPUT POWER TOO HIGHT !”
当负载电压乘上设置的电流值大于50W时启动负载电流触发,
错误在显示1秒自动清除。
MCU欠压错误: 显示"LOW MCU VOLTAGE !"
当MCU电压过低时触发,
产生原因可能为辅助供电电压过低或控制回路有错误,
错误在MCU电压恢复正常时自动清除。
接口描述:
负载输入使用2EDG-3.81的插拔端子,USB输入使用TypeC接口。
负载电流启动:
在任意状态按下 ON/OFF 键都可以启停负载电流。
设置欠压保护电压:
欠压保护生效时显示:
示波器功能:
示波器采样率最高为100KHz(100uS一个采样点)
时基可设置 100uS~50mS , 时基指示的长度为时间刻度线的长度,采样率为时基的 1/10
可设置上升沿触发与下降沿触发,自动模式扫描与正常模式扫描,
触发电平软件自动选取,不可手动设置(没有足够的显示空间和代码空间(ノへ ̄、) )
垂直量程根据峰峰值自动切换,垂直显示分辨率为 15 格,实际采样分辨率为 10 位,
切换示波器扫描模式:
由于扫描触发模式都是软件处理的,所以触发结果没有硬件触发那么优秀。
结语:
以下是旧版本的堆积,由于没有支付SMT的经济实力,大部分情况下板子是白嫖的,器件基本是手工焊接的。
嘉立创能不能时不时给一些SMT券好拯救一下颈椎(;´д`)ゞ
最后感谢嘉立创的免费PCB打样:
这个工程从2023年9月开案,历经9个月白嫖PCB十几次,6个版本迭代,最终定稿1.0。
当然了虽然经过数次大大小小的修改,但还是会有很多大小问题存在的。
如果有小伙伴可以帮忙设计外壳贴纸或面板的话也很欢迎,目前外壳是素的无指示标识。
欢迎大家拍砖讨论,后面看情况有没有下一代版本,如果有就是追求功能完整的版本了。
开源作者:a47klo(rm543),本设计未经授权请勿用于商用。
评论