dinsdag 20 december 2022

Snelheidsmeter

Eerder al heb ik wat berichten (hier en hier) geschreven over de snelheidssensor en hoe die het analoge signaal van de versnellingsbak (lees: kabel naar de oorspronkelijke snelheidsmeter) omzet naar een digitaal signaal (blokgolf). De sensor geeft twee pulsen per omwenteling. Als de k-factor gelijk is aan 1.0, dan betekent dit per omwenteling precies één meter afgelegde weg.


Bij 120 km/h (haal ik waarschijnlijk nooit) wordt één meter afgelegd in 3600 [s/h] / 120 [km/h] = 30 milliseconde. De lengte van één puls is dan minimaal 30 / 4 = 7.5 milliseconde. De ESP32 heeft een standaard Tick Time (o.a. gebruikt voor het schakelen tussen Tasks) van 10 milliseconde. De puls al pollend inlezen in een Task is dan geen optie. Hiervoor is de blokgolf/pulstrein te snel. Met een Interrupt moet dit echter wél lukken. Interrupts kunnen de 'normale' afloop van het programma onderbreken. Wanneer een Interrupt Event optreedt, wordt een Interrupt Service Routine (ISR) aangeroepen. Dit is een functie die gebruikt wordt om het event af te handelen.

In eerste instantie heb ik gekozen om de interrupt zo in te stellen dat deze reageert op de opgaande flank van de blokgolf. Telkens wanneer de ISR doorlopen wordt, wordt de systeemtijd (het aantal microsecondes vanaf de start) van de microcontroller in een buffer gezet. Die buffer (de juiste term is eigenlijk Queue) wordt later door een 'normale' taak uitgelezen en verwerkt tot snelheid.

De eerste resultaten van deze opzet waren niet bepaald hoopgevend. Om niet te zeggen: frustrerend slecht. De tijd tussen twee pulsen schiet echt alle kanten op.

Pulstijd bij verschillende snelheden van de accuboormachine

In bovenstaande grafiek wordt de tijdsduur tussen twee interrupts in microsecondes getoond. Een korte tijd is een hoge snelheid. De meting is uitgevoerd met een accuboormachine die omgerekend ongeveer een snelheid van 120 km/h kan nabootsen. Maar wat gaat hier nu mis? Is dit een elektrisch, mechanisch of softwareprobleem? Hoe dan ook, het moet opgelost worden want met deze data kan ik geen stabiel en actueel snelheidssignaal genereren.

Mogelijk ligt het aan de snelheidskabel. Da's nog de oude kabel uit de Eend. Ik heb de snelheidsmeter in de Eend ook wel eens op en neer zien trillen bij bepaalde snelheden. Dit probleem is uit te sluiten door een meting te doen met de boormachine direct op de speedsensor; dus zonder kabel ertussen. Helaas zien die metingen er ongeveer hetzelfde uit.

Een andere mogelijkheid is de boormachine zelf. Het is er een van het brushless type. Hierin zit een softwarematige besturing van de elektromagneten die misschien iets van onbalans veroorzaakt. Een meting met een oude boormachine mét koolborstels laat ook weer zien dat het probleem niet opgelost is.

Elektrisch misschien? In eerste instantie leek dit voor mij onwaarschijnlijk omdat de meting optisch is, er een laagdoorlaatfilter met een tijdsconstante van 1 milliseconde toegepast is en de analoge meting netjes digitaal gemaakt wordt met een LM393 comparator.

Dan moet het wel aan de software liggen. Maar veel simpeler dan wat er nu geprogrammeerd is, kan het niet gemaakt worden. De ISR leest 'slechts' de processortijd uit en zet die in een buffer. Gaat er dan toch iets mis met de interruptafhandeling in de ESP32 zelf? Of zit hier jitter op of lagging in, in verband met het Real Time Operating System (FreeRTOS) van de ESP32? Het gebruik van een interrupt in een Task Switching systeem is ook wel een beetje discutabel... "Op een andere manier meten", tipte een collega. Da's natuurlijk geen slecht idee. Om uit te sluiten dat de interruptafhandeling van de ESP32 debet is aan het probleem, heb ik de meting in een Arduino UNO geprogrammeerd. De Arduino heeft geen RTOS en is hierdoor per definitie veel eenvoudiger. Er is niet veel wat de werking van de interrupt kan beïnvloeden.

