RI Anexa 03A

21
Anexa 3 Funcţii predefinite în limbajul NXC pentru comanda motoarelor robotului NXT Conţinut 1. Funcţii primitive.......................................1 1.1. Constante predefinite pentru modulul de ieşire......2 2. Forme convenabile de apelare a funcţiilor primitive.....9 Doarece controlul motoarelor este o necesitate în programarea roboţilor, sunt asigurate pentru a facilita lucrul cu porturile de iesire un număr de apeluri de de funcţii specifice, cu functionaltăţi variate ce sunt descrise în următoarea secţiune. Sunt metode mai convenabile pentru scrierea de programe mai concise. În această anexă sunt prezentate funcţiile predefinite în limbajul NXC pentru comanda şi citirea stării modulului de ieşire NXT, asociat motoarelor, prin intermediul firmware- ului. Există, în esenţă, doar două funcţii – una de scriere (pentru trimiterea comenzilor, setarea parametrilor), şi una de citire (pentru citirea parametrilor de funcţionare, a stării modulului). Prin parametrii lor, predefiniţi ca şi constante, aceste două funcţii asigură în totalitate interfaţa între program şi partea firmware-ului care A3 / 1

description

RI

Transcript of RI Anexa 03A

L3 - testare senzori

Anexa 3Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor

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

11.Funcii primitive

21.1.Constante predefinite pentru modulul de ieire

92.Forme convenabile de apelare a funciilor primitive

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 firmware-ului 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. 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); 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.Tabel 3.1 Constantele porturilor de iesire

Constante predefinite pentru porturile de intrare/iesire la care se conecteaz motoareValoare

(adresa relativ)

OUT_A0x00

OUT_B0x01

OUT_C0x02

OUT_AB0x03

OUT_AC0x04

OUT_BC0x05

OUT_ABC0x06

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 primitiveConstante predefinite pentru cmpuriTipulAccesDomeniuSemnificaie

UpdateFlagsubyteCitire/Scriere0... 255Sunt indicatori folosii pentru actualizarea comenzilor.

Acest cmp poate include orice combinaie de bii de stare, descris n tabelul 3.3

OutputModeubyteCitire/Scriere0... 255Permite 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 .

PowersbyteCitire/ 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 care se doresc a fi comise modificrile efectuate asupra acestui cmp.

ActualSpeedsbyteCitire[-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.

TachoCountslongCitiresigned longReturneaz 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.

TachoLimitulongCitire/ Scriereunsigned longPrin 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.

TurnRatiosbyteCitire/ 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.

RegModeubyteCitire/ Scriere0...255Modul de reglare folosit pentru regulatorul intern de vitez.Exist dou moduri posibile:

- 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.

OverloadubyteCitire0, 1Bit de testare a suprancrcrii motoarelor

RegPValueubyteCitire/ Scriere0...255Cmp pentru setarea coeficientului proporional al regulatorului PID implementat la nivel de firmware. Necesit actualizare cu UF_UPDATE_PID_VALUES

RegIValueubyteCitire/ Scriere0...255Cmp pentru setarea coeficientului integral al regulatorului PID implementat la nivel de firmware. Necesit actualizare cu UF_UPDATE_PID_VALUES.

RegDValueubyteCitire/ Scriere0...255Cmp pentru setarea coeficientului derivativ al 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 UpdateFlagsEfect

UF_UPDATE_MODEOpereaza (comite) schimbarile cmpului OutputMode.

UF_UPDATE_SPEEDOpereaza (comite) schimbarile cmpului Power.

UF_UPDATE_TACHO_LIMITOpereaza schimbarile cmpului TachoLimit.

UF_UPDATE_RESET_COUNTReseteaza toate counterele de rotatie, anuleaza TachoLimit

UF_UPDATE_PID_VALUESOpereaza simultan schimbarile cmpurilor RegPValue, RegIValue i RegDValue

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 OutputModeConstante OutputModeValoareEfect

OUT_MODE_COAST0x00ntrerupe alimentarea motoarelor

OUT_MODE_BRAKE0x02Frnare electric a motoarelor

OUT_MODE_REGULATED0x04Regulator vitez / poziie activat

Valorile valide ale constantelor RegMode sunt descrise n tabelul 3.5.

Tabel 3.5 Constantele RegModeConstante RegModeValoareEfect

OUT_REGMODE_IDLE0x00Dezactiveaz regulatoarele

OUT_REGMODE_SPEED0x01Activeaz reglajul de vitez

OUT_REGMODE_SYNC0x02Asigur rotirea sincron a dou motoare.

Forme convenabile de apelare a funciilor primitiveComenzile 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 asociate encoderelor, folosind constantele de resetare prezentate in tabelul 3.6.Tabel 3.6. Constantele de resetare

Constantele de resetareValoare

RESET_NONE0x00

RESET_COUNT0x08

RESET_ROTATION_COUNT0x40

RESET_ALL0x68

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); 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);

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 maximaOnFwdRegEx(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.

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.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 gradeRotateMotor(OUT_A, -75, 45); // r roteste motorul A napoi cu 45 de gradeRotateMotorPID(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.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)

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 / 1A3 / 16A3 / 15