Ввод в эксплуатацию ЧПУ системы на основе контроллера Kflop.

KFlop, KStep, KAnalog, KMotion...

Имеете ли вы контроллер Kflop? :-)

Можно выбрать до 1 варианта ответа

 
 
Результаты голосования

Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Vitalik писал(а):Все настройки и номера пинов как в теме.
Общие фразы.
В теме не было подчиненной оси.
Рисуйте сюда схему и давайте настройки.
Догадываться никто не будет.
Чем больше дадите информации, тем быстрее и более вероятен ответ...
Vitalik
Почётный участник
Почётный участник
Сообщения: 48
Зарегистрирован: 20 авг 2014, 19:26
Репутация: 30
Настоящее имя: Виталий
Откуда: Горишние Плавни
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Vitalik »

Нарисовал схемки. Ещё не смог настроить АЛАРМ. На сервопаке сигналы выдает (проверил через монитор сигмавин. Сервопак SGMAS sigma3). При ошибке остальные приводы не останавливаются.
Ещё разок объясню что происходит с ХОУМ. Сначала ось зет едет к концевичку -он срабатывает и ось немного отъезжает, координаты обнуляются и загорают желтым. Дальше поехала ось Х и аналогичная ситуация. Но пока ось Х едет к концевику- ось зет самопроизвольно плывет. ( Ещё примечание: концевик при отъезде не успевает отключится, хотя я пробовал в ручную нажать и отпустить - результат такой же)
Спасибо за помощь!
Вложения
home.jpg (4640 просмотров) <a class='original' href='./download/file.php?id=46948&mode=view' target=_blank>Загрузить оригинал (440.23 КБ)</a>
alarm1.jpg (4640 просмотров) <a class='original' href='./download/file.php?id=46951&mode=view' target=_blank>Загрузить оригинал (296.29 КБ)</a>
ab4eg8s-960.jpg (4640 просмотров) <a class='original' href='./download/file.php?id=46952&mode=view' target=_blank>Загрузить оригинал (108.32 КБ)</a>
Home-CNС3050.txt
(4.89 КБ) 1120 скачиваний
Init3Analog_5030CNC.txt
(5.45 КБ) 1151 скачивание
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Навскидку, пока код не смотрел: на сервопаке, сигнал алярм, нужно провода поменять местами. Проследите, как будет ток течь по всей цепи.
И если ось в программе светиться желтым, значит она отключена и кфлоп за ней "не следит".
Аватара пользователя
AlexNikov
Мастер
Сообщения: 1212
Зарегистрирован: 05 янв 2014, 20:09
Репутация: 721
Настоящее имя: Алексей
Откуда: Томск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение AlexNikov »

ukr-sasha писал(а):
AlexNikov писал(а):Хотел бы повторно попросить помощи по посту
С Кстепа напряжение есть? Оно регулируется?
Саш приветствую. Хотел бы вернуться к теме регулировки оборотов. Решил добить этот вопрос...

Код для управления шпинделем вот:

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

#include "KMotionDef.h"
#include "CorrectAnalogFunction.c"

#define RefVoltage 11.09f

main()
{
	float V=7.0;
	
	FPGA(KAN_TRIG_REG)=4;  // Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 
	SetBitDirection(44,1);  // define bit as an output
	FPGA(IO_PWMS_PRESCALE) = 46;  	// divide clock by 46 (1.4 KHz)
	FPGA(IO_PWMS+1) = 1;  			// Enable
	
	FPGA(IO_PWMS) = CorrectAnalog(V/RefVoltage);  	// Set PWM
	// FPGA(IO_PWMS) = 7;  	// Set PWM to a specific count
}


Изменяя параметр "float V=7.0;" меняется напряжение на выходе "Analog OUT" pin6 JP33 K-Step. По идее тут нужен код который позволит регулировать обороты автоматически. Вот тут и проблема - что нужно прописать, дабы увязать с этим:
spindle1.jpg (4526 просмотров) <a class='original' href='./download/file.php?id=47084&mode=view' target=_blank>Загрузить оригинал (34.96 КБ)</a>
З.Ы.
Почитал повнимательней описание http://dynomotion.com/Help/KMotionCNC/S ... ontrol.htm. Если я верно понял то для регулировки оборотов шпинделя вообще не нужно никаких дополнительных скриптов. Попробовал запустить только с файлом инициализации осей "InitKStep3AxisNoDisable". Итог - шпиндель включается на минимальных оборотах, на изменения параметра S никак не реагирует...в общем я в тупике, прошу помощи...
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

