elektronika
 
Univerzální palubní počítač biprog JTAG AVR AVR - oprava fuse DIY Audio
|| Palubní počítač pro automobil PP_light

Upozornění: Neručím za kompatibilitu s daným vozem ani za škody vzniklé neodbornou montáží!

Prosím zaměřte svou pozornost na PP_light V2. Tato první verze je již zastaralá.. Ti kdož ji postavili, ať se případně ozvou.. Backportuji některé vylepšení měřicích rutin apod. z V2.

Odlehčená verze PP_light v1

Popis

Palubní počítač je postaven na procesoru Atmega168, který obstarává měření a výpočty. Pro zobrazování je použit levný displej 2x16 znaků firmy Bolymin. Jedná se o displej se standardním hitachi řadičem. Tato verze byla uvolněna i se zdrojovými kody a v tuto chvíli je další vývoj pozastaven na úkor práce na nové verzi, která bude z této verze vycházet. Je určen pro benzínové motory s nepřímým vstřikováním paliva. Jednobod. i vícebod. vstřikování.

Mezi aktuální funkce PP patří:

  • Měření spotřeby
    • aktuální - vždy kalkulována z dat naměřených v 1s periodě. Zobrazena v l/100km. Pokud automobil stojí, pak v l/h.
    • průměrná - kalkulována ze spotřebovaného paliva za aktuální jízdu a z ujetých kilometrů za aktuální jízdu, v l/100km
    • prům. spotřeba za trasu - kalkulována z vyjetého paliva a km za trasu. Trasu nuluje uživatel, tedy dokud ji nevynuluje, stále se ukládá do eeprom
    • celková spotřeba - kalkulována z celkových dat, kalkulace začíná uvedením PP do provozu a lze ji smazat pouze kompletním resetem zařízení
  • Dojezd v km - je vypočítáván na základě stavu nádrže a průměrné spotřeby paliva, udává přibližný dojezd v km
    • Vyjeté palivo za aktuální cestu (od startu motoru) - neukládá se
    • Vyjeté palivo za trasu, tedy sčítá a ukládá do eeprom, dokud uživatel nevyresetuje trasu
  • Ujeté kilometry
    • Ujeté kilometry za aktuální jízdu - nuluje se při startu
    • Ujeté kilometry za trasu - nuluje uživatel
    • Celkové ujeté kilometry - lze je smazat jen resetem zařízení
  • Měření venkovní a vnitřní teploty pomocí připojených teplotních čidel DS18B20
  • Měření napětí palubní sítě
  • Zobrazení aktuálního stavu nádrže, v litrech
  • Další vlastnosti
    • Automatický suspend zařízení, který vypne zařízení pokud není zjištěna žádná interakce s uživatelem a pokud motor neběží a automobil stojí. Pak dojde ke snížení spotřeby na cca 6mA
    • Automatické probuzení zařízení ze suspend stavu, jakmile dojde k nastartování, či jakmile uživatel stiskne tlačítko OK
    • Spotřeba při běhu do 90mA, spotřeba v suspendu do 6mA
    • Ovládání pomocí 4 tlačítek, dvě pro směr a dvě pro OK/ESC
    • Základní konfigurační menu pro přízpůsobení automobilu
    • Ukládání dat v surové podobě, tedy možnost rekalibrace, kdy nedojde k zahození dat, ale pouze přepočtu zobrazených hodnot
  • Menu nastavení
    • Nastavení kalibrace vstřikovače v ccm/min s přesností na desetinu. Seat Arosa např 96,3ccm/min - lze dohledat dle čísla vstřikovače
    • Nastavení počtu válců motoru
    • Nastavení převodové konstanty impulzy/100m - seat arosa cca 395imp/100m
    • Nastavení objemu palivové nádrže v litrech
    • Kalibrace č.1 nádrže - změří se automaticky napětí snímače a zadá ručně aktuální stav nádrže v litrech
    • Kalibrace č.2 nádrže - změří se automaticky napětí snímače a zadá se ručně akt. stav nádrže v litrech - tento musí být vyšší než kalib. konstanta č.1 ! Na základě těchto dvou konstant se proloží přímka pro výpočty
    • Kalibrace nádže v bodech č.3-5
    • Celkový reset PP - dojde ke kompletnímu vymazání eeprom
    • Servisní obrazovka se zobrazením aktuálních hodnot od vstřikovače, čidla km a napětí nádržě

Schemata

Hlavní deska

