数控恒流源设计

1、 设计任务如下:

 

设计并制作一个数控恒流电源,实现以下要求:

1)基本要求

(1)U2=20V,负载不变的条件下,实现I2恒流,恒流电流在1~2A 范围内步进可调,步进值不大于0.1A,电流控制精度不低于 5%;

(2)设定I1=2A,调整负载改变输出电压,使负载两端电压从3V~13V范围内变化时,要求电流I2的变化率不大于1%;

(3)测量并显示I2,测量精度不低于2%;

(4)设定 I1=1.5A,调整负载改变输出电压,使负载两端电压为10V,要求变换器2的转换率不低于90%;

2)发挥部分

(1)具有过压保护功能,设定I2=2A,当负载上电压超过阈值15V时,报警停止输出;

(2)设计变换器1连接到U2,使输入电压U1的变化范围为8~15V,输出U2保持20V不变,变换器1的转换效率不低于93%;

(3)在满足要求的前提下提高效率、减小体积,使系统整机体积不大于10X10X6cm3;

2、分析如下

(1)针对变换器1,实现升压到20V电压,而且需要实现变换器1输出电压恒定,故变换器1的方案是boost升压电路,同时加入电压的AD采集,形成电压反馈,实现稳压;

(2)针对变压器2,实现电流恒定,故需要实现电流值恒定,即电流采样,实现整体输出电流恒定。

3、电路设计

(1)BOOST升压电路

 

BOOST升压电路

原理,其实跟降压型也一样,还是通过调节占空比,占空比大电压就大。

(2)BUCK降压电路

 

电路原理,本电路为BUCK降压型DCDC变换电路,通过改变PWM占空比改变输出电压。在本题运用中,单片机输出PWM经过TLP250驱动芯片放大PWM信号足矣驱动MOS,改变输出电压,当采集到输出电压时,比较输出电压与期望电压,输出电压小了就把PWM占空比增大,然后电压就增大了,继续不断的采集比较判断调节,知道输出电压达到期望电压为止,当然,恒流也如此,电流小就增大占空比反正就减小占空比。但是这个占空比的增减算法不是简单的加加减减,本设计采用PID算法中的PD算法。

 

电流采样方法;电流经过电阻就有电压,然后知道电压值和电阻阻值就可以算出电流值,本电路中利用放大器将电压放大20倍,所以采集出运放输出的电压就可以算出电流。

 

电压采样;采用分压采样,电压电阻有这么个关系: VO/(R2+R3)=Vadc/R3;其中Vadc为单片机采集的电压,

4、软件设计

包括1602显示、AD采集、PWM波形生成,驱动MOS管工作,实现电路电压的放大,此外,还有PID调节程序设计,其主函数程序设计如下:

#include "stm32f10x.h"

#include "lcd1602.h"

#include "adc.h"

#include "Timer2_interrupt.h"

#include "pwm_output.h"

#include "control.h"

#include "bsp_key.h"

uint32_t QW_V=20000,QW_I=1100;

uint32_t jishu=0;

void pre()

{

       if(ADC_ConvertedValueLocal[0]>15090)

       {

              jishu++;

//            get_ADC();

              if(jishu>5)

              {

                     Display_Lcd1602(0, 0, "    warning     ");

                     Display_Lcd1602(1, 0, "    PRETECT     ");

                     Display_Lcd1602(1, 0, "      V       A ");

                     while(1)

                     {

                            TIM3->CCR3=0;

                     }

              }

       }

}

int main(void)

{

       uint16_t i=0;

      

       LCD_Init();

       ADC1_Init();

       TIM3_PWM_Init();

       Key_GPIO_Config();

//     TIM2_Init();

       Display_Lcd1602(0, 0, "     A         V");

       Display_Lcd1602(1, 0, "     A         V");

       TIM3->CCR3=1200;

       TIM3->CCR4=1200;

  while(1)

       {

              i++;

              get_ADC();

              TIM3->CCR4=C_V(20000,ADC_ConvertedValueLocal[2]);              TIM3->CCR3=C_I(QW_I,ADC_ConvertedValueLocal[1]);

              pre();

              if(i==20)

              {

                     i=0;

              write_bsg(0,0,QW_I);                         

              write_bsg(1,0,ADC_ConvertedValueLocal[1]);

              write_v(1,9,ADC_ConvertedValueLocal[0]);

              write_v(0,9,ADC_ConvertedValueLocal[2]);

              }

             

              if( Key_Scan(GPIOB,GPIO_Pin_15,0) == KEY_ON  )

              {

                     QW_I-=500;                

                     if(QW_I<1000)QW_I=1000;

              }

              if( Key_Scan(GPIOB,GPIO_Pin_14,0) == KEY_ON  )

              {

                     QW_I+=100;

                     if(QW_I>2000)QW_I=2000;

              }

              if( Key_Scan(GPIOB,GPIO_Pin_13,0) == KEY_ON  )

              {

                     QW_I-=50;

                     if(QW_I<1000)QW_I=1000;

              }

              if( Key_Scan(GPIOB,GPIO_Pin_12,0) == KEY_ON  )

              {

                     QW_I+=50;

                     if(QW_I>2000)QW_I=2000;

              }

       }       

}

5、课题难度不大,读者可自行研究实现,另发现问题可深入互相学习。

posted @ 2018-07-26 17:24  zhuhongzhous  阅读(1622)  评论(0编辑  收藏  举报