Styrenhet av mätare (CANBUS)

Planering och tankar kring eventuella framtida projekt.
rug
Inlägg: 12
Blev medlem: 28 augusti 2007, 21:19:31
Ort: Knivsta

Styrenhet av mätare (CANBUS)

Inlägg av rug »

Jag har ett bilprojekt där jag uppdaterat en gammal bil med en modernare motor och växellåda. Tanken är att bilen ska ha kvar orginalinredning och alla analoga mätare. Dessa mätare är elektromekaniska och fungerar inte alls med den nya motorn och databoxen.

Jag har konverterat ett gäng mätare till att drivas med en stepper motor av modell X27.168. Dessa drivs av AX1201728SG som har som input antal steps via puls samt en pin som är hög eller låg beroende på vilket håll motorn ska gå.

Jag har provat att köra dessa mätare med en "CANpico", dvs en Raspberry pico med en CANBUS-modul påbyggd. Jag har sedan skrivit python-kod för att läsa av relevanta värden från CANBUS för att sedan räkna ut hur många pulser som behöver skickas till varje drivare för att ställa mätaren rätt. Det fungerar hyffsat bra på långsamma mätare som temperatur och bränslenivå men jag får inte alls till det för snabbare mätare som vartal eller hastighet. Det blir liksom hackigt i rörelserna. Jag antar att Pico blir lite för upptagen att pulsa output till en drivare och då blir dom andra mätarnas rörelser pausade tills processorn blir ledig att ta tag i nästa. Det är totalt 5 mätare - varvtal, hastighet, bränslenivå, oljetryck och temperatur.

Nu gör jag en nystart på det här!

Vad väljer jag för hårdvara för att läsa av CANBUS på 1Mbit (behöver nog kunna filtreras för det är en hel del data som delas) och styra stepper-drivarna?
Behöver jag flera styrkretsar? Jag tänkte att en pico borde kunna styra 5 mätare men jag kanske tänker fel...
Är det python som är för segt för detta? Behöver jag få till det i C?
Jag har lekt lite med PIO i Pico men får inte riktigt till styrningen av drivarna med detta. Är detta kanske lösningen?
Användarvisningsbild
Icecap
Inlägg: 26150
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Styrenhet av mätare (CANBUS)

Inlägg av Icecap »

Första steg är nog att byta till C. Python är (även där antar jag) ett intepreterat språk o jag gissar på att du förlorar kanske 60% av CPU-kraften på detta.

Sedan kan det vara att ditt program kanske inte är speciellt "strömlinjeformat", man kan hämta något hastighet på det konto också.

Jag hade lagt upp det till att ta de filtrerade data räknat om till position i steg i var deras variabel.
Sedan har man lika många variabler med vad de olika visare står på <nu> och sedan kan en snabb rutin köra igenom o jämföra positioner med vad de ska vara o ge ut pulser där det behövs.
ds77
Inlägg: 2226
Blev medlem: 24 juli 2008, 09:38:07
Ort: småland

Re: Styrenhet av mätare (CANBUS)

Inlägg av ds77 »

Det finns nog mycket att hämta på att optimera i programmet.

Även att byta till c, men fundera på om det är värt tiden jämfört med att ta en pico var för varvtal och hastighet och en gemensam för de långsammare mätarna.
agehall
Inlägg: 427
Blev medlem: 12 augusti 2020, 19:27:54

Re: Styrenhet av mätare (CANBUS)

Inlägg av agehall »

Python har många brister, men så segt är det inte. Interpreterade språk använder ofta C-bibliotek under huven för att interagera med systemet och då blir skillnaden minimal. Min erfarenhet är att interpreterade språk är riktigt bra till prototyping eftersom man kan fokusera mer på datastrukturer än detaljer i HW-kommunikation. Det största problemet med i princip alla interpreterade språk är att de har ett interpretatorlås som gör att bara en tråd i taget kan köra interpreterad kod. Det begränsar rätt kraftigt hur mycket man kan dra nytta av modern hårdvara. Så ett byte till C är väl att rekommendera i något läge, men kanske inte på prototypstadiet.
cittra49
Inlägg: 273
Blev medlem: 29 augusti 2010, 19:58:22

Re: Styrenhet av mätare (CANBUS)

Inlägg av cittra49 »

Kul projekt, vad är det för bil? och vad är det för donatormotor? Kommer följa tråden :D
rug
Inlägg: 12
Blev medlem: 28 augusti 2007, 21:19:31
Ort: Knivsta

Re: Styrenhet av mätare (CANBUS)

Inlägg av rug »

Som ni säger så finns det säkert massor att hämta på optimering av programmet. Jag skulle inte säga att jag är proffs på att koda. Jag tycker dock att jag i python har lyckats få fram en hyffsat strömlinjeformat kod som i alla fall inte pausar eller väntar någonstans. När jag har testat har jag endast testat med en fast hastighet på mätarnas rörelse. Om man tittar i moderna bilar där mätarna också styrs via CAN så rör sig mätarna både mjukt och i olika hastighet beroende på rate-of-change. Detta har jag dock inte börjat titta på alls ännu.

