CAN och ODB2 i bilen. Några hack.

Här kommer lite info om hur man kan koppla in sig i bilens ODB2-uttag, och i många fall komma vidare in i den mer ”maskin”-relaterade CAN-bussen.
Till att börja med kommer lite info om hur man kan använda en ELM 327 Bluetooth adapter men manuellt, hur man programmerar den och vilka funktioner som finns.
Stora delar av infon kommer från denna site.

 

AVR-gcc och Eclipse

Jag är lite sugen på att gå över till att använda Eclipse som IDE för samtliga project. Både för Windows, Linux, Macos och även för Embedded utveckling. Eclipse ser ut att vara ett ok IDE, och det kan vara enkelt att använda ett och samma IDE, så att man känner igen sig.

Ladda ner Eclipse från deras hemsida och installera:
https://www.eclipse.org/downloads/?

(Old) För att installera Eclipse i Ubuntu:
http://ubuntuhandbook.org/index.php/2016/01/how-to-install-the-latest-eclipse-in-ubuntu-16-04-15-10/

För Linux c++ och för Windows är det inte några problem.
För AVR har jag testat lite med denna:
http://avr-eclipse.sourceforge.net/updatesite

Ser ut att fungera. AVR-gcc behöver vara installerad sedan tidigare.
Vill man installera senaste versionen kan man kolla på:
https://www.lxrobotics.com/setup-avr-gcc-with-eclipse

När det gäller Arduino finns en färdig Eclipse installation för detta. Man kan gå in under Help -> Marketplace och söka efter Arduino. Det finns två spår att välja. Soebere är ett försök att likna Arduino IDE mer, och Eclipse C++ IDE for Arduino 3.0 är skrivet av samma person som skrivit C++ pluginen för Eclipse och liknar mer utveckling i standard C++. Jag har valt C++ spåret för att inte bygga fast mig i Arduino, och för att likna andra typer av CPU:r som kan programmeras med C++.

Det finns även en bra sida för att komma igång med FreeRTOS för AVR.
https://feilipu.me/2011/09/22/freertos-and-libraries-for-avr-atmega/

Jag installerade FreeRTOS från ”Arduino download manager” som finns tillgänglig eter att man installerat ”Eclipse C++ IDE for Arduino 3.0”.

Säker pot box mätning

För att vara på den säkra sidan när man mäter resistansen i en pot-box (”gas”pedalen) måste man också försäkra sig om att den är ansluten och att fordonet inte ”skenar” om det skulle bli något problem.
Pottboxar är som regel 0-ohm (0 acceleration) till 5k (full accceleration).
Mäter man bara spänningsfallet över den, kommer ett fel i form av att ex. en kabel går av till boxen innebära  oändlig resestans. om 5k är fullt blir således oändligt också fullt.
För att undvika detta så får man sätta pot-boxen mitt emellan en spänningsdelare, så att ex. 0 blir 2v  och fullt blir 4v. Då kan man detektera att någonting är fel om någonting går sönder i pot-box slingan.
Kabelbrott (oändlig resistans) skulle ex. ge värden på 0v, vilket inte är möjligt om allting fungerar. Man kan således detektera fel.
Den enda nackdelen som jag kan se är att man får något sämre upplösning på ADC:n som mäter reglaget. Med 10bitars ADC kan man utan problem leva med 30% av upplösningen som då ger mer än 300 värden.

Jag har kollat på lite olika värden. Curtis använder 2k från 5V in i potten, och sedan en 4,7k till GND efter potten. Det ger 2-3,5V. Strömmen genom potten blir till knappt 1/2 till 1mA.

Använder jag i stället 1k och 3,3k ger det 1,8 till 3,8V.

 

CAN modul

Så var det dags att kolla på hur man kommunicerar via CAN.

Första försöket blir med en gammal Lavicel CANUSB kopplad till datorn, och på andra sidan blir det en Arduino Nano med en MCP2515_CAN modul.

Jag tror att CANUSB fungerar direkt i Linux. Jag hade lite problem att få den att fungera i XP, men det har kanske mindre betydelse. Som jag förstår så är den av den gammla typen, med annan UID.

För att få Arduinon att communisera använder jag detta bibliotek.
Jag skall även kolla på Adafruits bibliotek.

 

Boost converter och Regen i controller

När det gäller regen i en PWM DC controller så är detta i sin enklaste form ganska enkelt. I många fall finns det redan där, men är kanske inte optimerat på något sätt. Min ide är att använda regen på ett kontollerat sätt där man kan bestämma hur mycket regen som skall användas. Om man även kan bryta kopplingen till motorn så bör regen-delen gå att återanvända för att ladda batterierna när fordonet är parkerat eller avstängt.

ref:
Controll regen with speed-sensor 
Regen for DC motors
Boost converter with Arduino