На выходных посмотрю...
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Vitalik писал(а):Ещё разок объясню что происходит с ХОУМ. Сначала ось зет едет к концевичку -он срабатывает и ось немного отъезжает, координаты обнуляются и загорают желтым. Дальше поехала ось Х и аналогичная ситуация. Но пока ось Х едет к концевику- ось зет самопроизвольно плывет. ( Ещё примечание: концевик при отъезде не успевает отключится, хотя я пробовал в ручную нажать и отпустить - результат такой же)
Похоже, что индексная метка энкодера срабатывает в зоне действия концевика, т.е. концевик еще не отжался, а индексная метка уже сработала, и далее идет включение обработки нажатия концевика, как лимита, вот ось и отключается.
Поверните на валу швп шкив на пол оборота, или отодвиньте чуть далее/ближе концевик.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

AlexNikov писал(а):Саш приветствую. Хотел бы вернуться к теме регулировки оборотов. Решил добить этот вопрос...
Приветствую.
Тут таким простым способом не обойтись.
Нужно для отработки S выбирать не DAC( это аналоговый выход Каналога), а отработку программы с ожиданием.
За основу нужно взять в примерах Си файлы в папке C:\KMotion433k\C Programs\SpindleUsingJogs.
Или попробовать попроще файл SpindlePWM.c:

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

#include "KMotionDef.h"

#define MAX_RPM 3000.0f

// drive PWM 0 as spindle
//

// PWM 0 is KFLOP IO bit #26
// JP6 Aux#1 Pin 5

main()
{
	int pwm;
	float speed = *(float *)&persist.UserData[0];  // value stored is actually a float 
	
	pwm = speed/MAX_RPM * 255.0f;
	
	if (pwm > 255) pwm=255;  // limit to max pwm value

	printf("Spindle Set to %f pwm %d\n",speed, pwm);  // print the desired speed
	
	FPGA(IO_PWMS+1) = 1;    // enable the PWM
	FPGA(IO_PWMS)   = pwm; 	// set the PWM
}
Vitalik
Почётный участник
Почётный участник
Сообщения: 48
Зарегистрирован: 20 авг 2014, 19:26
Репутация: 30
Настоящее имя: Виталий
Откуда: Горишние Плавни
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Vitalik »

Спасибо за то что помогаете!
У меня возникла ещё заминочка при настройке пидов в step responce. Ось У которая с мастером и слейвом настраивается нормально и график подогнал к COMAND. А вот ось Х и У странно себя ведет: при нажатии мув вал двигателя прокручивается немного и дальше начинает просто "плыть". Настройки сервопаков делал одинаковые.
Вложения
Вот что происходит при добавлении интегральной составляющей. (4521 просмотр) <a class='original' href='./download/file.php?id=47565&mode=view' target=_blank>Загрузить оригинал (31.58 КБ)</a>
Вот что происходит при добавлении интегральной составляющей.
Z.PNG (4521 просмотр) <a class='original' href='./download/file.php?id=47566&mode=view' target=_blank>Загрузить оригинал (31.33 КБ)</a>
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Vitalik писал(а):У меня возникла ещё заминочка
Усилители в ошибку не уходят в ошибку?
Vitalik
Почётный участник
Почётный участник
Сообщения: 48
Зарегистрирован: 20 авг 2014, 19:26
Репутация: 30
Настоящее имя: Виталий
Откуда: Горишние Плавни
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Vitalik »

ukr-sasha писал(а): Усилители в ошибку не уходят в ошибку?
Нет не уходят. На всякий случай скажу параметры в сервопаке Yaskawa SGDS: Fn001-d007(удержание), Частота 800герц, момент инерции автотюном определился 380%.
Попробовал концевики нажимать рукой до того момента когда ось наедет. Нажимал кратковременно. Ось двигается в обратную сторону до срабатывания индексной метки. Координата обнулилась а ось начала светиться желтым и поплыла в свободное ... :cry:
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