Schéma je vcelku jednoduché, začneme od zdroje, kde se nachází klasický 7805 stabilizátor, jehož vstup je chráněn diodou vůči prepólování a transilem kvůli přepětí. Ve schématu se nenachází transil na výstupní straně, který já osobně mám ze strany plošného spoje osazen, jedná se o klasický smbj5.0A transil. Tento by mohl zařízení zachránit, jakmile by došlo k odpojení napájení a zároveň by na měř. vstupech bylo napětí, pak by přes ochranné diody vstupů mohlo dojít k zavedení napětí na napájecí rozvody, což by byla rychlá smrt pro MCU.

Měřící část je zapojena přes hradlo NAND, které obsahuje schmit. klopný obvod. Pro měření vstřikovače se využívá generovaná frekvence 50kHz (OC2B), která je přiváděna na hradlo, pokud je zároveň otevřen vstřikovač, je tato frekvence přivedena na vstup 16bit čítače (T1) a tento čítá impulzy generátoru 50kHz. Stav čítače tak odpovídá době otevření vstřikovače. Díky tomuto možná složitému zapojení měření vstřikovače má procesor fůru času pro obsluhu LCD a výpočty. Stačí ,když jednou za sekundu vyzvedne a vynuluje stavy čítačů. Zbylá část hradla je využita u vstupu pro čildo kilometrů v zapojení jakož invertory a přes tyto jsou impulzy počítány 8bit čítačem. Zbylé vstupy jsou analogové a jsou řešeny pouze pomocí odporových děličů, jejichž hodnoty lze ve zdrojových kodech upravovat dle potřeby. Na desce se dále nachází konektory na teplotní čidla DS18B20 u kterých je nutno zapojit +5V, dále datový pin a GND. LCD je vyvedeno přes MLW10 konektor. Protože po tomto konektoru probíhá i programování MCU, dochází k přepínání stavu programování/běh přes jumper, na který se ovšem nesmí zapomínat a vždy ho správně přepojit. Při programování se jumperem spojí pin s RESETem procesoru. Při běhu se pak jumper rozpojí. Připojení tlačítek probíhá přes konektor přímo na piny MCU. Tyto vstupy jsou ve stavu log1 za pomoci interních pullup rezistorů. Tedy tlačítka se zapojují do země, tak aby při stisku dané tlačítko spojilo vstup MCU se zemí.

LCD

LCD je zapojeno v klasickém 4bit modu. Aby mohlo zařízení přejít do stavu power-down, obsahuje LCD destička také PNP tranzistor, který připojuje/odpojuje napájení pro LCD. LCD je záměrně napojeno na SPI rozhraní. To z toho důvodu, aby šlo jednoduše připojit ISP programování a taktéž do budoucna LCD s SPI rozhraním.

Přibližně vyrenderovaná deska za pomoci Eagle3D skriptu

Popis firmware

Aktuální verze firmware 0.2 má přepsánu aritmetiku pro práci s 32bit výpočty. Původní verze potřebovala pro ukládání vstřikovače 64bit proměnnou a výpočty. Toto bylo upraveno použitím 2 32bit proměnných, kde v jedné jsou ukládány impulzy zatímco v druhé jsou ukládány impulzy přímo v minutách. Pro vzorkovací frekvenci 50kHz odpovídá 1 minuta počtu 3*10^6 impulzů. Tato úprava byla zavedena i proto, že se pro kalibraci vstřikovače (tj. převod doby otevření na objemovou jednotku benzínu) se používá jednotka ccm/min, tedy standartní jednotka, která je uváděna u prutoku ventilu (flow rate).

Měření probíhá v 1s periodě, pro kterou je využíván Watchdog timer. Tento má periodu odvozenou od interního RC článku. Tedy nelze čekat přesnost. Tato ovšem nijak nevadí. Nepřesnost se projeví pouze u výpočtu spotřeby za hodinu, která je kalkulována když automobil stojí. Zbylé kalkulace jsou na čase nezávislé. V této 1s periodě jsou vyzvednuta data z čítačů a čítače vynulovány pro další periodu. Vše ostatní probíhá přes polling, tedy volání funkcí v hlavní smyčce v main(). Popis kompletního firmware a knihoven by byl dosti na dlouho. Podotýkám, že firmware má k dnešnímu dni přes 12KB a ne zrovna málo řádků kódu. Předešlá neuvolněná verze s 64bit artimetikou narážela na strop plné flash. Pokud by muselo dojít někdy k návratu k 64bit aritmetice, je vhodnější raději koupit Atmega328 s 32KB flash.

