1. 项目概述:为经典电源注入数字灵魂
如果你手头有一台像Unilab2这样的经典线性可调电源,你可能会对那两个用来设定电压和电流的碳膜电位器又爱又恨。爱的是它们直接、模拟的操作感,恨的是它们用久了容易磨损、接触不良,而且设定电流限值时完全是在“盲操”——你只能凭感觉拧,却不知道具体设到了多少安培。这个项目,就是为解决这些痛点而生的。它本质上是一个基于微控制器的智能前端控制板,通过一块4x20字符的LCD显示屏和两个旋转编码器,彻底取代Unilab2原机的模拟电位器,为其增加精准的数字设定、直观的数值反馈以及便捷的预设电压功能。这不仅仅是给旧设备加个显示那么简单,而是一次从模拟操作到数字控制的体验升级,让这台老当益壮的实验室电源焕发新生,精度和易用性直接向现代数控电源看齐。
核心思路非常清晰:利用微控制器(项目中用的是经典的ATmega328P)读取两个旋转编码器的动作,将其转化为数字化的电压和电流设定值。这些数字值通过数模转换器(DAC)变成0-5V的模拟电压,分别送入Unilab2原本连接电位器滑臂的电压设定(P3)和电流设定(P4)接口,从而控制电源输出。同时,微控制器通过模数转换器(ADC)实时采样电源输出的实际电压和电流(电流需通过额外的传感器测量),并将这些信息动态显示在LCD屏上。这样一来,你不仅能以0.1V/A的步进精度进行设定,还能实时监控电源的实际工作状态,真正做到心中有数。
注意:本项目是一个针对Unilab2电源的附加模块(Add-on),并非独立电源设计。你需要已经拥有或正在制作一台Unilab2电源。整个改造过程不涉及对Unilab2主板核心电路(如变压器、调整管、误差放大)的修改,风险相对较低,主要工作在新增的控制板上。
2. 核心硬件设计与选型解析
一套数字控制前端,硬件是骨架。我们需要选择能够可靠、精确地完成“感知-决策-控制-显示”这一链条的各个组件。原设计者Dieter的方案经过多次迭代,非常具有参考价值。
2.1 主控与显示单元:稳定可靠的基础
主控芯片选择了ATmega328P,这几乎是电子爱好者领域的“国民MCU”。它资源充足(32KB Flash, 2KB RAM, 23个I/O),ADC、定时器、通信接口一应俱全,并且有极其丰富的开发资源和社区支持。使用Bascom-AVR进行开发,对于习惯BASIC语法的开发者非常友好,能快速实现逻辑控制。
显示部分采用标准的4行20字符LCD模块,通常是基于HD44780或兼容控制器。这种屏幕性价比极高,显示信息量大(足以同时显示设定电压、实际电压、设定电流、实际电流、输出功率等),并且驱动简单,有现成的库支持。为了安装美观,设计中将屏幕“反向”安装在电路板元件面,透过机箱面板的开口显示,将PCB铜箔面作为前面板的固定基板,这是一个非常巧妙的节省空间和简化结构的设计。
2.2 关键信号链器件:精度所在
这是整个项目的核心,决定了设定和测量的准确性。
数模转换器(DAC):设定值的“发声器”Unilab2的电压/电流设定接口期望一个0-5V的模拟电压。我们需要一个DAC将MCU的数字设定值转换为这个电压。原项目提到了两款Microchip的DAC:
- MCP42xxx:这是一款数字电位器IC,通过SPI接口控制,内部相当于一个可调电阻网络。早期版本使用它,但它的分辨率通常只有256步(8位)。对于30V的输出范围,每步变化约117mV,精度可能不够细腻。
- MCP49xx(如MCP4912):这是真正的DAC芯片。MCP4912是10位分辨率,有1024步,对于5V满量程输出,每步约4.9mV,控制精度大幅提升。后期版本采用了它。如果追求极致,可以选用12位的MCP4922,精度更高。
实操心得:DAC的参考电压(Vref)直接决定输出精度。务必为其提供一个稳定、干净的5V参考源。可以使用电源模块的5V输出,但最好经过一级LC滤波或使用独立的基准电压芯片(如TL431)来获得更佳性能。
模数转换器(ADC):测量值的“听诊器”ATmega328P内置了10位ADC,用于测量实际电压和电流。测量电压很简单,通过电阻分压网络将电源输出(最高30V)按比例衰减到0-5V以内即可送入ADC引脚。关键在于电流的测量。
电流采样方案:从ACS712到ACS723
- ACS712(早期方案):这是一款基于霍尔效应的线性电流传感器。它非接触式测量,隔离性好,但作者标注了“不适合新设计”。主要原因是其精度和温漂可能对于实验室电源要求来说不够理想,且某些型号已停产。
- ACS723(推荐方案):这是ACS712的升级替代品。作者在V3版本中使用了ACS723LLCTR-05AB-T,量程为±5A。它的输出特性是:零电流时,输出为Vcc/2(即2.5V);电流每变化1A,输出电压变化400mV。这个信号需要经过运放调理才能被MCU的ADC(量程0-5V)充分利用。
2.3 信号调理与运放配置
ACS723的输出信号(2.5V ± 0.4V/A)需要经过两个阶段的调理:
电平移位(差分放大):首先需要减去2.5V的偏置,将双向电流信号转换为以0V为中心的正负电压信号。这可以使用一个运放(如MCP602的一半)搭建差分放大器电路来实现。
增益放大:为了充分利用ADC的量程,提高分辨率,需要对信号进行放大。例如,若想测量0-5A的单向电流,对应ACS723输出为2.5V到4.5V(变化2V)。我们可以通过运放(MCP602的另一半)将其放大2.5倍,变成0-5V的变化,刚好匹配ADC的满量程。
注意事项:运放电路中的电阻精度至关重要,尤其是匹配电阻的比值。使用1%精度的金属膜电阻是基本要求。作者在V1原型测试后,将分压电阻R11和R12更换为1%精度并精心匹配的阻值(91K和11.3K),获得了非常好的电压测量一致性。如果追求极致,可以考虑0.1%精度的电阻,但这会显著增加成本。
2.4 输入与交互设备
- 旋转编码器:选用带按键功能的增量式编码器。两个编码器分别控制电压和电流。旋转用于粗调/细调(可通过按下切换或程序实现长按加速),按下按键用于功能切换(如V3版本中,在预设电压模式下,按下编码器可切换回可变电压模式)。
- 预设按钮:三个带LED指示的轻触开关,用于快速切换至3.3V、5.0V、12V这三个常用电压档位。LED用于指示当前处于哪个预设状态,用户体验直接。
- 连接器:面板上需要安排电源输出的正极(Plus)、负极(Minus)和地(Ground)香蕉插座。这些在原Unilab2上就有,在新面板上重新布局即可。
3. 电路板设计与布局要点
一块好的PCB设计是项目成功的保障,不仅能确保电气性能,也便于安装和调试。
3.1 布局分区规划
可以将电路板在逻辑上分为几个区域:
- MCU及核心数字区:包含ATmega328P、晶振、下载接口、去耦电容等。此区域应远离模拟信号。
- 模拟信号区:包含DAC芯片、运放MCP602、电流传感器接口、参考电压基准。该区域需要特别关注电源纯净度和地线布局。
- 电源区:为整个控制板提供5V和3.3V(如果屏幕需要)电源。可能包含线性稳压器(如LM7805)及其滤波电路。
- 用户接口区:位于板子边缘,方便连接面板元件。包括两个旋转编码器、三个预设按钮(及LED)、LCD屏的排母插座。
- 对外接口区:提供连接到Unilab2主板的接口(电压/电流设定输出、实际电压/电流采样输入、电源输入),以及连接到外部电流传感器(如ACS723 BOB)的接口。
3.2 接地与走线技巧
- 星型接地或单点接地:对于这种混合信号(数字+模拟)电路,接地策略是关键。建议采用“星型接地”或至少在模拟地和数字地之间使用一个0欧姆电阻或磁珠进行单点连接,避免数字噪声串入敏感的模拟地。
- 电源走线:电源线应尽可能宽而短。在每个IC的电源引脚附近,务必放置一个0.1uF的陶瓷去耦电容,并尽量靠近引脚。对于运放和DAC,还可以额外并联一个10uF的钽电容或电解电容进行低频滤波。
- 模拟信号走线:DAC输出到Unilab2的线、ADC的采样输入线,应尽量短,并避免与数字信号线(如SPI、编码器脉冲线)平行走线。如果无法避免,中间用地线隔离。
- 作者提到的修改:在V2版本中,作者修改了IC8(5V稳压IC)周围的布局,消除了位于IC下方的过孔。这是为了防止安装IC时,过孔上的焊锡或助焊剂引起短路。即使修改后,他仍建议不要省略云母垫片(用于绝缘),这体现了严谨的工程习惯。
3.3 面板机械设计
PCB尺寸(160x110 mm)和屏幕开孔(100x60 mm)需要根据你选用的机箱具体设计。作者将PCB铜箔面直接作为前面板固定,LCD屏“背插”在元件面的排母上,这是一个非常紧凑的设计。旋转编码器和香蕉插座则安装在PCB右侧面板上。务必在打样PCB前,用实物或精确图纸进行1:1的比对,确认所有开孔、元件位置与机箱完美匹配。
4. 固件开发与逻辑实现
固件是项目的大脑,负责处理所有输入、执行计算、更新输出和显示。使用Bascom-AVR使得程序结构相对清晰。
4.1 主程序逻辑框架
程序主要运行在一个无限循环中,周期性执行以下任务:
- 扫描输入:读取两个旋转编码器的方向和按键状态,读取三个预设按钮的状态。
- 更新设定值:根据编码器动作,增加或减少电压/电流的设定值(通常存储为浮点数或整型变量,代表0.0-30.0V和0.0-5.0A)。同时检查是否超过硬件允许范围(如Unilab2的最大输出)。
- 处理预设:如果检测到某个预设按钮被按下,则将电压设定值直接更新为对应的固定值(3.3, 5.0, 12.0),并点亮对应的LED,可能同时锁定电压编码器的输入。
- 驱动DAC输出:将计算好的电压、电流设定值(换算成0-5V范围内的数值)通过SPI总线写入DAC芯片(MCP4912)。这里需要注意数据格式。
关键细节(MCP4912数据格式):MCP4912是10位DAC,但其SPI数据帧是16位的。高4位是配置位(如选择通道、输出增益、关断模式等),低12位才是数据位,而我们的10位数据需要左移2位后,放置在这低12位区域。Bascom程序中可能需要使用
SWAP指令来调整字节顺序以满足SPI传输要求。这是调试时的一个常见坑点。 - ADC采样与计算:
- 电压采样:通过分压电阻对电源输出电压进行采样,MCU的ADC读取后,根据分压比换算回实际电压值。
实际电压 = ADC读数 * (参考电压 / ADC分辨率) * 分压系数。 - 电流采样:读取连接ACS723(经运放调理后)的ADC通道数值。根据运放电路的放大倍数和ACS723的灵敏度(400mV/A),反向计算出实际电流。公式需要结合你具体的运放增益和偏置电压来推导。
- 电压采样:通过分压电阻对电源输出电压进行采样,MCU的ADC读取后,根据分压比换算回实际电压值。
- 计算功率与更新显示:
功率 = 实际电压 * 实际电流。然后将设定电压、实际电压、设定电流、实际电流、输出功率这些信息格式化后,输出到LCD屏的相应位置。 - 处理编码器按键:实现模式切换功能。例如,在可变电压模式下,按电压编码器可能切换粗调/细调步进值;在预设电压模式下,按编码器则退出预设模式,回到可变电压模式。
4.2 关键算法与处理技巧
- 旋转编码器去抖:编码器机械触点会产生抖动,必须在软件中进行去抖处理。通常采用状态机或延时检测的方法,确保一次动作只被识别一次。
- 设定值步进与加速:短时间快速旋转编码器时,可以增加步进值(例如从0.1V/A加速到1.0V/A),方便快速调节。这可以通过检测两次旋转事件的时间间隔来实现。
- ADC滤波:电源输出可能存在纹波或噪声,对ADC采样值进行软件滤波能获得更稳定的读数。最简单有效的方法是移动平均滤波:维护一个固定长度的数组存储最近N次采样值,每次显示时取平均值。
‘ 示例:移动平均滤波(伪代码) Dim AdcBuffer(10) As Word ‘ 缓存10次采样 Dim BufferIndex As Byte Dim FilteredValue As Word ... ‘ 每次采样后 AdcBuffer(BufferIndex) = GetAdc() BufferIndex = (BufferIndex + 1) Mod 10 FilteredValue = 0 For I = 0 To 9 FilteredValue = FilteredValue + AdcBuffer(I) Next I FilteredValue = FilteredValue / 10 - 校准与标定:程序应留有校准接口。可以通过定义几个校准常数(如电压分压系数、电流放大倍数和偏置),在首次使用或更换关键元件后,通过比较外部高精度万用表的读数,来调整这些常数,使显示值与真实值一致。
5. 系统集成、校准与测试
当硬件焊接完毕,固件初步烧录后,真正的挑战在于将各个部分连接起来,并进行精细的校准和测试。
5.1 分步上电与连接
- 独立测试控制板:先不要连接Unilab2主板。只为控制板提供5V电源,检查MCU能否正常启动,LCD是否显示,编码器和按钮操作是否正常,DAC输出引脚(用万用表测量)是否随设定值变化。
- 连接设定信号:断开Unilab2的电源,将控制板的电压设定输出(DAC通道1)连接到Unilab2的P3接口(电压设定),电流设定输出(DAC通道2)连接到P4接口(电流设定)。注意共地。
- 连接反馈信号:将Unilab2的实际电压输出(通过分压网络)连接到控制板的电压采样ADC输入。将电流传感器(如ACS723 BOB)串联到Unilab2的输出负端,并将其输出信号连接到控制板的电流采样运放输入。
- 整体上电:先给控制板上电,再给Unilab2主板上电。观察有无异常(冒烟、发烫)。
5.2 校准流程详解
校准是获得精确显示和控制的关键,需要一台可靠的数字万用表作为基准。
电压设定校准:
- 在控制板上将电压设定为0.0V,用万用表测量控制板DAC电压输出端(连接P3的点),理论上应为0V。记录微小偏差(如0.002V)。
- 将电压设定为5.0V(或DAC满量程对应的设定值,例如30.0V设定对应DAC输出5.0V),测量DAC实际输出电压。理想应为5.000V,实际可能有偏差。
- 在固件中,根据这两点(或更多点)建立线性校正公式:
DAC输出值 = 设定值 * 斜率 + 偏移。通过调整固件中的斜率和偏移常数,使DAC输出尽可能准确。
电压测量校准:
- 将Unilab2输出端接一个合适的负载(如功率电阻)。
- 用万用表测量Unilab2的实际输出电压(V_real)。
- 查看控制板LCD上显示的实际电压值(V_display)。
- 调整固件中电压采样的分压比例常数,使V_display尽可能等于V_real。可以在多个电压点(如5V, 12V, 24V)进行校准,取平均值或使用多点拟合。
电流测量校准(最关键且复杂):
- 零漂校准(Offset):确保Unilab2输出电流为0A(断开负载或使用电子负载的0A模式)。此时,调整运放差分电路中的那个精密微调电位器(作者提到的Trimmer),使MCU读取的电流ADC值为0(或对应的中间值)。这消除了ACS723和运放本身的偏置误差。
- 满量程校准(Gain):在Unilab2输出端串联一个精密采样电阻(如0.1Ω, 5W)和负载,并同时用万用表测量流经的电流(I_real)。调整固件中电流计算的增益常数,使LCD显示的电流值(I_display)与万用表读数一致。作者使用了一个4.7Ω的功率电阻和实验室电源进行测试,方法类似。
实操心得:电流校准最好使用一个可调电子负载,可以稳定地拉取不同的电流值(如0.5A, 1.0A, 2.0A, 3.0A)。在每个点记录万用表读数和控制板显示值,然后在固件中采用查表法或线性回归计算出一个更精确的校准曲线。ACS723的线性度很好,但温度和噪声会影响读数,因此校准应在室温下进行,并等待读数稳定。
5.3 功能与压力测试
完成基本校准后,进行全面的功能测试:
- 编码器控制:测试电压/电流设定是否平滑、步进是否准确、加速功能是否正常。
- 预设按钮:测试三个预设电压按钮能否准确切换,LED指示是否正确。
- 模式切换:测试在预设模式下,按下编码器能否正确返回可变模式。
- 带载测试:接上不同负载(电阻、LED灯板、电机),观察设定电压/电流是否稳定,实际值显示是否跟随变化,限流功能是否生效(当负载电流达到设定限流值时,电压应下降以恒流)。
- 动态响应测试:快速切换负载(如使用MOSFET开关),观察显示值的响应速度和稳定性。这可以检验ADC采样率和软件滤波算法的有效性。
6. 常见问题排查与进阶优化
即使按照步骤操作,也可能会遇到一些问题。这里列出一些常见故障及其排查思路。
6.1 显示与控制问题排查表
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| LCD无显示或乱码 | 1. 电源未接通或电压不对 2. 对比度电位器未调好 3. 数据/控制线接触不良或接错 4. 初始化序列不正确 | 1. 检查5V/3.3V电源 2. 调节LCD模块上的电位器 3. 用万用表检查排线连通性,核对引脚定义 4. 检查Bascom中LCD初始化命令和延时 |
| 旋转编码器操作无反应 | 1. 编码器A/B相序接反 2. 上拉电阻未接或失效 3. 软件去抖逻辑有误 4. 中断或扫描配置错误 | 1. 交换A、B相试试 2. 检查编码器引脚是否通过10k电阻上拉到Vcc 3. 简化程序,先测试读取引脚电平变化 4. 确认使用的是外部中断还是轮询,配置是否正确 |
| 设定值变化但DAC无输出或输出不对 | 1. SPI通信失败 2. DAC芯片供电或参考电压异常 3. 数据格式错误(如位对齐问题) 4. 负载过重 | 1. 用逻辑分析仪或示波器抓取SPI波形,看CS, CLK, MOSI信号 2. 测量DAC的Vdd和Vref引脚电压 3. 重点检查MCP4912的16位数据帧格式,对照数据手册 4. DAC输出端不要直接驱动重负载,应作为高阻抗输入 |
| 电压/电流显示值跳动大 | 1. 电源纹波大 2. ADC参考电压不稳 3. 软件滤波不足或采样速率过快引入噪声 4. 信号走线受干扰 | 1. 在模拟电源入口加大滤波电容 2. 为ADC参考引脚(AREF)增加一个10uF钽电容和0.1uF陶瓷电容 3. 增加移动平均滤波的窗口大小,或降低采样率 4. 检查模拟信号线是否远离数字区域,尝试使用屏蔽线 |
6.2 测量精度提升技巧
如果对默认的测量精度不满意,可以尝试以下优化:
- 升级ADC参考源:ATmega328P默认使用AVCC(5V)作为ADC参考,噪声较大。可以改用内部1.1V基准(需调整分压比),或外接一个高精度、低温漂的基准电压芯片(如REF5025, 2.5V)。
- 过采样与抖动:对于变化不快的直流信号,可以采用过采样技术来提高有效分辨率。例如,进行16次或256次采样取平均,可以将有效分辨率从10位提升到11位或12位。
- 硬件滤波:在ADC输入引脚前增加一个简单的RC低通滤波器(如1kΩ + 0.1uF),可以滤除高频噪声。注意RC时间常数不能太大,否则会影响响应速度。
- 电流传感器替代方案:如果ACS723的精度仍不满足要求,可以考虑使用分流器+专用电流检测放大器的方案。例如,使用一个0.01Ω的精密分流电阻和TI的INA系列芯片(如INA219,它甚至集成了ADC和I2C接口)。这种方案精度更高,温漂更小,但电路稍复杂。
6.3 功能扩展设想
这个开源项目提供了一个优秀的框架,你可以在其基础上进行扩展:
- 增加输出使能开关:如作者所言,可以引出一根线连接到Unilab2的开关稳压器使能引脚(Shutdown),通过一个自锁按钮来控制电源总开关,实现软开关机。
- 增加USB或蓝牙通信:为ATmega328P增加CH340或HC-05模块,实现与电脑的通信。这样就可以用上位机软件远程控制电源、记录数据、绘制VI曲线。
- 升级显示:如作者提到的,使用AZ Delivery的端口扩展器模块可以释放I/O,从而驱动OLED屏幕或TFT彩屏,显示更丰富的图形化信息,如实时波形。
- 支持更多预设:利用ATmega328P的EEPROM,存储多组电压/电流预设值,并通过编码器或按钮进行调用。
- 适配其他电源:该控制板的核心是产生0-5V的控制信号。理论上,任何接受0-5V模拟信号作为设定的线性或开关电源模块,都可以用这个前端来控制,只需调整软件中的量程映射即可。
这个项目完美地诠释了“旧瓶装新酒”的DIY精神。它没有抛弃Unilab2稳定可靠的功率部分,而是用现代的数字控制方法弥补了其交互上的短板。整个过程涉及了模拟电路、数字电路、单片机编程、PCB设计、校准测试等多个方面的知识,是一次非常综合的实践。当你亲手完成校准,看到LCD上精准显示着电压电流,并通过旋转编码器丝滑地调整输出时,那种成就感是无可替代的。最重要的是,通过这个项目,你获得了一个完全按照自己需求定制的、显示清晰、操作顺手的实验室电源,其核心性能和控制体验,足以媲美许多中高端的商用产品。