以工程中的Catching.c文件举例
pid_t Moto_Lift_Island_Pid_Pos[2];//在要计算pid的文件里面添加这个位置环结构体,如CatchingTask.c里面
pid_t Moto_Lift_Island_Pid_Spd[2]; //在要计算pid的文件里面添加这个速度环结构体
moto_measure_t Moto_Lift_Island[2];//在canbus_task.c里面添加
float pid_calc(pid_t* pid, float get, float set);
/******************************************位置环计算***********************************************/
pid_calc(&Moto_Lift_Island_Pid_Pos[0],Moto_Lift_Island[0].total_angle,my_angle);//位置环计算,编码器返回的角度值,我给的角度
pid_calc(&Moto_Lift_Island_Pid_Spd[0],Moto_Lift_Island[0].speed_rpm,Moto_Lift_Island_Pid_Pos[0].pos_out);//速度环计算,编码器返回的速度值,pid位置环计算后输出的值
/******************************************速度环计算*************************************************/
pid_calc(&Moto_Lift_Island_Pid_Spd[0],Moto_Lift_Island[0].speed_rpm,my_speed);
//看波形,位置环
Jscope_get_angle=Moto_Lift_Island[0].total_angle;
Jscope_set_angle=my_angle;
//速度环
Jscope_get_speed=Moto_Lift_Island[0].speed_rpm;
Jscope_set_speed=my_speed;
SetMotorCurrent2(&hcan1,Moto_Lift_Island_Pid_Spd[0].pos_out,0,0,0);//用pid速度环计算出来的结果赋值,发送电流