Sunteți pe pagina 1din 16

Anexa 3 Funcii predefinite n limbajul NXC pentru comanda motoarelor robotului NXT

Coninut
1. Funcii primitive ............................................................................................ 2 1.1. Constante predefinite pentru modulul de ieire...................................... 2 2. Forme convenabile de apelare a funciilor primitive.................................. 9

Doarece controlul motoarelor este o necesitate n programarea roboilor, sunt asigurate pentru a facilita lucrul cu porturile de iesire un numr de apeluri de de funcii specifice, cu functionalti variate ce sunt descrise n urmtoarea seciune. Sunt metode mai convenabile pentru scrierea de programe mai concise. n aceast anex sunt prezentate funciile predefinite n limbajul NXC pentru comanda i citirea strii modulului de ieire NXT, asociat motoarelor, prin intermediul firmware-ului. Exist, n esen, doar dou funcii una de scriere (pentru trimiterea comenzilor, setarea parametrilor), i una de citire (pentru citirea parametrilor de funcionare, a strii modulului). Prin parametrii lor, predefinii ca i constante, aceste dou funcii asigur n totalitate interfaa ntre program i partea firmwareului care gestioneaz modulul de ieire. Aceste funcii sunt numite primitive (Primitive calls). Pe lng acestea, mai sunt definite n API-ul NXC i o serie de funcii, numite convenabile (Convenient calls), care au la baz funciile primitive apelate implicit cu o anumii parametri, i care pot fi de folos n exprimarea mai compact a comenzilor. n paragraful 1 sunt date cele dou funcii primitive i constantele predefinite, iar n paragraful 2 sunt prezentate funciile convenabile.

A3 / 1

Anexa 3

1. Funcii primitive
GetOutput(port, const field) Funcia returneaz valoarea parametrului specificat prin cmpul field, pentru portul de ieire specificat prin port. Porturile de ieire posibile sunt OUT_A, OUT_B, OUT_C. Adresele acestora sunt date n tabelul 3.1. n tabelul 3.2 sunt date constantele predefinite pntru cmpuri i domeniile de valori posibile. Exemplu: // Citete valoarea furnizat de counterul asociat encoderului, de la portul A. x = GetOutput(OUT_A, TachoCount)

SetOutput(port, const field1, val1, , const fieldN, valN) Atribuie cmpurilor field1...fieldn valorile specificate val1...valn. Portul de ieire este specificat prin constanta port. Porturile de ieire posibile i adresele lor sunt date n tabelul 3.1.

n tabelul 3.2 sunt date constantele predefinite pntru cmpuri i domeniile de valori posibile. Exemplu: // Stabilete poziia dorit la 720 de grade pentru (motoarele conectate la) porturile A i B: SetOutput(OUT_AB, TachoLimit, 720);

1.1.

Constante predefinite pentru modulul de ieire

Aproape toate funciile NXC API ce fac referire la porturile de ieire primesc ca prim argument o ieire sau un set de ieiri ce reprezint portul sau porturile de ieire corespunztoare. Adresele acestora sunt specificate n tabelul 3.1. A3 / 2

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor Tabel 3.1 Constantele porturilor de iesire Constante predefinite pentru porturile de intrare/iesire la care se conecteaz motoare OUT_A OUT_B OUT_C OUT_AB OUT_AC OUT_BC OUT_ABC

Valoare (adresa relativ) 0x00 0x01 0x02 0x03 0x04 0x05 0x06

Parametrii de funcionare i de stare ai modulului de ieire sunt specificai ca i cmpuri n funciile primitive. Aceste cmpuri reprezint de fapt adrese, i sunt predefinite, ca i constante, pentru a uura utilizarea lor. Aceste constante predefinite i domeniile posibile ale valorilor care se pot scrie /citi la /de la adresele pe care le definesc sunt prezentate tabelul 3.2. Tabel 3.2 Constantele predefinte pentru cmpurile funciilor primitive Constante predefinite pentru cmpuri UpdateFlags

Tipul

Acces

Domeniu

Semnificaie

ubyte

Citire/ Scriere

0... 255

Sunt indicatori folosii pentru actualizarea comenzilor. Acest cmp poate include orice combinaie de bii de stare,

A3 / 3

