Sunteți pe pagina 1din 15

Anexa 3

Funcii predefinite n limbajul NXC pentru


comanda motoarelor robotului NXT

Coninut
1.

Funcii primitive.............................................................................................. 1
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

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

Valoare
(adresa relativ)

OUT_A

0x00

OUT_B

0x01

OUT_C

0x02

OUT_AB

0x03

OUT_AC

0x04

OUT_BC

0x05

OUT_ABC

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

ubyte

Citire/
Scriere

0... 255

Semnificaie

Sunt indicatori folosii pentru


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

A3 / 3

Anexa 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
care se doresc a fi comise
modificrile efectuate asupra

A3 / 4

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor


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.

TachoLimit

ulong

Citire/
Scriere

unsigned
long
A3 / 5

Prin TachoLimit se specific


poziia-int, adic unghiul cu
care se dorete s se roteasc

Anexa 3
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:
- Reglaj de vitez pentru un
motor. n acest mod, firmware-ul
ncearc s menin viteza
impus motorului

A3 / 6

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor


- 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

RegPValue

ubyte

Citire/
Scriere

0...255

Cmp pentru setarea


coeficientului proporional al
regulatorului PID implementat la
nivel de firmware. Necesit
actualizare cu
UF_UPDATE_PID_VALUES

RegIValue

ubyte

Citire/
Scriere

0...255

Cmp pentru setarea


coeficientului integral al
regulatorului PID implementat la
nivel de firmware. Necesit
actualizare cu
UF_UPDATE_PID_VALUES.

RegDValue

ubyte

Citire/
Scriere

0...255

Cmp pentru setarea


coeficientului derivativ al
regulatorului PID implementat la
nivel de firmware. Necesit
actualizare cu
UF_UPDATE_PID_VALUES

A3 / 7

Anexa 3
Valorile valide ale campului UpdateFlags sunt descrise in tabelul 3.3.
Tabel 3.3 Constantele UpdateFlags
Constantele UpdateFlags

Efect

UF_UPDATE_MODE

Opereaza (comite) schimbarile


cmpului OutputMode.

UF_UPDATE_SPEED

Opereaza (comite) schimbarile


cmpului Power.

UF_UPDATE_TACHO_LIMIT

Opereaza schimbarile
cmpului TachoLimit.

UF_UPDATE_RESET_COUNT

Reseteaza toate counterele de


rotatie, anuleaza TachoLimit

UF_UPDATE_PID_VALUES

Opereaza 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 OutputMode
Constante OutputMode

Valoare

Efect

OUT_MODE_COAST

0x00

ntrerupe alimentarea motoarelor

OUT_MODE_BRAKE

0x02

Frnare electric a motoarelor

OUT_MODE_REGULATED

0x04

Regulator vitez / poziie activat

A3 / 8

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor


Valorile valide ale constantelor RegMode sunt descrise n tabelul 3.5.
Tabel 3.5 Constantele RegMode
Constante RegMode

Valoare

Efect

OUT_REGMODE_IDLE

0x00

Dezactiveaz regulatoarele

OUT_REGMODE_SPEED

0x01

Activeaz reglajul de vitez

OUT_REGMODE_SYNC

0x02

Asigur rotirea sincron a dou


motoare.

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 asociate encoderelor,
folosind constantele de resetare prezentate in tabelul 3.6.
Tabel 3.6. Constantele de resetare

Constantele de resetare

Valoare

RESET_NONE

0x00

RESET_COUNT

0x08

RESET_ROTATION_COUNT

0x40

RESET_ALL

0x68
A3 / 9

Anexa 3

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)
A3 / 10

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor


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

A3 / 11

Anexa 3
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.
Exemplu:
OnRevReg(OUT_A, 75, OUT_REGMODE_SPEED);

OnRevRegEx(port, pwr, regmode, const reset)


Versiunea Ex a funciei OnFwd.
Exemplu:
A3 / 12

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor


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);
A3 / 13

Anexa 3

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.
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:
A3 / 14

Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor


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 / 15