AlexNikov писал(а):.в общем я в тупике, прошу помощи...
Только нашел.
Есть готовые файлы настройки для управления шпинделем с КСтепа.
Лежат по пути: C:\KMotion433k\C Programs\KStep\KMotionCNC
Аватара пользователя
AlexNikov
Мастер
Сообщения: 1212
Зарегистрирован: 05 янв 2014, 20:09
Репутация: 721
Настоящее имя: Алексей
Откуда: Томск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение AlexNikov »

ukr-sasha писал(а):
AlexNikov писал(а):.в общем я в тупике, прошу помощи...
Только нашел.
Есть готовые файлы настройки для управления шпинделем с КСтепа.
Лежат по пути: C:\KMotion433k\C Programs\KStep\KMotionCNC
Опробовал. Теперь все ровно на оборот - шпиндель включается на максимальные обороты и не реагирует на команды S.

Вот скрины настроек и кода программ:
1.png
1.png (10.46 КБ) 4372 просмотра
2.png (4372 просмотра) <a class='original' href='./download/file.php?id=47675&mode=view' target=_blank>Загрузить оригинал (18 КБ)</a>
Срин I/O
3.png
3.png (9.26 КБ) 4372 просмотра
Файл кода Spindle_S_Kstep

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

#include "KMotionDef.h"
#include "..\CorrectAnalogFunction.c"

#define RPM_FACTOR 500.0 // RPM for full duty cycle (max analog out)

// desired speed is passed in variable 1


main()
{
	float speed = *(float *)&persist.UserData[1];  // value stored is actually a float 
	
	FPGA(KAN_TRIG_REG)=4;  			// Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 
	SetBitDirection(44,1);  		// define bit as an output
	FPGA(IO_PWMS_PRESCALE) = 46;  	// divide clock by 46 (1.4 KHz)
	FPGA(IO_PWMS+1) = 1;  			// Enable
	
	FPGA(IO_PWMS) = CorrectAnalog(speed/RPM_FACTOR);  	// Set PWM
}
Файл инициализации (InitKStep3Axis)

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

#include "KMotionDef.h"

// Defines axis 0, 1, 2 as simple step dir TTL outputs for KSTEP
// enables them
// sets them as an xyz coordinate system for GCode

int main()

