关于pid算法,如果实际应用?

alca_bigV 2017-09-20 10:23:28
以下代码为pid算法的位置式实现方式 ,
struct _pid{
float SetSpeed; //定义设定值
float ActualSpeed; //定义实际值
float err; //定义偏差值
float err_last; //定义上一个偏差值
float Kp,Ki,Kd; //定义比例、积分、微分系数
float voltage; //定义电压值(控制执行器的变量)
float integral; //定义积分值
}pid;
void PID_init(){
printf("PID_init begin \n");
pid.SetSpeed=0.0;
pid.ActualSpeed=0.0;
pid.err=0.0;
pid.err_last=0.0;
pid.voltage=0.0;
pid.integral=0.0;
pid.Kp=0.2;
pid.Ki=0.015;
pid.Kd=0.2;
printf("PID_init end \n");
}
float PID_realize(float speed){
pid.SetSpeed=speed;
pid.err=pid.SetSpeed-pid.ActualSpeed;
pid.integral+=pid.err;
pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pi
d.err_last);
pid.err_last=pid.err;
pid.ActualSpeed=pid.voltage*1.0;
return pid.ActualSpeed;
}


.假设一个系统(通过调解pwm占空比去控制mos管的电流,电流采样反馈再影响占空比)
1)在例子中,realize每次输入的值为200,相当于最终目的是200,那么 输出量的反馈,在哪反应出来?(也就是我的系统中,电流采样反馈这个量,pid的算法根本 也是按输出量,通过计算kp,ki,kd,根据这些改变输入量)
实际应用的时候,比如我要把某个物理量固定在2000,那么代入这个realize的值就是2000,那么,与反馈量无关?不需要?
2)pid.voltage是用于控制执行器的量,pid.actualspeed为返回值,它的得出与voltage有关.,在上面的系统里,这个actualspeed应该与占空比有关吧?相当于用这个返回值乘某个系数用于占空比的设置?这个输入的值,如果是固定的值,比如我想稳在2000
3)我的系统,通过mos管电压来控制id,应该不用考虑控制延时的问题吧?即这边调整了mos管的电压,一个周波后(用于计算反馈量所需要采样的时间),马上可以通过pid算法去计算,并反馈影响控制.
...全文
2043 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-09-24
  • 打赏
  • 举报
回复
1 如果你只用 速度环 (pid.err=pid.SetSpeed-pid.ActualSpeed;)那么 要控制的 是 速度 pid 输入 是 速度给定,你需要 测速计 作为 反馈信号,pid 输出 控制 pwm 。 2 通常 电机 控制 还 需要 一个 电流环。这时 pid 输入 是电流给定,你需要 测电流 作为 反馈信号,pid 输出还是 控制 pwm 。 3 如果控制电机位置 还需要一个 位置环。这时 pid 输入 是位置给定,你需要 测实际位置 作为 反馈信号,pid 输出是速度环的输入 。 4 通常 电机 控制 是 3环 系统
alca_bigV 2017-09-22
  • 打赏
  • 举报
回复
引用 22 楼 tianxj001 的回复:
打字错误 那么误差就是10,前次误差是8
大家都是搞技术的,又不是出书,错一两个字,不用在意。只要意会即可,
alca_bigV 2017-09-22
  • 打赏
  • 举报