Anexa 3 descris n tabelul 3.3 OutputMode ubyte Citire/ Scriere 0... 255 Permite setarea explicit a modului de lucru. Acesta este un cmp de bii ce poate include oricare din constantele prezentate n tabelul 3.4. Exemple: - Prin setarea bitului OUT_MODE_MOTORON se permite alimentarea motoarelor. - Pentru a activa franarea electrica se seteaz OUT_MODE_BRAKE. Se folosete UF_UPDATE_MODE mpreun cu UpdateFlags n momentul n care se doresc a fi comise modificrile efectuate asupra acestui cmp . Power sbyte Citire/ Scriere [-100, 100] Specific nivelul de putere al ieirii (valoarea absolut este factorul de umplere al semnalului PWM de tensiune). n cazul n care se folosete regulatorul intern de vitez, valoarea pentru power aplicat efectiv este calculat de regulator. Semnul valorii scrise n acest cmp controleaz direcia de rotaie. Se folosete UF_UPDATE_POWER cu UpdateFlags n momentul n A3 / 4

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor care se doresc a fi comise modificrile efectuate asupra acestui cmp. ActualSpeed sbyte Citire [-100, 100] Returneaz nivelul de putere efectiv aplicat de firmware. n bucl deschis, ActualSeed este chiar Power. Acestea sunt diferite n cazul n care se utilizeaz regulatorul de viteza al firmware-ului. TachoCount slong Citire signed long Returneaz poziia unghiular actual a motorului, relativ la poziia iniial. Poziia iniial poate fi cea de la nceputul rulrii programului sau poziia n care care se afla motorul n momentul n care s-a impus ultima poziie-int (TachoLimit a se vedea mai jos). Se reseteaz automat de fiecare dat cnd se stabilete o nou poziie int. Valoarea este citit de la firmware n grade, acesta calculnd-o pe baza numrului de pulsuri citite de la encoder. Semnul valorii citite indic direcia de rotaie a motorului relativ la poziia iniial. Pentru a reseta TachoCount i a anula poziia-int se seteaza flag-ul UF_UPDATE_RESET_COUNT, cu UpdateFlags. A3 / 5

Anexa 3 TachoLimit ulong Citire/ Scriere unsigned long Prin TachoLimit se specific poziia-int, adic unghiul cu care se dorete s se roteasc motorul. Se foloseste UF_UPDATE_TACHO_LIMIT i UpdateFlags pentru a comite modificarea fcut pentru TachoLimit. TurnRatio sbyte Citire/ Scriere [-100, 100] Permite distribuirea vitezei ntre dou motoare. Exist doar trei combinaii posibile ale ieirilor: OUT_AB, OUT_BC i OUT_AC, utilizabile cu TurnRatio n fiecare dintre aceste trei opiuni primul motor listat este considerat a fi motorul din stnga. Valorile negative ale constantei TurnRatio nclin balansul de viteza spre motorul din stnga n timp ce valorile pozitive l schimb spre drepta. O valoare absolut de 50 conduce la oprirea unui motor, iar cellalt primete ntreaga valoare a vitezei de referin. Pentru valoarea absolut de 100 cele dou motoare primesc aceeai vitez dar de sens opus. RegMode ubyte Citire/ Scriere 0...255 Modul de reglare folosit pentru regulatorul intern de vitez. Exist dou moduri posibile: A3 / 6

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor - Reglaj de vitez pentru un motor. n acest mod, firmware-ul ncearc s menin viteza impus motorului - Sincronizarea nseamn c firmware-ul ncearc s menin aceeai vitez la cele dou motoare, indiferent de ncrcarea fizic. Acest mod poate fi utilizat pentru pstrarea automat a unui traseu drept de robotul mobil. De asemena acest mod poate fi utilizat cu constanta TurnRatio ce furnizeaz un balans de vitez. Setarea OUT_REGMODE_SYNC pentru dou porturi ale motorului sincronizarea vitezelor acestora. Overload ubyte Citire 0, 1 Bit de testare a suprancrcrii motoarelor Cmp pentru setarea coeficientului proporional al regulatorului PID implementat la nivel de firmware. Necesit actualizare cu UF_UPDATE_PID_VALUES Cmp pentru setarea coeficientului integral al regulatorului PID implementat la nivel de firmware. Necesit actualizare cu UF_UPDATE_PID_VALUES. Cmp pentru setarea coeficientului derivativ al

RegPValue

ubyte

Citire/ Scriere

0...255

RegIValue

ubyte

Citire/ Scriere

0...255

RegDValue

ubyte

Citire/

0...255 A3 / 7

Anexa 3 Scriere regulatorului PID implementat la nivel de firmware. Necesit actualizare cu UF_UPDATE_PID_VALUES