{
	
	SetBitDirection(0,1);  //set as output
	SetBitDirection(1,1);  //set as output
	
	double T0, LastX=0, LastY=0, LastZ=0, Tau;
	
	KStepPresent=TRUE;      // enable KSTEP input multiplexing
	FPGA(KAN_TRIG_REG)=4;  	// Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 

	FPGA(STEP_PULSE_LENGTH_ADD) = 63 + 0x80;  // set polarity and pulse length to 4us
	
	ch0->InputMode=NO_INPUT_MODE;
	ch0->OutputMode=STEP_DIR_MODE;
	ch0->Vel=40000;
	ch0->Accel=200000;
	ch0->Jerk=4e+006;
	ch0->P=0;
	ch0->I=0.01;
	ch0->D=0;
	ch0->FFAccel=0;
	ch0->FFVel=0;
	ch0->MaxI=200;
	ch0->MaxErr=1e+006;
	ch0->MaxOutput=200;
	ch0->DeadBandGain=1;
	ch0->DeadBandRange=0;
	ch0->InputChan0=0;
	ch0->InputChan1=0;
	ch0->OutputChan0=8;
	ch0->OutputChan1=0;
	ch0->MasterAxis=-1;
	ch0->LimitSwitchOptions=0x12f;
	ch0->LimitSwitchNegBit=169;
	ch0->LimitSwitchPosBit=168;
	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=1;
	ch0->Lead=0;
	ch0->MaxFollowingError=1000000000;
	ch0->StepperAmplitude=20;

	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=0.000769;
	ch0->iir[2].B1=0.001538;
	ch0->iir[2].B2=0.000769;
	ch0->iir[2].A1=1.92076;
	ch0->iir[2].A2=-0.923833;
    EnableAxisDest(0,0);

	ch1->InputMode=NO_INPUT_MODE;
	ch1->OutputMode=STEP_DIR_MODE;
	ch1->Vel=40000;
	ch1->Accel=200000;
	ch1->Jerk=4e+006;
	ch1->P=0;
	ch1->I=0.01;
	ch1->D=0;
	ch1->FFAccel=0;
	ch1->FFVel=0;
	ch1->MaxI=200;
	ch1->MaxErr=1e+006;
	ch1->MaxOutput=200;
	ch1->DeadBandGain=1;
	ch1->DeadBandRange=0;
	ch1->InputChan0=0;
	ch1->InputChan1=0;
	ch1->OutputChan0=9;
	ch1->OutputChan1=0;
	ch1->MasterAxis=-1;
	ch1->LimitSwitchOptions=0x12f;
	ch1->LimitSwitchNegBit=171;
	ch1->LimitSwitchPosBit=170;
	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=1;
	ch1->Lead=0;
	ch1->MaxFollowingError=1000000000;
	ch1->StepperAmplitude=20;

	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=0.000769;
	ch1->iir[2].B1=0.001538;
	ch1->iir[2].B2=0.000769;
	ch1->iir[2].A1=1.92076;
	ch1->iir[2].A2=-0.923833;
    EnableAxisDest(1,0);

	ch2->InputMode=NO_INPUT_MODE;
	ch2->OutputMode=STEP_DIR_MODE;
	ch2->Vel=40000;
	ch2->Accel=200000;
	ch2->Jerk=4e+006;
	ch2->P=0;
	ch2->I=0.01;
	ch2->D=0;
	ch2->FFAccel=0;
	ch2->FFVel=0;
	ch2->MaxI=200;
	ch2->MaxErr=1e+006;
	ch2->MaxOutput=200;
	ch2->DeadBandGain=1;
	ch2->DeadBandRange=0;
	ch2->InputChan0=0;
	ch2->InputChan1=0;
	ch2->OutputChan0=10;
	ch2->OutputChan1=0;
	ch2->MasterAxis=-1;
	ch2->LimitSwitchOptions=0x12a;
	ch2->LimitSwitchNegBit=172;
	ch2->LimitSwitchPosBit=172;
	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=1;
	ch2->Lead=0;
	ch2->MaxFollowingError=1000000000;
	ch2->StepperAmplitude=20;

	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;
	EnableAxisDest(2,0);
	
	DefineCoordSystem(0,1,2,-1);
	
	SetBitDirection(45,1);  // set Enable Signal as Output
	SetBit(45);				// Enable the amplifiers
	
//  Add a small amount of Coordinated Motion Path smoothing if desired
//	Tau = 0.001;  // seconds for Low Pass Filter Time Constant
//	KLP = exp(-TIMEBASE/Tau);
	KLP=0; // force to 0 to disable
//	printf("Tau=%f KLP=%f\n",Tau,KLP);
	
	
	for (;;) // loop forever
	{
		WaitNextTimeSlice();
		
		// Service Amplifier disable after no activity for a while
		if (ch0->Dest != LastX || ch1->Dest != LastY || ch2->Dest != LastZ)
		{
			// we moved - enable KStep Amplifers
			SetBit(45);
			T0 = Time_sec();  // record the time and position of last motion
			LastX=ch0->Dest;
			LastY=ch1->Dest;
			LastZ=ch2->Dest; 
		}
		else
		{
			if (Time_sec() > T0 + 10.0) ClearBit(45);
		}
	}

    return 0;
}
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Попробуйте в каталог со своими Си файлами положить файл CorrectAnalogFunction.c. Он находиться в каталоге: C:\KMotion433k\C Programs\KStep.
Этот файл используется, как функция в файле управления шпинделем.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Из лички:
ukr-sasha писал(а):И ещё, концевики нормально замкнутые или открытые?
Если замкнутые, то код активации концевиков после обнуления оси, должен выглядеть так:

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

