donderdag 22 april 2021

Load dumps en spanningspieken

Het is één ding om elektronica werkend te krijgen op je bureau onder ideale omstandigheden, maar het is wat anders om gevoelige elektronica in de vuile omgeving van een auto stabiel werkend te houden. "Waarom stop je dan elektronica in een Burton?" hoor ik je denken. Tja, da's een goede vraag. Gewoon omdat het kan... maar vooral ook omdat het ook een van mijn - veel te grote verzameling - hobby's is. Dus het gaat gebeuren, hoe dan ook. Een van de grootste uitdagingen is de voedingsspanning van al die kastjes die ik in de Burton stop. De boordspanning van een auto heeft te maken met nogal wat uitdagingen als het gaat om stabiliteit. Zomaar een lijstje:

  • Load Dumps. Wanneer de dynamo lekker de accu aan het laden is en de verbinding met de accu verbreekt om wat voor reden plotseling, dan moet de dynamo nog wat vermogen kwijt wat opgeslagen zit in zijn windingen. Dit zorgt voor de zogenaamde Load Dumps die kunnen resulteren in behoorlijk hoge spanningspieken die ook nog eens enkele honderden milliseconden kunnen duren.
  • Ontstekingspieken. De bobine is ook zo'n inductieve last die voor de nodige vervuiling zorgt op het boordnet. Elke vonk richting de bougies zorgt ook voor een piek(je) in het laagspanningsdeel van de bobine.
  • Starten. De accu krijgt behoorlijk op zijn donder als de motor gestart wordt. Zeker als het koud is. De spanning kan - vooral in de eerste milliseconden - zakken tot onder de zes volt.
Om Load Dumps te verwerken moet het vermogen 'afgevoerd' worden en de spanningspiek afgekapt. Hiervoor kunnen TVS-diodes ingezet worden. TVS staat voor Transient Voltage Suppressor. Google Translate maakt hiervan "voorbijgaande spanningsonderdrukker" en dat is best een prima beschrijving van wat dat ding doet.

TVS-diode

Je hebt bidirectionele en unidirectionele TVS-diodes. Maar wat ik gelezen heb is het niet zo nuttig om de unidirectionele variant te kiezen omdat in een auto nooit sprake is van een negatieve spanning. Er zijn natuurlijk weer honderdduizend verschillende types, maar de variant die ik gekozen heb is 1.5KE22A van Littelfuse. Deze kapt de spanning af net onder de 20 volt. Dat klinkt vrij hoog, maar er moet wat marge zitten tussen de 'normale' laadspanning en het moment dat de TVS-diode gaat geleiden. De laadspanning kan tot net onder de 15 volt oplopen, dus die extra 5 volt is geen overbodige luxe.

Ná de TVS-diode komt een DC-DC-converter die een groot bereik aan ingangsspanningen accepteert en hier een nette 12 volt van maakt. Deze moet dus om kunnen gaan met een ingangsspanning van 20 volt. 

DC-DC-converter

8..40V ingang, 10A, 12V uitgang.

120 Watt zou voldoende moeten zijn om alle elektronica te voeden. De bovengrens wordt dus netjes beveiligd door de TVS-diode, de ondergrens van 8 volt is misschien nog wat hoog bij een koude start. Daar zou de accuspanning onder kunnen zakken. Of dit in de praktijk echt een probleem is, vraag ik mij af. Waarschijnlijk rijd ik altijd als het lekker weer is en de accu zal tussendoor aan een druppellader liggen en blijft dus mooi in conditie. De stabiele uitgang van 12 volt wordt trouwens nog teruggebracht naar 5 volt als voeding voor de microcontrollers en de CAN-bus. Een soort van tweetrapsraket.

Galvanisch gescheiden DC-DC-converter.


De DC-DC-blokjes scheiden de ingaande en de uitgaande spanning galvanisch. Zo zal de voeding van de microcontrollers en de CAN-bus geïsoleerd worden van het boordnet. De uitgangen van de microcontrollers worden al beveiligd met optocouplers, zie eerdere berichten.

Door vóór zo'n blokje een diode en een dikke condensator te plaatsen kan de spanning trouwens wel even op pijl gehouden worden. Sowieso wel een goed idee om ook een dikke diode in te zetten om het geheel te beschermen tegen het verkeerdom aansluiten van de voedingsspanning.

Dikke diode in TO220 behuizing


