Два серводвигателя с аналоговым управлением на одной оси

KFlop, KStep, KAnalog, KMotion...
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Два серводвигателя с аналоговым управлением на одной оси

Сообщение Al4nse »

Здравствуйте, уважаемые форумчане.
Я пришел сюда с просьбой о помощи.
Есть задача настроить станок. На одной из осей у него два серводвигателя EMJ-08APB22 (с инкрементальным энкодером) :rail: :rail: . Передача момента осуществляется через редукторы к рейкам. Серводрайверы PRONET-E-08A. Управляется этим всем платой KFlop+KAnalog.
Настраиваю всё согласно этой теме 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;
}

Вернуться в «KFlop»