导航:首页 > 操作系统 > 单片机pid调节

单片机pid调节

发布时间:2024-09-28 05:31:26

单片机实现pid控制中 pid是一种算法

1.可以直接套用PID公式,无论增量还是绝对的。PID算法是根据误差来控制的算法,不依赖系统的模型,故不用算系统的传递函数。有的书提到传递函数,一般是用于理论建模仿真,从而直接用Matlab一类的仿真软件进行PID参数调试。得到的参数可以为实际应用提供一定参考价值。
2.PID参数整定有一套原则。首先要了解各个参数的作用。具体的整定方法,随便找本自控原理的书都会提到,我不太记得了,大致是有一个倍数关系。但实际操作,一般不会是用这个数,是需要根据系统的反应,改变各个参数来试的。尽信书不如无书啊~
另外,不同系统的参数肯定不一样。就算同一个系统,稍微有一些改变,可能最好的那组参数就会变化。因此衍生了很多先进PID算法,如神经PID、专家PID、模糊PID等等。

Ⅱ 单片机如何写PID程序

具体如下:

1、如果加入D抖动的特别厉害,试试只用PI控制。

2、还有PID参数都是一步一步调出来的,我建议你做个上位机,就是个简单的VB串口程序,用来设置PID参数

3、然后在单片机这边弄个串口接收程序,这里就是个简单的串口程序,人人都会,把接收到的PID存储在缓冲区里。

4、然后单片机程序直接调用。单片机带EEPROM的话,当接收到改变的PID参数时,存储这些参数。去STC官网下你的单片机资料,上面有EEPROM测试程序,直接套用。

Ⅲ 单片机PID控制问题

首先弄清楚PID是一种控制算法!!!

1,“如果用单片机恒温可以使温度到达预定值就停止加热,低了就加热,用一个温度传感器反馈,这样算是一个自动控制吗”你这是控制系统,但是效果会非常差,尤其是对于温度控制这种大惯性系统,达到预定值就停止加热,但是由于惯性,温度肯定会继续上升,电炉烧水的时候,水开了,断电之后水还要沸腾一定时间的(沸腾是很消耗能量的,由此可见如果是加热的话温度上升更严重,你也可以自己用温度计试试看);“低了就加热”是同样的道理。如果系统对控制精度有要求,你这样做肯定达不到要求。PID是一种控制算法,相对于其他控制算法来说算是最简单的了。PID能够做到在温度快要达到设定值的时候降低加热功率,让温度上升速度变慢,最终稳定在设定值。如果用你的直接控制,温度会在设定值上下振荡,永远不会停在设定值。
2,一般的控制系统都需要加反馈,以构成闭环控制系统,相对的还有开环控制系统。开环控制系统,举个例子,就是你加热的时候事先计算好大约需要多少热量,然后考虑一下环境影响,计算出加热时间,然后控制加热系统按照你这个时间加热。你觉得这样的系统能够稳定工作吗?环境稍稍有变动就挂了!开环控制系统的特点就是很容易受到环境的影响;闭环控制系统就稳定很多,你用1L水可用,2L水也行,500W电能用,1000W电炉也能用,这就是闭环的优点。
因此,大多数的控制系统都是闭环的,开环很少单独使用,即使用到了也是有闭环的。开环其实也是有优点的,开环在控制系统里面叫做前馈(跟反馈对应的),比如你的系统里面电源电压上升了,加热速度肯定会变快,如果你对电源电压采样,将采样的结果输入到闭环里面,对闭环做一个轻微的修正,控制的精度会更好,这就是开环的优势,它是超前的,能够预知结果(根据地源电压提高就能知道需要降低输出功率了)。

说完这些,你应该明白了,反馈是必需的(前馈也可以要,但是不是必需的),PID不能被取代(除非你用其它更复杂的控制算法)。

Ⅳ 单片机如何加pid算法去控制步进电机实现转速缓慢平稳精确控制

步进电机本身是一种开环控制(open loop),一般可以通过选择合适的步距角来决定需要的步进电机型号,通过改变脉冲个数和型号可以控制其转动的角度和速度。
如果想要设计pid控制器,还需要选择合适的编码器来实现闭环控制,具体算法你应该通过网络得到,当然反馈的信号是角度了。

