资源描述:
《增量式pid的算法程序1[1]》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、#include #include struct_pid{ intpv;/*integerthatcontainstheprocessvalue*/ intsp;/*integerthatcontainsthesetpoint*/ floatintegral; floatpgain; floatigain; floatdgain; intdeadband; intlast_error; }; struct_pidwarm,*pid; intprocess_point,set_point,dead_ban
2、d; floatp_gain,i_gain,d_gain,integral_val,new_integ;; /*------------------------------------------------------------------------ pid_init DESCRIPTIONThisfunctioninitializesthepointersinthe_pidstructure totheprocessvariableandthesetpoint.*pvand*spare integerpointers. ------
3、------------------------------------------------------------------*/ voidpid_init(struct_pid*warm,intprocess_point,intset_point) { struct_pid*pid; pid=warm; pid->pv=process_point; pid->sp=set_point; } /*-----------------------------------------------------------------------
4、- pid_tune DESCRIPTIONSetstheproportionalgain(p_gain),integralgain(i_gain), derivitivegain(d_gain),andthedeadband(dead_band)of apidcontrolstructure_pid. ------------------------------------------------------------------------*/ voidpid_tune(struct_pid*pid,floatp_gain,floati_gai
5、n,floatd_gain,intdead_band) { pid->pgain=p_gain; pid->igain=i_gain; pid->dgain=d_gain; pid->deadband=dead_band; pid->integral=integral_val; pid->last_error=0; } /*------------------------------------------------------------------------ pid_setinteg DESCRIPTIONSetanewvaluef
6、ortheintegraltermofthepidequation. Thisisusefulforsettingtheinitialoutputofthe pidcontrolleratstartup. ------------------------------------------------------------------------*/ voidpid_setinteg(struct_pid*pid,floatnew_integ) { pid->integral=new_integ; pid->last_error=0; } /*-
7、----------------------------------------------------------------------- pid_bumpless DESCRIPTIONBumplesstransferalgorithim.Whensuddenlychanging setpoints,orwhenrestartingthePIDequationafteran extendedpause,thederivativeoftheequationcancause abumpinthecontrolleroutp