增量式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; }
增量式PID简单翻板角度控制的更多相关文章
- 增量式PID的stm32实现(转)
源:增量式PID的stm32实现,整定过程 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来得,不同的是系数的差异. 资料上比较多的是: 还有一种是: ...
- 增量式PID计算公式4个疑问与理解
一开始见到PID计算公式时总是疑问为什么是那样子?为了理解那几道公式,当时将其未简化前的公式“活生生”地算了一遍,现在想来,这样的演算过程固然有助于理解,但假如一开始就带着对疑问的答案已有一定看法后再 ...
- 位置式PID与增量式PID算法
位置式PID与增量式PID算法 PID控制是一个二阶线性控制器 定义:通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能. 优点 ...
- 位置式PID与增量式PID
//位置式PID float Kp; float Ki; float Kd; float eSum,e0,e1; float pid_control(float now,float target) { ...
- 【转】位置式、增量式PID算法C语言实现
位置式.增量式PID算法C语言实现 芯片:STM32F107VC 编译器:KEIL4 作者:SY 日期:2017-9-21 15:29:19 概述 PID 算法是一种工控领域常见的控制算法,用于闭环反 ...
- 增量式pid和位置式PID参数整定过程对比
//增量式PID float IncPIDCalc(PID_Typedef* PIDx,float SetValue,float MeaValue)//err»ý·Ö·ÖÀë³£Êý { PIDx-& ...
- C 语言实现增量式PID
一直以来,pid都是控制领域的经典算法,之前尝试理解了很久,但还是一知半解,总是不得要领,昨天模仿着别人的代码写了一个增量式pid的代码. 我的理解就是pid其实就是对你设置的预定参数进行跟踪.在控制 ...
- 增量式PID的matlab实现
首先,增量式PID的实现公式: 式中 Δe(k)=e(k)-e(k-1) 进一步可以改写成 式中 . . 为了便于理解,也可写成: 式中e(k)为第k次采样时的设定值与实际值的差,e(k-1 ...
- 外置式与增量式PID模板程序(51单片机c语言)
外置式PID模板 #define MuBiaoCS 0 //目标常数 #define CHang_aCS 0 //比例常数 #define CHang_bCS 0 //积分常数 #define CHa ...
随机推荐
- sql server 字符串函数str()
语法: STR(nExpres[,nLength[,nDecimalPlaces]]) 参数: nExpression------STR要计算的数值表达式. nLength------------ST ...
- Ryu
What's Ryu? Ryu is a component-based software defined networking framework. Ryu provides software co ...
- [AJAX系列]onreadystatechange事件
onreadystatechange事件: 当请求被发送到服务器时,我们需要执行一些基于响应的任务 每当readyState改变时,就会触发onreadystatechange事件 readyStat ...
- jqMobile中的dialog和popup的区别
主要区别是:dialog默认含回退按钮.并且dialog在1.4版中已经过时,1.5中将会移除. 下面是 原文1: Using a Dialog Window as a Popup A jQuery ...
- json写入new_hello文件
#写入new文件 import json dic = {'name':'alex'} i = 8 s = 'hello' l = [11,22] f = open("new_hello&qu ...
- mySql引擎
摘自: http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html MySql引擎很多,最常见的有InnoDB,MyISAM,NDM ...
- 线性表的链式存储C语言版
#include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...
- 分布式搜索引擎Elasticsearch PHP类封装 使用原生api
//官方的 php api写的鸡肋了,下面这个类可以使用 es api 操作. <?php class ElasticSearch { public $index; function __co ...
- 【BZOJ 2005】【NOI 2010】能量采集 数论+容斥原理
这题设$f(i)$为$gcd(i,j)=x$的个数,根据容斥原理,我们只需减掉$f(i×2),f(i×3)\cdots$即可 那么这道题:$$ans=\sum_{i=1}^n(f(i)×((i-1)× ...
- Python爬虫基础知识入门一
一.什么是爬虫,爬虫能做什么 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.比如它在抓取一个网 ...