Ввод в эксплуатацию закрыт, но вопросы остались...

mamun
Новичок
Сообщения: 3
Зарегистрирован: 18 мар 2016, 22:26
Репутация: 0
Страна: Латвия
 

  »

При удачных обстоятельствах приобрел KFLOP+kanalog+3 сервомотора (1 с тормозом)+3 servo drive к ним. Все первые шаги делал как описал Ukr-sasha в разделе https://www.precision-machines.ru/viewt ... ?f=54&t=18
- Подключил
- настроил файл Init3Analog.c соответственно для варианта +/-10В. Переименовал и Сохранил.
- в окне C Programs сделал коррекцию файлов
- настроил User Buttons и Trajectory Planner и т.д.
- загрузил файл в контроллер.
Стрелки в программе (KMotionCNC) работают, обнуляются размеры, работают разные скорости, но сами моторы не вращаются. В электросхемах не силен, может подсоединил неправильно?
подсоединял так (на примере одного серво драйва):


ukr-sasha
Понимающий
Сообщения: 205
Зарегистрирован: 10 окт 2014, 11:08
Репутация: 447
Страна: Украина
 

  »


mamun
Новичок
Сообщения: 3
Зарегистрирован: 18 мар 2016, 22:26
Репутация: 0
Страна: Латвия
 

  »

Понятно, но тогда еще уточнить - будет достаточно питания 12В или нужно 24В (в схеме указано от 12 до 24)?

ukr-sasha
Понимающий
Сообщения: 205
Зарегистрирован: 10 окт 2014, 11:08
Репутация: 447
Страна: Украина
 

  »

mamun писал(а):Источник цитаты в схеме указано от 12 до 24

Тогда от 12 до 24В. :-)

Predator
5-й разряд
Сообщения: 5933
Зарегистрирован: 30 авг 2014, 19:14
Репутация: 4135
Страна: СССР
 

  »

Ну, как-то так, да :D

mamun
Новичок
Сообщения: 3
Зарегистрирован: 18 мар 2016, 22:26
Репутация: 0
Страна: Латвия
 

  »

Для активации приводов в файл инициализации куда надо вставить указанный код это Init3Analog.c? Но там нет команды Return 0.
Еще есть три файла:
Init3AnalogPlusMPG,
Init3AnalogPlusTwoMPGS,
InitStepDir3Axis?
И соответственно для каждой следующей оси в коде менять пин (145, 1) ; (146, 1)?

Вот мой Init3Analog.c В конце файла нет команды Return 0. Может что-то пропустил ранее?

Код: Выделить всё

#include "KMotionDef.h"

