基于STM32的恒流源设计

本文档介绍了一种基于STM32F103RCT6的恒流源设计,利用MOS管的恒流区特性,实现1-300mA的电流调节。电路设计包括电源、DAC控制和输出部分,其中 DAC1220 通过SPI进行控制,实现电流精度调整。程序设计部分展示了如何通过SPI接口与DAC1220交互,完成数据写入。
摘要由CSDN通过智能技术生成

1.概述

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

2.原理

        基本原理图:

                                   

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

3.硬件设计

        3.1.电源

        电路图如图所示:

                    

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

        3.2.DAC控制

        电路如图所示:

                    

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

        3.3.控制输出

        电路如图所示:

                       

        运放使用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.实物图

       

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

  • 8
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值