We zullen zien of het gaat lukken. Tot nu toe is het allemaal nog theorie. Binnenkort maar eens wat testjes doen. Mocht het niet werken, dan lossen we het gewoon op hè. Net als met alle andere dingen van de Burton.

maandag 12 april 2021

RIO, maar dan niet in Brazilië

Langzamerhand beginnen de onderdelen van de elektrische installatie vorm te krijgen. Eerder al het multifunctionele display, in dit bericht de RIO. Hier niet een badplaats in Brazilië, maar een afkorting die in het vakgebied Industriële Automatisering gebruikt wordt voor Remote I/O. Vaak een input/output-module die op een veldbus aangesloten zit en op afstand van een centrale besturingscomputer geplaatst wordt. In de automobielindustrie wordt ook uitgebreid gebruik gemaakt van veldbussen met op afstand geplaatste modules voor bediening en aansturing. De de-facto veldbus in auto's is de CAN-bus, hoewel er nieuwe ontwikkelingen zijn.

In de Burton komen enkele RIO-boxjes die allemaal op de CAN-bus aangesloten worden. Hieronder een overzicht van het geheel:

CAN-bus layout

De verschillende afkortingen staan voor:

  • LV: linksvoor
  • RV: rechtsvoor
  • MK: (onder de) motorkap
  • MD: multifunctioneel display
  • DB: dashboard
  • LA: linksachter
  • RA: rechtsachter
De LV, RV, LA en RA-boxjes zijn bedoeld om de lampen in de hoeken van de auto aan te sturen en krijgen precies dezelfde opzet. Vier mosfet-schakelingen voor de aansturing van deze relatief grote stroomverbruikers. De schakeling uit het vorige bericht wordt in elk boxje dus vier keer uitgevoerd. De boxjes zijn van het type 1590B, aluminium behuizingen die meestal gebruikt worden voor effectapparaatjes van elektrische gitaren (stompbox). De gesloten metalen behuizing zorgt voor een goede afscherming van stoorsignalen. Ze zijn niet heel groot, dus het wordt een uitdaging om alles er ingeprakt te krijgen. Met alles bedoel ik:

De onderdelen van de RIO

De microcontroller - niet onbelangrijk - staat nog niet eens op de foto. Ook de bedrading voor de voeding en de vier uitgangen (lampen) staat er hierboven niet bij. Het doosje waar dit alles in moet heeft een buitenafmeting van 112mm x 60.5mm x 31mm.

1590B stompbox

Het printje heeft doorgemetaliseerde gaatjes. Erg fijn om mee te werken. De microcontroller DevKit heeft twee rijen pins en wordt gemonteerd op pin headers.

De ESP32 DevKit met pin header

De pin headers worden als eerste geplaatst zodat de plek van de uC vast ligt. De rest van de componenten is afhankelijk van die positie.

Pin headers gesoldeerd


De optocouplers


Pull-up en -down weerstanden voor WhoAmI

Elke microcontroller krijgt hetzelfde softwareprogramma en detecteert op basis van drie digitale ingangen wat zijn functie is. Met drie ingangen kun je 8 verschillende combinaties van nullen en enen bedenken. De drie weerstanden op bovenstaand plaatje bepalen deze combinatie. Ze zijn hier trouwens nog niet aan nul of 3,3 volt verbonden. De identificatiecode op deze drie ingangen wordt het enige verschil tussen de vier RIO-boxjes.

1k weerstanden tussen uC en optocoupler

Nog vier weerstanden vormen de verbinding tussen de outputs van de microcontroller en de ingangen van vier optocouplers. De andere kant van de ingangen van de optocouplers worden gezamenlijk aan de digitale ground gesoldeerd:

Digitale ground


De vier optocouplers vormen de galvanische scheiding tussen de schone 5 volt voeding van de microcontroller en de 'vuile' 12 volt voeding (accu) van de lampen.

De 10k-weerstanden zijn geplaatst.


De 200 ohm weerstanden naar de gate van de mosfet

De mosfets zitten op bovenstaande foto tijdelijk bevestigd met boutjes door het koellichaam. Het koellichaam van de mosfet zit intern verbonden met de drain. Da's mooi, want dan is er een mooi groot metalen vlak waaraan de bedrading naar de lamp bevestigd kan worden. De mosfets zelf zitten aan de onderkant van de print. Dat komt vanwege de beperkte ruimte in de behuizing beter uit.

De bedrading zit gesoldeerd.

