精密恒流源设计

1.概述

  https://blog.csdn.net/qq_37405067/article/details/109719390

  这个链接是我之前做的恒流源,缺点很明显,输出电流不稳定,有明显的跳动,没有校准功能。在基本原理不变的情况下,对其进行了大的改动。实现了0-300mA的精密恒流源。

2.基本原理

 

                 图1 基本原理

Q2为N沟道MOS管,在正常工作情况下,运放与MOS管之间构成深度负反馈,使得输入控制电压与Vr虚短,近似相等。这可以得到负载电流I = V_{r}/R

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

 

 

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值