电源知识网 手机版
首页 > 电源知识 >

数字电源

时间:

一.硬件电路设计

1. 供电电源(主控单片机,驱动或者隔离,通讯)。

2. 输入电压采集。

3. 输出电流采集(过流保护)。

4. 拓扑驱动电路及发波。一般是1到2个定时器产生PWM,半桥一个,全桥2个

5. 液晶或者通讯显示。

6. 按键检测,配置调节目标值。

7. 主功率拓扑变压器计算。

8. 输出电压采集。

9、温度检测采集

二.软件编写

1. PWM 输出配置函数。

2. 按键功能。

3. 液晶或者通讯显示。

4. 输入电压、输出电压、输出电流AD采集。

5. 输入欠压、输入过压、输出过流保护。

6. Pid 恒压算法控制。



今天重点说下PI调节,如何调试,如何根据硬件修改参数及偏移量。

1、数字电源进行稳压输出的核心技术是通过输出反馈,单片机进行占空比控制,这里的反 馈指的是单片机采集输出电压,然后与设定的目标输出电压相比较,通过一定的算法处理后 来改变 pwm 占空比的输出。这里的算法可以是比较简单的比较判断输出,例如检测到输出值大于设定值时,减小占空比,反之则增大占空比。这种方法在一些对响应速度要求不高或 纹波要求不高的情况下可以使用,如果要求更快的稳压控制以及较低的纹波电压,那么使用

PID 调节调节才是更适合的且常用的算法,下面是两种类型的 PID 算法 ,位置式和增量式。常用为增量PID

/*******************增量式 PID 控制

*******************************************************

一切的一切,目的就是:以最快的速度到目标点,然后稳住!

PID,I 是控制过去,P 是控制现在,D 是控制未来! 函数功能:增量 PI 控制器

入口参数:测量值,目标值返回 值: PWM

根据增量式离散 PID 公式

pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]

e(k)代表本次偏差

e(k-1)代表上一次的偏差 以此类推

pwm 代表实际输出:增量进行累积即为 PI 调节器输出在我们的控制闭环系统里面,只使用 PI 控制,

不使用微分 D 作用(微分主要用于对输出惯性比较大的控制系统)

pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)

Target: 目标值

Encoder: 测量值

Bias: 当前偏差

Last_bias: 上次偏差

Kp: 比例系数

Ki: 积分系数

Pwm: 输出值

**************************************************************************/ int Incremental_PI (int Encoder,int Target)

{

Bias=Target-Encoder; //求出速度偏差,由测量值减去目标值。Pwm+= Kp*(Bias-Last_bias)+Ki*Bias; //使用增量 PI 控制器求出 PWM。Last_bias=Bias; //保存上一次偏差

return Pwm>>5; //(这里做移位处理的目的是将输出值缩小后使用)

}

定时器中断函数中采集输入电压、输出电流的 AD 值,通过 AD 值计算输入电压及输出电流的函数放在主循环执行,目的是不在定时器中断中处理耗时较多的函数,避免定时中断 函数处理用时超时,影响 pid 运算。定时中断函数中同时采集输出电压的 AD 值,我们要将

PID 运算函数放入定时器中断函数中定时执行,将采集到的 AD 值作为输入参数送入

Incremental_PI 函数中运算。以下为定时器中断函数实现代码:

/****************************************************************

函数说明: Timer0 中断

实现功能:电压反馈 PID 运算控制输出 pwm。 采集输出电压 AD、输出电流 AD、输入电压 AD。

****************************************************************/ void Timer0() interrupt 1 //5ms 进入执行一次

{

int speed=0;

TL0 = 0x00; //设置定时初值

TH0 = 0xEE; //设置定时初值

GetOutCurrent(); //采集输出电流 AD 值

GetInvoltage(); //采集输入电压 AD 值

Out0_voltage=GetADCResult(2);//输出电压采集通道 AD 值

if(Current_ad_temp>410)//过流了 >2A 2000mA/4.87=410;

{

OverCurrent=1; //过流标志,用于显示SD_1=0; //关闭驱动 ic 输出

lock=1; //锁定状态

}

if(!lock) //非锁定状态:正常输出运行

{

speed=Incremental_PI(Out0_voltage,Out_voltage0_temp); if(speed>230) // 限制最大占空比 90% 255*90% speed=230;

if(speed<1) speed=1;

PWM_temp_0=speed;

CCAP1H=CCAP1L=255-PWM_temp_0; //这是值指的是 pwm 的低电平时间,负反馈调节占空比

}

else //输出锁定状态:

{

PWM_temp_0=10; //占空比固定

CCAP1H=CCAP1L=255-PWM_temp_0; //这是值 pwm 的低电平时间

Pwm=0; Last_bias=0; //pid 参数清零

}

}

下面我们介绍如下进行 pid 参数整定,一般步骤如下

a.确定比例系数 Kp(调试经验)

确定比例系数 Kp 时,首先去掉 PID 的积分项和微分项,一般是令 Ki=0、Kd=0,使 PID

为纯比例调节。输入设定为系统允许的最大值的 60% ~ 70%,即目标电压先固定设置为 19V(输入电压为 30V,占空比限制输出为 90%,则理论输出电压小于 27V,那么按照 27V 的 70% 为固定目标电压即 19V 来调试),由 0 逐渐加大比例增益 Kp(注意:一般 pid 调节中 Kp Ki Kd 均采用浮点小数,这样能保证调节精度,但是受限于 51 单片机处理浮点数耗时较长,这里将浮点数增大为整数,同样可以在保证调节精度的条件下提高单片机执行 pid 运算的速度, 只需在 pid 输出结果进行相应缩小即可),直至系统出现振荡;再反过来,从此时的比例系数 Kp 逐渐减小,直至系统振荡消失,记录此时的比例系数 Kp,设定 PID 的比例系数 Kp 为当前值的 60% ~ 70%。比例系数 Kp 调试完成。

b.确定积分时间常数 Ki

比例系数 Kp 确定后,设定一个较大的积分时间常数 Ki 的初值,然后逐渐减小 Ki,直至系统出现振荡,之后在反过来,逐渐加大 Ki,直至系统振荡消失。记录此时的 Ki,设定 PID 的积分时间常数 Ki 为当前值的 150%~180%。积分时间常数 Ki 调试完成。

c.确定微分时间常数 Kd

微分时间常数 Td 一般不用设定,为 0 即可。若要设定,与确定 Kp 和 Ki 的方法相同, 取不振荡时的 30%。

d.系统空载、带载联调,再对 PID 参数进行微调,直至满足要求。由以上步骤,实际调试得出的 Kp=1,Ki=5;