Kommunikatsioonimoodul

Allikas: Digilabor

Aine "Robootika projekt" raames valminud Liikumismoodul2012 edasiarendus. Moodul koosneb USB-to-RS485 konverterist, mootorit juhtivast plaadist ja neid ühendavast RS-485 siinist.

Kommunikatsioonimooduli prototüüp

Siin on video hetkel töötavast lahendusest.

Sisukord

Meeskond

  • Antti Jaaniste
    • jaantti@gmail.com
    • +37251962939
  • Taavi Adamson
    • taaviadamson@gmail.com
    • +37253404314

Eelarve

Link

Failid

Eesmärk

Kogemused näitavad, et USB-ühendusega moodulid ei sobi väga jalgpalliroboti juures kasutamiseks, kuna USB ei ole häirekindel. Näiteks meie tiimil oli probleeme, kus USB-ga ühendatud mootoriplaadid kippusid suvalistel hetkeldel ühendust kaotama. Sellest tulenevalt tekkis mõte luua suhtlusmoodul, mis on arvutiga ühendatud ühe USB kaabliga, aga alammoodulid ühenduvad mõne robustsema protokolliga (näiteks RS485). Eesmärk on vastava mooduli loomine ning testimine.

Nõuded

  • Seadmed saab ühendada ühele siinile
  • Seadmetele saab eraldi käske saata
  • Lahendus peab olema häirekindlam kui USB ühendus. (Ühendus mootoriplaatidega ei katke roboti töö käigus)
  • Uue funktsionaalsuse lisamisega mootoriplaatidele peaks võimalikult palju vana funktsionaalust ning I/O-d alles jääma.
  • Mootoriplaatidele võiks saada kontrollida nii üle uue ühenduse kui ka USB

Tarkvara

Modifitseerisime olemasoleva mootoriplaadi firmware-i ning lisasime UART suhtluse.

Plaatide juhtimine

USB

Arvutisse tekib virtuaalne COM-port, kuhu saab käske saata ning andmeid vastu võtta.

Ühenduse parameetrid:

  • Baudrate: suvaline
  • Data bits: 8
  • Stop bits: 1
  • Parity: none

RS485

USB<->RS485 adapter tekitab virtuaalse COM-pordi, kuhu saab käske saata ning andmeid vastu võtta.

  • Baudrate: 19200
  • Data bits: 8
  • Stop bits: 1
  • Parity: none

Käsustik

Kõik käsud lõppevad \n (10, 0x0A, LF) või \r (13, 0x0D, CR) sümboliga.

Iga käsu ette tuleb kirjutada vastava plaadi id kujul - "<id>:<käsk>"

Näiteks :

  • 1:sd10 - saadab plaadile id-ga 1, kiiruse 10
  • 234:s - küsib plaadilt id-ga 234, kiirust

NB! Alguses on kõikide plaatide id 255. Id muutmiseks tuleb plaadid ühendada ükshaaval kas USB või RS485-ga ning anda käsud 255:idSoovitud_id.

Käsk Vastus Kirjeldus Näited
sdx seab ratta kiiruse PID-kontrolli kasutades
x - ratta kiirus [-190 ... 190]
ratta pöörlemiskiirus 190 on saavutatav toitepingega üle 12V
"-" märk tähistab vastupidist ratta pöörlemissuunda
PID-kontroll lülitatakse automaatselt sisse

Ratta pöörlemiskiiruse arvutamise valem:
\omega_{cyc} = \frac{62.5}{18.75 \times 64} \times \omega_{a}

ωcyc - pöörlemiskiirus [pööret sekundis]
ωa - pöörlemiskiirus mootoriplaadi ühikutes
62.5 - kiiruse mõõtmise sagedus [Hz]
18.75 - reduktori ülekandetegur
64 - kiiruse lugemite arv ühe mootori pöörde kohta

kiirusele 100 vastab pöörlemiskiirus 5,2 pööret/sekundis
70mm dimeetriga ratta joonkiiruseks sellisel pöörlemiskiirusel on ligikaudu 1,14 m/s

