This shows you the differences between two versions of the page.
|
pm:prj2026:mihnea.dinica:stefan.comanescu [2026/05/04 18:02] stefan.comanescu created |
pm:prj2026:mihnea.dinica:stefan.comanescu [2026/05/04 19:33] (current) stefan.comanescu [Hardware Design] |
||
|---|---|---|---|
| Line 8: | Line 8: | ||
| * **Ideea de la care am pornit:** Dorința de a decoda și vizualiza traficul intern al mașinii (o rețea industrială complexă, extrem de zgomotoasă și aglomerată) fără a folosi testere comerciale (gen ELM327), ci comunicând nativ prin microcontroler. | * **Ideea de la care am pornit:** Dorința de a decoda și vizualiza traficul intern al mașinii (o rețea industrială complexă, extrem de zgomotoasă și aglomerată) fără a folosi testere comerciale (gen ELM327), ci comunicând nativ prin microcontroler. | ||
| * **Utilitate:** Demonstrează conceptele critice de rețele auto, gestiunea corectă a întreruperilor hardware pentru prevenirea pierderii de pachete și necesitatea izolării și stabilizării alimentării auto (12V -> 5V) prin convertoare în comutație. | * **Utilitate:** Demonstrează conceptele critice de rețele auto, gestiunea corectă a întreruperilor hardware pentru prevenirea pierderii de pachete și necesitatea izolării și stabilizării alimentării auto (12V -> 5V) prin convertoare în comutație. | ||
| + | * **Elemente de noutate (5%):** Spre deosebire de o simplă interogare OBD-II clasică prin care se solicită un parametru (PID 0x0C), sistemul meu acționează și ca un CAN-Sniffer activ. Acesta interceptează direct pachetele de tip broadcast aruncate de ECU pe rețeaua mașinii (ex: ID 0x201 specific vehiculelor Ford), obținând astfel turația motorului instantaneu, cu latență zero, fără a mai încărca magistrala cu cereri proprii. | ||
| + | |||
| + | {{ :pm:prj2026:mihnea.dinica:rpm.drawio.png?nolink&200|}} | ||
| + | |||
| + | ===== Ipoteză, Planificare și Măsurători ===== | ||
| + | |||
| + | **Ipoteză științifică:** | ||
| + | Credem că efectuarea citirii asincrone în cascadă a bufferului CAN (în interiorul rutinei de loop) combinată cu decodarea mesajelor broadcast native ale vehiculului (ID 0x201) va îmbunătăți considerabil performanța afișajului RPM deoarece va preveni fenomenul de "Interrupt Overrun" și va elimina latența cauzată de timpii de așteptare ai interogărilor standard OBD-II. | ||
| + | |||
| + | **Metrici și Ținte de Performanță (Măsurători):** | ||
| + | * **Stabilitatea tensiunii:** Menținerea tensiunii de ieșire la 5.0V (+/- 0.1V) folosind sursa Step-Down MP1584EN, indiferent de fluctuațiile alternatorului mașinii (care urcă până la 14.4V). | ||
| + | * **Latența comunicației:** Actualizarea datelor pe ecranul LCD și a sistemului Shift-Light în mai puțin de 150ms de la variația fizică a turației motorului. | ||
| + | * **Rata de succes a pachetelor:** Procesarea traficului fără pierderi (0% pachete ignorate) și fără blocarea magistralei I2C sau SPI la turații mari. | ||
| + | |||
| + | **Planificarea activităților (Grafic Gantt):** | ||
| + | * **Săptămâna 1:** Cercetare protocoale (ISO 15765-4), desenare scheme bloc/electrice și achiziție componente. | ||
| + | * **Săptămâna 2:** Interconectare magistrală I2C (LCD) și SPI (MCP2515) pe breadboard. Scanare adrese I2C. | ||
| + | * **Săptămâna 3:** Implementarea logicii de polling, setarea întreruperilor hardware (INT0) și decodarea pachetelor OBD-II în C++. | ||
| + | * **Săptămâna 4:** Integrarea sursei Step-Down, calibrarea tensiunilor și testarea practică pe autovehicul (Ford Fiesta). Implementarea "CAN Sniffing-ului" pentru ID 0x201. | ||
| + | * **Săptămâna 5:** Testare finală de stabilitate termică, wire-management, urcare cod pe repository-ul Git și redactarea documentației Wiki. | ||
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| Line 37: | Line 57: | ||
| * **GPIO (LED-uri):** Verde -> PD3 (Pin 3), Galben -> PD4 (Pin 4), Roșu -> PD5 (Pin 5) | * **GPIO (LED-uri):** Verde -> PD3 (Pin 3), Galben -> PD4 (Pin 4), Roșu -> PD5 (Pin 5) | ||
| * **Alimentare:** OBD-II Pin 16 & Pin 4 -> IN (+/-) Step-Down -> OUT (+/-) ajustat pe multimetru la 5.0V -> Breadboard Power Rails. | * **Alimentare:** OBD-II Pin 16 & Pin 4 -> IN (+/-) Step-Down -> OUT (+/-) ajustat pe multimetru la 5.0V -> Breadboard Power Rails. | ||
| + | {{:pm:prj2026:mihnea.dinica:schemă_electrică_compactă_-_rpm_can-bus.pdf|}} | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| Line 45: | Line 65: | ||
| * ''mcp_can'' (de Cory J. Fowler) - Manipularea registrelor interne ale MCP2515 via SPI. | * ''mcp_can'' (de Cory J. Fowler) - Manipularea registrelor interne ale MCP2515 via SPI. | ||
| * ''LiquidCrystal_I2C'' - Controlul afișajului. | * ''LiquidCrystal_I2C'' - Controlul afișajului. | ||
| + | * **Profilarea codului:** Evaluarea performanței codului s-a realizat urmărind evitarea blocajelor procesorului. Datorită utilizării logicii asincrone cu funcția ''millis()'', procesorul (CPU) are un Idle Time ridicat, intervenind doar pentru a drena bufferul SPI când pinul de întrerupere pică pe LOW. Nu există funcții ''delay()'' în bucla principală care să monopolizeze microcontrolerul. | ||
| * **Algoritmi implementați:** | * **Algoritmi implementați:** | ||
| - | * **Cod non-blocant:** În loc de folosirea funcției ''delay()'', s-a utilizat Timer0 (''millis()'') pentru a interoga CAN-ul la intervale precise de 100ms, lăsând procesorul liber să asculte asincron răspunsurile. | + | * **Cod non-blocant:** S-a utilizat Timer0 (''millis()'') pentru a interoga CAN-ul la intervale precise de 100ms. |
| * **Interrupt Overrun Handling:** Rutina de tratare folosește un sistem în cascadă ''while (CAN_MSGAVAIL == CAN.checkReceive())'' care citește simultan toate mesajele adunate pentru a debloca microcontrolerul în cazul unui trafic auto intens. | * **Interrupt Overrun Handling:** Rutina de tratare folosește un sistem în cascadă ''while (CAN_MSGAVAIL == CAN.checkReceive())'' care citește simultan toate mesajele adunate pentru a debloca microcontrolerul în cazul unui trafic auto intens. | ||
| - | * **Decodare duală:** Software-ul identifică răspunsurile standard la interogări OBD-II (ID 0x7E8) și funcționează ca un sniffer pentru a prinde cadrele transmise broadcast de mașină (ID 0x201), care conțin turația în timp real, reducând latența pe ecran. | + | * **Decodare duală:** Software-ul identifică răspunsurile standard la interogări OBD-II (ID 0x7E8) și funcționează simultan ca un sniffer pentru a prinde direct cadrele transmise broadcast de mașină (ID 0x201). |
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Sistemul a fost testat fizic pe un autoturism Ford Fiesta. A reușit negocierea cu ECU la viteza de 500kbps în modul MCP_NORMAL. Datele au fost citite și afișate fără latențe vizibile. S-a observat sensibilitatea ecranelor LCD la fluctuații de tensiune, problema afișării neclare fiind corectată prin calibrarea precisă a sursei Step-Down cu potențiometru la pragul de 5.0V sub sarcină. Shift-light-ul răspunde instantaneu la turațiile motorului. | Sistemul a fost testat fizic pe un autoturism Ford Fiesta. A reușit negocierea cu ECU la viteza de 500kbps în modul MCP_NORMAL. Datele au fost citite și afișate fără latențe vizibile. S-a observat sensibilitatea ecranelor LCD la fluctuații de tensiune, problema afișării neclare fiind corectată prin calibrarea precisă a sursei Step-Down cu potențiometru la pragul de 5.0V sub sarcină. Shift-light-ul răspunde instantaneu la turațiile motorului. | ||
| + | {{ :pm:prj2026:mihnea.dinica:whatsapp_image_2026-05-04_at_18.19.29.jpeg?nolink&200|}} | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| Line 60: | Line 82: | ||
| ===== Download ===== | ===== Download ===== | ||
| - | * [Aici vei urca arhiva .zip cu fișierele tale, adăugată din platformă] | + | * [[https://github.com/stefan04com/RPM-Shift-Light-via-CAN-Bus/tree/main|Repository GitHub (Istoric Commit-uri)]] |
| + | * [[https://github.com/stefan04com/RPM-Shift-Light-via-CAN-Bus/archive/refs/heads/main.zip|Arhivă Cod Sursă (.zip)]] | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||