基于STM32的恒流源设计

1.概述 本设计以STM32F103RCT6为主控芯片,利用MOS管的恒流区特点,设计恒流源。设计电流范围为1-300mA。
2.原理 基本原理图:
基于STM32的恒流源设计
文章图片

Q2为N沟道MOS管,在正常工作情况下,运放与MOS管之间构成深度负反馈,使得输入控制电压与Vr虚短,近似相等。这可以得到负载电流基于STM32的恒流源设计
文章图片

3.硬件设计 3.1.电源
电路图如图所示:
基于STM32的恒流源设计
文章图片

电源由+12V单电源输入,产生了正负5V双电源和+3.3V电源。+12V与-5V为运放电源,+5V为DAC电源,+3.3V为STM32、OLED电源。
3.2.DAC控制
电路如图所示:
基于STM32的恒流源设计
文章图片

LM385BD-2-5为DAC提供电压参考,参考电压为2.5V。74LVC4245A为电平转换器,使得3.3V电平与5V电平兼容。DAC1220为16/20位DAC,使用时设置的是20位DAC。
3.3.控制输出
电路如图所示:
基于STM32的恒流源设计
文章图片

运放使用OPA2277U精密运放,经过第一级运放耦合后,再与MOS管构成负反馈电路。MOS管信号为IRF640,IRF640的漏源极电阻小,为180m基于STM32的恒流源设计
文章图片
,对参考电阻影响小。参考电阻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的恒流源设计
文章图片

【基于STM32的恒流源设计】完整的电路图与程序,我上传到了CSDN上,链接https://download.csdn.net/download/qq_37405067/13117465

    推荐阅读