sd50 - seab ratta kiiruseks 50
sd-100 - seab ratta kiiruseks -100
wlx seab ratta kiiruse PID-kontrolli kasutamata
x - PWMi täitetegur [-255 ... 255]
"-" märk tähistab vastupidist ratta pöörlemissuunda
PID-kontroll lülitatakse automaatselt välja
wl100 - seab ratta kiiruseks 100
wl-150 - seab ratta kiiruseks -150
dr0|1 seab ratta pöörlemissuuna
0|1 - määrab pöörlemissuuna, salvestatakse püsivalt
dr0 - seab pöörlemissuuna ühes suunas
dr1 - seab pöörlemissuuna vastassuunas
pd0|1 lülitab PID-kontrolli sisse või välja
0|1 - 0 lülitab välja, 1 sisse
esmasel käivitamisel on PID-kontroll sisse lülitatud
pd0 - lülitab PID-kontrolli välja
pd1 - lülitab PID-kontrolli sisse
s <s:x>\n tagastab ratta pöörlemiskiiruse
x - ratta kiirus [-190 ... 190]
s - tagastab ratta pöörlemiskiiruse
idx seab kontrolleri id
x - id (positiivne täisarv)
salvestatakse püsivalt
id3 - seab kontrolleri id väärtuseks arvu 3
? <id:x>\n tagastab kontrolleri id
x - id (positiivne täisarv)
? - tagastab kontrolleri id
st sooritab mootori polaarsustesti
käivitab mootori lühiajaliselt ja kontrollib enkooderilt saadud kiirust sisemiselt seatud kiirusega
kui kiirused on erimärgilised muudetakse mootori polaarsus kontrolleris
polaarsus salvestatakse püsivalt
st - sooritab mootori polaarsustesti
fs0|1 lülitab automaatse mootori peatamise sisse või välja
0|1 - 0 lülitab välja, 1 sisse
vaikimisi peatatakse mootor 1,6 sekundit pärast viimast kiiruse seadmise käsku
esmasel käivitamisel on automaatne peatamine sisse lülitatud
fs0 - lülitab automaatse mootori peatamise välja
fs1 - lülitab automaatse mootori peatamise sisse
pgx muudab PIDi P osa kordajat
x - P osa kordaja
salvestub püsivalt
mõistlik väärtus on 6
igx muudab PIDi I osa jagajat
x - P osa jagaja
salvestub püsivalt
mõistlik väärtus on 8
gg <pid:x,y>\n tagastab PIDi P ja I osa kordajad
x - P osa kordaja
i - I osa jagaja

Elektroonika

Modifitseerisime olemasolevad liikumismooduli mootoriplaate ning lisasime neile RS485 toe. Plaate saab kontrollida nii üle RS485 kui ka USB.

Kommunikatsioonimooduli skeem
Kommunikatsioonimooduli PCB

Seadmete ühendamine siinile

Seadmete ühendamine siinile [[1]]

RS485-e üheks eeliseks RS232-e ees on see, et siinile saab ühendada korraga rohkem kui kaks seadet. Roboti juures on see kasulik, kuna siis pole vaja kasutada hub-i, et seadmeid omavahel ühendada.

RS485-e puhul tuleb kasutada terminating takisteid. Need tuleb joota esimese ja viimase siinil oleva seadme A ja B liini vahele.

BOM

Komponent Kogus Mouser Farnell
ATMEGA8U2AU 1 556-ATMEGA8U2-AU 1841607
RS232 <-> RS485 (SOIC) 1 2437312
SI8441IS1 1 Si8441AA-D-IS1 9570659
MC33887-HSOP 1 841-MC33886PVW
NFET-SOIC8 1 621-DMS3015SSS-13 1863728
LDO 1 511-LD2980CM50 1556768
PTC 100mA 1 576-1206L020-C 1800751
FUSE 5A 1206 1 637-F1206SB5000V032 1832091
RESONATOR SMD 4.5x2.0 1 581-PBRC16.00MR70X 2101363
MINI-USB 1 154-15320-E 1125348
ZENER 12V SOD123 1 78-MMSZ4699-V 1859692
CPOL 3.5-8 470uF-25V 1 667-EEU-FR1E471LB 1219470
ENC MICROMATCH-4 1 571-215079-4 148507
SPI MICROMATCH-6 1 571-215083-6 148519
LOGIC_IN MICROMATCH-8 1 571-2150798 148593
MOTOR, PWR M02 3.5MM 2 538-39357-0002 3882615
33nF 0603 1
100nF 0603 7
1uF 0603 2
10uF 1206 3
22 0603 2
560 0603 6
1k 0603 3
10k 0603 5
100k 0603 1
120 0603 1
LED 0603 3
RST_SW, HWB_SW 3.9x2.9 2
Micromatch 4 Plug 3 571-215083-4 149032
Micromatch 8 Plug 1 571-215083-8 149070

USB <-> RS485

Farnelli nimekiri (16.06.2015)

Ei sisalda mootori driverit, LED-e, ega takisteid/kondekaid.

1841607,1
2437312,1
9570659,1
1863728,1
1556768,1
1800751,1
1832091,1
2101363,1
1125348,1
1859692,1
1219470,1
148507,1
148519,1
148593,1
3882615,2
149032,3
149070,1

Mis jäi tegemata, mida oleks pidanud paremini tegema, miks?

  • Hetkel on plaadil loogika jaoks kaks võimalikku toitesisendit, mis võib olla halb kui ühendada mõlemad ja üks kahest USBist on ebasobivalt konfigureeritud. Selline olukord on tekkinud ettenägematuse ja teadmiste puudumise tõttu mooduli loomisel. Viga ei esine, kui alati järgida reeglit, et ühendada korraga vaid üks toiteallikas
  • PCB-l on vaja lisada thermal-id, mis muudavad jootmise palju lihtsamaks
  • Tuleb üle vaadata mootori driver-i pad ning vajadusel keskelt via-d eemaldada
  • Vaja otsida uued nupud RESET ja HWB jaoks, kuna konkreetse footprint-iga nuppe enam ei toodeta.
  • Koodis vaja üle vaadata, mis see kokku jookseb, kui automaatne kiirusesaatmine sisse lülitada.
  • Kuna valmis USB<->RS485 dongle on kallis (~30€) siis tuleks teha enda versioon sellest, millega võiks kokku hoida kuni poole maksumusest. Hetkel jäi see tegemata, kuna prototüüpida ning testida oli lihtsam, kasutades valmislahendust.
Personaalsed tööriistad
Navigeerimine
Käsitöö