Я пришел сюда с просьбой о помощи.
Есть задача настроить станок. На одной из осей у него два серводвигателя EMJ-08APB22 (с инкрементальным энкодером)
![Рельс 2мм :rail:](./images/smilies/rail.gif)
![Рельс 2мм :rail:](./images/smilies/rail.gif)
Настраиваю всё согласно этой теме http://www.cnc-club.ru/forum/viewtopic.php?f=144&t=5553. Спасибо большое автору. Устанавливаю один канала ведущим, другой ведомым.
Дошло дело до первого запуска станка, настройки параметров скорости, ускорения, ПИД и тут обозначилась проблема, которую коллеги предвещали еще в начале пути. При инициализации контроллера и подачи питания на привода система устойчива. Во время движения никаких проблем тоже не наблюдается. Портал движется ровно. Но после останова станок колбасит, привода начинают гудеть, греться. Иногда ведомый, иногда ведущий. Иной раз получается уловить момент стабильности и привода затихают.
Пробовал добавить DeadBandRange - не помогло.
Кстати, до этого настраивали по Step/Dir контроллером Purelogic + Mach3. Ситуация примерно такая же. По этому собственно и решили перейти на Kflop
Не могу понять куда копать.
Возможно дело вот в этом: https://www.flickr.com/photos/153636133 ... res/240zSQ
А может быть дело в перекосе портала?
Очень хочется найти отклик людей, которые уже настраивали такие системы.
Код: Выделить всё
#include "KMotionDef.h"
void main()
{
int BitA,Change1=0,Change2=0, DiffX2;
int PosNoWrap, NewPos, Pos=0, wraps;
double Factor=0;
ch0->InputMode=ENCODER_MODE;
ch0->OutputMode=DAC_SERVO_MODE;
ch0->Vel=16666.7;
ch0->Accel=16666.7;
ch0->Jerk=1e+09;
ch0->P=1;
ch0->I=0;
ch0->D=0;
ch0->FFAccel=0;
ch0->FFVel=0;
ch0->MaxI=2047;
ch0->MaxErr=10000;
ch0->MaxOutput=2047;
ch0->DeadBandGain=1;
ch0->DeadBandRange=0;
ch0->InputChan0=0;
ch0->InputChan1=0;
ch0->OutputChan0=0;
ch0->OutputChan1=0;
ch0->MasterAxis=-1;
ch0->LimitSwitchOptions=0x100;
ch0->LimitSwitchNegBit=0;
ch0->LimitSwitchPosBit=0;
ch0->SoftLimitPos=1e+09;
ch0->SoftLimitNeg=-1e+09;
ch0->InputGain0=1;
ch0->InputGain1=1;
ch0->InputOffset0=0;
ch0->InputOffset1=0;
ch0->OutputGain=1;
ch0->OutputOffset=0;
ch0->SlaveGain=1;
ch0->BacklashMode=BACKLASH_OFF;
ch0->BacklashAmount=0;
ch0->BacklashRate=0;
ch0->invDistPerCycle=0.00025;
ch0->Lead=0;
ch0->MaxFollowingError=100000;
ch0->StepperAmplitude=100;
ch0->iir[0].B0=1;
ch0->iir[0].B1=0;
ch0->iir[0].B2=0;
ch0->iir[0].A1=0;
ch0->iir[0].A2=0;
ch0->iir[1].B0=1;
ch0->iir[1].B1=0;
ch0->iir[1].B2=0;
ch0->iir[1].A1=0;
ch0->iir[1].A2=0;
ch0->iir[2].B0=1;
ch0->iir[2].B1=0;
ch0->iir[2].B2=0;
ch0->iir[2].A1=0;
ch0->iir[2].A2=0;
ch1->InputMode=ENCODER_MODE;
ch1->OutputMode=DAC_SERVO_MODE;
ch1->Vel=16666.7;
ch1->Accel=16666.7;
ch1->Jerk=1e+09;
ch1->P=1;
ch1->I=0;
ch1->D=0;
ch1->FFAccel=0;
ch1->FFVel=0;
ch1->MaxI=2047;
ch1->MaxErr=10000;
ch1->MaxOutput=2047;
ch1->DeadBandGain=1;
ch1->DeadBandRange=0;
ch1->InputChan0=1;
ch1->InputChan1=1;
ch1->OutputChan0=1;
ch1->OutputChan1=1;
ch1->MasterAxis=0;
ch1->LimitSwitchOptions=0x100;
ch1->LimitSwitchNegBit=0;
ch1->LimitSwitchPosBit=0;
ch1->SoftLimitPos=1e+09;
ch1->SoftLimitNeg=-1e+09;
ch1->InputGain0=1;
ch1->InputGain1=1;
ch1->InputOffset0=0;
ch1->InputOffset1=0;
ch1->OutputGain=1;
ch1->OutputOffset=0;
ch1->SlaveGain=-1;
ch1->BacklashMode=BACKLASH_OFF;
ch1->BacklashAmount=0;
ch1->BacklashRate=0;
ch1->invDistPerCycle=0.00025;
ch1->Lead=0;
ch1->MaxFollowingError=100000;
ch1->StepperAmplitude=100;
ch1->iir[0].B0=1;
ch1->iir[0].B1=0;
ch1->iir[0].B2=0;
ch1->iir[0].A1=0;
ch1->iir[0].A2=0;
ch1->iir[1].B0=1;
ch1->iir[1].B1=0;
ch1->iir[1].B2=0;
ch1->iir[1].A1=0;
ch1->iir[1].A2=0;
ch1->iir[2].B0=1;
ch1->iir[2].B1=0;
ch1->iir[2].B2=0;
ch1->iir[2].A1=0;
ch1->iir[2].A2=0;
Zero(0);
Zero(1);
EnableAxisDest(0,0);
EnableAxisDest(1,0);
DefineCoordSystem(0,-1,-1,-1);
printf("Init complete\n");
return 0;
}