De test met de Arduino liet twee problemen zien:
  1. Met enige regelmaat (ongeveer 50%) wordt de interrupt twee keer direct na elkaar afgevuurd.
  2. De tijdsduur tussen de interrupts is de helft van wat de ESP32 als resultaat gaf.
Probleem 2. is erg vreemd, want dat zou betekenen dat de Burton 240 km/h zou rijden ;-). Het lijkt net alsof de neergaande flank ook een interrupt oplevert. Probleem 1. zou betekenen dat er iets met de opgaande flank aan de hand is. Het wordt tijd om de blokgolf nog maar eens met een oscilloscoop te bekijken (5 milliseconde per divisie):


120 km/h: pulslengte ongeveer 7.5 milliseconde


Bovenstaand plaatje komt overeen met ongeveer 120 km/h. Mooie nette pulsen, korter zullen ze niet worden. Geen reden tot zorg toch? Als er echter ingezoomd wordt op de opgaande flank (500 nanoseconde per divisie), dan wordt de oorzaak duidelijk:


Onregelmatigheden in de opgaande flank.


De opgaande flank ziet er in het microseconde-bereik helemaal niet zo mooi uit. Het is heel goed mogelijk dat er twee opgaande flanken gedetecteerd worden. Dus twee snelle interrupts na elkaar. Probleem 1. is hiermee verklaard. Als er vervolgens naar de neergaande flank gekeken wordt (geen plaatje van), dan zie je ook hier wat bouncing/dender. Heel goed mogelijk dat ook hier een opgaande flank gedetecteerd wordt. Mooi, want dat verklaart probleem 2.

Interrupt events in opgaande en neergaande flank


Wel vreemd dat de LM393 dit lijkt te veroorzaken. Een snelle blik in de datasheet van de LM393 laat zien dat deze comparator een Response Time heeft van 300 nanoseconde.


Response Time uit de datasheet van de LM393


Dat klopt wel ongeveer met het scope-beeld hierboven. Verderop staat er nog een notitie in de datasheet:



www.ti.com


"Oscillation Tendencies", daar had ik geen rekening mee gehouden. Ze worden minder als de weerstand aan de ingang kleiner is dan 10 kOhm. Bij mij is die weerstand precies 10 kOhm, dus dat er nog iets dendert valt dus te verwachten. De interrupt van de Arduino/ESP32 pikt die oscillaties naadloos op.

Nu de oorzaak bekend is, kan een oplossing bedacht worden. Die is eigenlijk achteraf gezien niet zo ingewikkeld. Door een tweede interrupt binnen een bepaalde tijd ná de eerste te negeren (het grijze vlak in onderstaande figuur) wordt probleem 1. opgelost. Als de software zo geconfigureerd wordt dat er naast de opgaande flank ook een interrupt gegenereerd wordt voor een neergaande flank, en dat ook hier een snel opvolgende tweede interrupt genegeerd wordt, houden we twee nette interrupt events over. Eentje op de opgaande flank en eentje op de neergaande flank.


Twee nette voorspelbare interrupt events


Dat betekent dat er vier events per omwenteling optreden (het vijfde event in onderstaande figuur is het eerste event van de volgende omwenteling). De vier tijdsduren bij elkaar opgeteld levert precies de tijd op van één volle omwenteling en dus één meter afgelegde weg. Ideaal om de snelheid mee uit te rekenen.




Dit alles levert het volgende resultaat op met een Arduino:


Omwentelingstijden bij verschillende snelheden van de accuboormachine


Dat ziet er strak uit. De software is ongeveer een-op-een van de Arduino naar de ESP32 gezet, met als resultaat dat het hierin nu ook prima werkt. Da's fijn, want nu hoef ik in ieder geval geen nieuwe oplossing te zoeken in de hardware. Zoals de collega het al tipte, soms is het nodig om even uit te zoomen en op een andere manier te meten om achter eventuele problemen en bijbehorende oplossingen te komen.


zondag 11 december 2022

Brandstofmeter

