HOME> 世界杯进球榜> 数控电源

数控电源

2025-06-10 07:55:50

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

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

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

我所做的是BUCK降压电路

一、Buck电路原理图

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

二、Buck电路工作原理

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

图二

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

图三

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

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

图四

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

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

图五

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

图六

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

图七

五、BUCK电路仿真验证:

图八

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

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

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

以上的知识点 是我在其他网站上看到的,觉得很不错,大家可以学习基本的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

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

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++;

}

}

来者何人播出时间

雷锋是怎么死的?揭秘雷锋牺牲的前前后后