S-ar putea să vă placă și

  • Microcontrolere - Lucrarea 2
    Microcontrolere - Lucrarea 2
    Document17 pagini
    Microcontrolere - Lucrarea 2
    Sergiu Blanuta
    Încă nu există evaluări
  • Cap 5 NR
    Cap 5 NR
    Document38 pagini
    Cap 5 NR
    Crss
    Încă nu există evaluări
  • MP - Lab - Sem 9
    MP - Lab - Sem 9
    Document13 pagini
    MP - Lab - Sem 9
    Crss
    Încă nu există evaluări
  • Up Lucrarea 01
    Up Lucrarea 01
    Document11 pagini
    Up Lucrarea 01
    Alexandru Croitoru
    Încă nu există evaluări
  • Cap 6 NR
    Cap 6 NR
    Document53 pagini
    Cap 6 NR
    Crss
    Încă nu există evaluări
  • MP - Lab - Sem 3
    MP - Lab - Sem 3
    Document15 pagini
    MP - Lab - Sem 3
    Crss
    Încă nu există evaluări
  • Cap 6 NR
    Cap 6 NR
    Document53 pagini
    Cap 6 NR
    Crss
    Încă nu există evaluări
  • ACSI - Structura Curs Si Laborator
    ACSI - Structura Curs Si Laborator
    Document1 pagină
    ACSI - Structura Curs Si Laborator
    Crss
    Încă nu există evaluări
  • Tema Ascensor TE
    Tema Ascensor TE
    Document7 pagini
    Tema Ascensor TE
    Crss
    Încă nu există evaluări
  • RI Lucrare9
    RI Lucrare9
    Document6 pagini
    RI Lucrare9
    Crss
    Încă nu există evaluări
  • Dimensionarea Motorului de Actionare - Cor
    Dimensionarea Motorului de Actionare - Cor
    Document3 pagini
    Dimensionarea Motorului de Actionare - Cor
    Marian Richea
    Încă nu există evaluări
  • RI Anexa 1A
    RI Anexa 1A
    Document9 pagini
    RI Anexa 1A
    Craciun Andreea
    Încă nu există evaluări
  • Curs 3
    Curs 3
    Document5 pagini
    Curs 3
    Crss
    Încă nu există evaluări
  • RI Lucrare9
    RI Lucrare9
    Document6 pagini
    RI Lucrare9
    Crss
    Încă nu există evaluări
  • RI Lucrare5
    RI Lucrare5
    Document11 pagini
    RI Lucrare5
    Crss
    Încă nu există evaluări
  • RI Lucrare10
    RI Lucrare10
    Document5 pagini
    RI Lucrare10
    Crss
    Încă nu există evaluări
  • RI Lucrare8
    RI Lucrare8
    Document6 pagini
    RI Lucrare8
    Crss
    Încă nu există evaluări
  • RI Lucrare8
    RI Lucrare8
    Document6 pagini
    RI Lucrare8
    Crss
    Încă nu există evaluări
  • RI Lucrare4
    RI Lucrare4
    Document7 pagini
    RI Lucrare4
    Crss
    Încă nu există evaluări
  • RI Lucrare7
    RI Lucrare7
    Document5 pagini
    RI Lucrare7
    Crss
    Încă nu există evaluări
  • RI Lucrare6
    RI Lucrare6
    Document14 pagini
    RI Lucrare6
    Crss
    Încă nu există evaluări
  • RI Lucrare7
    RI Lucrare7
    Document5 pagini
    RI Lucrare7
    Crss
    Încă nu există evaluări
  • RI Lucrare2 Retel
    RI Lucrare2 Retel
    Document13 pagini
    RI Lucrare2 Retel
    Crss
    Încă nu există evaluări
  • RI Lucrare5
    RI Lucrare5
    Document11 pagini
    RI Lucrare5
    Crss
    Încă nu există evaluări
  • SA2 - Comanda Ectionarilor Electrice
    SA2 - Comanda Ectionarilor Electrice
    Document8 pagini
    SA2 - Comanda Ectionarilor Electrice
    Adrian-Ionuț Dăogaru
    Încă nu există evaluări
  • Lab MAP L02
    Lab MAP L02
    Document1 pagină
    Lab MAP L02
    Cristian Razvan Gavrila
    Încă nu există evaluări
  • RI Lucrare2 Retel
    RI Lucrare2 Retel
    Document13 pagini
    RI Lucrare2 Retel
    Crss
    Încă nu există evaluări
  • RI Lucrare4
    RI Lucrare4
    Document7 pagini
    RI Lucrare4
    Crss
    Încă nu există evaluări