回复
引用 17 楼 tianxj001 的回复:
程序写好,正确了,接着就是到底用多少大小的Kp Ki Kd 就是我们常说的整定了,这个资料多,可以多多参考一下吧。 在过去芯片计算能力差的年代,Kp Ki Kd 是不会考虑用浮点数的,我们通过把他们都变大比如512倍,或者1024倍,进入长整数运算,再在后面将结果除以2的某次方,也可以实现同样目的,现在芯片像stm32的M3 M4都带浮点运算了,这就不是问题了,直接将Kp Ki Kd 用浮点数填进去就可以了。
我用的m0,没有fpu,不过任务不是很多,暂时用float型运算试试看. 你的代码的解释,用在我说的增量型算法里面,很好理解,对应的上,我也是这样理解的. 用在第一个,不太理解. 我现在就是 增量 型算法(第二种),在修定参数.......
引用 16 楼 tianxj001 的回复:
根据你的构思,你测的的应该是电流采样电阻上面的电压值AD,一般在pid里面我们叫做Next_point,而我们设定的目标,应该是预计的采样电阻的电压的AD值一般我们叫Set_point,他们的减法就是error=Set_point-Next_point,上一次的误差为Last_error,sum_error+=error。 然后,你的输出目标应该为PWM设置数据,这样就很明确了,Kp*error 就是比例项,Ki* sum_error就为积分项,Kd*(error-Last_error)就是微分项,他们的和经过最大最小限制后就可以直接作为PWM数据用,用的时候加上常数=mos开启电压(这个可以让你的pid更线性)。 pwm输出进低通滤波就可以去控制MOS管。这里有必要说的是PWM的幅度,我们一般设置为10V以上,这样经过积分滤波后最终可以获得10V+的电压,足以良好驱动MOS管。 根据增量法和位置法实现的计算公式是有区别的,但其实经过标准采样间隔进行变换,其实增量和位置是一个基本公式,只是他们的P I D系数在实际公式里面,代表的意义有所区别而已。
大神你的解释应用到我上面举的第二个 增量型算法里面,是可以解释的。。。 第一个,直接算法(也就是位置算法)里面,我不理解 .....
tianxj001 2017-09-22
  • 打赏
  • 举报
回复
打字错误 那么误差就是10,前次误差是8
tianxj001 2017-09-22
  • 打赏
  • 举报
回复
引用 20 楼 baidu_39576528 的回复:
感觉 上面的代码,根本 不需要温度传感器传回的数据,而只是 设定200数值 ,然后这段程序 每一段时间(10s,或者 200ms,,)运行一次,通过voltage或者 actualspeed去调整pwm占空比(怎么个调解法暂时不考虑).
我给你的回答,已经包括了设定目标对应你板子上面要实现的的物理数据,返回数据对应你的板子上面的采集的物理数据,输出对应你的单片机PWM,没仔细看吗? 只是没给你写位置式PID程序而已,这个你自己不是已经有反应了嘛。 假定Set_Point=200,AD测量平均后获得的是190,那么误差就是8,前次误差是5而最后是输出是假如Kp=0.1,积分器内容是20000,Pi-0.01,Pd=0.5, 那么输出=0.1*10+0.01*20000+0.5*2=1 +200+1=202,这个就可以直接作为PWM发生器的TIM比较器数据送出了。 还有一个,PID计算从采样-计算-输出 耗时越短,输出频率越高,pid的精度、波动就越好。
alca_bigV 2017-09-22
  • 打赏
  • 举报
回复
引用 15 楼 C_Rabbit 的回复:
[quote=引用 8 楼 baidu_39576528 的回复:] [quote=引用 7 楼 C_Rabbit 的回复:] 看4楼,你疑惑的应该是代码如何起作用。 这个代码里用了全局变量PID,在函数运行过程中,全局变量PID中的参数也随之变换,至于这个参数如何应用到实际的器件上,应该是在其他代码部分以PID中的参数为基准调整pwm占空比输出之类的
应该?大神你以前怎么应用的? 是用pid的参数?还是返回值return pid.ActualSpeed 去调整pwm的占空比? 这个函数只有一个目标转速的输出,如何体现 输出量引入,再计算 误差?(看到的actualspeed是计算出的实际转速,而不是测得的实际 转速),实际应用的时候,要如何修改? 至于 全局变量,公式算法,理论意义,懂点c和高等数学的应该都看得懂. [/quote] 可能我还是没get到你的点,就举个实际应用的例子吧 3D打印机的喷头温控,要求在一段时间内持续保持在200度,这里就需要PID_realize持续运作,来调高或降低对加热模块的PWM占空比,在此系统中,因为有喷头风扇的连续工作散热,所以当喷头温度达到200度时,不进行挤出料工作的情况下,温度的消耗会比较低,此时仅需保持较低的PWM即可维持温度,而当挤出机工作慢速→快速的挤出料,PLA料会分走喷头的热量,温度就会急剧降低,此时就要迅速调高PWM。 我刚想了下,可能这个例子还不是很贴切,一楼的代码应该和电动车转速控制更接近些。[/quote] 在你的这个例子中,喷头部分的应该有个温度传感器吧?采得的数值 再 传回mcu进行处理,再去调解出料的电动机(假设是电动机控制出料,我不熟悉3d打印机,这样猜想),这个温度数参与计算,在上面的代码中 如何 体现的? 感觉 上面的代码,根本 不需要温度传感器传回的数据,而只是 设定200数值 ,然后这段程序 每一段时间(10s,或者 200ms,,)运行一次,通过voltage或者 actualspeed去调整pwm占空比(怎么个调解法暂时不考虑).
alca_bigV 2017-09-22
  • 打赏
  • 举报