Aan de bovenkant van de print zit de source van elke mosfet verbonden met de nul van de accuspanning. Aangezien hier de stroom van alle vier de mosfets verzameld wordt, volstaat een dun printspoortje niet. Een stukje massief koperdraad van 2,5mm2 is hier een beter idee.

Stukje koperdraad als bus bar.

De CAN-bus I/O moet nog omgezet worden van de RX-TX-signalen van de microcontroller (0..3,3 volt) naar de elektrische spanningen op de CAN-bus zelf; de zogenaamde CAN-High en CAN-Low-signalen. Hiervoor wordt een klein interface-bordje gebruikt gebaseerd op de CAN-bus transceiver chip TJA1050 van NXP.

CAN-bus interface met en...

Op dit bordje zit standaard een 120 ohm weerstand gesoldeerd (rechtsboven op de foto) om de CAN-bus af te sluiten. Alleen op de eind-nodes (LV en RA) van de CAN-bus moeten deze aanwezig zijn. Voor alle tussenliggende nodes moet deze weerstand verwijderd worden. Zo dus:

...zonder afsluitweerstand.

Het transceiver-bordje werkt op 5 volt. De microcontroller-I/O werkt echter op 3,3 volt. Het bordje werkt prima met een 3,3 volt-signaal op de TX-ingang. Echter de microcontroller vindt 5 volt op zijn RX-ingang niet zo fijn. Met een spanningsdeler bestaande uit twee weerstanden is dit probleem op te lossen.

Bijna klaar.


Linksboven op de print zit nog een aansluiting voor een blauwe led waarmee communicatiesignalen op de CAN-bus getoond worden. Dit ledje zal aan de buitenkant van de behuizing zichtbaar zijn. Onder op de print zit een printkroonsteen voor de verbinding met de CAN-bus-kabel die door de auto loopt.

Alles op zijn plek.

In een volgende post komt het aluminium kastje zelf aan bod.

zondag 21 maart 2021

Relais, dus niet.

In het vorige bericht schrijf ik over een alternatief voor het gebruik van een relais om grote (stroom-)gebruikers te schakelen in de Burton. Inmiddels heb ik een testschakeling opgebouwd rond een IRLB8721 N-channel mosfet (datasheet). Deze heeft een RDS(on)-weerstand van minder dan 0.009 ohm en kan meer dan 60 ampère schakelen. Allemaal volgens de datasheet en onder bepaalde testvoorwaarden. De "L" in het typenummer geeft aan dat het hier om een "Logic"-type gaat. Deze mosfets schakelen bij een wat lagere spanning op de gate al volledig open. Precies wat je wilt. Als de mosfet namelijk niet helemaal open gaat, dissipeert hij een hoop vermogen en wordt hij erg heet. Tijd om deze chip eens aan een eigen test te onderwerpen.

Ik heb nog een pittige accu liggen (62Ah) en vast ook nog wel ergens een H4-lamp o.i.d. Als deze maar ongeveer 55 watt opneemt. Er zou dan ongeveer 55 / 12 = 4,58 ampère stroom gaan lopen. Ver beneden het maximum van de mosfet. Bij een weerstand van 9 milli-ohm ontstaat ongeveer een spanningsval van 4,58 x 0.009 = 41 millivolt over de mosfet. Meten is weten, dus de volgende schakeling is gebouwd:

Optocoupler en Mosfet (versie 2)


De weerstand van 1k zorgt ervoor dat de uitgang van de microcontroller een niet te grote stroom hoeft te leveren. De uitgang van een ESP32 kan ongeveer 12 milli-ampère leveren bij 3.3 volt. De weerstand beperkt de stroom tot minder dan 3 milli-ampère. Da's nog wel genoeg om de optocoupler open te sturen.

De PC817 optocoupler ontkoppelt de stroomkring van de microcontroller van de stroomkring van de mosfet. Hier een weerstand van 10k (bedankt voor de tip Peter). Enerzijds om de stroom door de optocoupler te beperken en anderzijds zorgt deze ervoor dat de gate-ingang van de mosfet aan de nul gelegd wordt als deze niet aangestuurd wordt. Zo schakelt hij netjes uit. De 200 ohm weerstand beperkt de stroom naar de gate van de mosfet tijdens het schakelen. Aan de ingang heeft deze een condensator die op- en ontladen wordt. De weerstand zorgt dat dit een beetje met beleid gebeurt.


De Mosfet en de stroomgebruiker