De tankinhoud, die weergegeven wordt op het display in het dashboard - wordt gemeten met een vlotter in de tank die via een armpje een soort van potentiometer bedient. De weerstand is hoog als de tank leeg is en laag als die vol is. Jammer genoeg heb ik de tank niet uitgeliterd, dus de precieze weerstand per liter brandstof is niet helemaal bekend. Wat ik wél weet is de weerstand bij een lege tank - die kan ik namelijk meten nu er nog geen benzine in zit. De multimeter toont 380 ohm. Verder vermoed ik dat de weerstand ongeveer 0 ohm zal zijn als de tank vol is.
Ik kan natuurlijk ook nog wat meten aan de brandstofmeter in het dashboard van de Eend. Door hier een potmeter op aan te sluiten kan ik de vlotter nabootsen. Hoe die aangesloten moet worden is nog niet zo voor de hand liggend. Het metertje is namelijk van het type kruisspoelmeter.


Schematische weergave



In de meter zitten twee spoeltjes die kruislings geplaatst zijn. De spoeltjes zijn in serie aangesloten op de accuspanning. Tussen de twee spoeltjes zit een middenaftakking die naar de tankvlotter gaat. Als de tankvlotter een relatief hoge weerstand heeft gaat er door de twee spoeltjes ongeveer dezelfde stroom en genereren ze dus een vergelijkbaar magnetisch veld. Ze zijn in evenwicht en de meter staat nu op 0 (leeg). Als de weerstand van de tankvlotter afneemt, zal een deel van de stroom via de middenaftakking naar de tankvlotter lopen. Door het eerste spoeltje loopt nog de 'volledige' stroom, door het tweede spoeltje echter maar een deel. De spoeltjes zijn steeds meer uit evenwicht waardoor de meter uitslaat richting 1 (vol). Het fraaie van dit systeem is dat de voedingsspanning nauwelijks invloed heeft op de uitlezing. Het gaat niet zozeer om de absolute stroom door de spoeltjes, maar de verhouding van de stroom door de twee spoeltjes die de uitslag van de meter bepaalt.


De 'echte' spoeltjes.


Het is een beetje moeilijk te zien, maar op bovenstaande foto zie je de kruislings in elkaar geschoven spoeltjes.


De aansluitingen


Nu de potmeter (van bijv. 1 kohm) tussen de VLOTTER-aansluiting en de GND zit en de voeding (12V) aangesloten is, kan gecontroleerd worden bij welke weerstand de meter op vol en leeg staat.



spanningsloos



380 ohm



116 ohm



0 ohm


Conclusie: bij 380 ohm geeft de meter inderdaad leeg aan. Bij 0 ohm wordt vol aangegeven. Ik heb nog wat tussenstanden gemeten en kom tot de volgende tabel en grafiek:


Tabel incl. trendlijn


De wijzer van de meter staat precies op nul als de weerstand 300 ohm is. Boven de 300 ohm (tot 380 ohm) zie ik als een soort van 'reserve'. Misschien dat ik een lampje laat branden in het dashboard om dit aan te geven. De kolom 'trendlijn' laat de uitkomst van de trendlijn-functie zien die in Excel is bepaald. In onderstaande grafiek is de trendlijn (met formule) te zien die door de meetpunten loopt.


Grafiek met curve fit


Ik denk dat een rechte lijn van het beginpunt tot het eindpunt ook heel goed werkbaar is, maar omdat ik toch de beschikking heb over rekenkracht, kan ik daar net zo goed gebruik van maken.

De weerstandswaarde van de vlotter wordt in mijn Burton door één van de microcontrollers gemeten door deze in serie met een vaste weerstand te schakelen. De spanning tussen de twee weerstanden gaat variëren als er meer of minder brandstof in de tank zit. Die spanning wordt gemeten via een analoge ingang en met bovenstaande formule omgerekend naar liters.


zaterdag 3 december 2022

Multistekker

Alle schakelaars onder het dashboard zitten verbonden met een CAN-bus-module op die plek. De microcontroller heeft hiervoor niet genoeg in- en uitgangen, dus daar wordt een list toegepast. Een groot deel van de signalen wordt aangesloten via I²C I/O-expanders. Alle signalen zijn laag vermogen en dus kunnen er dunne draden gebruikt worden. Ik gebruik Mini-Lock 1.0 mm stekkers en 0.35 mm² draad.


Allemaal bij Rick Donkers vandaan. Waar anders...