Att filtrera vilka CAN-ID som ska hämtas data ifrån och konvertera till en användbar variabel är inget problem. Att göra detta med 5 datapunkter och i realtid visa dom i sifferform i konsolen år inget problem. Det jag misstänker händer är att när jag sedan lägger till att flytta en mätare och tex skicka 500 pulser med x tid paus mellan pulserna så blir det ett avbrott på 500x tid från att göra annat.

ds77:s förslag med att köra fler picos kan vara intressant. På hundpromenaden funderade jag på om jag skulle ha CANPico för att ta emot och behandla CAN-data. Sedan skulle jag kunna skicka detta till ett par andra picos som sköter pulserandet till stepper. Kanske ha kommunikationen mellan dem via SPI? Skulle man få till att använda båda kärnorna i Picon skulle man i så fall i princip kunna styra varje mätare med en egen cpu-kärna.

Jag bygger varken styrkretsar eller programmerar till vardags så allt detta är lite klurigt, speciellt eftersom det inte bara ska fungera utan fungera effektivt.

@cittra49: Det är en 1971 Fiat 124 Coupé som nu har motor och låda från en 2007 mazda MX5. Har bytt elsystem och har även en ECU från Haltech för motorstyrningen.
rug
Inlägg: 12
Blev medlem: 28 augusti 2007, 21:19:31
Ort: Knivsta

Re: Styrenhet av mätare (CANBUS)

Inlägg av rug »

Nu har jag kommit en bit till på vägen.

Jag kör 2 st atmega 328p (arduino) - en för varvtal och bensinmätare, och en för hastighet, oljetryck och temperatur.
Jag kör med mcp2515 CAN-controller, men även där har jag valt att köra 2st. Detta blev framförallt för att chippet endast har stöd för 6 CAN-id filter. Det är inte bara analoga mätare som behöver data utan även ett par lysdioder i mätarna (CEL, helljus, lågt oljetryck m.m) så det behövs lite fler filter än vad en CAN-controller klarar. I praktiken blir det alltså två lika kretsar på samma kretskort med gemensam strömmatning.

Jag har testat med en Arduino Uno + mcp2515 breakout och jag får mjuk förflyttning av mätarnålarna i både snabb och långsam hastighet. Mycket bättre än Python på Pico! Hittade bra bibliotek för både stepper motorerna (som jag optimerade lite) och för CAN-controllern.

Har beställt hem komponenter så jag kan sätta ihop allt på breadboard och testa i bilen innan jag beställer hem färdiga kretskort :tumupp:
Användarvisningsbild
Klas-Kenny
Inlägg: 11344
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Styrenhet av mätare (CANBUS)

Inlägg av Klas-Kenny »

Måste du ha individuella filter för varje CAN-meddelande?

Brukar gå att hitta något mönster så att du kan maska bort "det mesta", sen finfiltrera i programvara.
Ligger du inte precis på gränsen för vad processorn orkar med, så borde det räcka med en CAN-controller.
rug
Inlägg: 12
Blev medlem: 28 augusti 2007, 21:19:31
Ort: Knivsta

Re: Styrenhet av mätare (CANBUS)

Inlägg av rug »

Klas-Kenny skrev: 8 april 2024, 10:06:12 Måste du ha individuella filter för varje CAN-meddelande?

Brukar gå att hitta något mönster så att du kan maska bort "det mesta", sen finfiltrera i programvara.
Ligger du inte precis på gränsen för vad processorn orkar med, så borde det räcka med en CAN-controller.
Hur sorterar jag då meddelanden mellan de två 328p? Hur kan 2 MCU läsa data från samma CAN-controller?
Användarvisningsbild
Klas-Kenny
Inlägg: 11344
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Styrenhet av mätare (CANBUS)

Inlägg av Klas-Kenny »

Ett sätt vore att koppla ihop de båda processorerna med SPI eller liknande. Och låta den ena skicka över den information som den andra behöver.
Men det är klart, för ett hobbyprojekt där några kronor i komponentkostnad mer eller mindre inte spelar någon roll, kanske det är enklare att kunna köra nästan identisk kod i de två processorerna. Om man inte ser det som en intressant övning att implementera kommunikation emellan processorerna vill säga.

Hade det varit en "riktig" produkt hade man snarare gått på en processor som klarar allt, och även har inbyggd CAN-controller.
rug
Inlägg: 12
Blev medlem: 28 augusti 2007, 21:19:31
Ort: Knivsta

Re: Styrenhet av mätare (CANBUS)

Inlägg av rug »

Jo, det skulle vara fint med att ha allt i samma paket och minska antal komponenter. Har funderat på MCU med fler pinnar och mer kraft men då måste jag också blanda 3.3v- och 5v-komponenter. Det får bli version 2 i så fall :D

Nu vill jag mest få projektet klart för lite bilåkande i sommar!
Skriv svar