Radu-Adrian OANCEA (25620) - Platformă auto-stabilizatoare

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul constă într-o platformă a cărei normale este reglată automat pe direcția indicată de un accelerometru în centrul ei (accelerația "proper"). Această reglare ar trebui să prevină răsturnarea unui obiect pus pe platformă, atât timp cât nu i se imprimă o accelerație foarte mare și o orientare extremă. Ar trebui să păstreze, spre exemplu, un obiect pe platformă aflat într-o mașină în timpul mersului.

Am ales acest proiect pentru a experimenta o aplicație cu reglare automată.

Descriere generală

Considerăm platforma în sistemul de referință neinterțial cu planul Oxy pe platformă și direcția Oz spre normala ei. Dacă platforma urmărește această orientare, avănd o reglare perfectă, și în absența frecării cu aerul, un obiect plasat pe centrul ei nu ar resimți forțe laterale, astfel prevenind răsturnarea lui.

Hardware Design

Am folosit placa de bază oferită pentru proiecte "PM 2016":

Descriere: link
Schemă: link (Eagle Schematic)
Cablaj: link (Eagle Board) Componente folosite:

  • uC ATMEGA324PA-PU
  • Conector USB-B
  • Oscilator 16MHz
  • 2x Diodă Zener 3v3
  • 2x LED 3mm
  • 2x Pushbutton
  • 3x Rezistență 100
  • 3x Rezistență 470
  • Resiztență 1K5
  • Resiztență 10K
  • Condensator ceramic 100nF
  • 2x Condensator ceramic 15pF

Pentru comunicarea cu calculatorul am folosit:

  • Adaptor Prolific PL2303 USB-to-Serial

Placă cu accelerometru ADXL345:

Fără brand, se găsește pe google
Și are schema: link

Două servomotoare HS-311, dimensiune standard

Ansamblul cu platforma și servomotoarele este conectat prin două cabluri de 1.5m.
Ansamblul este alcătuit astfel:
Un servomotor este “mânerul”, care rotește celălalt servomotor (oferă gradul de libertate pitch), care la rândul său rotește un marker (oferă gradul de libertate roll), care susține platforma.
Platforma este o plăcuță de test, iar pe ea (deasupra markerului) este pus accelerometrul.

Software Design

Dezvoltare realizată pe linux, avr-gcc 6.1.1, arv-libc 2.0.0.

Makefile-ul include regulile:

  • build (default): construiește fișierul .hex
  • flash: apelează bootloadHID -r cu fișierul .hex

Fișiere:

  • i2c_master.h - pentru folosirea protocolului I2C (a.k.a. TWI)
  • acc_adxl.h - pentru folosirea accelerometrului
  • servo.h - pentru folosirea servomotorului
  • stdio_uart_init.c - implementează transparent stdio prin UART (folosește __attribute(constructor)).
  • main.c - implementează bucla de reglare a mecanismului

Pentru testare, vezi fișierele din testing/.
De asemenea, am implementat SPI (inutil - schema accelerometrului nu permite folosirea SPI) în not_working\spi.h.

Control automat

Pentru controlul automat am folosit un sistem PID. Intrarea regulatorului (eroarea) este diferența de înclinație a normalei platformei față de direcția verticală. Ieșirea regulatorului este ajustarea care se realizează semnalului de control către servomotoare.

Probleme întâmpinate

Au existat mai multe probleme întâmpinate pe parcurs:

  • Pe Linux, PL2303 are driver în kernel; driverul PL2303 oficial pentru Windows nu era funcțional - era pentru produsele din o serie următoare; am folosit un driver neoficial
  • Și pe Linux, și pe Windows, câteodată, după mai multe reset-uri ale plăcii comunicarea prin PL2303 nu mai merge și necesită reconectare.
  • Comunicarea cu accelerometrul am încercat-o inițial prin SPI. Deși modulul Analog Devices permite folosirea SPI și I2C, placa cu modulul nu are conexiunile necesare pentru SPI, așa că am folosit I2C.
  • Cablul care leagă cutia cu placa de bază de ansamblul cu platforma era destul de lung și am întâmpinat probleme de comunicare prin I2C (date eronate și întreruperi). Am folosit alt cablu. O altă soluție cred că ar fi fost folosirea unui pull-up mai puternic (rezistență mai mică), cea de pe placa cu accelerometrul era de 10k.
  • Prima achiziție de servomotoare a fost un eșec - servomotoarele erau contrafăcute (fake după Futaba S3003 - detalii detalii), inutilizabile. Le-am returnat și am cumpărat ulterior Hitec HS-311, care chiar funcționează.
  • Servomotoarele nu par să aibă datasheet-uri prea oficiale. Diferența de durată a impulsului pentru a aduce servomotorul într-un anumit unghi era eronat, și l-am determinat eu experimental (SERVO_PULSE_WIDTH_PER_RADIAN în servo.h).

Rezultate Obţinute

Am reușit să îmbin elementele și să realizez platforma auto-stabilzatoare.
Totuși, performanța nu e cea pe car o dorisem inițial (reglarea cu modificări puternice brusce durează mai mult - 1-2 secunde).

Printre neajunsuri se numără:

  • Servomotorul 2(roll) rotește marker-ul într-un punct ales cam jos, și este este cam forțat (punctul de rotație ales necesită cuplu mai mare decât mă așteptam).
  • Bucla de reglare cred că este neoptimă, și nu am lucrat prea mult la ea (o să mai încerc să modelez bine sistemul și să obțin o reglare performantă).

video

Concluzii

Este un proiect practic interesant, care poate fi îmbunătățit ulterior din multe puncte de vedere; aș fi vrut să fac ceva mai robust și mai performant, dar necesita mai mult timp - lucrul cu hardware-ul necesită multă planificare - schemă tehnică, materiale, componente etc., greșelile de proiectare fiind mai costisitoare. Sper că o să îl mai îmbunătățesc pe viitor.

Sfaturi pentru alte proiecte

  • Păstrați bonurile și ambalajul produselor, să le puteți returna dacă e nevoie!
  • Să fiți atenți la modul de utilizare al unei plăci - chiar dacă are același nume ca altele, dacă arată altfel, probabil că circuitul este diferit. Numele de vânzare este de obicei al modulului (ADXL345, de exemplu), nu al plăcii.
  • Apucați-vă din timp de proiect, apar multe probleme tâmpite.
  • Să aveți răbdare cu lipiturile, să folosiți materiale de calitate, să încercați să faceți conexiuni solide, altfel o să pierdeți mai mult timp.
  • Este necesar pentru debugging stdio pe uC.

Download

Resurse

pm/prj2016/amusat/vuplea.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0