Moje realizace

Krabička pro LCD s tlačítky. Jedná se o U-KM42, která přesně na mm pasuje pro LCD BC1602A YPLEH výrobce Bolymin, zakoupeného u prodejce ECOM. LCD by mělo mít rozšřený teplotní rozsah a také jako jedno z mála pasuje s knihovnami v Eaglu. LCD displeje z GME mají větší PCB a tudíž do krabičky nevlezou..Pokud někdo plánuje v budoucnu stavbu, silně doporučuji pořídit si raději atmega328 s 32KB Flash. Já se ji snažím použít pouze z toho důvodu, že jich mám doma několik po ruce za výhodnou cenu. Zdrojové kódy budou dostupné společně s Makefile souborem, kde bude stačit patřičný typ MCU nadefinovat. Bohužel nelze použít atmega16 či atmega32, protože nepodporují interrupt ze všech pinů a watchdog u nich neumožňuje využití jako interrupt časovač. Tudíž by byly nutné úpravy v programu..

Měření nádrže u automobilů s impulzními odměry

Některé automobily (Seat Arosa, Polo?) neměří plovák nádrže spojitě, ale v krátkých intervalech. V tomto intervalu je potřeba detekovat měření a změřit analogovou hodnotu. Z tohoto důvodu byl na první verzi PP dobastlen komparátor, který cca od 0,2V detekuje vstupní impulz a přivádí impulz v log1 TTL 5V na vstup mikrokontroléru INT0. Pro tuto možnost vznikla v sw počítače volba, kterou je možno povolit měření nádrže přes INT0 pomocí volby #define TANK_IMP_INT v car_meas.h. Pokud je takové měření povoleno, je nutné dodělat komparátor (nejlépe s hysterezí).

Úprava měření nádrže

Ve verzi fw 0.2.3 bylo implementováno měření a kalibrování nádrže ve více bodech. To se uplatní tam, kde není lineární závislost napětí na stavu nádrže v celém rozsahu. Zatím bylo zvoleno 5 měřicích kalibračních bodů, které by měly být využity v celém rozsahu nádrže. Například bod L1 na rezervě, bod L2 na 1/4 nádrže, L3 na 1/2 atd. Nemusí být ale využito hned všech kalibračních bodů. Můžu si například nakalibrovat bod L5 při plné nádrži, poté třeba jen L3 v půlce. Pokud nevyužiji všechny kalibrační body, sw prostě použije to co má a proloží pouze jednu přímku celým rozsahem. Nové kalibrační body umožňují proložení charakteristiky nádrže přímkami po částech tak, jak uživatel bude potřebovat. Algoritmus je velmi jednoduchý, proto je nutné dodržovat základní podmínku kalibrace. Pokud má např L1 konstanta napětí při 5litrech v nádrži, musí mít L2 napětí při vyšším stavu nádrže tj např alespoň 6L. Tedy L1.litry<L2.litry<L3.litry<L4.litry<L5.litry. Pro napětí toto neplatí, tam lze libovolně.

Kompilace

Pro jednoduché zkompilování stačí v adresáři se soubory *.c,*.h a Makefile: make hex
Pro zjištění velikosti vygenerovaného hex pak: make stats
Pro vyčištění adresáře pro novou kompilaci: make clean
Nutno podotknout, že já osobně programuji daný projekt v Codeblocks s kompilátorem gcc-avr verze 4.5.3 v GNU/Linuxu. Za bezproblémovou kompilaci ve Windows neručím. V tomto jsou Windows složitější a je nutno stáhnout winavr balík a doufat, že vše půjde. Aktuální winavr totiž obsahuje starší verzi gcc.

Nastavení propojek

Bývá hlavně pro začátečníka složitou záležitostí a to zejména vzhledem k tomu, že utility typu ponyprog mají komplikované klikátka. Abych předešel omylům, dávám jsem obrázek nastavení ze stránek http://www.engbedded.com/fusecalc/.

Zdrojové kódy jsou uvolněny pod licencí GPL. Jsem autorem většiny zdrojového kódu. Pouze byla použita cizí knihovna pro LCD, která je taktéž uvolněna pod GPL. Dále je použita cizí knihovna pro čekací funkce, o jejíž původu bohužel nic nevím. Pokud se rozhodnete počítač postavit, napište případné postřehy či připomínky.

Ke stažení

All Right Reserved © 2007, Designed by CMG Technologies,                  Luta kontakt: olutera@gmail.com            CNW:Counter