ch0->LimitSwitchOptions=0x12f;
Vitalik писал(а):Спасибо!) У меня нормально закрытые. Добавил код и эта проблема решилась). Осталось только со слейвом что то сделать.. После того как все оси захоумились слейв продолжает плыть... Пробовал добавлять JOG (3,0) , дублировать остановки и перемещения для третей оси. Но ни чем не помогло.
Если ось плывет, значит она выключена.
В файле инициализации на подчиненную ось прописаны концевики.
А в файле обработки НОМЕ они нигде не обрабатываются, вот и получается, что подчиненная ось наезжает на концевик и отключается, и более нигде обратно не включается.
Нужно дописывать действия с подчиненной осью.
П.С. ПИДы дя ведущей и подчиненной осей должны быть одинаковыми. Наверное. :thinking: :hehehe:
Vitalik
Почётный участник
Почётный участник
Сообщения: 48
Зарегистрирован: 20 авг 2014, 19:26
Репутация: 30
Настоящее имя: Виталий
Откуда: Горишние Плавни
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Vitalik »

А они одинаковые) Мастер - 1, Слейв-3. При настройке пидов с ними как раз проблем не возникло. Если бы вы ещё мне подсказали что дописать в ХОУМ для слейва- был бы благодарен за помощь)
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Vitalik писал(а):Если бы вы ещё мне подсказали что дописать в ХОУМ для слейва- был бы благодарен за помощь)
Ну вот начинается... :)
Инфу я вам дал, пример у вас есть - подумайте.
Предложите свой вариант, а потом будем думать вместе. ;)
Аватара пользователя
AlexNikov
Мастер
Сообщения: 1212
Зарегистрирован: 05 янв 2014, 20:09
Репутация: 721
Настоящее имя: Алексей
Откуда: Томск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение AlexNikov »

ukr-sasha писал(а):Попробуйте в каталог со своими Си файлами положить файл CorrectAnalogFunction.c. Он находиться в каталоге: C:\KMotion433k\C Programs\KStep.
Этот файл используется, как функция в файле управления шпинделем.
Доброго дня. Результат пока нулевой. Вот некоторые мои соображения.

Скрин где лежат файлы которые я пользую:
1.jpg (4289 просмотров) <a class='original' href='./download/file.php?id=47742&mode=view' target=_blank>Загрузить оригинал (133.68 КБ)</a>
Скрин настройки обращения к файлу:
2.jpg (4289 просмотров) <a class='original' href='./download/file.php?id=47743&mode=view' target=_blank>Загрузить оригинал (13.82 КБ)</a>
Теперь вот заметил какой момент (извиняйте если что за дилетантство :oops: ) - в файле "KStepPWMCorrected" есть строчка float V=5.0;. В файле "CorrectAnalogFunction" много где упоминается про "V". При пользовании файлом "KStepPWMCorrected" изменяя руками параметр "V" и компилируя его в 4м "Thread" обороты меняются верно (прямопропорционально величине "V"). В файле "Spindle_S_Kstep" (который по идее должен автоматом регулировать скорость вращения) на этом месте строчка float speed = *(float *)&persist.UserData[1];. Тут уже "speed" прописано, а в файле "KStepPWMCorrected" оно не встречается...мб где-то тут ошибка закралась? Методом тыка боюсь что-нибудь спалить :thinking:

Вот файлы "KStepPWMCorrected", "Spindle_S_Kstep", "CorrectAnalogFunction":

"KStepPWMCorrected"

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

#include "KMotionDef.h"
#include "CorrectAnalogFunction.c"

#define RefVoltage 11.09f

main()
{
	float V=5.0;
	
	FPGA(KAN_TRIG_REG)=4;  // Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 
	SetBitDirection(44,1);  // define bit as an output
	FPGA(IO_PWMS_PRESCALE) = 46;  	// divide clock by 46 (1.4 KHz)
	FPGA(IO_PWMS+1) = 1;  			// Enable
	
	FPGA(IO_PWMS) = CorrectAnalog(V/RefVoltage);  	// Set PWM
//	FPGA(IO_PWMS) = 7;  	// Set PWM to a specific count
}

"Spindle_S_Kstep"

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

#include "KMotionDef.h"
#include "CorrectAnalogFunction.c"

#define RPM_FACTOR 500.0 // RPM for full duty cycle (max analog out)

// desired speed is passed in variable 1