Voor de zekerheid maar wat krimpkousjes gebruikt voor de test. Kortsluiting is het laatst wat je wilt met zo'n potente accu. De rest van de schakeling zit op een breadboard.

De volgende waarden zijn gemeten:

  • Stroom door de lamp en de mosfet: 4,6 ampère.
  • De spanning tussen drain en collector: 41,3 millivolt.
Dat komt verbazingwekkend goed overeen met de verwachte waardes op basis van de datasheet. De gemeten RDS(on)-weerstand is dus 41,3 / 4,6 = 8,98 milli-ohm. Het gedissipeerde vermogen van de mosfet is ongeveer 190 milliwatt. Volgens het datablad loopt de temperatuur van de mosfet met 2,3 graad per watt op, dus bij 0,2 watt is dit minder dan een halve graad. Dat is ook wat ik ervaar als ik de mosfet aanraak. Ik voel nauwelijks een temperatuurtoename. Een heatsink is niet nodig.

Bemoedigende resultaten. Het verlies in spanning is ook zo gering dat ik niet verwacht dat er een merkbaar verlies in lichtopbrengst zal zijn. Een te lange of dunne draad naar de koplampen heeft meer effect.

Dit gaat hem worden.

maandag 15 maart 2021

Relais of toch niet...

Relais worden in de automobielindustrie uitgebreid toegepast. In principe worden relais voor twee redenen ingezet:

  1. Het schakelen van (relatief) hoge stromen.
  2. Het galvanisch scheiden van circuits.
In de Eend zit volgens mij geen enkel relais. Of, jawel eentje, of eigenlijk zelfs twee. Waar dan? Dat vertel ik aan het eind van dit bericht (mocht je niet weten welke ik bedoel). Heeft een 2CV dan geen relais nodig? Zijn de redenen om relais toe te passen niet van toepassing op de Eend? Zou kunnen; de 2CV wijkt wel op meer onderdelen af van een gemiddelde andere auto.

Een typisch auto-relais


Ook in een 2CV worden relatief hoge stromen geschakeld. Maar dan wel lekker zonder relais. Dat betekent dat de hoge stroom geschakeld wordt met de - jawel - schakelaar. Maar om hoeveel stroom gaat het dan? Een korte rekensom behorende bij het inschakelen van de verlichting:
  • 2 x koplampen à 55 watt
  • 2 x parkeerlicht à 5 watt
  • 2 x achterlicht à 5 watt
Minimaal 130 watt. Dat zeg ik omdat er samen met de verlichting meestal nog wel wat extra gebruikers geschakeld worden. Dashboardlampjes, enz... Hoe dan ook, 130 watt betekent al snel 10 ampère en dat wordt dus geschakeld met het pookje aan het stuur. Bij mij werd die schakelaar ook wel eens een beetje warm. Als de schakelaar een ietsje overgangsweerstand heeft - zeg een tiende ohm of zo - dan dissipeert de schakelaar al snel 10 watt bij 10 ampère. Dan wordt ie wel heet...

Een relais kan hierbij helpen. Met de schakelaar op het dashboard schakel je slechts de relatief kleine stroom om het relais te bekrachtigen. Het relais schakelt vervolgens de grote gebruiker(s) in.

https://www.genius-electrics.nl/


Dat galvanisch scheiden klinkt trouwens leuk, maar als de voeding of massa van de dashboardschakelaar dezelfde is als die van de verbruiker, heeft dat weinig zin. Wil je galvanisch scheiden, dan moeten ook de voedingen galvanisch gescheiden zijn (wat meestal niet het geval is). In een 2CV heeft galvanisch scheiden ook niet zoveel nut. Er zijn geen apparaten die hier veel baat bij hebben.

Oké, dus we gaan overal maar relais tussen prakken? Dat kan, maar er is nog een andere mogelijkheid. Omdat de stroomgebruikers in mijn Burton via een microcontroller aangestuurd worden, kan ik sowieso niets rechtstreeks aansluiten. Een microcontroller kan immers maar enkele milli-ampères uitsturen per output. Om een gebruiker aan te kunnen sturen (ook een relais) is het nodig om eerst een 'versterker' te plaatsen. Dat kan een schakeltransistor zijn, of een darlington, of - tegenwoordig eigenlijk wel standaard - een mosfet.


