工业控制中最常见的控制算法——PID控制
声明本文属转载目的是希望大家都学习下pid哦。PID算法是个很经典的东西。而做自平衡小车,飞行器PID是一个必须翻过的坎。因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂。并举出PID的形象例子来帮助理解PID。
一、首先介绍一下PID名字的由来:
P:Proportion(比例),就是输入偏差乘以一个常数。
I :Integral(积分),就是对输入偏差进行积分运算。
D:Derivative(微分),对输入偏差进行微分运算。
注:输入偏差=读出的被控制对象的值-设定值。比如说我要把温度控制在26度,但是现在我从温度传感器上读出温度为28度。则这个26度就是”设定值“,28度就是“读出的被控制对象的值”。然后来看一下,这三个元素对PID算法的作用,了解一下即可,不懂不用勉强。
P,打个比方,如果现在的输出是1,目标输出是100,那么P的作用是以最快的速度达到100,把P理解为一个系数即可;而I呢?大家学过高数的,0的积分才能是一个常数,I就是使误差为0而起调和作用;D呢?大家都知道微分是求导数,导数代表切线是吧,切线的方向就是最快到至高点的方向。这样理解,最快获得最优解,那么微分就是加快调节过程的作用了。
二、然后要知道PID算法具体分两种:一种是位置式的 ,一种是增量式的。在小车里一般用增量式,为什么呢?位置式PID的输出与过去的所有状态有关,计算时要对e(每一次的控制误差)进行累加,这个计算量非常大,而明显没有必要。而且小车的PID控制器的输出并不是绝对数值,而是一个△,代表增多少,减多少。换句话说,通过增量PID算法,每次输出是PWM要增加多少或者减小多少,而不是PWM的实际值。所以明白增量式PID就行了。
三、接着讲PID参数的整定,也就是PID公式中,那几个常数系数Kp,Ti,Td等是怎么被确定下来然后带入PID算法中的。如果要运用PID,则PID参数是必须由自己调出来适合自己的项目的。通常四旋翼,自平衡车的参数都是由自己一个调节出来的,这是一个繁琐的过程。本次我们可以不管,关于PID参数怎么确定的,网上有很多经验可以借鉴。比如那个经典的经验试凑口诀:
参数整定找最佳, 从小到大顺序查。
先是比例后积分, 最后再把微分加。
曲线振荡很频繁, 比例度盘要放大。
曲线漂浮绕大弯, 比例度盘往小扳。
曲线偏离回复慢, 积分时间往下降。
曲线波动周期长, 积分时间再加长。
曲线振荡频率快, 先把微分降下来。
动差大来波动慢, 微分时间应加长。
理想曲线两个波, 前高后低四比一。
一看二调多分析, 调节质量不会低。
四、接下来我们用例子来辅助我们把常用的PID模型讲解了。(PID控制并不一定要三者都出现,也可以只是PI、PD控制,关键决定于控制的对象。)(下面的内容只是介绍一下PID模型,可以不看,对理解PID没什么用)
例子:我们要控制一个人,让他一PID的控制方式来行走110步后停下来。
1)P比例控制,就是让他按照一定的比例走,然后停下。比如比例系数为108,则走一次就走了108步,然后就不走了。
说明:P比例控制是一种最简单的控制方式,控制器的输出与输入误差信号成比例关系。但是仅有比例控制时系统输出存在稳态误差。比如上面的只能走到108,无论怎样都走不到110。
2)PI积分控制,就是按照一定的步伐走到112步然后回头接着走,走到108步位置时,然后又回头向110步位置走。在110位置处来回晃荡几次,最后停在110步的位置。说明:在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统来说,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差的影响取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大,从而使稳态误差进一步减小,直到等于0。因此,比例+积分(PI)控制器可以使系统在进入稳态后无稳态误差。
3)PD微分控制,就是按照一定的步伐走到一百零几步后,再慢慢地走向110步的位置靠近,如果最后能精确停在110步的位置,就是无静差控制;如果停在110步附近(如109步或111步位置),就是有静差控制。
说明:在微分控制D中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳,原因是存在较大惯性组件(环节)或滞后组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化“超前”,即在误差接近于零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例P”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。这样,具有比例+微分的控制器就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例P+微分D(PD)控制器能改善系统在调节过程中的动态特性。
五、用小明来说明PID:
小明接到这样一个任务:有一个水缸有点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。 小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。几次试验后,确定每10分钟来检查一次。这个检查时间就称为采样周期。 开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。
小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最后终于找到了满意的漏斗。漏斗的时间就称为积分时间。
小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位置上面一点将水缸要求的水平面处凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。
六、在代码中理解PID:(好好看注释,很好理解的。注意结合下面PID的公式)
首先看PID的增量型公式:
PID=Uk+KP*【E(k)-E(k-1)】+KI*E(k)+KD*【E(k)-2E(k-1)+E(k-2)】
在单片机中运用PID,出于速度和RAM的考虑,一般不用浮点数,这里以整型变量为例来讲述PID在单片机中的运用。由于是用整型来做的,所以不是很精确。但是对于一般的场合来说,这个精度也够了,关于系数和温度在程序中都放大了10倍,所以精度不是很高,但是大部分的场合都够了,若不够,可以再放大10倍或者100倍处理,不超出整个数据类型的范围就可以了。一下程序包括PID计算和输出两部分。当偏差>10度时全速加热,偏差在10度以内时为PID计算输出。
程序说明:下面的程序,先看main函数。可知在对定时器0初始化后就一直在执行PID_Output()函数。在PID_Output()函数中先用iTemp变量来得到PID运算的结果,来决定是启动加热丝加热还是不启动加热丝。下面的if语句结合定时器来决定PID算法多久执行一次。PID_Operation()函数看似很复杂,其实就一直在做一件事:根据提供的数据,用PID公式把最终的PID值算出来。
51单片机的代码展示#include <reg52.h>
typedef unsigned char uChar8;
typedef unsigned int uInt16;
typedef unsigned long int uInt32;
sbit ConOut = P1^1; //加热丝接到P1.1口
typedef struct PID_Value
{
uInt32 liEkVal[3]; //差值保存,给定和反馈的差值
uChar8 uEkFlag[3]; //符号,1则对应的为负数,0为对应的为正数
uChar8 uKP_Coe; //比例系数
uChar8 uKI_Coe; //积分常数
uChar8 uKD_Coe; //微分常数
uInt16 iPriVal; //上一时刻值
uInt16 iSetVal; //设定值
uInt16 iCurVal; //实际值
}PID_ValueStr;
PID_ValueStr PID; //定义一个结构体,这个结构体用来存算法中要用到的各种数据
bit g_bPIDRunFlag = 0; //PID运行标志位,PID算法不是一直在运算。而是每隔一定时间,算一次。
/* ********************************************************
/* 函数名称:PID_Operation()
/* 函数功能:PID运算
/* 入口参数:无(隐形输入,系数、设定值等)
/* 出口参数:无(隐形输出,U(k))
/* 函数说明:U(k)+KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)]
******************************************************** */
void PID_Operation(void )
{
uInt32 Temp[3] = {0}; //中间临时变量
uInt32 PostSum = 0; //正数和
uInt32 NegSum = 0; //负数和
if (PID.iSetVal > PID.iCurVal) //设定值大于实际值否?
{
if (PID.iSetVal - PID.iCurVal > 10) //偏差大于10否?
PID.iPriVal = 100; //偏差大于10为上限幅值输出(全速加热)
else //否则慢慢来
{
Temp[0] = PID.iSetVal - PID.iCurVal; //偏差<=10,计算E(k)
PID.uEkFlag[1] = 0; //E(k)为正数,因为设定值大于实际值
/* 数值进行移位,注意顺序,否则会覆盖掉前面的数值 */
PID.liEkVal[2] = PID.liEkVal[1];
PID.liEkVal[1] = PID.liEkVal[0];
PID.liEkVal[0] = Temp[0];
/* =================================================================== */
if (PID.liEkVal[0] > PID.liEkVal[1]) //E(k)>E(k-1)否?
{
Temp[0] = PID.liEkVal[0] - PID.liEkVal[1]; //E(k)>E(k-1)
PID.uEkFlag[0] = 0; //E(k)-E(k-1)为正数
}
else
{
Temp[0] = PID.liEkVal[1] - PID.liEkVal[0]; //E(k)<E(k-1)
PID.uEkFlag[0] = 1; //E(k)-E(k-1)为负数
}
/* =================================================================== */
Temp[2] = PID.liEkVal[1] * 2; //2E(k-1)
if ((PID.liEkVal[0] + PID.liEkVal[2]) > Temp[2]) //E(k-2)+E(k)>2E(k-1)否?
{
Temp[2] = (PID.liEkVal[0] + PID.liEkVal[2]) - Temp[2];
PID.uEkFlag[2]=0; //E(k-2)+E(k)-2E(k-1)为正数
}
else //E(k-2)+E(k)<2E(k-1)
{
Temp[2] = Temp[2] - (PID.liEkVal[0] + PID.liEkVal[2]);
PID.uEkFlag[2] = 1; //E(k-2)+E(k)-2E(k-1)为负数
}
/* =================================================================== */
Temp[0] = (uInt32)PID.uKP_Coe * Temp[0]; //KP*[E(k)-E(k-1)]
Temp[1] = (uInt32)PID.uKI_Coe * PID.liEkVal[0]; //KI*E(k)
Temp[2] = (uInt32)PID.uKD_Coe * Temp[2]; //KD*[E(k-2)+E(k)-2E(k-1)]
/* 以下部分代码是讲所有的正数项叠加,负数项叠加 */
/* ========= 计算KP*[E(k)-E(k-1)]的值 ========= */
if (PID.uEkFlag[0] == 0)
PostSum += Temp[0]; //正数和
else
NegSum += Temp[0]; //负数和
/* ========= 计算KI*E(k)的值 ========= */
if (PID.uEkFlag[1] == 0)
PostSum += Temp[1]; //正数和
else
; /* 空操作。就是因为PID.iSetVal > PID.iCurVal(即E(K)>0)才进入if的,
那么就没可能为负,所以打个转回去就是了 */
/* ========= 计算KD*[E(k-2)+E(k)-2E(k-1)]的值 ========= */
if (PID.uEkFlag[2]==0)
PostSum += Temp[2]; //正数和
else
NegSum += Temp[2]; //负数和
/* ========= 计算U(k) ========= */
PostSum += (uInt32)PID.iPriVal;
if (PostSum > NegSum) //是否控制量为正数
{
Temp[0] = PostSum - NegSum;
if (Temp[0] < 100 ) //小于上限幅值则为计算值输出
PID.iPriVal = (uInt16)Temp[0];
else PID.iPriVal = 100; //否则为上限幅值输出
}
else //控制量输出为负数,则输出0(下限幅值输出)
PID.iPriVal = 0;
}
}
else PID.iPriVal = 0; //同上,嘿嘿
}
/* ********************************************************
/* 函数名称:PID_Output()
/* 函数功能:PID输出控制
/* 入口参数:无(隐形输入,U(k))
/* 出口参数:无(控制端)
******************************************************** */
void PID_Output(void )
{
static uInt16 iTemp;
static uChar8 uCounter;
iTemp = PID.iPriVal;
if (iTemp == 0)
ConOut = 1; //不加热
else ConOut = 0; //加热
if (g_bPIDRunFlag) //定时中断为100ms(0.1S),加热周期10S(100份*0.1S)
{
g_bPIDRunFlag = 0;
if (iTemp) iTemp--; //只有iTemp>0,才有必要减“1”
uCounter++;
if (100 == uCounter)
{
PID_Operation(); //每过0.1*100S调用一次PID运算。
uCounter = 0;
}
}
}
/* ********************************************************
/* 函数名称:PID_Output()
/* 函数功能:PID输出控制
/* 入口参数:无(隐形输入,U(k))
/* 出口参数:无(控制端)
******************************************************** */
void Timer0Init(void )
{
TMOD |= 0x01; // 设置定时器0工作在模式1下
TH0 = 0xDC;
TL0 = 0x00; // 赋初始值
TR0 = 1; // 开定时器0
EA = 1; // 开总中断
ET0 = 1; // 开定时器中断
}
void main(void )
{
Timer0Init();
while (1)
{
PID_Output();
}
}
void Timer0_ISR(void ) interrupt 1
{
static uInt16 uiCounter = 0;
TH0 = 0xDC;
TL0 = 0x00;
uiCounter++;
if (100 == uiCounter)
{
g_bPIDRunFlag = 1;
}
}
DIY,51单片机,SiC MOSFET,技术文章分享
做了一个小玩具 - 超声波喇叭
昨天发了个图,有好几个同好已经猜出来是超声波扬声器了,不过声音不是很大,所以我还是叫它超声波喇叭吧。(音质稀碎 ,有种80年代收音机的感觉,指向性发声 ,还是很好玩的)
b站上的是接音频线版本的,我觉得比较麻烦,所以买了个蓝牙音频模块(杰理 的芯片),很便宜很好用,5块多 一个,搜MH-18可以购买,还是挺好的一个小模块,喜欢的同好也可以买来做小音箱 。这个模块也是支持一个ADC按键调声音之类的,非常不错。
然后这个BLE_IN就是这个蓝牙模块的输出信号了,我把左右声道接到一起了,没有分开处理。然后BLE_IN这个音频信号经过电容耦合后接到NE555的CONT管脚,这个我也不太熟悉NE555,是根据网上的图照着接的。
大概就是让NE555输出一个40Khz的方波为载波,然后将音频信号加到载波上面 。音频播放的时候,555定时器输出的方波会发生变化。(开了余晖显示,大概是这样在不停的变化,如果在音频播放时)
因为需要一个互补的PWM给超声波的驱动芯片,所以555输出后也给到了一个反相器,作为输出一对互补输出的PWM ,然后给到驱动芯片……
查看原文:https://www.dianyuan.com/eestar/article-7927.html
五块五包邮的肌电按摩的方案是怎么样的?
最近在拼多多看到了一个比较好玩的产品,于是买回来分析一下电路结构,与各位同好一起分析一下电路。8个模式19个档位,可以说是相当的卷了 ……5.7元包邮。
使用感受就不说了,有点麻麻的,没仔细实验,直接分析电路吧。买之前我甚至想是不是数码管,拆开后发现就是普通的白光LED,加结构实现的数码管哈哈,不得不说这消费电子的花活挺多。挺让人意外的,还预留了红外接收器没贴 。正面元器件还是很简单的,22个LED加上几个电阻和金属按键 。(金属按键两个是低电平检测,一个高电平检测),这么多LED灯估计是矩阵的形式控制的。
然后是背面,背面一个锂电池,甚至还有一颗锂电池充电芯片4054 (右下角那个小芯片)。不过没有电池过冲过放的保护(这价位还要啥自行车)
然后拆掉电池,看到完整的PCB背面,主控的丝印被磨掉了,是1个14脚的主控芯片 ,可能是个OTP的单片机。然后2个NPN (丝印G1),1个PNP (丝印2L),1个1mH的电感 (丝印102),便是全部的电子元件了。然后看一下如何实现电刺激的。
关于电极这块的电路我抄出来如下,当IO1为高电平 时,三极管Q8导通 (电容C6为加速电容),电池通过红色电流路径给电感充能 ,类似boost拓扑;当IO2为高电平 时,Q6导通 ,电池的电压和电感产生的反生电动势叠加一起通过蓝色路径放电 (人体皮肤接到电极正和电极负之间)……
查看原文:https://www.dianyuan.com/eestar/article-7928.html
会使用51单片机的前提下,如何自学stm32?
我大一的时候在实验室的环境下开始学习 51 单片机,虽说学长不怎么管我们这些小白吧,但起码有个环境,有不懂的问题都可以向学长提问,这就是环境的好处了。但是如果说周围只有你一个人在学单片机,那这条路走得就会比较艰难了!为什么?因为单片机学习不仅涉及到软件,还涉及到硬件,这就是为什么说嵌入式门槛高的原因了,出了问题你不知道是硬件问题还是软件问题,还是都有问题,需要你根据经验一一排查才可以。
说回自学 STM32 问题,STM32 单片机远比 51 单片机复杂,寄存器数量是它的好几倍,各种外设模块,DA、CRC、SPI、CAN、SD、CAN 、TIM等等,而每一个模块可能都有单独的时钟,在使用这些模块时都要提前将时钟配置好,否则根本不能工作;而配置这些外设时钟之前你还要先配置系统时钟才行,而系统时钟又涉及到了分频、倍频的问题,也是繁杂。正因为这些东西实在是太多了,所以出现了库函数开发!
库函数开发的好处就是你不用管如何去操作寄存器,你只要了解什么时候该调用哪一个函数即可,相当方便,所以库函数开发的思路就是,记住各个函数的功能、调用条件(不需要死记硬背)就可以轻松进行开发了。但也正因为如此,所以在学STM32 的时候第一个拦路虎就是如何建立一个 STM32 工程,因为库函数开发需要的文件数量远比单纯的寄存器开发多的多,而这些文件之间还有关联性,很容易编译出错,所以可能在 51 单片机很简单的建工程到了 STM32 里面就会变得复杂了。但这些问题通过网上搜索还是很快能解决的,但是解决归解决,你是否明白为什么就这样解决了呢?所以你在开始学 STM32 的时候心里会很没底,因为你连最基本的工程都不知道该怎么才能建好。
然后第二个拦路就是时钟了,前面说过,STM32的时钟也是相当的复杂,所以很多教程上来就是教你如何配置时钟,这本没有错,但是你可能只是想尽快的点你第一个 LED 灯罢了,却要学这种感觉和点灯无关的时钟问题,所以心里也是挺着急的。事实上,点第一个 LED 灯是很简单的事情,只要你把对应的引脚配置好了就可以点灯。可能你会问,不要配置时钟吗?当然要,只是你点个灯对时钟的要求根本不高,所以时钟频率到底是多少可以不管,因此你直接用用默认的时钟配置就行了,因为在进入main函数之前启动文件(唯一的那个汇编文件)其实已经对时钟进行了配置(默认一般按最大的时钟频率进行配置),根本不需要额外的时钟代码的。所以这一点可以省去初学者不少功夫,当你比较熟练的掌握了库函数的时候,再回过头来去理解时钟的配置可能效果会更好。
关于 STM32 入门视频,你可以找刘凯老师的视频教程(有清晰版的),讲的还是不错的,因为我就是通过他学习 STM32 的,一集没落下的全部看完了。
最后再说一点,STM32 学习不比 51,51 单片机的调试功能不比STM32,所以在寻找 BUG 上还是比较麻烦的,而 STM32 因为有在线调试功能,可以实时观察数据、指令跟踪,所以在学习过程中一定要好好利用(当初我学习的时候根本不知道,还傻傻的用 51 那一套调试),而开发平台我觉得 MDK 最好,因为它把常用的寄存器都进行了集成,还有各种调试机制,非常人性化……
查看原文:https://www.dianyuan.com/eestar/article-7892.html
SiC MOSFET栅极电阻的影响分析
众所周知,由于没有IGBT所具有的拖尾电流,SiC MOSFET可以比IGBT实现更高频化,同时关断损耗又不至于太高,有助于提高系统功率密度。
值得注意的是,开关速度在一定程度上取决于栅极电阻,包含芯片内部和外部串联栅极电阻,针对合适的系统级考虑选择合适的外部栅极电阻。
芯片的内部栅极电阻取决于材料的物理特性和芯片尺寸,芯片尺寸越小,则其栅极电阻越大,SiC MOSFET首先比Si MOSFET的尺寸小,所以一般来说,栅极电阻会变大一些,在芯片内部栅极电阻确定的情况下,尽可能的选择适当外部栅极电阻,以抑制开关尖峰电压的基础上,尽可能减小开关损耗。
以1200V的MSC025SMA120B分立器件为例,我们可知其典型的栅极电阻为0.88ohm,相对较小,侧面也印证出其内部芯片尺寸较大……
查看原文:https://www.dianyuan.com/eestar/article-7943.html
SiC功率器件的H3TRB测试规范解析
在SiC功率器件或者模块的可靠性测试中有一项H3TRB测试比较典型,今天我们来简要讨论一下。
图1 典型功率模块的IDSS漏电流指标
在一般的规格书电气特性中,我们可以看到会标识功率模块的漏电流参数值,以MSCSM120AM16CT1AG这个1200V 12.5mohm典型阻抗的功率半桥模块来说,其漏电流为如图1所示,这个1200V可以看出IDSS这个漏电流参数,在1200V漏极电压反偏下,门级电压为0V,典型值为20uA,最大值200uA。
H3TRB, 具体含义是High Voltage High Humidity High Temperature Reverse Bias,即高压高温高湿反偏测试,这项测试是测试功率器件在此恶略严酷环境下的使用的可靠性,对于功率模块而言,在其内部会使用硅胶作为绝缘材料,硅胶在潮湿环境下容易吸湿,在无法做到完全密封的模块条件下,随着时间的推移,这将导致功率模块的绝缘性能受损,继而在电路运行中发生故障。
图2 H3TRB测试典型规范
测试SiC MOSFET的H3HTRB测试和Si MOSFET测试区别主要是施加的漏极电压或者反向电压不同,一般测试Si 器件的反向电压较低……
查看原文:https://www.dianyuan.com/eestar/article-7944.html
更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)
六篇技术文章,让你秒懂电容的脾气秉性
七篇DIY技术文章献给你,让你脑洞全开
五篇文章帮你开启DSP的学习思路
汇总篇:关于PID知识,重点在此
相关问答
51单片机 采用的什么算法?51单片机PID的算法实现程序,用整型变量来实现PID算法,由于是用整型数来做的,所以也不是很精确,但是对于很多的使用场合,这个精度也够了,关于系数和采样电压全...
各位朋友 请教一下,如何用 51单片机 控制伺服电机?伺服控制装...[回答]在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置。无线蓝牙串口透传模块,又叫蓝牙模块,是一种集成蓝牙功能的短距离无...无线蓝...
单片机 中的 PID 算法是什么意思啊,有什么用途呢?谢谢! - ?Nov...PID算法是一种经典的控制算法.由比例/积分/微分组成.建议看看控制理论.PID就是比例积分微分控制,在工业里面应用非常广泛,据统计,现在有一半以上以...
让小车到达指定位置有哪些 PID 算法?许多学生不知道PID是什么,因为许多学生不是自动化的。他们需要信息和程序来开口说话。很明显,这种学习方法是错误的。至少,首先,您需要理解PID是什么。首先,...i...
如何用 51单片机 控制电机和水泵?谢谢邀请,作为一名单片机开发工程师,和大家讲一讲电机控制的几个技术要点。电机是自动化等领域必须要用到的电子器件,而电机控制也就应用很广泛,专业技术要求...
单片机 怎么用 pid 控制1220v的加热灯-ZOL问答对于PID控制,首先要明确几点:1.确定所需控制的物理过程是否可微分,可微分性是PID控制的基础条件之一;2.确定所要控制的参数是否可测量和可观察;3.确定所需...
这两句话我不太会翻译,求解答ThePIDcontrollerwasdesignedan...[回答]PID控制器是根据MK-70MLW10升容量的浴缸周围的89C51微控制器要求设计和研发的.1500W功率的热水器可在0-240范围的真空里进行操作,且三端双向可控...
...根据实际数据测出来的吗?具体测量要注意什么? 单片机 求_作业帮[最佳回答]A,B,C三个值是需要自己去试验,然后才能确定的量,试验时先确定A值其他值设为0看小车状态出不多时,在确定其他两个值,不过一般C值很难用到.下一步...
单片机 如何才能算掌握好?对于题主的困惑,想要深入单片机,学得更明白的话,谈谈我是怎么做的吧。1.51入门单片机很好,已经明白寄存器原理就OK,说明程序中的代码对IO口在做什么事情至...1...
温度表自整定是什么原理?1、温控议自整定就是温控器根据系统特性自动计算出PID控制的三个参数,以达到最合理也是最准确的控制的目的,当然也可以通过人为设定PID参数。表的设置里有启用...