Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:tdicu:tudor.petracovici [2024/05/27 11:11]
tudor.petracovici [Hardware Design]
pm:prj2024:tdicu:tudor.petracovici [2024/05/27 11:45] (current)
tudor.petracovici [Download]
Line 99: Line 99:
 {{:​pm:​prj2024:​tdicu:​3d_models_pendulum.png?​800|}} {{:​pm:​prj2024:​tdicu:​3d_models_pendulum.png?​800|}}
  
-**Stare actuala pendul: (Nu venit inca PCB-ul)**+==== Actual PCB and soldering ==== 
 + 
 +{{:pm:​prj2024:​tdicu:​whatsapp_image_2024-05-27_at_11.13.48.jpeg?​800|}} 
 +Soldering-ul a fost unul foarte usor si placut. SMD-urile au fost lipite cu ajutorul unui Stencil si pasta, la final bagate intr-un cuptor. ​(driverul de motor si integratul buck converter-ului au pad-uri foarte mari de masa, iar pentru aceasta ​fost nevoie de un cuptor. 
 + 
 +Piesele TH si connectorii au fost lipiti dupa. Din fericire nu am observat nici o problema la PCB, in schimb, nu toate placutele de tip ESP32 veneau cu o dioda intre VUSB si VIN, iar astfel am fost nevoie sa modific anumite placute on the spot.
  
-{{:​pm:​prj2024:​tdicu:​stare_actuala_pendulum.jpg?​800|}} 
 ===== Software Design ===== ===== Software Design =====
 +
 +=== Descriere si aplicabilitate ===
 +== Multi-threading ==
 +Core-ul 0 a fost folosit pentru controlul motoarelor, calculul PID-ului si citirea encoder-ului,​ iar Core-ul 1 s-a asigurat de buna functionare a placutei in sine (sunt anumite procese care trebuiesc rulate orice ar fi intern), cat si de mentinerea si rularea unui server web ce trimite catre placuta valori pentru PID.
 +
 +== Timere ==
 +Toate cele 4 timere de pe ESP32 sunt pe 64 de biti, astfel am putut crea un timer ce genereaza o intrerupere la fiecare mili secunda (are frecventa de 1000Hz), interval in care pot citi, procesa si aplica controlul asupra motoarelor. Am ales folosirea unui timer pentru a nu avea
 +de facut calcule extra privind diferenta intre ultima computatie de eroare si cea curenta.
 +
 +== PWM ==
 +Pentru a putea mapa cat mai precis controlul la motor, am ales sa imi generez singur un semnal de PWM de 1000 de Hz, pe o rezolutie de 16 biti, pentru a avea un control cat mai mare. Astfel, pot mapa valori pana la aprox 65k, in loc de simplul si vechiul 255 de pe 8 biti.
                                                                       ​                                                                       ​
-**Platform.io: **    ​+== Platform.io ​== 
                                                                                        
 Platform.io este un mediu de dezvoltare built on top of VS Code, mult mai rapid si mai versatil decat simplul Arduino IDE, ce ofera posibilitatea programarii multor environment-uri,​ printre care si cel de la Esspressif32. Compilarea si upload-ul catre placi este mult mai smooth, putand face si software debug prin serial. Platform.io este un mediu de dezvoltare built on top of VS Code, mult mai rapid si mai versatil decat simplul Arduino IDE, ce ofera posibilitatea programarii multor environment-uri,​ printre care si cel de la Esspressif32. Compilarea si upload-ul catre placi este mult mai smooth, putand face si software debug prin serial.
  
- +== Algoritmi si structuri ​==
-**Librarii si surse: ** +
- +
-Pentru librarii am folosit Arduino.h si RotaryEncoder.h,​ care vine cu niste functii mai rapide de a calcula unghiul din cele 1200 de pulsuri folosind un interrupt handler mai eficient. +
- +
- +
-**Algoritmi si structuri: **+
 Pe partea de algoritmi, proiectul se bazeaza pe un algoritm de control, mai exact PID, ce se foloseste de unghiul la momentul T al pendulului ca input. Pe partea de algoritmi, proiectul se bazeaza pe un algoritm de control, mai exact PID, ce se foloseste de unghiul la momentul T al pendulului ca input.
  
Line 148: Line 157:
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +=== The final Product === 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+{{:​pm:​prj2024:​tdicu:​whatsapp_image_2024-05-27_at_11.36.22.jpeg?​800|}} 
-</​note>​+{{:​pm:​prj2024:​tdicu:​whatsapp_image_2024-05-27_at_11.36.05.jpeg?​800|}} 
 +{{:​pm:​prj2024:​tdicu:​whatsapp_image_2024-05-27_at_11.36.03.jpeg?​800|}} 
 + 
 +I'm very proud of the final product. Este un sistem complex ce poate fi imbunatatit din foarte foarte multe puncte de vedere, incepand cu partea mecanica pana la componente, plus procesare si senzori in plus (un encoder pe motor spre exemplu).  
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+=== Probleme ​===
  
-<note warning> +== Mecanica == 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +Am avut multe probleme legate ​de componentele printate 3DFoarte multe imbinari si bracket-uri nu fac fata la soc, se indoaie si incep sa afecteze structura sistemului.
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul)**Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +
-</​note>​+
  
 +**Solutie:​** Componente metalice taiate la laser CNC.
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2024/tdicu/tudor.petracovici.1716797474.txt.gz · Last modified: 2024/05/27 11:11 by tudor.petracovici
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