Het is wel priegelwerk om kabels op een fatsoenlijke manier aan deze stekkertjes te verbinden. Maar met de LY-48B-tang zou dat nog net moeten lukken. Als je zelf aan de elektronica van een auto gaat sleutelen, is zo'n tang onontbeerlijk.


Fragiel spul.


Het knijpen van de stekker aan een kabel is een secuur werkje. Maar met beleid en een leesbril wil dat wel lukken:


Aangeknepen.


Ik vertrouw niet alleen op mijn knijpkunsten - wat overigens heel raar klinkt als ik het zo nalees - dus er komt ook nog een druppeltje soldeertin bij kijken.






Uiteindelijk komen er negen verbindingen in één multi-stekker. Twee van die stekkers zitten verbonden met de CAN-module onder het dashboard.





vrijdag 2 december 2022

Dashboard

Een tijdje terug heb ik al eens een ring gedraaid voor op het dashboard. In de ring komt een stuk plexiglas met daarachter het multifunctionele display. Nu wordt het tijd om enkele gaten in het dashboard te boren/zagen om alle knoppen en deze ring in te bevestigen.


Thuis gedraaid op de haakse slijper.


Om er een beetje in te komen ben ik begonnen met een kleiner gat; het gat voor de knop van de alarmlichten. Een knop uit een oude Volkswagen heb ik al voorzien van een witte led als vervanging voor het originele gloeilampje.


Daar zit hij, midden boven het stuur.


Rechts naast het stuur komt de startknop en nog twee schakelaars. Een schakelaar met schakelpatroon ON-OFF-ON en een met (ON)-OFF-(ON). De schakelaars hebben een lange steel met een rubberen sleeve. Ik hoop dat er nooit water over mijn dashboard zal stromen, maar je weet het maar nooit met een open auto.

Bij alle gaten in de Burton geldt, drie keer meten, één keer boren. Bij de gaten in het dashboard geldt dit in het bijzonder.


Tape plakken, meten, aftekenen...



...en dan boren.


Ook links naast het stuur komen nog twee drukknoppen. Allemaal niet teveel in het zicht, voor zover dat mogelijk is.


Twee knopjes links.



Alle knoppen zitten erin. Nu nog het display (hier nog van papier).


Het grote gat voor het display wil ik met een figuurzaag gaan zagen. Moet natuurlijk in het midden van het dashboard, maar da's helemaal niet zo gemakkelijk te meten. Dus vooral op het oog en uitlijnen met het midden van de voorruit. Met een passer met twee scherpe punten is het gat afgetekend - of eigenlijk afgekrast - op het polyester.


Nu kunnen we niet meer terug.



Gaat best goed met de figuurzaag.


Met de figuurzaag is bijna het hele gat te zagen. Alleen bovenin moest ik nog een stukje kleine gaatjes boren. Daarna voorzichtig met de dremel en als laatste met een scherp stukje schuurpapier is het gat netjes gemaakt.



Het grote gat.


Even de grote ring passen. Deze wordt vastgezet met acht verzonken schroeven. Net als bij het stuur worden deze nog even gepolijst voor het bling-bling-effect.


Even passen.


Het dashboard van de Burton is niet helemaal vlak (nooit goed begrepen waarom eigenlijk niet). Op ongeveer een kwart van de bovenkant zit een lichte knik. Zo niet heel goed zichtbaar, maar als je hier een meter of knop plaatst, moet je er wel rekening mee houden. Mijn display is zó groot dat hij een stukje over die knik heen zit. Met de bovenst twee schroeven hoop ik echter de ring 'onzichtbaar' tegen het polyester aan te kunnen trekken.

Rechts naast de ring komt nog een dikke schakelaar. Om precies te zijn een Lucas PLC5. Die is nog best lastig te monteren, met een heel smal randje en wat nokjes in de rand.

Voordat de knoppen gemonteerd zijn, zijn de polyester randjes nog even in de zwarte Epifanes gezet.



Alles op een rijtje. De Lucas PLC5 zit er netjes in.



Klaar!





Nu nog de aansluitingen aan de achterzijde. Wordt vervolgd...

maandag 3 oktober 2022

Ontwaseming, deel 2