回复
引用 14 楼 C_Rabbit 的回复:
[quote=引用 8 楼 baidu_39576528 的回复:] [quote=引用 7 楼 C_Rabbit 的回复:] 看4楼,你疑惑的应该是代码如何起作用。 这个代码里用了全局变量PID,在函数运行过程中,全局变量PID中的参数也随之变换,至于这个参数如何应用到实际的器件上,应该是在其他代码部分以PID中的参数为基准调整pwm占空比输出之类的
应该?大神你以前怎么应用的? 是用pid的参数?还是返回值return pid.ActualSpeed 去调整pwm的占空比? 这个函数只有一个目标转速的输出,如何体现 输出量引入,再计算 误差?(看到的actualspeed是计算出的实际转速,而不是测得的实际 转速),实际应用的时候,要如何修改? 至于 全局变量,公式算法,理论意义,懂点c和高等数学的应该都看得懂. [/quote] 就你给出的代码来看,如果是我来应用的话,我会用pid.voltage作为调整PWM输出的基准 当然我没用过这段代码,并不能确认是否是正确的,是基于代码的内容表现,认为应该使用pid.voltage 不过,这其实也就相当于使用pid.ActualSpeed 你可以把这理解为一个逐渐逼近的过程,也就是说 PID_realize将会持续执行,在类似于温控、电机速率控制这样目标动作可能受外界因素影响而发生变化的场景,持续运行 PID_realize来保持状态是比较常见的做法[/quote] 感谢大神,您这段回答 正是我一直想要的.. 没调成功以前,我没资格 说它的对错,只是说我理解不了,只当全部正确,我再去学习,引用. 这段代码在网上传的满多,基础的pid算法讲解里, 按我的理解,它里面的计算,,,它想稳在200,所以 代入的speed始终为200,运行了1000次,输出的数字也接近200,没有任何反馈输出的量. 而第二个增量算法例子中,代入的数字nextpoint为实际测量得到的数字,作为反馈引入,可以解释的通. 这就是我的疑问所在. 至于 逐渐逼近的过程,从程序输出结果可以看到,很明显,从0---199.9997,一千个数据,慢慢靠近...但,没有看到反馈的过程(输出量引入,再影响输出)!.....
alca_bigV 2017-09-22
  • 打赏
  • 举报