Ⅳ 基于PID算法的单片机温度控制系统设计(实现制冷效果)

看看我以前回答过的一个问题,或许有帮助。
所谓PID指的是Proportion-Integral-Differential。翻译成中文是比例-积分-微分。
记住两句话:
1、PID是经典控制(使用年代久远)
2、PID是误差控制()
压缩泵转速进行控制:
1、变频器-作为压缩机驱动;2、温度传感器-作为输出反馈。
PID怎么对误差控制,听我细细道来:
所谓“误差”就是命令与输出的差值。比如你希望控制压缩机转速为1500转(“命令电压”=6V),而事实上控制压缩机转速只有1000转(“输出电压”=4V),则误差: e=500转(对应电压2V)。如果泵实际转速为2000转,则误差e=-500转(注意正负号)。
该误差值送到PID控制器,作为PID控制器的输入。PID控制器的输出为:误差乘比例系数Kp+Ki*误差积分+Kd*误差微分。
Kp*e + Ki*∫edt + Kd*(de/dt) (式中的t为时间,即对时间积分、微分)
上式为三项求和(希望你能看懂),PID结果后送入电机变频器或驱动器。
从上式看出,如果没有误差,即e=0,则Kp*e=0;Kd*(de/dt)=0;而Ki*∫edt 不一定为0。三项之和不一定为0。
总之,如果“误差”存在,PID就会对变频器作调整,直到误差=0。
评价一个控制系统是否优越,有三个指标:快、稳、准。
所谓快,就是要使压力能快速地达到“命令值”(不知道你的系统要求多少时间)
所谓稳,就是要压力稳定不波动或波动量小(不知道你的系统允许多大波动)
所谓准,就是要求“命令值”与“输出值”之间的误差e小(不知道你的系统允许多大误差)
对于你的系统来说,要求“快”的话,可以增大Kp、Ki值
要求“准”的话,可以增大Ki值
要求“稳”的话,可以增大Kd值,可以减少压力波动
仔细分析可以得知:这三个指标是相互矛盾的。
如果太“快”,可能导致不“稳”;
如果太“稳”,可能导致不“快”;
只要系统稳定且存在积分Ki,该系统在静态是没有误差的(会存在动态误差);
所谓动态误差,指当“命令值”不为恒值时,“输出值”跟不上“命令值”而存在的误差。不管是谁设计的、再好的系统都存在动态误差,动态误差体现的是系统的跟踪特性,比如说,有的音响功放对高频声音不敏感,就说明功放跟踪性能不好。
调整PID参数有两种方法:1、仿真法;2、“试凑法”
仿真法我想你是不会的,介绍一下“试凑法”
“试凑法”设置PID参数的建议步骤:
1、把Ki与Kd设为0,不要积分与微分;
2、把Kp值从0开始慢慢增大,观察压力的反应速度是否在你的要求内;
3、当压力的反应速度达到你的要求,停止增大Kp值;
4、在该Kp值的基础上减少10%;
5、把Ki值从0开始慢慢增大;
6、当压力开始波动,停止增大Ki值;
7、在该Ki值的基础上减少10%;
8、把Kd值从0开始慢慢增大,观察压力的反应速度是否在你的要求内;

Ⅵ 如何在单片机中实现pid自整定

