bsp_PID.cpp bsp_PID.h 实现了PID算法 /*---------------------------------------------------------------------------------------------------- # #Copyright(c)2022YuankangLiang(XerolySkinner) # #本软件按原样提供,无任何明示或暗示 #在任何情况下,作者都不承担任何损害赔偿责任 # #使用的许可声明: #1.不得歪曲本软件的来源,你不能声称你编写了原始软件. #2.免费授予以任何目的,前提是版权声明出现在所有副本中. #并且版权声明和许可声明同时出现. #3.你有使用,复制,修改,分发,和销售本软件的许可. #4.如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的. #5.本通知不得从任何来源删除或更改. # #YuankangLiang(XerolySkinner) #E-mail:zabbcccbbaz@163.com #QQ:2715099320 #MobilePhone:13005636215 # #Allrightsreserved. */ //---------------------------------------------------------------------------------------------------- //头文件 // #include"bsp_PID.h" //---------------------------------------------------------------------------------------------------- //类函数 // floatbsp_Position_PID::PID(floattemp){ floatthisError; thisError=target-temp;//当前误差等于设定值减去当前值 integral+=thisError;//误差积分,把所有误差累加起来 result= Kp*thisError+ Ki*integral+ Kd*(thisError-lasterror); lasterror=thisError; if(result_H==result_L)returnresult; if(result>=result_H)result==result_H; elseif(result<=result_L)result==result_L; returnresult; } //---------------------------------------------------------------------------------------------------- floatbsp_Increment_PID::PID(floattemp){ floatthisError=target-temp;//当前误差等于设定值减去当前值 floatincrement; floatpError,dError,iError; pError=thisError-lasterror; iError=thisError; dError=thisError-2*lasterror+preerror; increment= Kp*pError+ Ki*iError+ Kd*dError;//增量计算 preerror=lasterror;//存放偏差用于下次运算 lasterror=thisError;//存放偏差用于下次运算 result+=increment;//上次结果叠加增量 if(result_H==result_L)returnresult; if(result>=result_H)result==result_H; elseif(result<=result_L)result==result_L; returnresult;} //---------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------- voidbsp_Position_PID::clean(void){ integral=0;//积分值 lasterror=0;//前一拍偏差 result=0;//输出值 } //---------------------------------------------------------------------------------------------------- voidbsp_Increment_PID::clean(void){ lasterror=0;//前一拍偏差 preerror=0;//前两拍偏差 result=0;//输出值 } //---------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------- voidbsp_Position_PID::set(floatP,floatI,floatD){ Kp=P;Ki=I;Kd=D;} //---------------------------------------------------------------------------------------------------- voidbsp_Increment_PID::set(floatP,floatI,floatD){ Kp=P;Ki=I;Kd=D;} //---------------------------------------------------------------------------------------------------- //构造函数 // bsp_Position_PID::bsp_Position_PID(void){ bsp_Position_PID::target=0; bsp_Position_PID::lasterror=0; bsp_Position_PID::Kp=0; bsp_Position_PID::Ki=0; bsp_Position_PID::Kd=0; bsp_Position_PID::integral=0; bsp_Position_PID::result=0; bsp_Position_PID::result_H=0; bsp_Position_PID::result_L=0; } //---------------------------------------------------------------------------------------------------- bsp_Position_PID::bsp_Position_PID( floatKp,floatKi,floatKd,floattarget, floatresult_H,floatresult_L){ bsp_Position_PID::target=target; bsp_Position_PID::lasterror=0; bsp_Position_PID::Kp=Kp; bsp_Position_PID::Ki=Ki; bsp_Position_PID::Kd=Kd; bsp_Position_PID::integral=0; bsp_Position_PID::result=0; bsp_Position_PID::result_H=0; bsp_Position_PID::result_L=0; } //---------------------------------------------------------------------------------------------------- bsp_Position_PID::~bsp_Position_PID(void){} //---------------------------------------------------------------------------------------------------- bsp_Increment_PID::bsp_Increment_PID(void){ bsp_Increment_PID::target=0; bsp_Increment_PID::lasterror=0; bsp_Increment_PID::preerror=0; bsp_Increment_PID::Kp=0; bsp_Increment_PID::Ki=0; bsp_Increment_PID::Kd=0; bsp_Increment_PID::result=0; bsp_Increment_PID::result_H=0; bsp_Increment_PID::result_L=0; } //---------------------------------------------------------------------------------------------------- bsp_Increment_PID::bsp_Increment_PID( floatKp,floatKi,floatKd,floattarget, floatresult_H,floatresult_L){ bsp_Increment_PID::target=target; bsp_Increment_PID::lasterror=0; bsp_Increment_PID::preerror=0; bsp_Increment_PID::Kp=Kp; bsp_Increment_PID::Ki=Ki; bsp_Increment_PID::Kd=Kd; bsp_Increment_PID::result=0; bsp_Increment_PID::result_H=0; bsp_Increment_PID::result_L=0; } //---------------------------------------------------------------------------------------------------- bsp_Increment_PID::~bsp_Increment_PID(void){}