Mosfets hebben als belangrijk voordeel t.o.v. andere transistoren dat ze een erg lage weerstand hebben als ze ingeschakeld zijn. Ze kunnen relatief hoge stromen schakelen zonder al te warm te worden (en dus energie te verspillen). Misschien is het wel mogelijk om gebruikers te schakelen zónder tussenkomst van een relais... Echter, bij het gebruik van een microcontroller is galvanisch scheiden eigenlijk een must. De boordspanning van een auto kan nog wel eens wat piekjes vertonen (understatement), genoeg om de microcontroller blijvend te beschadigen. Toch maar een relais dan? Niet zo snel. Galvanisch scheiden kan ook met een opto-coupler. Da's sowieso een verstandig besluit. Een gescheiden voeding ook, dus die gaat er komen. De microcontroller en ingaande kant van de optocoupler op de schone voeding, de uitgaande kant en de mosfet op de 'vuile' voeding (het boordnet).

De mosfet die ik op het oog heb is de IRLB8721. Een N-channel mosfet met een lage inschakelspanning en een On-weerstand van minder dan 0,01 ohm. Als opto-coupler kies ik voor de PC817. Binnenkort maar eens wat tests doen. Ik meld mij weer met de resultaten.


Dan nog even mijn antwoord op de vraag waar in de 2CV die relais te vinden zijn. De eerste is het startrelais, ook wel de solenoid genoemd. Da's een relais met contacten waar je U tegen zegt. Dit relais moet dan ook de stroom door de startmotor kunnen schakelen. Dan moet je denken aan een grootte orde van 100 ampère. Het tweede relais is een beetje flauw, maar ik dacht aan het knipperrelais. Aan het startrelais ontkom ik niet, maar een knipperrelais gaat er in mijn Burton niet komen.

donderdag 31 december 2020

Multifunctioneel display - De modules

Op het dashboard van de Burton komt maar één 'teller' (lees: meter, klok). Huh, één teller hoor ik je denken... Da's best weinig. Klopt! De meeste Burtons hebben juist veel metertjes op het dashboard. Zelfs zoveel dat er een bijrijder nodig is om ze allemaal uit te lezen 😉. Hartstikke mooi, maar bij mij dus maar eentje en daar moet dan ook best wel wat info op verschijnen. In het vorige bericht staat een lijstje. In datzelfde bericht staan ook enkele onderdelen van het display genoemd. Die wil ik in dit bericht de revue laten passeren.


1: Primair display

In het midden van het display komen vier 7-segmentdisplays. Hierop wordt normaliter de snelheid gepresenteerd. Nu heb je bij de Burton geen vier cijfers nodig om de snelheid te laten zien. Sterker nog, meestal zullen twee cijfers voldoende zijn. Waarom dan toch vier cijfers? Twee redenen: (1) omdat een snelheid met twee cijfers dan netjes in het midden staat en (2) dan kan ik er eventueel ook nog het toerental op tonen. Bijvoorbeeld als de Burton in de sport-mode staat 😂.

De 7-segmentdisplays worden met een TM1637 aangestuurd. De TM1637 stuurt de displays gemultiplext aan. De vier displays komen op een gaatjesprint, eentje met van die lange banen (strip board). Altijd handig om dit van tevoren even uit te tekenen.

Strip Board in DIYLC

De pootjes van de TM1637 zijn op een handige manier ingedeeld. Alle segmentaansturingen zitten aan een kant. Daar is vast over nagedacht. De displays, het IC en de weerstanden komen aan de bovenkant van de gaatjesprint. De verbindingen aan de onderkant. Even scherp blijven bij het solderen. Het is niet de eerste keer dat ik rechts/links of boven/onder door elkaar haal...

Soldeerzijde

Later spuit ik nog wat plastic spray op de soldeerzijde, maar wel pas als ik zeker weet dat ik er niet meer met de soldeerbout bij hoef.

Componentzijde


De 7-segmentdisplays zijn nu nog voorzien van een beschermende folie. Die haal ik er pas op het laatste moment vanaf.


2: Secundair display

Naast de vier 7-segmentsdisplays van hierboven komt er nog een rijtje 7-segmentdisplays in het apparaat. Zes stuks van een kleiner formaat. Hierop kan de kilometerteller, de tripmeter, het toerental of nog iets anders getoond worden. Misschien wel twee dingen gelijktijdig. Software is geduldig...


