tisdag 10 juli 2012

Elektroniskt växellägesinterface


Vad kan vara bättre en regnig semesterkväll än att få konstruera en elektronisk del till Elkojan. Nördigt, hmmm, ja!
Denna gång är det ett interface för att omvandla en analog signal från en vinkellägesgivare fäst på växellådans växelväljararm till fyra digitala ingångar på elmotorinvertern.

Jag har lite förkärlek till Microchips 8-bitars mikroprocessorer, så ett gammalt demokort med en PIC18F2585 fick duga till detta interface. Det visade sig att det nu finns en gratis utvecklingsmiljö MPLAB-X att ladda ner till Win, MacOS och Linux. Fint!

Underbara MPLABX
Installationen var smärtfri och snart var jag igång med ett "Hello World" exempel kopplat till programmerings- och debug-interfacet PICkit3. Fast det var "BLINK" ett hysteriskt blinkande av en lysdiod på kortet, haha!


Förutom det 28-pinnars demokortet så är det faktiskt inte så många fler komponenter.
En vettig 5V spänningsregulator behövdes, här fick det bli en L387 som lämpar sig väl när det gäller 12V-omvandling i bil-miljö. För att driva utgångarna tänkte jag att en klassisk array driver, ULN2003, funkar nog. 5st 12V lysdioder för att visa växellägena: P, R, N, D och E samt en för att indikera fel (om givaren hoppat loss eller om någon av dess tre anslutningar lossat). Förutom detta sitter det en tryckkontakt för att kunna hoppa in i kalibrerings-mode och lära upp växellägena. Mikroprocessorn har inbygd RC-oscillator, så någon kristall behövs inte. Denna applikation ställer inga högre krav på tidsnoggrannhet.
L387A och ULN2003

Applikationen läser kontinuerligt den analoga spänningen från givaren. Denna är mellan 0,5 och 4,5V för 90grader rotation. Om spänningen är utanför dessa gränser tänds en felindikering på interfacet och N (Neutral) väljs som aktiv växel. Mellan P och E är det 70grader, vilket borde fungera att fånga upp med givaren.
Kalibreringsläget kommer man in i om en knapp på interfacet hålls inne samtidigt som tändningen slås på. Lysdioderna blinkar för att visa kalibrerings-mode och sen samlas värden in för P-läget följt av de andra lägena med ett par sekunders mellanrum. Tanken är att "jucka"lite lätt med växelväljaren i varje läge för att hitta min/max positionen. Fyra värden(positioner) mellan de verkliga växellägena sparas sen undan i EEPROM som nivåer för lägesdetekteringen.
Skärmdump från kodandet av interfacemjukvaran

 Mer om elektroniken och test av interfacet kommer...




2 kommentarer:

  1. Hmmm, innebær detta att du inte får någon møjlighet att kontrollera giltigheten av din læsta vinkel? Kan ju ge problem med att den hoppar i væxel från neutral, eller går till back från framåt o.s.v. De fyra brytarna du førsøker ersætta ger ju ett visst skydd i form av redundans.
    Du kanske bør lægga till någon form av kontroll att det bara kan ændra ett steg i taget i alla fall, så førhindrar du ju det ena felet?

    SvaraRadera
  2. Bra kommentar Björn, som alltid.
    Jag implementerar en monitor som kollar att ett växelläge ändra i taget.

    SvaraRadera

kommentera