精华内容
下载资源
问答
  • 数控电源

    千次阅读 多人点赞 2020-09-03 16:45:32
    话说最近做了一个数控电源 首先原理图来一个 看看原理 既然讲到数控电源,难免讲解一下数控电源的知识点,升降压 MOS管, 我所做的是BUCK降压电路  一、Buck电路原理图    Buck电路,又称降压电路,...

    话说最近做了一个数控电源

    首先原理图来一个 看看原理

     

     

    既然讲到数控电源,难免讲解一下数控电源的知识点,升降压 MOS管,

    我所做的是BUCK降压电路

     一、Buck电路原理图

      Buck电路工作原理以及三种工作模式分析

      Buck电路,又称降压电路,其基本特征是DC-DC转换电路,输出电压低于输入电压。输入电流为脉动的,输出电流为连续的

    二、Buck电路工作原理

      当开关管Q1驱动为高电平时,开关管导通,储能电感L1被充磁,流经电感的电流线性增加,同时给电容C1充电,给负载R1提供能量。等效电路如图二

      Buck电路工作原理以及三种工作模式分析

      图二

      当开关管Q1驱动为低电平时,开关管关断,储能电感L1通过续流二极管放电,电感电流线性减少,输出电压靠输出滤波电容C1放电以及减小的电感电流维持,等效电路如图三

      Buck电路工作原理以及三种工作模式分析

      图三

      三、Buck电路的三种工作模式:CCM,BCM,DCM

      1、CCM Mode:关键点原件波形见图四

      Buck电路工作原理以及三种工作模式分析

      图四

      开关管Q1导通时,根据KVL定律:

      Buck电路工作原理以及三种工作模式分析

      Buck电路工作原理以及三种工作模式分析

      2、BCM Mode:关键点原件波形见图五

      Buck电路工作原理以及三种工作模式分析

      图五

      Buck电路工作原理以及三种工作模式分析

      3、DCM Mode:关键点原件波形见图六

      Buck电路工作原理以及三种工作模式分析

      图六

      Buck电路工作原理以及三种工作模式分析

      四、外为参数对系统工作模式的影响:

      Buck电路工作原理以及三种工作模式分析

      图七

      Buck电路工作原理以及三种工作模式分析

      五、BUCK电路仿真验证:

    Buck电路工作原理以及三种工作模式分析

      Buck电路工作原理以及三种工作模式分析

      图八

      Buck电路工作原理以及三种工作模式分析

      Buck电路工作原理以及三种工作模式分析

      2、CCM模式仿真验证:在上述BCM分析的基础上,得出储能电感的电感量80uH为临界点,由系统工作在CCM的条件,可以将储能电感电感量设置为120uH,理论计算:

      Buck电路工作原理以及三种工作模式分析

      参照图十,可以得出仿真结果,

      Buck电路工作原理以及三种工作模式分析

      Buck电路工作原理以及三种工作模式分析

      3、DCM模式仿真验证:在上述BCM分析的基础上,得出储能电感的电感量80uH为临界点,由系统工作在DCM的条件,可以将储能电感电感量设置为40uH。重点验证输入输出电压关系以及输出平均电流关系。

      Buck电路工作原理以及三种工作模式分析

      Buck电路工作原理以及三种工作模式分析

      Buck电路工作原理以及三种工作模式分析

      Buck电路工作原理以及三种工作模式分析

    以上的知识点  是我在其他网站上看到的,觉得很不错,大家可以学习基本的BUCK电路,以此来设计属于自己的电路

     

     

    调压调流  具有过压保护

    过流保护

    MOS管的开启关断  ,双闭环控制   输出电压 电流采样

     

    输入电压采样   PID 算法

     

    #include "pid.h"
    
    /**
      * @brief  pidInit
      * @param  None
      * @retval None
      */
    void pidInit(PidObject* pid)
    {
            pid->ap        = pid->kp * (1 + pid->dt / pid->ki + pid->kd / pid->dt);
            pid->ai        = pid->kp * (1 + 2 * pid->kd / pid->dt);
            pid->ad        = pid->kp * pid->kd / pid->dt;
    }
    
    /**
      * @brief  pidUpdate
      * @param  None
      * @retval None
      */
    float pidUpdate(PidObject* pid, const float desired, const float now_value)
    {
            float output=0.0f;
            
            pid->error = desired - now_value;
    
            pid->inc = (pid->ap * pid->error) - (pid->ai * pid->prevError1) + (pid->ad * pid->prevError2);
            
            output = pid->inc + pid->outLast1;
            
            if(output > pid->iLimitHigh)
            {
                    output = pid->iLimitHigh;
            }
            
            if(output < pid->iLimitLow)
            {
                    output = pid->iLimitLow;
            }
            
            pid->prevError2        = pid->prevError1;
            pid->prevError1        = pid->error;
            pid->outLast1        = output;
            
            return output;
    }
    
    /**
      * @brief  pid calear
      * @param  None
      * @retval None
      */
    void pidClear(PidObject* pid)
    {
            pid->error             = 0;
            pid->prevError1 = 0;
            pid->prevError2 = 0;
            
            pid->outLast1        = 0;
            pid->inc                = 0;
    }
    
    
    /**
      * @brief  pidReset
      * @param  None
      * @retval None
      */
    void pidReset(PidObject* pid)
    {
            pid->error             = 0.0f;
            pid->prevError1 = 0.0f;
            pid->prevError2 = 0.0f;
            pid->outLast1        = 0.0f;
            pid->inc                = 0.0f;
            
            pid->desired = 0.0f;
            pid->iLimitHigh = 0.0f;
            pid->iLimitLow = 0.0f;
            
            pid->dt = 0.0f;
            pid->kp = 0.0f;
            pid->ki = 0.0f;
            pid->kd = 0.0f;
            
            pid->ad = 0.0f;
            pid->ai = 0.0f;
            pid->ap = 0.0f;
            
    }
    
    
    
    
    

     

     

     

      * @brief  This function ...
      * @param  None
      * @retval None
      */
    static uint16_t cnt=0;
    void myControlTask(void)
    {
     float fb_io=0.0f;
     float fb_vo=0.0f;
     float fb_w=0.0f;
     // OLED_ShowChar(16, 2, ':', 16);
     if(device.outputState!=0)
     {
      
      device.iovp = (power.Vi>PW_VOLTAGV_IN_MAX)?1:0;  //输入过压保护
      device.iuvp = (power.Vi<PW_VOLTAGV_IN_MIN)?1:0;  //输入欠压保护
      device.oocp = (power.Io>PW_CURRENT_OUT_MAX)?1:0; //输出过流保护
      device.oovp = (power.Vo>(PW_VOLTAGV_OUT_MAX+0.5f))?1:0; //输出过压保护
      
      if(device.iovp||device.iuvp||device.oocp||device.oovp)
      {
       PWM_Stop();
       device.recoveryCnt = 0;
       LED_OUT_OFF;
       LED_CV_CC_OFF;
      }
      else
      { //故障恢复
       device.recoveryCnt = (device.recoveryCnt>device.faultTime)?device.recoveryCnt:device.recoveryCnt+1;
      }
     
      fb_io = ((float)power.channel[1] - calib.ioZero) * calib.ioRatio;
      fb_vo = power.channel[2] * calib.voRatio;
      if(fb_io<0)
      {
       fb_io = 0;
      }
      /* 大电流补偿压差 */
      #if _USE_COMPENSATE
      fb_vo -= (fb_io * 0.05f);
      if(fb_vo<0)
      {
       fb_vo = 0;
      }
      #endif
      /*  */
      
      /* 恒功率 */
      #if 1 
      fb_w = fb_vo*fb_io;
      if(fb_w>250.0f)
      {
       PWM_Stop();
       device.recoveryCnt = 0;
       LED_OUT_OFF;
       LED_CV_CC_OFF;
      }
      #endif
      /* */
    
      if(device.recoveryCnt==device.faultTime) //恢复PWM波形输出
      {
       pidClear(&vPID);
       pidClear(&iPID);
       device.controlPWM = 0;
       PWM_Start();
       PWM_Update(device.controlPWM);
       LED_OUT_ON;
      }
     
      if(device.recoveryCnt>=device.faultTime)
      {
       switch(device.controlMode)
       {
        case CV_MODE:
         device.controlPWM = pidUpdate(&vPID, vPID.desired, fb_vo); //电压环PID计算     
         iPID.outLast1 = device.controlPWM;
         device.controlMode = (fb_io<iPID.desired)?CV_MODE:CC_MODE;
         if(cnt%50==0) { LED_CV_ON; }
         break;
        case CC_MODE:
         device.controlPWM = pidUpdate(&iPID, iPID.desired, fb_io); //电流环PID计算 
         vPID.outLast1 = device.controlPWM;
         device.controlMode = (fb_vo>vPID.desired)?CV_MODE:CC_MODE;
         if(cnt%50==0) { LED_CC_ON; }
         break;
        default:
         device.controlMode = CV_MODE;
         break;
       }
       
       PWM_Update(device.controlPWM);
      }
     
      cnt++;
     }
    }

     

    展开全文
  • 数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源设计数控电源...
  • 数控电源数控电源数控电源数控电源数控电源数控电源数控电源
  • 51单片机数控电源,使用了adc0809和dac0832控制
  • m8数控电源程序,Avr单片机编程,程序还不错挺有用。。。。。。。。
  • 此文件为线性数控电源的控制程序,包括AD模块和保护模块。
  • 用STM32103单片机,采用数码管显示电流、电压的数控电源。对学习STM32单片机编程和DIY数控电源很有实用价值。
  • 电源网,STC单片机做的数控电源,PWM模拟的DAC+运放
  • 基于STM32单片机设计的数控电源,可实现输出电压0.1v的步进调节
  • STM32103制作的数控电源源代码,开源stm32的数控电源,C++源码
  • STM32103制作的数控电源源代码,开源stm32的数控电源,C++源码.rar
  • 基于提高电源效率的目的,设计了采用PID算法的数控电源。系统采用STC12C5A60S2自带的PWM控制BUCK电路,同时对其输出电路进行采样,组成了一个高速的闭环控制系统。文中给出了数控电源的接口电路及PID算法的软件设计...
  • 数控电源.-综合文档

    2021-05-25 00:02:38
    数控电源.25V分享资料
  • 用STM32103单片机,采用数码管显示电流、电压的数控电源。对学习STM32单片机编程和DIY数控电源很有实用价值。
  • 数控电源2.jpg

    2019-06-25 17:58:48
    数控电源模拟部分,由2个双运放组成,主电源采用lm2596。辅助电源也采用dc-dc
  • 电赛 数控电源

    2013-08-30 18:01:08
    数控电源 电赛AD原理设计 直接可以打开参考
  • 简易数控电源

    2011-08-27 17:02:50
    自己学的数控电源
  • 数控电源电路原理讲解doc,本文介绍了数控稳压电源,讲解了数控电源电路原理。
  • 数控电源设计

    2012-08-10 13:58:16
    关于数控电源的竞赛设计,里面包括了论文、电路图、参考文献、最终报告等等资料
  • 基于51单片机的数控电源设计来源:mahuaxiao作者:华仔浏览:1099时间:2016-08-10 14:18标签:摘要:介绍了以51系列单片机为控制单元,以数模转换器DAC0832输出参考电压,以该参考电压控制电压转换模块LM350的输出...

    基于51单片机的数控电源设计

    来源:mahuaxiao

    作者:华仔

    浏览:1099

    时间:2016-08-10 14:18

    标签:

    摘要:

    介绍了以51系列单片机为控制单元,以数模转换器DAC0832输出参考电压,以该参考电压控制电压转换模块LM350的输出电压大小。该电路设计简单,应用广泛,精度较高等特点。关键词:单片机(MCU),数模转换器(DA),掉电存储器(EEPROM)。引言目前所使用的直流可调电源中,几乎都为旋纽开关调节电压,调节精度不高,而且经常跳变,使用麻烦。利用数控电源,可以达到每步0.1V的精度,输出电压范围0~15V,电流可以达到2A。系统结构图1

    介绍了以51系列单片机为控制单元,以数模转换器DAC0832输出参考电压,以该参考电压控制电压转换模块LM350的输出电压大小。该电路设计简单,应用广泛,精度较高等特点。   关键词:单片机(MCU),数模转换器(DA),掉电存储器(EEPROM)。

    引言

    目前所使用的直流可调电源中,几乎都为旋纽开关调节电压,调节精度不高,而且经常跳变,使用麻烦。利用数控电源,可以达到每步0.1V的精度,输出电压范围0~15V,电流可以达到2A。

    系统结构

    图1:硬件系统结构图

    对选用芯片说明

    DAC0832是一款常用的数摸转换器,它有两种连接模式,一种是电压输出模式,另外一种是电流输出模式,为了设计的方便,选用电压输出模式,如电路图所示,Iout1和Iout2之间接一参考电压,VREF输出可控制电压信号。它有三种工作方式:不带缓冲工作方式,单缓冲工作方式,双缓冲工作方式。该电路采用单缓冲模式,由电路图可知,由于/WR2=/XFER=0,DAC寄存处于直通状态。又由于ILE=1,故只要在选中该片(/CS=0)的地址时,写入(/WR=0)数字量,则该数字信号立即传送到输入寄存器,并直通至DAC寄存器,经过短暂的建立时间,即可以获得相应的模拟电压,一旦写入操作结束,/WR1和/CS立即变为高电平,则写入的数据被输入寄存器锁存,直到再次写入刷新。

    AT24C02是一款常用的可掉电保存数据的ROM,2K比特容量,采用I2C总线操作,关于它的具体操作方法参考相关资料。

    图2:主硬件电路图

    图3:参考电压电路图

    硬件电路设计

    采用常用的51芯片作为控制器,P0口和DAC0832的数据口直接相连,DA的/CS和/WR1连接后接P2.0,/WR2和/XEFR接地,让DA工作在单缓冲方式下。DA的11脚接参考电压,参考电压电路如图2所示,通过调节可调电阻调节LM336的输出电压为5.12V,所以在DAC的8脚输出电压的分辨率为5.12V/256=0.02V,也就是说DA输入数据端每增加1,电压增加0.02V。

    DA的电压输出端接放大器OP07的输入端,放大器的放大倍数为 R8/(R8+R9)=1K/(1K+4K)=5,输出到电压模块LM350的电压分辨率=0.02V×5=0.1V。所以,当MCU输出数据增加1的时候,最终输出电压增加0.1V,当调节电压的时候,可以以每次0.1V的梯度增加或者降低电压。

    本电路设计三个按键,KEY1为翻页按键,最近设置的电压大小保存在EEROM里面,比如10个电压,按一下KEY1,电压变为下一个,省去了反复设置电压的麻烦,KEY2为电压+,KEY3为电压+,按一下KEY2,当前电压增加0.1V,按一下KEY3,当前电压减小0.1V。

    限于篇幅原因,未画出数码管显示电路,该系统使用3个数码管,可以显示三位数,一个小数位,比如可以显示12.5V,采用动态扫描驱动方式。本主电路的原理是通过MCU控制DA的输出电压大小,通过放大器放大,给电压模块作为最终输出的参考电压,真正的电压,电流还是由电压模块LM350输出。

    为了达到2A的输出电流,LM350必须选用金属外壳封装,并且带稍大面积的散热片。

    软件流程

    软件系统

    软件的设计主要完成三方面的功能:

    1.设置电压并且保存,主要是对EEROM的操作。

    2.把设置的电压送到DA,主要是对DA的操作。

    3.中断显示,把设置的电压显示到LED数码管上。

    该数控电压源实现保存最近10电压功能,当打开电源的时候,它显示和输出的必须是上次使用电压大小,所以在EEROM中使用11个地址保存数据,第一个地址保存当前电压编号,大小为1~10。第2个地址~第11个地址连续保存10个电压大小数据。电压编号的大小分别对应到相应地址电压大小。

    对软件流程做一下说明:当电源打开的时候,MCU进行复位,寄存器清零。接着电源应该显示和输出上次关机前的电压大小,这时候MCU先读取EEPROM中保存的电压编号,根据电压编号读出对应电压,把该数据送到DA,在转换成BCD码送到显示部分。这时候程序循环检测是否有按键信号,如果KEY1按下,电压编号指向下一个,保存该电压编号,读对应电压,把他送到DA并且显示。如果KEY2按下,当前电压数据加1,相对应输出电压(POWER—OUT引脚)增加0.1V,保存设置电压数据。如果KEY3按下,电压数据减1,输出电压

    减少0.1V,保存设置电压数据。

    结语

    该数控电压源经过时间实际使用说明,具有精度高,使用方便,硬件电路简单等特点。如果要作成产品,还需要增加电流测量和显示部分,对这部分电路请参考相关资料。本文主要对如何控制功率输出电压大小做出个例子,该电路对测量领域,以及马达调速方面都可以扩展使用。

    参考文献:

    1. 陆坤.奚大顺等《电子设计技术》电子科技大学出版社. 1997.5

    2. 马忠梅.籍顺心等 《单片机的C语言应用程序设计》北京航空航天大学出版社 2001.5

    分享到:

    eb16ac850798d72e084e2c3ed33ff707.png

    展开全文
  • 单片机12V数控电源

    2021-01-19 18:25:36
    这次做的数控电源设计思想没什么新意,就是一个数模转换(ADC0809)和一个模数转换(DAC0832),再加上两个单片机分别控制0809和0832,组成一个反馈网络,来得到输入的数字相对应的电压,电压范围很小,只有0~12.75V....
  • 摘要:针对中职技能大赛电路(数控电源电路)在电路故障设置中存在的一些问题,进行分析、讨论,并结合自己的一些实践经验,提出更好、更合理的解决办法。  0 引言  数控电源电路是广东省中职学校技能大赛电子...
  • 数控电源的设计

    2014-11-25 17:21:50
    该资料为数控电源的设计,里面含有电路图设计,程序代码设计,以及仿真效果!
  • 针对当前市面上数控电源电路复杂、成本较高、同一数控电源系统不能兼并恒压恒流的情况,研究了3种数控电源常见的设计方案,并深入探究了基于DC/DC开关稳压器的数控电源设计方案。与市面上的数控电源相比,本设计是...
  • 美尔诺数控电源用户手册,详细描述了美尔诺数控电源使用方法。
  • 导读:基于提高电源效率的目的,设计了采用PID算法的数控电源。系统采用STC12C5A6052自带的PWM控制BUCK电路,同时对其输出电路进行采样,组成了一个高速的闭环控制系统。文中给出了数控电源的接口电路及PID算法的...
  • 基于AT89C51单片机数控电源

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,015
精华内容 1,206
关键字:

数控电源