1.概述
https://blog.csdn.net/qq_37405067/article/details/109719390
这个链接是我之前做的恒流源,缺点很明显,输出电流不稳定,有明显的跳动,没有校准功能。在基本原理不变的情况下,对其进行了大的改动。实现了0-300mA的精密恒流源。
2.基本原理
图1 基本原理
Q2为N沟道MOS管,在正常工作情况下,运放与MOS管之间构成深度负反馈,使得输入控制电压与Vr虚短,近似相等。这可以得到负载电流。
3.硬件设计
3.1.电源
图2 电源
在电源上使用双电源12V输入,并做地分离,最后一点接地。对地的处理很重要,要实现高精度,稳定性好,就要尽可能地减少干扰。12V转5V作为继电器电源,5V转出两个电源,分别作为数字电源与模拟电源。
3.2.DAC
图3 电压基准
稳定的电压基准,是DAC输出稳定模拟值的前提。ADR45x系列的电压基准,具有超低噪声,精度高。并使用OPA277U精密型运放,构成跟随器,增强其带负载能力后,输出值DAC作为电压参考。
图4 AD5541
AD5541是一款精密16位DAC,使用SPI接口,控制简单,AD5541输出后,同样使用OPA277U精密型运放,提高带负载能力。
3.3.调制
图5 调制
这一个部分就是一个加法器。将DAC输出电压与外部两个接入的信号相加,共同作用于负载。这样可以在一些电流驱动器件上加载信息。如激光器,在保证能被驱动的同时,可以加入信息,实现激光信息的调制。
3.4.输出与过流保护
图6 输出与过流保护
这里使用了一个继电器,控制选择那一个电阻网路。当设置电流在0-120mA,选择25//25//25电阻网路;当设置电流在120-300mA,选择10//10//10电阻网路。这样可以在输出电流小时,提高输出电压,输出电流大时,减小输出电压,以提高输出精度,和其适用范围。还使用了一个继电器去控制主回路,这个继电器是由电阻网路的端电压控制的,将电阻网路产生的电压与用电阻分压设定的电压进行比较,经过或门后,控制晶闸管。当输出电流过大,在电阻网路上产生的电压大于设定电压时,或门输出逻辑1,导致晶闸管开启,从而使得继电器通电,切断电流回路。这样做的目的,是可以保护因程序跑飞、器件损坏出现的过流。
3.5.校准
图7 24C08
使用24C08存储DAC对应1-300mA电流值的编码值,电流值从1-300,有300个数据,每个值对应一个16位的编码值,则需要两个字节,因此一共需要600个字节存储单元。在调试时,将原始数据依次存入,实际使用中,要先从中取出数据,边修改数据边保存,直到实际电流与设定电流一致时,退出校准模式。
4.软件设计
软件设计上比较简单,主要包括控制AD5541、读/存数据、按键控制和界面设置。主要理清逻辑关系即可。
主函数:
#include "stm32f10x.h"
#include "port.h"
#include "delay.h"
#include "AD5541.h"
#include "oled.h"
#include "usart.h"
#include "key.h"
#include "time.h"
#include "24cxx.h"
extern int current;
extern int Cursor; //光标位置
extern u8 flag_adjust; //进入到校准模式标志位
extern int Cursor_adjust; //在校准模式时的光标
u16 Code;
int main(void)
{
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2 );
uart_init(115200);
delay_init();
Port_Init();
IIC_Init_OLED();
AT24CXX_Init();
KEY_EXTIX_Init();
/*
//while(AT24CXX_Check()); //对24Cxx进行检测
//AT24CXX_Storage_Code(); //在调试时执行一次 存入原始DAC编码值
*/
OLED_Init(); //OLED初始化
delay_ms(100);
TIM5_Interrupt_Init(50000,71); //每50ms进入定时器中断
while(1)
{
//界面显示
OLED_Interface(flag_adjust);
Code = AT24CXX_Read_Number( (current-1)*2); //读取编码值
if( flag_adjust == 0 )
{
OLED_DisplayCurrent(64,3,current,Cursor); //显示电流值
}
else if( flag_adjust == 1 )
{
OLED_DisplayCode(64,3,Cursor_adjust); //显示DAC编码值
}
AD5541_RangeSwitch(); //电阻网路转换
AD5541_Input_Data(Code); //DAC输出电压
}
}
5.结果
实物图:
使用五位半数字万用表测量结果如下:
输出结果稳定、正确。
6.总结
实现精密恒流源,主要从器件选型与PCB的设计上着手。尤其这是一个数模混合电路,更要注重电源的处理,要采用电源隔离,注重电源滤波。PCB的处理是关键之处。
7.资料
包含电路原理图、PCB和设计代码。
https://download.csdn.net/download/qq_37405067/13724429