main()
{
	int BitA,Change1=0,Change2=0, DiffX2;
	int PosNoWrap, NewPos, Pos=0, wraps;
	double Factor=0;
	
	SetBit(152);
	SetBit(157);
	SetBit(158);
	
	ch0->InputMode=ENCODER_MODE;
	ch0->OutputMode=DAC_SERVO_MODE;
	ch0->Vel=100000;
	ch0->Accel=1e+006;
	ch0->Jerk=1e+007;
	ch0->P=0.1;
	ch0->I=0;
	ch0->D=0;
	ch0->FFAccel=0;
	ch0->FFVel=0;
	ch0->MaxI=200;
	ch0->MaxErr=20000;
	ch0->MaxOutput=2000;
	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+009;
	ch0->SoftLimitNeg=-1e+009;
	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=100000;
	ch1->Accel=1e+006;
	ch1->Jerk=1e+007;
	ch1->P=0.7;
	ch1->I=0.003;
	ch1->D=0;
	ch1->FFAccel=0;
	ch1->FFVel=0;
	ch1->MaxI=2000;
	ch1->MaxErr=20000;
	ch1->MaxOutput=2000;
	ch1->DeadBandGain=1;
	ch1->DeadBandRange=0;
	ch1->InputChan0=1;
	ch1->InputChan1=1;
	ch1->OutputChan0=1;
	ch1->OutputChan1=1;
	ch1->MasterAxis=-1;
	ch1->LimitSwitchOptions=0x100;
	ch1->LimitSwitchNegBit=0;
	ch1->LimitSwitchPosBit=0;
	ch1->SoftLimitPos=1e+009;
	ch1->SoftLimitNeg=-1e+009;
	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=1000;
	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;
	
	ch2->InputMode=ENCODER_MODE;
	ch2->OutputMode=DAC_SERVO_MODE;
	ch2->Vel=100000;
	ch2->Accel=1e+006;
	ch2->Jerk=1e+007;
	ch2->P=0.3;
	ch2->I=0.003;
	ch2->D=0;
	ch2->FFAccel=0;
	ch2->FFVel=0;
	ch2->MaxI=2000;
	ch2->MaxErr=20000;
	ch2->MaxOutput=2000;
	ch2->DeadBandGain=1;
	ch2->DeadBandRange=0;
	ch2->InputChan0=2;
	ch2->InputChan1=2;
	ch2->OutputChan0=2;
	ch2->OutputChan1=2;
	ch2->MasterAxis=-1;
	ch2->LimitSwitchOptions=0x100;
	ch2->LimitSwitchNegBit=0;
	ch2->LimitSwitchPosBit=0;
	ch2->SoftLimitPos=1e+009;
	ch2->SoftLimitNeg=-1e+009;
	ch2->InputGain0=1;
	ch2->InputGain1=1;
	ch2->InputOffset0=0;
	ch2->InputOffset1=0;
	ch2->OutputGain=1;
	ch2->OutputOffset=0;
	ch2->SlaveGain=1;
	ch2->BacklashMode=BACKLASH_OFF;
	ch2->BacklashAmount=0;
	ch2->BacklashRate=0;
	ch2->invDistPerCycle=0.00025;
	ch2->Lead=0;
	ch2->MaxFollowingError=1000;
	ch2->StepperAmplitude=100;

	ch2->iir[0].B0=1;
	ch2->iir[0].B1=0;
	ch2->iir[0].B2=0;
	ch2->iir[0].A1=0;
	ch2->iir[0].A2=0;

	ch2->iir[1].B0=1;
	ch2->iir[1].B1=0;
	ch2->iir[1].B2=0;
	ch2->iir[1].A1=0;
	ch2->iir[1].A2=0;

	ch2->iir[2].B0=1;
	ch2->iir[2].B1=0;
	ch2->iir[2].B2=0;
	ch2->iir[2].A1=0;
	ch2->iir[2].A2=0;

 EnableAxis(0);
	EnableAxis(1);
	EnableAxis(2);

 DefineCoordSystem(0,1,2,-1);
}


Будет работать, если написать так:

Код: Выделить всё

#include "KMotionDef.h"

main()
{
	int BitA,Change1=0,Change2=0, DiffX2;
	int PosNoWrap, NewPos, Pos=0, wraps;
	double Factor=0;
	
	SetBit(152);
	SetBit(157);
	SetBit(158);
	
	ch0->InputMode=ENCODER_MODE;.............................................
ch2->iir[2].B0=1;
	ch2->iir[2].B1=0;
	ch2->iir[2].B2=0;
	ch2->iir[2].A1=0;
	ch2->iir[2].A2=0;

 EnableAxis(0);
	EnableAxis(1);
	EnableAxis(2);

 DefineCoordSystem(0,1,2,-1);

 SetBitDirection(144,1);
 for (;;) //loop forever
 {
 WaitNextTimeSlice();
 if (ch0->Enable && ch1->Enable && ch2->Enable) 
 SetBit(144); 
 else
 ClearBit(144);
 }

SetBitDirection(145,1);
 for (;;) //loop forever
 {
 WaitNextTimeSlice();
 if (ch0->Enable && ch1->Enable && ch2->Enable) 
 SetBit(145); 
 else
 ClearBit(145);
 }

SetBitDirection(146,1);
 for (;;) //loop forever
 {
 WaitNextTimeSlice();
 if (ch0->Enable && ch1->Enable && ch2->Enable) 
 SetBit(146); 
 else
 ClearBit(146);
 }

 return 0;
}


Уважаемый, mamun!
Убедительная просьба, в следующий раз листинги кода, забирать в специально предназначенный для этого BBcode [code], а не в BBcode [quote] предназначенный для цитирования.
Спасибо, за понимание.

--
Администратор форумов «Точные машины»

Predator
5-й разряд
Сообщения: 5933
Зарегистрирован: 30 авг 2014, 19:14
Репутация: 4135
Страна: СССР
 

  »

mamun писал(а):Источник цитаты Будет работать, если написать так
Так, а попробовать не получается, работает в таком варианте или нет? Если не работает, вернуть назад прежний файл.


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