Manipulator przeznaczony do celów dydaktycznych - Laboratorium ...

Manipulator przeznaczony do celów dydaktycznych - Laboratorium ... Manipulator przeznaczony do celów dydaktycznych - Laboratorium ...

rab.ict.pwr.wroc.pl
from rab.ict.pwr.wroc.pl More from this publisher
21.02.2015 Views

32 Z kolei funkcja tpu_int() inicjalizuje odpowiednie kanały bloku TPU dla funkcji QDEC i QDVEL, które to funkcje służą do pomiaru położenia i prędkości. W pętli głównej umieszczono obsługę menu pozwalającego interakcyjnie wybierać tryb pracy robota. out_text("\n\n\rPRACA DYPLOMOWA\n\n\r"); out_text("Robot dydaktyczny ZS5R\n\r"); /* Intro */ out_text("Autor: Zbigniew Struzik, Wroclaw 2005\n\r"); out_text("h - Pomoc\n\r"); out_text("\n\n\rMenu Glowne:\n\n\r"); out_text("P - Pozycjonowa\n\r"); out_text("M - Tryb sterowania recznego\n\r"); out_text("X - Wylaczenie silnikow\n\r"); out_text("S - przeslanie\n\r"); out_text("H - Pomoc\n\n\r"); Wybierając np. pozycję oznaczoną literką M lub m przechodzimy do menu sterowania ręcznego. out_text("\n\n\rMenu sterowania recznego:\n\n\r"); out_text("1,Q - Wieza\n\r"); out_text("2,W - Ramie\n\r"); out_text("3,E - Przedramie\n\r"); out_text("4,R - Nadgarstek (gora/dol)\n\r"); out_text("5,T - Nadgarstek (obrot)\n\r"); out_text("6,Y - Chwytak\n\r"); out_text("SPACE - Silniki STOP\n\r"); out_text("V - Definicja predkosci\n\r"); out_text("ESC - Powrot do Menu Glownego\n\r"); out_text(">>"); 4.2 Procedura obsługi przerwania cyklicznego Wszystkie pomiary i wyliczenie wielkości sterujące są przechowywane w strukturze state. typedef struct{ . \\ . \\ . \\ }STAN; STAN state; Nastawy i inne parametry regulatorów prędkości i położenia są przechowywane w strukturze nast. typedef struct { .\\ .\\

33 .\\ }NAS; NAS nast; Wszystkie procesy związane ze sterowaniem oraz akwizycją danych pomiarowych, obsługiwane są w funkcji przerwania cyklicznego interrupt void int_PIT(). Funkcja ta jest wywoływana co 2ms. Jest w niej realizowany pomiar położenia i prędkości, przy pomocy funkcji QDEC i QDVEL: state.temposition[0] = TPURAM(QDEC1A,1);/* odczyt licznika pozycji q1*/ state.M[0] &= 0xffff0000; state.M[0] += state.temposition[0]; if((state.lastposition[0]-state.temposition[0]) > 32767) { state.M[0] += 0x10000; } if((state.temposition[0]-state.lastposition[0]) > 32767) { state.M[0] -= 0x10000; } state.lastposition[0] = state.temposition[0]; state.speed[0] = QDVEL2Speed((int)TPURAM(QDVEL1,2)); state.speed[1] = QDVEL2Speed((int)TPURAM(QDVEL2,2)); state.speed[2] = QDVEL2Speed((int)TPURAM(QDVEL3,2)); state.speed[3] = ((TPSEC*(state.M[3]-state.oldposition[2])+2)/4); state.speed[4] = ((TPSEC*(state.M[4]-state.oldposition[0])+2)/4); state.speed[5] = ((TPSEC*(state.M[5]-state.oldposition[1])+2)/4); Pomiar prądu jest realizowany za pomocą przetwornika A/C pracującego na kolejkowej magistrai QSPI. Aktualizacja zmierzonego prądu również jest realizowana w funkcji przerwania cyklicznego PIT. state.MCurrent[0] = ADBip2Int(QREC[1]>>4); state.MCurrent[1] = ADBip2Int(QREC[2]>>4); state.MCurrent[2] = ADBip2Int(QREC[3]>>4); state.MCurrent[3] = ADBip2Int(QREC[4]>>4); state.MCurrent[4] = ADBip2Int(QREC[5]>>4); state.MCurrent[5] = ADBip2Int(QREC[0]>>4); Proces wyliczenia sterowań dla poszczególnych osi jest realizowany za pomocą regulatorów PID położenia i prędkości zaimplementowanych w funkcjach: void ControlPID_pos(NAS *ptr_n, STAN *ptr_s, int i) void ControlPID_speed(NAS *ptr_n, STAN *ptr_s, int i) wywoływanych w obsłudze przerwania PIT. Na rysunku blokowym 4.1 jest przedstawiony sposób realizacji tych regulatorów. Po wyliczeniu sterowań przez funkcje regulatorów, wartości zadanych prądów są wpisywane do TRANSMIT RAM w bloku QSPI:

32<br />

Z kolei funkcja tpu_int() inicjalizuje odpowiednie kanały bloku TPU dla funkcji QDEC<br />

i QDVEL, które to funkcje służą <strong>do</strong> pomiaru położenia i prędkości.<br />

W pętli głównej umieszczono obsługę menu pozwalającego interakcyjnie wybierać tryb<br />

pracy robota.<br />

out_text("\n\n\rPRACA DYPLOMOWA\n\n\r");<br />

out_text("Robot dydaktyczny ZS5R\n\r"); /* Intro */<br />

out_text("Autor: Zbigniew Struzik, Wroclaw 2005\n\r");<br />

out_text("h - Pomoc\n\r");<br />

out_text("\n\n\rMenu Glowne:\n\n\r");<br />

out_text("P - Pozycjonowa\n\r");<br />

out_text("M - Tryb sterowania recznego\n\r");<br />

out_text("X - Wylaczenie silnikow\n\r");<br />

out_text("S - przeslanie\n\r");<br />

out_text("H - Pomoc\n\n\r");<br />

Wybierając np. pozycję oznaczoną literką M lub m przechodzimy <strong>do</strong> menu sterowania<br />

ręcznego.<br />

out_text("\n\n\rMenu sterowania recznego:\n\n\r");<br />

out_text("1,Q - Wieza\n\r");<br />

out_text("2,W - Ramie\n\r");<br />

out_text("3,E - Przedramie\n\r");<br />

out_text("4,R - Nadgarstek (gora/<strong>do</strong>l)\n\r");<br />

out_text("5,T - Nadgarstek (obrot)\n\r");<br />

out_text("6,Y - Chwytak\n\r");<br />

out_text("SPACE - Silniki STOP\n\r");<br />

out_text("V - Definicja predkosci\n\r");<br />

out_text("ESC - Powrot <strong>do</strong> Menu Glownego\n\r");<br />

out_text(">>");<br />

4.2 Procedura obsługi przerwania cyklicznego<br />

Wszystkie pomiary i wyliczenie wielkości sterujące są przechowywane w strukturze state.<br />

typedef struct{<br />

. \\<br />

. \\<br />

. \\<br />

}STAN;<br />

STAN<br />

state;<br />

Nastawy i inne parametry regulatorów prędkości i położenia są przechowywane w strukturze<br />

nast.<br />

typedef struct<br />

{<br />

.\\<br />

.\\

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!