|
楼主 |
发表于 2014-7-11 19:12:22
|
显示全部楼层
技术宅 发表于 2014-7-11 16:32
楼主你好,
void PID_setpoint(PIDtypedef*PIDx,u16 setvalue); //设定 PID预期值
void set_speed(float W ...
void PID_setpoint(PIDtypedef*PIDx,u16 setvalue)
{
PIDx->setpoint=setvalue;
}
//确实是设定的预期转速,而且根据实际参数,执行一次的话就是改变了一个PID单元的设定值,即setpoint
void set_speed(float W1,float W2,float W3,float W4)
{
float temp;
if(W1>0) //判断W 正负,正数处理
{
motor1_out0=0;
motor1_out1=1;
temp=W1*122.23;
PID_setpoint(&PID1,temp);
}
else if(W1==0) //零值
{
motor1_out0=0;
motor1_out1=0;
PID_setpoint(&PID1,0);
}
else //负数处理
{
motor1_out0=1;
motor1_out1=0;
temp=-W1*122.23;
PID_setpoint(&PID1,temp);
}
if(W2>0)
{
motor2_out0=0;
motor2_out1=1;
temp=W2*122.23;
PID_setpoint(&PID2,temp);
}
else if(W2==0)
{
motor2_out0=0;
motor2_out1=0;
PID_setpoint(&PID2,0);
}
else
{
motor2_out0=1;
motor2_out1=0;
temp=-W2*122.23;
PID_setpoint(&PID2,temp);
}
if(W3>0)
{
motor3_out0=0;
motor3_out1=1;
temp=W3*122.23;
PID_setpoint(&PID3,temp);
}
else if(W3==0)
{
motor3_out0=0;
motor3_out1=0;
PID_setpoint(&PID3,0);
}
else
{
motor3_out0=1;
motor3_out1=0;
temp=-W3*122.23;
PID_setpoint(&PID3,temp);
}
if(W4>0)
{
motor4_out0=0;
motor4_out1=1;
temp=W4*122.23;
PID_setpoint(&PID4,temp);
}
else if(W4==0)
{
motor4_out0=0;
motor4_out1=0;
PID_setpoint(&PID4,0);
}
else
{
motor4_out0=1;
motor4_out1=0;
temp=-W4*122.23;
PID_setpoint(&PID4,temp);
}
}
//这个函数你应该能看出,之前的PID_setpoint()已经包含在里面了。这个函数的功能是设定四个轮子的预期转速,但是转速w有正负,而我这边都是以大小来算的,电机转向就交给L298的两个方向控制线了。故需要判断正负。 |
|