Omdat deze module wat minder ruimte krijgt (zie verderop), wordt de TM1637 dwars geplaatst. De TM1637 kan maximaal zes 7-segmentdisplays aansturen. Er zitten drie van die kleine cijfers in één component gestopt (zie foto). Wel even rekening houden met de aansluitmogelijkheid van de 7-segmentdisplays. Je hebt ze in common-anode en common-kathode. In eerste instantie wilde ik ze met een schuifregister aansturen, totdat ik de - in mijn ogen veel gemakkelijkere - TM1637 tegen kwam. En wat denk je, ik had natuurlijk de verkeerde type displays in huis.

Oh, de module op zijn kop.


3: OLED-module

Om de flexibiliteit van het geheel te vergroten stop ik nog twee kleine OLED-displays in het apparaat. Deze zijn met een tweedraads-bus (I²C) aan te sturen en zijn goed te lezen in direct zonlicht. Ze sturen per pixel namelijk actief licht uit, i.p.v. de achtergrondverlichting bij TFT's enz. De helderheid is instelbaar, maar wel beperkt. Beide displays maken gebruik van dezelfde I²C-bus, dus de flexibiliteit gaat niet ten koste van uitgangen op de microcontroller. Wel wordt de software een stukje complexer. Omdat ik gebruik maak van het development framework van Espressif (de maker van de ESP32-chip) en niet van het afgeleide Arduino-framework, heb ik veel minder bibliotheken ter beschikking.

Twee kleine OLED-display's

De OLED-displays hebben een resolutie van 128 x 64 pixels. Hier valt weinig aan te solderen, omdat ze al op een klein printje zitten met een I²C-interface. Kwestie van aansluiten dus. Er moet alleen een klein SMD-weerstandje omgesoldeerd worden op één van de twee displays. Anders zouden ze op hetzelfde I²C-adres staan. Aangezien ze op dezelfde bus zitten moet het adres verschillend zijn. De meeste displays staan standaard op adres 78(hex), maar kunnen door deze handeling ook op 7A(hex) gezet worden.


4. Indicatielampjes

De vierde module van het multifunctionele display is een stick met acht neopixels. De neopixels kunnen onafhankelijk van elkaar en in alle kleuren van de regenboog aangestuurd worden. De helderheid is groot en dus zijn de neopixels ideaal voor het gebruik als storingslampjes en andersoortige indicatoren. De aansturing van de neopixels gebeurt met één enkele datalijn. De timing is echter behoorlijk kritisch en kan per type neopixel of fabrikant verschillend zijn. Een tijdje terug heb ik hier al eens wat over geschreven.

Acht neopixels op een stick...

De gaatjes in de stick zijn erg klein. Op de foto is te zien dat een klein stukje gaatjesprint gebruikt wordt voor de bevestiging van deze module in het uiteindelijke display.


De vier modules zijn los van elkaar gefabriceerd en niet op één enkele gaatjesprint om de eenvoudige reden dat de afzonderlijke displays verschillende diktes hebben. Ze moeten uiteindelijk op gelijke hoogte uitkomen. Met de inbusboutjes kan per module de hoogte ingesteld worden. Uiteindelijk wordt het geheel op een plaatje Trespa samengesteld.

Alle modules samengesteld

Hoogte van de modules afzonderlijk instelbaar

Het plaatje Trespa wordt uiteindelijk met wat stukjes aluminium hoekprofiel achter het dashboard bevestigd. Aan de voorzijde komt een gedraaide aluminium ring en donker plexiglas. De microcontroller die het geheel bestuurt komt in een klein spuitgietkastje aan de achterkant van het plaatje Trespa. Hierover in volgende berichten meer.

dinsdag 29 december 2020

Multifunctioneel display - Intro

In eerdere berichten is al te lezen dat onze Burton voorzien gaat worden van wat elektronische componenten. Niet zozeer om de motor aan te sturen, maar vooral voor de lampen en het dashboard. Het dashboard gaat trouwens een vrij minimalistisch uiterlijk krijgen. Weinig klokken, meters en lampjes. Hoewel... vooral weinig onderdelen. Alle "klokken, meters en lampjes" wil ik verzamelen in één enkel multifunctioneel apparaat/display. Nu heb ik overwogen om een centrale tablet te plaatsen, vergelijkbaar met wat in moderne auto's de de facto standaard lijkt te worden. Maar dat heeft in een open auto wel wat nadelen (regen, diefstal, leesbaarheid in direct zonlicht). Hoewel al die nadelen oplosbaar zijn heb ik toch gekozen voor het ontwikkelen van een eigen multifunctioneel display. Het wordt een rond display dat een plekje krijgt ergens midden op het dashboard van de Burton. De volgende bedieningen en uitlezingen worden onderdeel van dit display:

  • Snelheidsmeter
  • Toerental
  • Kilometerstand totaal
  • Tripmeter
  • Tijd
  • Brandstofmeter
  • Kachelbediening
  • Interval ruitenwisser
  • Lampjes voor knipper- en alarmlicht
  • Lampje dimlicht
  • Lampje groot licht
  • Lampje oliedruk
  • Lampje reservoir remolie
  • Lampje handrem
  • Lampje choke
  • Lampje accuspanning
  • Lampje brandstof
