zoukankan      html  css  js  c++  java
  • 增量式PID简单翻板角度控制

    1.研究背景

          随着电子技术、信息技术和自动控制理论技术的完善与发展,近来微型处理器在控制方面的应用也越来越多。随之逐渐渗透到我们生活的各个领域。如导弹导航装置,飞机上仪表的控制,网络通讯与数据传输,工业自动化中的实时控制和数据处理,以及广泛使用的各类智能IC卡,轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具等等,所有这些都离不开单片机。加上其体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,使之广泛应用于仪器仪表中,并结合不同类型的传感器,实现诸如电压、功率、频率、流量、湿度、温度、速度、厚度、长度、角度、硬度、元素、压力等物理量的测量。并且,采用单片机控制会使得仪器仪表变得数字化、智能化和微型化,而且其功能比起采用电子或数字电路会更加强大。所以用该类型芯片开发的产品成本低廉且使用方面。单片机还可以构成像工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等形式多样的控制系统、数据采集系统。 

    由于单片机其体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等的这些优点,所以在经过分析设计后,我们决定设计出基于IAP15W4K58S4单片机为控制核心的帆板控制系统。帆板系统主要实现对风扇转速的控制,并调节风力大小,改变其转角,有着很广泛的应用前景和发展空间。

    2. 主要研究方法

          通过分析帆板控制系统的任务和基本要求,设计制作了帆板控制系统,从而来实现对角度的精确控制。系统主要是由电源电路、中央处理器、角度检测电路、AD/DA转换电路、帆板偏转机构、键盘输入部分以及显示系统等部分组成。系统可通过独立键盘预设倾角,控制风扇直流电机转速,则采用PID算法实现风扇电机转速闭环控制,利用PWM结合增量式PID算法进行自动调节控制。系统以IAP15W4K58S4单片机为控制核心,通过编码器水平固定在帆板转轴上,达到实时检测帆板角度的目的,并利用IAP15W4K58S4的硬件PWM功能、AD检测功能,以增强型N沟道MOS管驱动暴力风扇且控制风扇转速实现帆板的转动角度设定,系统稳定。

    3.理论分析与计算

    3.1  角度测量原理

    角度测量采用高精度角度传感器增量式光电旋转编码器(400脉冲)实时检测,实际角度测量原理:帆板偏转的角度通过编码器触发外部中断进行计数转换成角度并用液晶显示,实际测量中测量角度值与实际角度值的绝对误差稳定在<=3℃。经过实际验证,该传感器应用简单方案可行。图3为角度传感器示意图                                                 

     

    角度传感器示意图

    3.2  角度控制算法

    void int_0() interrupt 0      {//400线编码器

       if(bianma==1)

       {

         cont++;

       }

       else

       {

         cont--;

       }

       if(cont<0)     cont+=400;

       if(cont>400) cont-=400;

       jiaodu_c=0.9*cont;

    }

    编码器脉冲

          角度控制算法采用单片机中断(A端),在中断函数中计数并判断另一端口(B端)电平高低,高(或低)确定编码器正(或反)转动,通过计算,得出当前角度。用编码器测得的角度值与实际测量角度相差小于等于3℃,完全符合题目实际要求。事实证明此方法切实可行。

     3.3两线风扇基于外部PWM控制的调速表现

    3.4增量式PID

          PID分位置式PID和增量式PID两种,由于位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前状态和前两状态的误差有关,因此位置式PID控制的累积误差相对更大,增量式PID输出的是控制量增量,如果微处理器出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,对

    系统影响较大,因此实际中增量式PID应用更加广泛,下面我就单独对增量式PID公式及控制规律和参数整定作一定的探讨。

    u(k) =Kp*e(k)+Ki*∑k j=0e(j)+Kd*[e(k)-e(k-1)]

    u(k-1)=Kp*e(k-1)+Ki*∑k j=0+Kd*[e(k-1)-e(k-2)]

    △u(k)=u(k)-u(k-1)

    △u(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)]

    u(k)=△u(k)+u(k-1)

    其中:e为误差;

    (一)PID三个参数的控制规律

    1. 比例调节规律(Kp):是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。

    2. 积分调节规律(Ki):实质上就是对偏差累积进行控制,直至偏差为零。使系统消除稳态误差,提高无差度。 

    3. 微分调节规律(Kd):微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。 

    4. 比例积分微分控制规律PID:PID控制规律是一种较理想的控制规律,它在比例的基础上引入积分,可以消除余差,再加入微分作用,又能提高系统的稳定性。

    (二)PID参数整定的一般方法

    1. 实验凑试法,整定步骤为"先比例,再积分,最后微分,这也是初接触PID的人常使用的。

    2. 理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。

    3. 实验经验法,扩充临界比例度法,实验经验法调整PID参数的方法中较常用的是扩充临界比例度法,其最大的优点是,参数的整定不依赖受控对象的数学模型,直接在现场整定、简单易行。

    PID算法的程序实现:

    struct _pid

    {

     float SetSpeed;            //定义设定值    

     float ActualSpeed;        //定义实际值    

     float err;                //定义偏差值

     float err_next;            //定义上一个偏差值   

     float err_last;            //定义最上前的偏差值

     float Kp,Ki,Kd;            //定义比例、积分、微分系数

     float incrementSpeed;

     float PID_output;           //定义PID输出值

     float integral;

    }pid; 

    void PID_init()

    {

     pid.SetSpeed=0.0;    

     pid.ActualSpeed=0.0;    

     pid.err=0.0;

     pid.err_last=0.0; 

     pid.err_next=0.0;

     pid.PID_output=0.0;

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

     pid.Kp=4.0; // 4.0

     pid.Ki=0.003;// 0.01

     pid.Kd=0.01;// 0.01

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

    }

    //反馈系统的实质就是系统的输出量作(实际值)为反馈量与系统的输入量(设置值)进行作差,

    //从而得到系统的误差e,那么这个误差e就能够反应目前系统所处的状态。

    /***********增量式PID*************/ 

    float PID_realize(float speed/*输入值,设定值*/)

    {

     pid.SetSpeed=speed;

     pid.err=pid.SetSpeed-pid.ActualSpeed/*实际值,初值为0*/;

     if((unsigned char)pid.err<=0)LED=0;else LED=1;    

     pid.incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);   

     pid.PID_output+=pid.incrementSpeed;   

     pid.err_last=pid.err_next;   

     pid.err_next=pid.err;   

     return pid.PID_output; }

     

     

     

     

     

  • 相关阅读:
    PAT1007
    PAT1005
    PAT1002
    PAT1003
    PAT1016
    PAT 1018
    PAT1009
    pat 1037
    解决Git合并分支发生的冲突
    站和队列的基本使用
  • 原文地址:https://www.cnblogs.com/liuguan/p/4906914.html
Copyright © 2011-2022 走看看