Valorile valide ale campului UpdateFlags sunt descrise in tabelul 3.3. Tabel 3.3 Constantele UpdateFlags Constantele UpdateFlags UF_UPDATE_MODE Efect Opereaza (comite) schimbarile cmpului OutputMode. Opereaza (comite) schimbarile cmpului Power. Opereaza schimbarile cmpului TachoLimit. Reseteaza toate counterele de rotatie, anuleaza TachoLimit Opereaza simultan schimbarile cmpurilor RegPValue, RegIValue i RegDValue

UF_UPDATE_SPEED

UF_UPDATE_TACHO_LIMIT

UF_UPDATE_RESET_COUNT

UF_UPDATE_PID_VALUES

Se foloseste UF_UPDATE_MODE, UF_UPDATE_SPEED, UF_UPDATE_TACHO_LIMIT, si UF_UPDATE_PID_VALUES mpreun cu alte cmpuri pentru a opera schimbri n starea ieirilor. Valorile valide ale constantelor OutputMode sunt descrise in tabelul 3.4. Tabel 3.4 Constantele OutputMode Constante OutputMode Valoare A3 / 8 Efect

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor OUT_MODE_COAST OUT_MODE_BRAKE OUT_MODE_REGULATED 0x00 0x02 0x04 ntrerupe alimentarea motoarelor Frnare electric a motoarelor Regulator vitez / poziie activat

Valorile valide ale constantelor RegMode sunt descrise n tabelul 3.5. Tabel 3.5 Constantele RegMode Constante RegMode OUT_REGMODE_IDLE OUT_REGMODE_SPEED OUT_REGMODE_SYNC Valoare 0x00 0x01 0x02 Efect Dezactiveaz regulatoarele Activeaz reglajul de vitez Asigur rotirea sincron a dou motoare.

2. Forme convenabile de apelare a funciilor primitive


Comenzile de micare ale motoarelor pot fi date utiliznd funciile primitive, n care se specific parametrii, o parte dintre acetia necesitnd apeluri suplimentare pentru actualizare, prin intermediul flag-urilor. Pentru a uura programarea, n API-ul NXC exist o serie de funcii care reprezint forme convenabile de apel al funciilor primitive, folosind implicit anumii parametri i actualizare automat pentru cei care cer actualizare. Versiunile Ex ale functiilor permit resetarea counterelor encoderelor, folosind constantele de resetare prezentate in tabelul 3.6. Tabel 3.6. Constantele de resetare asociate

A3 / 9

Anexa 3

Constantele de resetare RESET_NONE RESET_COUNT RESET_ROTATION_COUNT RESET_ALL

Valoare 0x00 0x08 0x40 0x68

Off(port) Funcie pentru oprirea motorului (motoarelor) conectat la portul specificat, prin frn electric. Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt date n tabelul 3.1. Exemplu: Off(OUT_A); // oprete motorul conectat la portul A OffEx(port, const reset) Versiunea Ex a funciei Off(). Valorile valide pentru resetare sunt prezentate n tabelul 3.6. Coast(port) Funcie pentru oprirea motorului conectat la portul specificat, prin ntreruperea alimentrii. Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt date n tabelul 3.1. Exemplu: Coast(OUT_A);

A3 / 10

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor CoastEx(port, const reset) Versiunea Ex a funciei Coast(port). Valorile valide pentru resetare sunt prezentate n tabelul 3.6. Exemplu: CoastEx(OUT_A, RESET_NONE); Float(port) Un alt nume pentru funcia Coast. OnFwd(port, pwr) Funcia permite pornirea i rotirea nainte cu o putere pwr (exprimat n procente din puterea maxim), a motorului conectat la portul specificat. Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt date n tabelul 3.1. Exemplu: OnFwdEx(OUT_A, 75); OnFwdEx(port, pwr, const reset) Versiunea Ex a funciei OnFwd().

OnRev(port, pwr) Funcia permite pornirea i rotirea napoi cu o putere pwr (exprimat n procente din puterea maxim), a motorului conectat la portul specificat. Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt date n tabelul 3.1. Exemplu: OnRev(OUT_A, 75); A3 / 11

Anexa 3 OnRevEx(port, pwr, const reset) Versiunea Ex a funciei OnRev(). Exemplu: OnRevEx(OUT_A, 75, RESET_NONE);

OnFwdReg(port, pwr, regmode) Funcia permite pornirea i rotirea nainte cu reglaj de vitez notat pwr, (exprimat n procente din viteza maxim), a motorului conectat la portul specificat. Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt date n tabelul 3.1. Modurile de setri specifice reglajului de vitez sunt n tabelul 3.5. Exemplu: OnFwdReg(OUT_A, 75, OUT_REGMODE_SPEED); // reglaj de viteza de // 75% din viteza maxima OnFwdRegEx(port, pwr, regmode, const reset) Versiunea Ex a funciei OnFwdReg(). Exemplu: OnFwdRegEx(OUT_A, 75, OUT_REGMODE_SPEED, RESET_NONE);