Mogelijk dat er in de toekomst nog wat bijkomt, zoals een oliedrukmeter, olietemperatuurmeter, mistlampindicator, accuspanningsmeter, enz... Maar voorlopig is bovenstaand lijstje lang genoeg 😉. Dit universele display wordt aangesloten op de CAN-bus. Onder het dashboard zal het qua bekabeling dus wel rustig blijven.

Om alle data te presenteren stop ik de volgende onderdelen in het display:
  • 4 stuks 7-segmentdisplay (groot) - voor de snelheidsmeter
  • 6 stuks 7-segmentdisplay (klein) - voor kilometerstand/tripmeter
  • 2 stuks OLED-display (klein) - diverse instellingen en uitlezingen
  • 1 stuks 8-neopixel stick - voor alle lampjes
De aansturing van de 7-segmentdisplay's gebeurt via de TM1637-interface. De OLED-displays worden via I²C aangestuurd. De neopixels hebben een één-draads aansluiting op de microcontroller. Alles bijeen niet meer dan zeven data/clock-lijntjes.

De bediening van dit alles wil ik uitvoeren met één enkele rotary encoder met drukknop. Hiervoor moet nog een aansluiting en driver bedacht worden. Dat klinkt gemakkelijker dan het is.

Rotary Encoder EC11

Een rotary encoder van het type EC11 heeft een A- en een B-aansluiting die bij het draaien aan de knop hoog en laag worden. Het A-signaal is een halve pulsbreedte verschoven t.o.v. het B-signaal. De stippellijnen in onderstaand schema geven de voelbare 'rustposities' van de knop aan. De encoder die ik gebruik heeft 20 van die rustposities per omwenteling.

Pulstreintjes

Door de faseverschuiving tussen A en B is het mogelijk om het roteren zelf én de rotatierichting te bepalen. Door bij de opgaande flank van A de status van B te bekijken weet je of je rechts- of linksom aan het draaien bent. De meeste eenvoudige rotary encoders maken gebruik van sleepcontacten en die introduceren wel wat uitdagingen. Ze slaan wel eens een vlakje over als te snel gedraaid wordt (de maximum rotatiesnelheid is vaak vastgelegd in de datasheet). Verder zorgen ze net als andere mechanische schakelaars voor contactdender.

Als de microcontroller niets anders te doen zou hebben, zou je in een oneindige loop de ingangen A en B uit kunnen lezen en hier een stukje software voor kunnen schrijven. Alleen heeft de microcontroller al best wat taken uit te voeren, dus dat uitlezen wordt anders opgelost.

Een plausibele oplossing zou het gebruik van interrupts zijn. De ESP32 heeft echter nog een andere mogelijkheid: de Pulse Counter. Dit is een 16-bits high speed counter, uitgevoerd in de hardware van de chip, speciaal bedoeld om op- en/of neergaande flanken van een digitale input te tellen. De ESP32 bezit acht van deze counter units met ieder twee channels waarbij elk channel ook nog 'bestuurd' kan worden door een tweede digitale input. En die mogelijkheid is ideaal voor de toepassing met een rotary encoder, want hiermee kan bepaald worden of de counter op of af moet tellen. Verder is het mogelijk om een 'filter' op de ingang te configureren waarmee het probleem van contactdender opgelost wordt. De mogelijkheden van de ESP32 blijven me verbazen.


Configuratie Pulse Counter Unit

Met de .neg_mode en de .pos_mode wordt geconfigureerd dat alleen op de opgaande flank van A geteld wordt. Met de .hctrl_mode en .lctrl_mode wordt geconfigureerd wat er gebeurt als signaal B hoog of laag is tijdens de opgaande flank van A: optellen of aftellen. Na het configureren en activeren van de counter doet de ESP32 zelfstandig zijn werk. De counter hoeft alleen nog maar af en toe door de software uitgelezen te worden.