回复
引用 13 楼 worldy 的回复:
[quote=引用 12 楼 baidu_39576528 的回复:] 刚刚看到这段代码 void IncPIDInit(void) { sptr->LastError = 0; //Error[-1] sptr->PrevError = 0; //Error[-2] sptr->Proportion =P_DATA; //比例常数Proportional Const sptr->Integral =I_DATA; //积分常数Integral Const sptr->Derivative =D_DATA; //微分常数Derivative Const sptr->SetPoint =100; 目标是100 } //***************************************************** //增量式PID控制设计 //***************************************************** int IncPIDCalc(int NextPoint) { int iError, iIncpid; //当前误差 iError = sptr->SetPoint - NextPoint; //增量计算 iIncpid = sptr->Proportion * iError //E[k]项 - sptr->Integral * sptr->LastError //E[k-1]项 + sptr->Derivative * sptr->PrevError; //E[k-2]项 sptr->PrevError = sptr->LastError; //存储误差,用于下次计算 sptr->LastError = iError; return(iIncpid); //返回增量值 } 这是另一个 解说 的 pid增量算法 中的实现.. 注意这里,代入的变量,是next,而set值,在初始化的时候已经固定(感觉很接近 我猜想的那一种理解方法),这个和前面 的算法实现感觉完全不一样.... 如果从这段代码去理解 如何 应用到实际工程系统中,就比较好理解 了...代入的next是测量得到的实际输出量(无论这个量是温度的ad值还是转速的ad值),代入以后与设置好的固定值进行比较出差异,再计算出微分,积分,与 比例系数,把这个值返回.(返回以后应该还要进行适当转换,或者按楼上的说法,调解系数,不用转换),直接送给控制系统 的输入量(马达的控制电压?或者温度的加热装置). 还有个问题,pid算法,看到有人说,只适用于比较慢的惰性系统 ...我在怀疑 用它来控制mos管,稳定Ids是否可行?
看不懂这代码,积分环节在哪?第二项怎么是减的?误差怎么是当前数减上次数?[/quote] 对,第二项,至于为什么减,推导公式的关系...几个地方的推导公式,推出都是减号,就像fft运算之前,推导,在不同的平台系数代入的时候,有两项要改变负号一样.你不要去考虑. iError = sptr->SetPoint - NextPoint 不是当前数减上次数,你把它当成当前数,是受 我上一个 那种算法(?)的误导?你看这段代码上面的注释,是原作者注释的,setpoint是要达到的目标值,也就是我要稳定的数值. 我是这样理解的,如果我要达到15000,而当前值(引入函数和nextpoint)为10000,那么误差值是不是15000-10000?那么这个误差值再乘以比例系数,即是对应的P 项了. 当然,这都是我自己的理解,可能存在错误.参考下.
C_Rabbit 2017-09-21
  • 打赏
  • 举报
回复
看4楼,你疑惑的应该是代码如何起作用。
这个代码里用了全局变量PID,在函数运行过程中,全局变量PID中的参数也随之变换,至于这个参数如何应用到实际的器件上,应该是在其他代码部分以PID中的参数为基准调整pwm占空比输出之类的
alca_bigV 2017-09-21
  • 打赏
  • 举报
回复
引用 7 楼 C_Rabbit 的回复:
看4楼,你疑惑的应该是代码如何起作用。 这个代码里用了全局变量PID,在函数运行过程中,全局变量PID中的参数也随之变换,至于这个参数如何应用到实际的器件上,应该是在其他代码部分以PID中的参数为基准调整pwm占空比输出之类的
应该?大神你以前怎么应用的? 是用pid的参数?还是返回值return pid.ActualSpeed 去调整pwm的占空比? 这个函数只有一个目标转速的输出,如何体现 输出量引入,再计算 误差?(看到的actualspeed是计算出的实际转速,而不是测得的实际 转速),实际应用的时候,要如何修改? 至于 全局变量,公式算法,理论意义,懂点c和高等数学的应该都看得懂.
alca_bigV 2017-09-21
  • 打赏
  • 举报
回复
引用 3 楼 C_Rabbit 的回复:
看这个吧 http://blog.csdn.net/qq229596421/article/details/51419813
大神你作过pid没有?如果实际 应用过,解释一下你是如何应用 的? 你明白我的问题点在哪里吗?
worldy 2017-09-21
  • 打赏
  • 举报
回复
你的这个大妈应该没有什么问题,PID功能就是确保你的输出逼近的目标 float PID_realize(float speed) { pid.SetSpeed=speed; //目标速度,就是你的速度要稳定在这个值上(其他物理量亦然) pid.err=pid.SetSpeed-pid.ActualSpeed; //ActualSpeed当前实际,在此处就是反馈量,err为目标与实际的误差,误差值是PID的驱动源泉 pid.integral+=pid.err;// 误差积分,就是PID的I环节的误差累计,这个值起到输出和目标基本相同的作用,如果没有积分环节,那么误差值无法为0或者逼近0 pid.voltage=pid.Kp*pid.err //比例P输出值 +pid.Ki*pid.integral//积分I输出值 +pid.Kd*(pid.err-pid.err_last);// 微分D输出值,基本可以不用(误差的差值) pid.err_last=pid.err;//保存当前误差给下次计算使用 pid.ActualSpeed=pid.voltage*1.0; return pid.ActualSpeed; } PID系统一个重要的工装就是需要整定,也就是确定Kp\Ki\Kd的值,首先,KiKd为0,Kp给的很小的值,慢慢增大,再Ki慢慢增大,整个过程都要确保系统不会过冲
tianxj001 2017-09-21
  • 打赏
  • 举报
回复
程序写好,正确了,接着就是到底用多少大小的Kp Ki Kd 就是我们常说的整定了,这个资料多,可以多多参考一下吧。 在过去芯片计算能力差的年代,Kp Ki Kd 是不会考虑用浮点数的,我们通过把他们都变大比如512倍,或者1024倍,进入长整数运算,再在后面将结果除以2的某次方,也可以实现同样目的,现在芯片像stm32的M3 M4都带浮点运算了,这就不是问题了,直接将Kp Ki Kd 用浮点数填进去就可以了。
tianxj001 2017-09-21
  • 打赏
  • 举报
回复
根据你的构思,你测的的应该是电流采样电阻上面的电压值AD,一般在pid里面我们叫做Next_point,而我们设定的目标,应该是预计的采样电阻的电压的AD值一般我们叫Set_point,他们的减法就是error=Set_point-Next_point,上一次的误差为Last_error,sum_error+=error。 然后,你的输出目标应该为PWM设置数据,这样就很明确了,Kp*error 就是比例项,Ki* sum_error就为积分项,Kd*(error-Last_error)就是微分项,他们的和经过最大最小限制后就可以直接作为PWM数据用,用的时候加上常数=mos开启电压(这个可以让你的pid更线性)。 pwm输出进低通滤波就可以去控制MOS管。这里有必要说的是PWM的幅度,我们一般设置为10V以上,这样经过积分滤波后最终可以获得10V+的电压,足以良好驱动MOS管。 根据增量法和位置法实现的计算公式是有区别的,但其实经过标准采样间隔进行变换,其实增量和位置是一个基本公式,只是他们的P I D系数在实际公式里面,代表的意义有所区别而已。
C_Rabbit 2017-09-21
  • 打赏
  • 举报
回复
引用 8 楼 baidu_39576528 的回复:
[quote=引用 7 楼 C_Rabbit 的回复:] 看4楼,你疑惑的应该是代码如何起作用。 这个代码里用了全局变量PID,在函数运行过程中,全局变量PID中的参数也随之变换,至于这个参数如何应用到实际的器件上,应该是在其他代码部分以PID中的参数为基准调整pwm占空比输出之类的
应该?大神你以前怎么应用的? 是用pid的参数?还是返回值return pid.ActualSpeed 去调整pwm的占空比? 这个函数只有一个目标转速的输出,如何体现 输出量引入,再计算 误差?(看到的actualspeed是计算出的实际转速,而不是测得的实际 转速),实际应用的时候,要如何修改? 至于 全局变量,公式算法,理论意义,懂点c和高等数学的应该都看得懂. [/quote] 可能我还是没get到你的点,就举个实际应用的例子吧 3D打印机的喷头温控,要求在一段时间内持续保持在200度,这里就需要PID_realize持续运作,来调高或降低对加热模块的PWM占空比,在此系统中,因为有喷头风扇的连续工作散热,所以当喷头温度达到200度时,不进行挤出料工作的情况下,温度的消耗会比较低,此时仅需保持较低的PWM即可维持温度,而当挤出机工作慢速→快速的挤出料,PLA料会分走喷头的热量,温度就会急剧降低,此时就要迅速调高PWM。 我刚想了下,可能这个例子还不是很贴切,一楼的代码应该和电动车转速控制更接近些。
C_Rabbit 2017-09-21
  • 打赏
  • 举报
回复
引用 8 楼 baidu_39576528 的回复:
[quote=引用 7 楼 C_Rabbit 的回复:] 看4楼,你疑惑的应该是代码如何起作用。 这个代码里用了全局变量PID,在函数运行过程中,全局变量PID中的参数也随之变换,至于这个参数如何应用到实际的器件上,应该是在其他代码部分以PID中的参数为基准调整pwm占空比输出之类的
应该?大神你以前怎么应用的? 是用pid的参数?还是返回值return pid.ActualSpeed 去调整pwm的占空比? 这个函数只有一个目标转速的输出,如何体现 输出量引入,再计算 误差?(看到的actualspeed是计算出的实际转速,而不是测得的实际 转速),实际应用的时候,要如何修改? 至于 全局变量,公式算法,理论意义,懂点c和高等数学的应该都看得懂. [/quote] 就你给出的代码来看,如果是我来应用的话,我会用pid.voltage作为调整PWM输出的基准 当然我没用过这段代码,并不能确认是否是正确的,是基于代码的内容表现,认为应该使用pid.voltage 不过,这其实也就相当于使用pid.ActualSpeed 你可以把这理解为一个逐渐逼近的过程,也就是说 PID_realize将会持续执行,在类似于温控、电机速率控制这样目标动作可能受外界因素影响而发生变化的场景,持续运行 PID_realize来保持状态是比较常见的做法
worldy 2017-09-21
  • 打赏
  • 举报
回复
引用 12 楼 baidu_39576528 的回复:
刚刚看到这段代码 void IncPIDInit(void) { sptr->LastError = 0; //Error[-1] sptr->PrevError = 0; //Error[-2] sptr->Proportion =P_DATA; //比例常数Proportional Const sptr->Integral =I_DATA; //积分常数Integral Const sptr->Derivative =D_DATA; //微分常数Derivative Const sptr->SetPoint =100; 目标是100 } //***************************************************** //增量式PID控制设计 //***************************************************** int IncPIDCalc(int NextPoint) { int iError, iIncpid; //当前误差 iError = sptr->SetPoint - NextPoint; //增量计算 iIncpid = sptr->Proportion * iError //E[k]项 - sptr->Integral * sptr->LastError //E[k-1]项 + sptr->Derivative * sptr->PrevError; //E[k-2]项 sptr->PrevError = sptr->LastError; //存储误差,用于下次计算 sptr->LastError = iError; return(iIncpid); //返回增量值 } 这是另一个 解说 的 pid增量算法 中的实现.. 注意这里,代入的变量,是next,而set值,在初始化的时候已经固定(感觉很接近 我猜想的那一种理解方法),这个和前面 的算法实现感觉完全不一样.... 如果从这段代码去理解 如何 应用到实际工程系统中,就比较好理解 了...代入的next是测量得到的实际输出量(无论这个量是温度的ad值还是转速的ad值),代入以后与设置好的固定值进行比较出差异,再计算出微分,积分,与 比例系数,把这个值返回.(返回以后应该还要进行适当转换,或者按楼上的说法,调解系数,不用转换),直接送给控制系统 的输入量(马达的控制电压?或者温度的加热装置). 还有个问题,pid算法,看到有人说,只适用于比较慢的惰性系统 ...我在怀疑 用它来控制mos管,稳定Ids是否可行?
看不懂这代码,积分环节在哪?第二项怎么是减的?误差怎么是当前数减上次数?
alca_bigV 2017-09-21
  • 打赏
  • 举报
回复
刚刚看到这段代码 void IncPIDInit(void) { sptr->LastError = 0; //Error[-1] sptr->PrevError = 0; //Error[-2] sptr->Proportion =P_DATA; //比例常数Proportional Const sptr->Integral =I_DATA; //积分常数Integral Const sptr->Derivative =D_DATA; //微分常数Derivative Const sptr->SetPoint =100; 目标是100 } //***************************************************** //增量式PID控制设计 //***************************************************** int IncPIDCalc(int NextPoint) { int iError, iIncpid; //当前误差 iError = sptr->SetPoint - NextPoint; //增量计算 iIncpid = sptr->Proportion * iError //E[k]项 - sptr->Integral * sptr->LastError //E[k-1]项 + sptr->Derivative * sptr->PrevError; //E[k-2]项 sptr->PrevError = sptr->LastError; //存储误差,用于下次计算 sptr->LastError = iError; return(iIncpid); //返回增量值 } 这是另一个 解说 的 pid增量算法 中的实现.. 注意这里,代入的变量,是next,而set值,在初始化的时候已经固定(感觉很接近 我猜想的那一种理解方法),这个和前面 的算法实现感觉完全不一样.... 如果从这段代码去理解 如何 应用到实际工程系统中,就比较好理解 了...代入的next是测量得到的实际输出量(无论这个量是温度的ad值还是转速的ad值),代入以后与设置好的固定值进行比较出差异,再计算出微分,积分,与 比例系数,把这个值返回.(返回以后应该还要进行适当转换,或者按楼上的说法,调解系数,不用转换),直接送给控制系统 的输入量(马达的控制电压?或者温度的加热装置). 还有个问题,pid算法,看到有人说,只适用于比较慢的惰性系统 ...我在怀疑 用它来控制mos管,稳定Ids是否可行?
alca_bigV 2017-09-21
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
电压到速度可以不做变换,实际上,做不做变换差别在于整定后的pid系数值和单位不同而已
对,不同的系数,可以使得输出 适合直接给dac 或者 作为增量加到DAC上.....你说的这个,我可以理解,认为也不是问题.
worldy 2017-09-21
  • 打赏
  • 举报
回复
电压到速度可以不做变换,实际上,做不做变换差别在于整定后的pid系数值和单位不同而已
加载更多回复(5)

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