基于STM32的恒流源设计

1.概述

        本设计以STM32F103RCT6为主控芯片,利用MOS管的恒流区特点,设计恒流源。设计电流范围为1-300mA。

2.原理

        基本原理图:

                                    基于STM32的恒流源设计_第1张图片

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

3.硬件设计

        3.1.电源

        电路图如图所示:

                     基于STM32的恒流源设计_第2张图片

        电源由+12V单电源输入,产生了正负5V双电源和+3.3V电源。+12V与-5V为运放电源,+5V为DAC电源,+3.3V为STM32、OLED电源。

        3.2.DAC控制

        电路如图所示:

                     基于STM32的恒流源设计_第3张图片

        LM385BD-2-5为DAC提供电压参考,参考电压为2.5V。74LVC4245A为电平转换器,使得3.3V电平与5V电平兼容。DAC1220为16/20位DAC,使用时设置的是20位DAC。

        3.3.控制输出

        电路如图所示:

                        基于STM32的恒流源设计_第4张图片

        运放使用OPA2277U精密运放,经过第一级运放耦合后,再与MOS管构成负反馈电路。MOS管信号为IRF640,IRF640的漏源极电阻小,为180m\Omega,对参考电阻影响小。参考电阻R10、R11、R12采用的是10R的金属箔电阻,温漂小,可以减小在大电流的情况下,温升所造成的影响,使得电流值稳定。

4.DAC1220程序设计

        DAC1220采用SPI时序控制,只利用了SPI的时钟线,主发从收线和片选。

        DAC1220相关程序:

/*
函数功能:使能器件
*/
void enable_DAC1220(u8 set)
{
	CS = set;
}


void DAC1220_toggle(void)
{
	CS = 1;
	delay_us(800);
	CS = 0;
	delay_us(400);
}

/*
函数功能:DAC1220写入一个字节数据
参数: data:写人的数据
SPI时序 
*/
void DAC1220_write(u8 data)
{
	u8 i;
	
	CLK = 0;
	DIO = 0;
	
	for(i=0;i<8;i++)
	{
		delay_us(10);
		CLK = 1;
		delay_us(10);
		DIO = ((data&0x80)? 1:0);
		data<<=1;
		delay_us(10);
		CLK = 0;
		delay_us(10);
		DIO = 0;
	}
}

/*
函数功能:DAC1220初始化
*/
void Init_DAC1220(void)
{
	enable_DAC1220(0);         //开启器件 低电平有效
	
	delay_us(400);
	DAC1220_write(0x04);       //定位到控制寄存器的高8位
	delay_us(400);
	DAC1220_write(0x02);       //清除校准寄存器的值
	DAC1220_toggle();
	
	DAC1220_write(0x05);       //定位到命令寄存器的低8位
	delay_us(400);
	DAC1220_write(0x00);       //正常模式,数据从高位开始写入
	delay_us(400);
	enable_DAC1220(1); 
	delay_us(800);
	
	enable_DAC1220(0); 
	delay_us(400);
	DAC1220_write(0x04);       
	delay_us(400);
	DAC1220_write(0x00);
	DAC1220_toggle();
	
	DAC1220_write(0x05);       //定位到命令寄存器的低8位
	delay_us(400);
	DAC1220_write(0xA1);       //20位DAC,标准模式,自校准
	delay_us(100);
	enable_DAC1220(1); 
	
	delay_ms(50);
}

/*
函数功能:DAC写入编码值数据
输入到24位的数据寄存器
*/
void DAC1220_value(u32 value)
{
	enable_DAC1220(0); 
	delay_us(800);
	
	DAC1220_write(0x00);                 //数据输入寄存器的高8位
	delay_us(400);
	DAC1220_write((value>>12)&0xff);     //取出高8位
	DAC1220_toggle();
	
	DAC1220_write(0x01);                 //数据寄存器的中间8位
	delay_us(400);
	DAC1220_write((value>>4)&0xff);      
	DAC1220_toggle();
	
	DAC1220_write(0x02);                 //数据寄存器的低8位
	delay_us(400);
	DAC1220_write((value<<4)&0xf0);
	DAC1220_toggle();
	
	enable_DAC1220(1); 
	delay_ms(200);
}

5.实物图

       基于STM32的恒流源设计_第5张图片

        完整的电路图与程序,我上传到了CSDN上,链接https://download.csdn.net/download/qq_37405067/13117465

你可能感兴趣的:(STM32)