De knop-functie van de rotary encoder wordt trouwens wel met een interrupt opgelost. Het gebruik van interrupts in combinatie met een task switching operating system als FreeRTOS levert nog wel een extra uitdaging op. De interrupt hoort namelijk bij een specifieke taak. Wat als die taak net niet aan de beurt is, of wat als er net geswitcht zou moeten worden als de interrupt service routine bezig is? Verder is de knop-functie van de rotary encoder een mechanische schakelaar en veroorzaakt dus ook contactdender. Hier worden - vaker dan gewenst - interrupts op gegenereerd. Allemaal zaken om rekening mee te houden.

Inmiddels begint het allemaal een beetje vorm te krijgen en zijn de eerste stappen in de richting van het multifunctionele display gezet. Ook hier zijn de stapjes klein en duren ze altijd weer langer dan gedacht, maar daarom is het ook een hobby. Enkele sfeerfoto's:


Testopstelling op breadboard


De twee OLED's achter een stukje donker plexiglas


Alle display-elementen komen achter donker plexiglas. Zo krijgt het geheel een rustig(er) uiterlijk. In een volgend bericht laat ik zien hoe het geheel samengesteld wordt. Daar moet ik trouwens nog wel een ei over leggen.

zondag 18 oktober 2020

Tankdop en Vulpijp

De kunststof brandstoftank hangt al een jaartje of twee achter de achteras. Nu de koets en het spatbord op hun plek zitten kan de vulpijp en de tankdop gemonteerd worden. De vulpijp steekt door de zijkant van de body - hier is al een gat voor aanwezig. Verder moet er nog een gat in het spatbord gezaagd worden. Hiervoor kun je de rvs vulpijp gebruiken als mal.


De onderdelen.

Op bovenstaande foto mist nog de rubberen mof om de rvs vulpijp aan de kunststof tank te verbinden. In eerste instantie dacht ik trouwens dat de flens van de vulpijp (bovenaan op de foto) ónder het spatbord zou komen. Maar ik heb er nog even de handleiding op nageslagen en da's maar goed ook.


Uit de handleiding van Burton Car Company.

De flens van de tankopening moet natuurlijk goed afsluiten op de flens van de vulpijp. Door de vulpijp van boven in het gat te steken ligt alles echter wel wat hoog bovenop het spatbord en dat vind ik minder fraai. De diameter van de flens van de vulpijp is enkele millimeters kleiner dan die van de vulopening. Wat nu als ik de vulpijp wat laat zakken in het spatbord door wat van de gelcoat weg te frezen. Zo gezegd...


Héél voorzichtig met de Dremel.




Dit is nog niet voldoende. De flens van de vulpijp is namelijk verre van vlak. Maar dat is met een hamer en aanbeeld en een hoop geduld wel beter te krijgen. Het blanke laminaat is nog gegrond en gelakt zodat hier minder snel vocht intrekt. De passing blijft echter een dingetje. Als straks met bouten spanning gezet wordt op het laminaat, is er een kans dat de gelcoat gaat barsten. Om die kans te verminderen heb ik in de gefreesde ruimte een slurfje Sikaflex gespoten, hier een half boterhamzakje overheen gelegd en de vulpijp tijdelijk met wat boutjes vastgezet. De ruimte tussen de flens en het laminaat wordt nu opgevuld met de Sikaflex. Het plastic zorgt ervoor dat de flens niet vastgelijmd wordt.


Het resultaat na enkele dagen drogen.


De passing is nu goed.


Nu kan de vulpijp definitief bevestigd worden. Om de druk van de bouten op het laminaat te verdelen heb ik gebruik gemaakt van carrosserieringen. Die passen echter niet zonder hier een stuk vanaf te slijpen.

Zicht op de binnenkant van het spatbord.


Tussen de flens van de tankopening en die van de vulpijp zit nog een afsluitring van kurk. Deze heeft dezelfde diameter als de flens van de aluminium tankopening en sluit dus netjes af op de gelcoat van het spatbord, zonder dat de rvs flens van de vulpijp nog zichtbaar is.


Het gewenste resultaat.


Bij de tank zelf komen nog twee slangklemmen. En hiermee is de klus wel geklaard. Hieronder nog wat sfeerfoto's.



Aansluiting op de tank.


De vulpijp.