| Автор |
Съобщение |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
@sthx:
Ето, да видиш и реализацията:
 |  |  |  | Код: {************************************ * * * This file provides a * * FRP /encoder/ functions for * * _211-06/12 Extended Counter * * * * 16 - Mar - 2007` * * PIC18F2620 @ 40 MHz * * MikroPascal v6.0.0.2 * * * * rsrachev@gmail.com * * * ************************************} unit frp_211;
uses definitions_211, counters_file;
const FRP_ENABLE : byte = 0; FRP_ENABLED : byte = 1; FRP_DISABLED : byte = 0; //FRP_ONLINE : byte = 1; //FRP_OFFLINE : byte = 0; var frp_input_A_now, frp_input_A_pre, frp_input_A : word; // TIMER3 frp_input_B_now, frp_input_B_pre, frp_input_B : word; // TIMER0 frp_UP, frp_DOWN : word; // |A - B| in_A_L, in_A_H, in_B_L, in_B_H : byte; input_divider_UP_counter, input_divider_DOWN_counter : word; FRP_MODULE_ENABLED : byte; register;
implementation
procedure FRP_Init(var frp_port : byte; frp_pin : byte; frp_online : boolean); var ddr_port : ^byte; //a pointer to TRIS REG begin ddr_port := @frp_port + TRIS_OFFSET; //Get TRIS address ddr_port^.frp_pin := 0; if frp_online then begin //TMR0H := 0; TMR0L := 0; //TMR3H := 0; TMR3L := 0; frp_input_A_pre := 0; frp_input_B_pre := 0; input_divider_UP_counter := 1; input_divider_DOWN_counter := 1; CCP1CON := 0; CCPR1H := 0; CCPR1L := 0; T0CON := %10101000; T3CON := %10000011; //16 bit mode with sync input!!! frp_port.frp_pin := FRP_ENABLED; FRP_MODULE_ENABLED := True; TMR0H := 0; TMR0L := 0; //moved here to solve bug 'count at startup' TMR3H := 0; TMR3L := 0; end else begin T0CON.TMR0ON := 0; T3CON.TMR3ON := 0; frp_port.frp_pin := FRP_DISABLED; FRP_MODULE_ENABLED := False; ddr_port^.frp_pin := 1; end; end;
procedure FRP_Handle; begin if direction_1_value = _FORWARD then //change count direction begin in_A_L := TMR3L; in_A_H := TMR3H; in_B_L := TMR0L; in_B_H := TMR0H; end else begin in_A_L := TMR0L; in_A_H := TMR0H; in_B_L := TMR3L; in_B_H := TMR3H; end; frp_input_A_now := 0; frp_input_A_now := (in_A_H shl 8) + in_A_L;
frp_input_B_now := 0; frp_input_B_now := (in_B_H shl 8) + in_B_L;
frp_UP := frp_input_A_now - frp_input_A_pre;
frp_DOWN := frp_input_B_now - frp_input_B_pre;
frp_input_A_pre := frp_input_A_now; frp_input_B_pre := frp_input_B_now; if frp_DOWN > frp_UP then direction_1 := BACKWARD; if frp_DOWN < frp_UP then direction_1 := _FORWARD;
while (frp_DOWN >= 1) do begin Inc(input_divider_DOWN_counter); input_divider_UP_counter := input_divider_1_value - input_divider_DOWN_counter + 1; if input_divider_DOWN_counter > input_divider_1_value then begin input_divider_UP_counter := 1; input_divider_DOWN_counter := 1; if prescaler_1_in_use then Multiply_Counter_1_On_Dec else Dec_Counter_1; end; Dec(frp_DOWN); end;
while (frp_UP >= 1) do begin Inc(input_divider_UP_counter); input_divider_DOWN_counter := input_divider_1_value - input_divider_UP_counter + 1; if input_divider_UP_counter > input_divider_1_value then begin input_divider_UP_counter := 1; input_divider_DOWN_counter := 1; if prescaler_1_in_use then Multiply_Counter_1 else Inc_Counter_1; end; Dec(frp_UP); end;
end;
procedure FRP_Set; begin if MAIN_TASK_Dispatcher = ENCODER_MODE then FRP_Init(PORTA, FRP_ENABLE, True) else FRP_Init(PORTA, FRP_ENABLE, False); end;
end.
|  |  |  |  |
Единствения проблем е, че while-a блокира индикацията, но всичкко останало като граници и изпълнителни механизни си работи.
|
| Нед Окт 24, 2010 12:29 pm |
|
 |
|
sthx
Ранг: Форумен бог
Регистриран на: Съб Юни 24, 2006 8:25 pm Мнения: 2293
|
Е, добре.  . А ако може да се каже отделните части на програмата за колко време се изпълняват, тогава ще се види и максималното бързодействие. Ако всички инструкции в примерът който го дадох по-горе се изпълняват за един процесорен цикъл, то времето за изпълнението им (11 инструкции) е 1.1 микросекунди. Но това е абсолютният минимум.
_________________ Две плюс две е приблизително равно на четири. Факт!
|
| Нед Окт 24, 2010 7:32 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
Ами както знаем, максималното бързодействие на релето е около 50 Hz. За Епик мисля, че им го изкарах около 200 пъти в секунда по RS. Иначе един от тестовете беше със точно същото ФРП. Самото то отказва при около 130 kHz или 3200 RPM.... ако паметта не ме лъже вече.
|
| Нед Окт 24, 2010 8:13 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9123 Местоположение: Разград
|
Е, не. Имали въобще смисъл от това? Какво точно ще се мери при 3000RPM и 2500 стъпки на фрп-то? Да приемем че е в металорежеща машина ... 40 об. = 1 см. резолюция 1/10000 мм ?!?!? И представяте ли си как фрезата се движи с 1 см. в секунда  . Като постижение за скорост е добре ...
|
| Нед Окт 24, 2010 8:32 pm |
|
 |
|
stefan_gb
Ранг: Минаващ
Регистриран на: Нед Ное 01, 2009 5:57 pm Мнения: 30
|
Намалям цената на 270 за фрп-то и следящата система.
|
| Чет Ное 04, 2010 8:10 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Е Cekins, 1 см/сек не е нещо кой знае какво. Моята CNC фреза си работи съвсем нормално при тази скорост, разбира се не става дума за работа с твърди метали но например при обработка на стъклотекстолит, гетинакс, МДФ-та а и при преместването до позиция 600мм/мин си е нормална скорост 
|
| Пет Ное 05, 2010 12:15 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9123 Местоположение: Разград
|
Да де, ама според мен движение с такава висока скорост обезсмисля измерване с такава висока прецизност. Би било необходима такава точност ако се прави някаква супер финна матрица - от метал - и искам да видя как фреза ще обработва финно при движение с 1 см. в секунда ... метал ... Малко ще има с един фрезер в секунда. А и ти говориш за такива скорости само в празния ход 
|
| Пет Ное 05, 2010 4:25 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
За една истинска металорежеща машина с цпу, тези неща са нещо съвсем нормално. Ако отидеш на правилното място, ще видиш! Щом поставяш така въпроса, значи, че като видиш, ще бъдеш доста изненадан! 
|
| Пет Ное 05, 2010 7:53 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12826 Местоположение: София
|
Ето нещо за гледане по въпроса за разхода на фрезери в минута - http://www.youtube.com/watch?v=-gzjw0svMA8
На същото място има доста подобни клипчета...
|
| Пет Ное 05, 2010 11:19 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
Това не е ли алуминий?
|
| Съб Ное 06, 2010 12:56 am |
|
 |
|
stefan_gb
Ранг: Минаващ
Регистриран на: Нед Ное 01, 2009 5:57 pm Мнения: 30
|
|
| Вто Мар 29, 2011 10:34 pm |
|
 |
|
stefan_gb
Ранг: Минаващ
Регистриран на: Нед Ное 01, 2009 5:57 pm Мнения: 30
|
 Re: Продавам ФРП и следяща с-ма за него
|
| Съб Мар 31, 2012 11:12 pm |
|
|