OnRevReg(port, pwr, regmode) Funcia permite pornirea i rotirea napoi cu reglaj de vitez notat pwr (exprimat n procente din viteza maxim), pentru motorul conectat la portul specificat. Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt date n tabelul 3.1. Modurile de setri specifice reglajului de vitez sunt n tabelul 3.5.

A3 / 12

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor Exemplu: OnRevReg(OUT_A, 75, OUT_REGMODE_SPEED);

OnRevRegEx(port, pwr, regmode, const reset) Versiunea Ex a funciei OnFwd. Exemplu: OnRevRegEx(OUT_A, 75, OUT_REGMODE_SPEED, RESET_NONE);

OnFwdSync(port, pwr, turnpct) Rotete nainte i sincronizeaz vitezele motoarelor conectate la porturile de ieire specificate. Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt date n tabelul 3.1. Exemplu: OnFwdSync(OUT_AB, 75, -100); OnFwdSyncEx(port, pwr, turnpct, const reset) - Versiunea Ex a funciei anterioare. Valorile valide pentru resetare sunt prezentate n tabelul 3.6. Exemplu: OnFwdSyncEx(OUT_AB, 75, 0, RESET_NONE);

OnRevSync(port, pwr, turnpct) Rotete napoi i sincronizeaz vitezele motoarelor conectate la porturile de ieire specificate. Adresele porturilor de ieire pot fi definite ca variabile sau constante Porturile de ieire posibile sunt date n tabelul 3.1. A3 / 13

Anexa 3 Exemplu: OnRevSync(OUT_AB, 75, -100); OnRevSyncEx(port, pwr, turnpct, const reset) - Versiunea Ex a funciei anterioare. Valorile valide pentru resetare sunt prezentate n tabelul 3.6. Exemplu: OnRevSyncEx (OUT_AB, 75, -100, RESET_NONE);

RotateMotor(port, pwr, angle) Rotete motorul conectat la portul specificat cu un unghi exprimat n grade. Porturile de ieire posibile sunt date n tabelul 3.1.. Exemplu: RotateMotor(OUT_A, 75, 45); // roteste motorul A nainte cu 45 de grade RotateMotor(OUT_A, -75, 45); // r roteste motorul A napoi cu 45 de grade

RotateMotorPID(port, pwr, angle, p, i, d) Rotete motorul conectat la portul specificat cu un unghi exprimat n grade. Porturile de ieire posibile sunt date n tabelul 3.1. De asemenea se specific valorile coeficienilor regulatorului PID. Exemplu: RotateMotorPID(OUT_A, 75, 45, 20, 40, 100)

RotateMotorEx(port, pwr, angle, turnpct, sync, stop) - este o extensie a comenzii precedente care permite sincronizarea celor dou motoare, prin parametrul sync i frnarea electric a motoarelor la sfritul rotaiei, prin parametrul stop. Porturile de ieire posibile sunt date n tabelul 3.1. A3 / 14

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor Exemplu: RotateMotorEx(OUT_AB, 75, 360, 50, true, true)

RotateMotorExPID(port, pwr, angle, turnpct, sync, stop, p, i, d) Aceeai funcie ca mai sus, n care se specific i coeficienii regulatorului. Exemplu: RotateMotorExPID(OUT_AB, 75, 360, 50, true, true, 30, 50,90)

ResetTachoCount(port) - Reseteaz contoarele de rotaie asociate porturilor specificate. Porturile de ieire posibile sunt date n tabelul 3.1. Exemplu: ResetTachoCount(OUT_A)

MotorTachoCount(output) Returneaz valoarea contorului de poziie al motorului conectat la portul specificat. Porturile de ieire posibile sunt OUT_A, OUT_B, OUT_C. Exemplu: x = MotorTachoCount(OUT_A)

MotorOverload(port) Returneaz, ca valoare boolean, starea de suprancrcare a motorului. Porturile de ieire posibile sunt OUT_A, OUT_B, OUT_C. Adresele acestora sunt date n tabelul 3.1. Exemplu: x = MotorOverload(OUT_A)

A3 / 15

Anexa 3 MotorRotationCount(port) Value Returneaz valoarea contorului de poziie asociat portului specificat. Porturile de ieire posibile sunt OUT_A, OUT_B, OUT_C. Adresele acestora sunt date n tabelul 3.1. Exemplu: x = MotorRotationCount(OUT_A)

A3 / 16