当前位置:首页 > 新闻动态

北京车窗控制器好用排名

发表时间:2021-09-04 00:41
之前的几篇文章(电机节制根底篇),介绍的电机编码器事理、按时器输出PWM、按时器编码器模式测速等。本篇在前几篇的根底上,继续来进修电机节制,经由过程PID算法,来进行电机的速度节制,并进行考试考试测试。PID根底PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。PID是经典的闭环节制算法,具有事理简单,易于实现,合用面广,节制参数彼此自力,参数的选定斗劲简单等益处。凡是需要将某一个物理量“连结不变”的场所(好比连结平衡,不变温度、转速等),PID城市派上除夜用处。PID算法分类PID算法可分为位置式PID与增量式PID两除夜类。在现实的编程操作中,需要操作离散化的PID算法,以合用计较机的操作气象,下面以电机转速节制为例,来看一下两种PID算法的根底事理。位置式PID位置式PID是当前系统的现实位置,与想要达到的预期位置的误差,进行PID节制比例P:e(k) 此次误差积分I:∑e(i) ?误差的累加微分D:e(k) - e(k-1) 此次误差-上次误差因为有误差积分 ∑e(i),一贯累加,也就是当前的输出u(k)与畴昔的所有状况都有关系。位置式PID算法的伪代码以下://位置式PID(伪代码)previous_err = 0integral = 0loop: //遵循方针值与测量值(如电机的设定速度与读到的编码器转后后的速度),轮回计较更新输出值(如PWM) error = setpoint - measured_value /*误差项:方针值-测量值*/ integral = error * dt /*积分项:误差项的累计*/ derivative = (error - previous_error) / dt /*微分项:误差的改变率*/ output = Kp*error Ki*integral Kd*derivative /*三项分袂乘以PID系数即为输出*/ previous_err = err //更新误差 wait(dt) //期待固定的计较周期 goto loop增量式PID比例P:e(k) - e(k-1) 此次误差-上次误差积分I:e(k) 此次误差d微分D:e(k) - 2e(k-1) e(k-2) ?此次误差-2×上次误差 上上次误差寄望增量式PID首先计较的是Δu(k),然后与上次的输出相加,才是此次的输出功能。增量式PID没有误差累加,节制增量Δu(k)的必定仅与比来3次的采样值有关。增量式PID算法的伪代码以下://增量式PID(伪代码)previous02_error = 0 //上上次误差previous01_error = 0 //上次误差integral = 0 //积分和pid_out = 0 //pid增量累加和loop: error = setpoint ? measured_value /*误差项:方针值-测量值*/ proportion = error - previous01_error /*比例项:误差项-上次误差*/ integral = error * dt /*积分项:误差项的累计*/ derivative = (error ? 2*previous01_error previous02_error) / dt/*微分项:上次误差与上上次误差的改变率*/ /*或写成:derivative = ( (error ? previous01_error)/dt - (previous01_error - previous02_error)/dt )*/ pid_delta = Kp × error Ki × integral Kd × derivative //计较获得PID增量 pid_out = pid_out pid_delta //计较事实下场的PID输出 previous02_error = previous01_error //更新上上次误差 previous01_error = error //更新上次误差 wait(dt) //期待固定的计较周期 goto loopPID各项的浸染以这个弹簧为例(假定没有重力,只有空气阻力),先是在平衡位置上(方针位置),拉它一下,然后松手,这时辰它会震动起来。P 比例P就是比例的意思。这里就类比弹簧的弹力(回覆力):F=k*Δx当物块距离平衡位置越远时,弹力越除夜,反之,离平衡位置越近,力越小。当物块位于平衡位置上方时,弹性向下,当物块位于平衡位置下方时,弹性向上,即弹力老是使物块朝平衡位置施力。D 微分/求导/改变率只有P节制,物块一贯在上下震动,全数系统不是出格不变。这是因为空气阻力太小,想象一下全数把它放到水里,物块理当很快会静止下来。这时辰因为阻力的浸染。D的浸染就相当于阻力:它与改变速度(单元时刻内的改变量)有关,改变的越除夜,它施加的阻力也就越除夜它的标的方针与方针值无关,好比,当物块从下到上经由平衡位置时,它的标的方针一贯是朝下,即先是禁止物块接近平衡位置,再是禁止物块远离平衡位置(对比P的浸染,始终禁止物块远离平衡位置)它的浸染就是减小系统的超调量了(削减系统在平衡位置震动)I 积分/误差堆集有了P的动力和D的阻力,这个物块便可以较快的不变下来了,那I的浸染是甚么呢?想象一下,假若有其它外力的影响,在某一时刻,物块将要达到平衡位置时,刚好P的动力与外力(与P的浸染标的方针相反的恒定力)抵消,则往后物块将停在此处四周(因为此时D的力也趋近0,并很快酿成0),一贯达到不了平衡位置。这时辰,I的误差积分浸染就很有需要了:它计较的误差的累计,只要有误差,它就一贯增添,早可能很小,但只要没要达到平衡位置,该值就会愈来愈除夜它的浸染就是消弭系统的静态误差了PID参数整定现实操作,进行PID参数调剂时,一般操作试凑法,PID参数整定口诀以下:参数整定找,从小到除夜顺次查,先是比例后积分,再把微分加,曲线振荡很频仍,比例度盘要放除夜,曲线漂浮绕除夜湾,比例度盘往小扳,曲线偏离回覆慢,积分时刻往下降,曲线波动周期长,积分时刻再加长,曲线振荡频率快,先把微分降下来,动差除夜来波动慢,微分时刻应加长,理想曲线两个波,前高后低4比1,一看二调多分化,调剂质量不会低。电机PID速度节制上面介绍了PID的根底常识,接下来就操作位置式PID来实现对直流电机转速的节制。法度楷模自界说PID结构体typedef struct{ float target_val //方针值 float err //误差值 float err_last //上一个误差值 float Kp,Ki,Kd //比例、积分、微分系数 float integral //积分值 float output_val //输出值}PIDPID算法实现(位置式PID)float PID_realize(float actual_val){ /*计较方针值与现实值的误差*/ pid.err = pid.target_val - actual_val /*积分项*/ pid.integral = pid.err /*PID算法实现*/ pid.output_val = pid.Kp * pid.err pid.Ki * pid.integral pid.Kd * (pid.err - pid.err_last) /*误差传递*/ pid.err_last = pid.err /*返回当前现实值*/ return pid.output_val}周期挪用PID计较//周期按时器的回调函数void AutoReloadCallback(){ int sum = 0/*编码器值(PID输入)*/ int res_pwm = 0/*PWM值(PID输出)*/ /*读取编码器测量的速度值*/ sum = read_encoder() /*进行PID运算,获得PWM输出值*/ res_pwm = PID_realize(sum) /*遵循PWM值节制电无邪弹*/ set_motor_rotate(res_pwm) /*给上位机通道1发送现实值*/ set_computer_value(SEND_FACT_CMD, CURVES_CH1, sum, 1) }上位机这里操作野火多功能调试助手的"PID调试助手“来进行考试考试,用于显示PID调剂时的电机转速曲线。考试考试演示方针速度值设为50(这里的方针值50操作的是编码器10ms捕捉的脉冲数),经由过程体调剂PID的参数,来测试电性能否较快的达到方针速度。先调剂P【1】P值先操作10看看下场,赶忙度曲线可以看出,达不到方针速度,且与方针速度相差较除夜。PID1000【2】P值加除夜到100,赶忙度曲线可以看出,仍是达不到方针速度。PID10000只操作P,会存在静差,始终达到不了方针值,这时辰就要操作积分项来消弭静差了。再调剂I【3】P连结100,I操作0.2,赶忙度曲线可以看出,可以达到方针速度,但仆从的速度较慢。PID1000.20【4】P连结100,加除夜I,操作1.0,赶忙度曲线可以看出,可以达到方针速度,仆从的速度加速了。PID1001.00【5】P连结100,继续加除夜I,操作3.0,赶忙度曲线可以看出,可以达到方针速度,仆从的速度进一步加速了。PID1003.00【6】P连结100,再继续加除夜I,操作6.0,赶忙度曲线可以看出,可以达到方针速度,跟赶忙度也很快,但有一点过冲。PID1006.00对过冲,可以再插手微分试试,微分D相当于阻力的下场调剂D【7】P连结100,I连结6.0,D操作3.0,赶忙度曲线上,仿佛看不出较着的改变。PID1006.03.0【8】P连结100,I连结6.0,D加除夜到6.0,赶忙度曲线上看,过冲幅度减小了点。PID1006.06.0演示视频相关文章[电机节制根底]:文中触及到PWM节制,电机编码器测速的常识可以看下根底篇的介绍专辑 | 电机节制1 编码器计数事理与电机测速事理——多图解析2 电机节制根底——按时器编码器模式操作与转速计较3 电机节制根底——按时器捕捉单输入脉冲事理4 电机节制根底——按时器根底常识与PWM输失踪事理总结本篇简单介绍了PID的根底领理与参数整定,若想把PID参数调剂好,还需要不竭的实践与调试。


分享到: