微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于AVR单片机atmega32的PID和PWM液体流量控制系统研究

基于AVR单片机atmega32的PID和PWM液体流量控制系统研究

时间:12-12 来源:互联网 点击:
1. 引言
液体流量控制通常采用电磁阀实现,近年来,电磁阀的结构和控制方式发生了很大的变
化,随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控制的开关功率元件进行脉宽调制(pulse width modulation ,简称PWM)控制方式得到了广泛的应用。这种控制方式很容易在单片机中实现,从而为电磁阀的控制数字化提供了契机。
将偏差的比例(proportion)、积分(integral)、微分(differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。PID控制器最早出现在模拟控制系统中,传统的模拟PID控制器是通过硬件(电子元件、气动和液压元件)来实现它的功能。随着计算机的出现,把它移植到计算机控制系统中来,将原来的硬件实现的功能用软件来代替,因此称作数字PID控制器,所形成的一整套算法则称作数字PID算法。数字PID控制器与模拟PID控制器相比,具有非常强的灵活性,可以根据试验和经验在线调整参数,因此可以得到更好的控制性能。
2. 液体流量控制系统组成
本系统采用AVR系列的atmega32单片机为核心,通过设置atmega32的PWM控制寄存器产生脉宽可调的PWM波,对比例电磁阀的输入电压进行调制,从而实现了对液体流量的变量控制。单片机统过涡轮流量计采集实际流量信号,根据该信号在其内部采用数字PID算法对PWM控制寄存器的值进行修改,从而达到精确的变量控制。为了防止外界干扰信号进入控制系统,单片机和涡轮之间采用光藕隔离,提高了系统的可靠性。温度传感器和压力传感器用来做监测喷杆中的压力和温度。通过4*4键盘和128*64液晶模块实现人机对话,便于用户操作。系统原理图如图2-1所示:


图2-1

3硬件部分
3.1 PWM驱动电路

单片机输出的PWM脉冲信号分别经7406和7407输入到Q1,Q2的G极,在每个PWM周期的高电平区间,Q1导通,Q2截止,电磁阀导通。在每个PWM周期的低电平区间,Q1截止从而切断了电源,电磁阀的感应电动势经Q2内部续流二极管形成回路。此时Q2的G极为高电平但是由于二极管的钳位作用使开关二极管关闭,因此通过调整单片机的PWM波就可以实现电磁阀输入电压占空比的调节,从而实现对流量的调节。
3.2 比例电磁阀
比例电磁阀在上世纪60年代末就已经得到了应用,最初是用于液压控制系统。随着单片机和集成电路的发展,其逐渐应用到各种液体的流量控制中。比例型电磁铁的工作原理如下:线圈通电后,轭铁和衔铁内部产生磁通并产生电磁吸力,将衔铁吸向轭铁,同时衔铁上的弹簧受到压缩,当衔铁上的电磁力和弹簧力平衡时,衔铁停止位移。比例型电磁铁的吸力在有效行程范围内和线圈的电流或电压大小具有线形关系。因此通过调解输入的电流或者电压就可以控制其开口的大小,从而达到变量控制的目的。本系统采用的比例电磁阀特性曲线如图3-1所示:(Kvs代表比例电磁阀最大开口时的流量,Kv代表对应某一电压或者电流值时的流量值)。

4. 软件部分
4.1 PWM波的产生
设计采用单片机atmega32产生PWM信号。atmega32的定时/计数器的PWM模式可以分成快速PWM和频率(相位)调整PWM两大类。 本设计采用快速PWM模式,快速PWM可以的到比较高频率的PWM输出,响应比较快,因此具有很高的 实时性。此时计数器仅工作在单程正向计数方式,计数器的上限值决定PWM的频率,而比较匹配寄存器的值决定了占空比的大小。快速PWM模式的控制寄存器设置如下:
//输出端口初始化
PORTD=0x44;
DDRD=0x20;
//T/C1初始化
TCCR1A=0xC3;/*比较匹配时OC1A输出高电平,在top值时清零ICP下降沿捕捉,
时钟1/8分频(暂定),即工作在反相pwm模式*/
TCCR1B=0x0A;//10位快速pwm模式
TCNT1H=0x00;//start at 0
TCNT1L=0x00;

4.2 PID算法

常规的PID算法的基本原理如下图4-1所示,模拟PID控制器的控制规律为

——比例系数; ——积分常数; ——微分常数; ——控制常量。
由于单片机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,而不能像模拟控制那样连续输出控制量,进行连续控制。并且单片机处理数据的量有限,综合考虑该系统采用增量式PID控制,其算法如式4-3:

其中 为本次采样误差; 为上次采样误差; 为上上次采样误差。其控制程序的流程图如图4-2所示

用C编程实现程序如下所示:
void PID()
{float u; //电压差值
sint z; //本次输出增量
sint temp1; //临时记录值
float t;
t=itime*T;
Speed_change(); //将流速转化为数字量
if (Ek==(0-Sheding_liusu)) //当Ek大于某一值时直接加最大
{temp1=0x0000;
SetOutputOCR1A(temp1); }//设置输出比较寄存器值
else{
Ek=Sheding_liusu-Celiang_liusu;
u=A*((Ek-Ek_1)+(t/B)*Ek+(C/t)*(Ek-2*Ek_1+Ek_2)); //增量式PID算法
z=u/U1*0x03FF;
temp1=GetOutputOCR1A(); //读取输出比较寄存器值
temp1=temp1+z;
SetOutputOCR1A(temp1);
Ek_2=Ek_1;
Ek_1=Ek;}
TCNT1=0x00;}
5. Matlab下的仿真
Matlab是控制系统的一种分析和仿真软件,利用它可以方便准确的对控制系统进行仿真,为了验证数字PID算法的可靠性,采用Matlab6.5下的simulink组件对增量数字PID算法进行了仿真,仿真程序如图5-1所示,仿真结果如图5-2所示.。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top