仪表的PID实际上就是一个控制系统,其中P表示为比例带,它对检测到的变化信号进行放大作用,再经过仪表输出去控制被测介质的物理量,比如压力、温度、流量以及液位等;I表示积分作用,因为比例调节P虽然对被测信号的变化能得出即时的响应,但存在着静压现象,提高积分作用可以使变化响应信号能消除静差;D表示微分作用,对于一些响应变化很迟缓的对象,如温度,在进行控制时为了加快控制效果,可引入微分调节量,起到超前调节的作用,也就是说是超调。
对于PID参数的整定是一个实验的过程,因为不同的对象条件有不同的调节规律,在整定时向将I和D关闭,比例带放在100%,这时比例带P的放大倍数是1,逐渐减少比例带,也就增加放大倍数,加入测量的变化信号,检查输出和控制对象是否有振荡现象。所谓的振荡现象,举个例子,对某个压力的控制,当压力高时,控制阀门打开一点进行释放,当压力低时就关闭阀门。当对这个控制系统进行PID参数调整时,先关闭I和D,设定某个P值后对控制系统加一个压力升高的变化信号,这时如果P值过小时,即其放大倍数增大,使得其输出信号过量增大,导致阀门开的过大,造成压力下降过快,因为检测到压力因为过低,使得控制输出信号朝相反的方向变化,即输出信号过量减小,使得阀门有被关闭,这时压力有很快上升,这个现象就是振荡现象。为了避免在调节中出现振荡现象,一般是小范围的调整比例带P参数。等调整到压力增高时,阀门稍微开一点,压力稳定,压力降低时,阀门稍微关一点,保持压力稳定,这就算是可以了。这时再增加一点积分I参数,使得比例调节存在的静差得到消除。微分D一般是不使用。
PL/C

Ⅶ 在写单片机PID程序时 应该是设定值减去测量值 还是 测量值减去给定值

我这有51的#include#include"global_varible.h"/*****************************************************************************模块名:PID*描述:PID调节子程序*采用PID-PD算法。在偏差绝对值大于△e时,用PD算法,以改善动态品质。*当偏差绝对值小于△e时,用PID算法,提高稳定精度。*PIDout=kp*e(t)+ki*[e(t)+e(t-1)++e(1)]+kd*[e(t)-e(t-1)]*============================================================================*入口:无*出口:无*改变:PID_T_Run=加热时间控制*****************************************************************************/voidPID_Math(void){signedlongee1;//偏差一阶//signedlongee2;//偏差二阶signedlongd_out;//积分输出if(!Flag_PID_T_OK)return;Flag_PID_T_OK=0;Temp_Set=3700;//温度控制设定值37.00度PID_e0=Temp_Set-Temp_Now;//本次偏差ee1=PID_e0-PID_e1;//计算一阶偏差//ee2=PID_e0-2*PID_e1+PID_e2;//计算二阶偏差if(ee1>500)//一阶偏差的限制范围ee1=500;if(ee1200)//积分最多累计的温差PID_e_SUM=200;if(PID_e_SUM100)//如果温度相差大于1度时积分累计限制{if(PID_e_SUM>100)PID_e_SUM=100;if(PID_e_SUM150)PID_e_SUM=150;if(PID_e_SUM>0)//当前温度高于设定温度0.5度时削弱积分正输出d_out>>=1;}PID_Out+=d_out;//PID比例,积分和微分输出}elsePID_e_SUM=0;PID_Out/=100;//恢复被PID_Out系数放大的倍数if(PID_Out>200)PID_Out=200;if(PID_Out300)//当前温度比设定温度低3度则全速加热PID_Out=200;if(PID_e0<-20)//当前温度高于设定温度0.2度则关闭加热PID_Out=0;Hot_T_Run=PID_Out;//加热时间控制输出PID_e2=PID_e1;//保存上次偏差PID_e1=PID_e0;//保存当前偏差}////////////////////////////////////////////////////////////voidPID_Math()end.

阅读全文

与单片机pid调节相关的资料

热点内容
破解的系统怎么用银行app 浏览:265
java三层架构mvc 浏览:880
徐州编程教育加盟 浏览:899
苹果手机脸书app如何设置中文 浏览:538
pdf文件在线修改 浏览:399
服务器上如何搭建自己的网站 浏览:467
云南省青少年学习编程 浏览:480
c工程的编译时间 浏览:587
java判断字符串包含某个字符串中 浏览:977
3匹单相谷轮压缩机用多大的电容 浏览:784
比心app怎么样用 浏览:741
和平精英怎么改国际服的服务器 浏览:946
手机存储卡128是哪个文件夹 浏览:180
安北解压包密码 浏览:651
阿里巴巴app静态编译 浏览:725
命令世界怎么获得迷你币 浏览:651
应用加密重新安装 浏览:83
抖音抖币充值源码 浏览:736
我的世界如何去更新服务器 浏览:76
单片机视频模块 浏览:996