Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
7034e94d9This file is pinned to the selected release. Download the original to open it in your design tool.
COMP(mot);
//in
HAL_PIN(torque) = 0.0;
HAL_PIN(mr) = 0.1;
HAL_PIN(md) = 0.01;
HAL_PIN(ml) = 0.0;
HAL_PIN(j) = 0.0;
HAL_PIN(real_pos) = 0.0;
HAL_PIN(kp) = 10.0;
HAL_PIN(ki) = 20.0;
//out
HAL_PIN(acc) = 0.0;
HAL_PIN(vel) = 0.0;
HAL_PIN(pos_d) = 0.0;
HAL_PIN(pos) = 0.0;
HAL_PIN(pos_error) = 0.0;
HAL_PIN(jerk) = 0.0;
MEM(float pos) = 0.0;
MEM(float vel) = 0.0;
MEM(float old_torque) = 0.0;
RT(
float torque = PIN(torque);
float pos_error = minus(PIN(real_pos), pos);
torque += PIN(ml);
torque -= PIN(md) * vel;
if(ABS(vel) <= 0.001 && ABS(torque) <= PIN(mr)){
torque = 0;
}
else if(ABS(vel) <= 0.001){
torque -= PIN(mr) * SIGN(torque);
}
else{
torque -= PIN(mr) * SIGN(vel);
}
float j = MAX(PIN(j), 0.00001);
float acc = torque / j + PIN(ki) * pos_error / period;
vel += acc * period;
float old_pos = pos;
pos += (vel + PIN(kp) * pos_error) * period;
pos = mod(pos);
PIN(jerk) = (torque - old_torque) / period;
old_torque = torque;
PIN(pos) = pos;
PIN(vel) = vel;
PIN(pos_d) = minus(pos, old_pos) / period;
PIN(acc) = acc;
PIN(pos_error) = pos_error;
);
ENDCOMP;