In het schutbord zitten bij de voeten - net als bij de Eend - twee gaten waar de warme lucht van de twee warmtewisselaars de cabine binnen komt. Eén van die twee gaten gaat gebruikt worden voor de ontwaseming. Dat betekent dat de lucht vanuit dat gat naar de twee sleuven uit het vorige bericht gebracht moet worden. Hiervoor gebruik ik dezelfde Airprene-slangen als ook onder de motorkap gebruikt zijn. Een dikke (6 cm) slang vanaf het schutbord naar onder het dashboard en twee dunnere (4 cm) slangen naar de twee sleuven. Naast de stukken slang zijn er nog wat koppelingen, verdeel- en uitstroomboxjes nodig die ik ga maken van aluminium. Dat betekent dat ik voor het eerst aluminium ga tig-lassen en dat blijkt nog best las-tig 😏.


Eerste proeflasjes aluminium 😒.

Dat valt nog niet mee... zoveel instellingen. Uiteindelijk heeft de aanschaf van een voetpedaal me nog het meest geholpen het aluminium-lassen onder de knie te krijgen. Aluminium geleidt warmte zoveel beter dan staal dat in eerste instantie alle warmte van het lassen weglekt en alleen maar het object verwarmt. Lassen lukt dan nog nauwelijks. Als het hele object opgewarmd is gaat het echter ineens héél snel... Zonder pedaal valt de warmte-inbreng bijna niet te managen. Met pedaal kun je eerst veel warmte inbrengen (hoge stroomsterkte) en als je ziet dat het lassen goed begint te lopen kun je langzaam wat vermogen terugnemen. Een halve fles Argon-gas verder en ik durf het aan om aan een serieus object te beginnen.


Hier wordt het allemaal van gemaakt. Buis/koker van 2 mm dik aluminium.


In één van de uitstroomopeningen van het schutbord komt eerst een adapter waar de dikke Airprene-slang op aangesloten kan worden. Twee stukjes aluminium buis van 6 cm doorsnede worden hiervoor gebruikt. Een stuk schuift strak in het andere en wordt dan als geheel in de uitstroomopening in het schutbord gelijmd met - jawel Peter - Sikaflex.


Twee delen die in elkaar schuiven.


Mijn eerste serieuze alu-las 😅.


Gelijmd in de rechter uitstroomopening.


Met Sikaflex natuurlijk, what else?

Onder de sleuven in het dashboard komen twee boxjes gemaakt van 4 x 4 cm koker. Hierop wordt een stukje 4 cm buis gelast voor de dunne Airprene-slang. Maar eerst een eenvoudigere las:


Dekseltje aan de ene kant.


Rechte buitenhoeken lassen gaat inmiddels best redelijk. Dat stukje ronde buis lassen was echter best pittig voor een noob. Maar het is gelukt... Nou ja, het zit goed vast. En de sleuf zit er ook al in. Nu alleen nog de andere kant afsluiten.


Deksel fixeren, tacken en aflassen.


Nummer een klaar.


En nummer twee in spiegelbeeld.


Tussen de dikke Airprene-slang en de twee dunne Airprene-slangen komt een soort van verdeeldoosje. Eén 6 cm ingang en twee 4 cm uitgangen.


De onderdelen.


Alles aan elkaar gebraden ziet het er zo uit:


Met een gatenboor zijn de gaten geboord 😆.


Dit boxje wordt bevestigd onder het dashboard, waarbij de dikke aansluiting richting het schutbord wijst. De Airprene-slang komt zo in de gleuf te liggen waar bij rechtssturende auto's de stuurstang zit.


Voor de bevestiging zijn er nog twee lipjes aan het boxje gelast.


De boxjes onder de dashboard-sleuven krijgen een rubberen afdichting:


Gelijmd met Bisonkit.


Aan de achterkant zijn twee gaten geboord voor de bolkop-inbusbouten uit het vorige bericht. Hiermee wordt niet alleen het afdekplaatje aan de bovenkant van het dashboard vastgezet dus.


Het eerste uitstroomboxje zit vast.


Drie keer meten, één keer bouwen. Daar zit nog net een mm tussen (pfff).


De slangen hebben her en der nog wat ondersteuning nodig. Hiervoor zijn enkele plakbeugeltjes gefabriceerd:





En die zijn - hoe kan het ook anders - met Sikaflex vastgelijmd:




Uiteindelijk ziet het resultaat van deze klus er dan zo uit:













Weer een grote klus van de lijst.