main()
{
	float speed = *(float *)&persist.UserData[1];  // value stored is actually a float 
	
	FPGA(KAN_TRIG_REG)=4;  			// Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 
	SetBitDirection(44,1);  		// define bit as an output
	FPGA(IO_PWMS_PRESCALE) = 46;  	// divide clock by 46 (1.4 KHz)
	FPGA(IO_PWMS+1) = 1;  			// Enable
	
	FPGA(IO_PWMS) = CorrectAnalog(speed/RPM_FACTOR);  	// Set PWM
}
"CorrectAnalogFunction"

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

// PWM->Analog Correction
//
// assume very non-linear for first few count and linear thereafter 
//
// Measure output ratio for first 0-7 counts then at 240
 
float V[]=
{
0.001,  // count = 0
0.031,  // count = 1
0.044,  // count = 2
0.054,  // count = 3
0.062,  // count = 4
0.069,  // count = 5
0.074,  // count = 6
0.079   // count = 7
};

float V240=0.970;

int CorrectAnalog(float v)
{
	int r;
	float v2=2.0f*v;
	// compare with half way points to determine closest count
	if (v2 < V[1]+V[0]) return 0;
	if (v2 < V[2]+V[1]) return 1;
	if (v2 < V[3]+V[2]) return 2;
	if (v2 < V[4]+V[3]) return 3;
	if (v2 < V[5]+V[4]) return 4;
	if (v2 < V[6]+V[5]) return 5;
	if (v2 < V[7]+V[6]) return 6;
	
	// must be 7 or higher do linear interpolation
	
	r = (int)(7.5 + (v-V[7])/(V240-V[7])*(240.0f-7.0f));
	if (r>255) r=255;
	return r;
}
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

[quote="AlexNikov"][/quote]
А если так?

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

#include "KMotionDef.h"
#include "CorrectAnalogFunction.c"

#define RPM_FACTOR 500.0 // RPM for full duty cycle (max analog out)

// desired speed is passed in variable 1


main()
{
   float v = *(float *)&persist.UserData[1];  // value stored is actually a float 
   
   FPGA(KAN_TRIG_REG)=4;           // Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 
   SetBitDirection(44,1);        // define bit as an output
   FPGA(IO_PWMS_PRESCALE) = 46;     // divide clock by 46 (1.4 KHz)
   FPGA(IO_PWMS+1) = 1;           // Enable
   
   FPGA(IO_PWMS) = CorrectAnalog(v/RPM_FACTOR);     // Set PWM
}
Аватара пользователя
AlexNikov
Мастер
Сообщения: 1212
Зарегистрирован: 05 янв 2014, 20:09
Репутация: 721
Настоящее имя: Алексей
Откуда: Томск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение AlexNikov »

Догадки оказались верными.

С этим кодом все заработало, еще поправил #define RPM_FACTOR 500.0 на #define RPM_FACTOR 24000.0

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

#include "KMotionDef.h"
#include "CorrectAnalogFunction.c"

#define RPM_FACTOR 500.0 // RPM for full duty cycle (max analog out)

// desired speed is passed in variable 1


main()
{
   float v = *(float *)&persist.UserData[1];  // value stored is actually a float 
   
   FPGA(KAN_TRIG_REG)=4;           // Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 
   SetBitDirection(44,1);        // define bit as an output
   FPGA(IO_PWMS_PRESCALE) = 46;     // divide clock by 46 (1.4 KHz)
   FPGA(IO_PWMS+1) = 1;           // Enable
   
   FPGA(IO_PWMS) = CorrectAnalog(v/RPM_FACTOR);     // Set PWM
Спасибо за помощь :good:
alex27.01
Новичок
Сообщения: 6
Зарегистрирован: 02 май 2015, 10:03
Репутация: 3
Настоящее имя: Александр
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение alex27.01 »

PKM писал(а):
konstantinshr писал(а):В противном случае оси останавливаются но сигнал анейбл не пропадает. А у меня есть небольшое паразитное напряжение и оси понемногу начинают ползти.
Странно, то есть ПИД отключается без выключения привода? Это недопустимо.
Я решал таким способом. У меня привода sv-db100 с поддержкой степ/дир и спид-моде. Я настроил в комбинированный режим. Когда оси активны то спид-моде, а когда не активны то в степ/дире, удерживание приводом по своему энкодеру.
Ответить

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