dinsdag 28 januari 2020

Software - Who am I

Waarom één microcontroller gebruiken als het er ook méér kunnen zijn. Da's natuurlijk geen doel op zich, maar wel een resultaat van de gemaakte keuzes. Elke node op de CAN-bus wordt gevormd door een gelijke DevKit voorzien van een microcontroller van het type ESP32:

ESP32 DevKit

De pinnen van de node worden gebruikt voor het aansluiten van Inputs en Outputs (I/O). Eenvoudige I/O van het type GPIO (General Purpose Inputs/Outputs), maar ook I/O voor de CAN-bus en pinnen voor de stroomvoorziening. Veel van de pinnen hebben speciale functies die deels te configureren zijn, maar ook deels ongewijzigd moeten blijven. Nader onderzoek resulteert in het volgende schema:

Fysieke I/O

Van de 30 pinnen blijven er relatief weinig over om vrij te gebruiken. In de kolommen met de naam Functie staat <spare> vermeld als de pin vrij is. Enkele pinnen hebben al een vaste functie gekregen die voor élke node gelijk is:
  • PIN34, PIN35, PIN36 en PIN39 zijn pinnen die alleen als Input te gebruiken zijn. Drie van deze pinnen worden ingezet om de node te identificeren. Hierover zometeen meer.
  • PIN04, PIN05, PIN12 en PIN15 zijn zogenaamde strapping-IO's en hebben tijdens het opstarten een speciale functie. Er wordt geadviseerd om ze met rust te laten (floating).
  • GND (2x), VIN en 3V3 dienen voor de voeding.
  • PIN01 en PIN03 (resp. TXD0 en RXD0) zijn in gebruik voor het programmeren van de node.
  • PIN16 en PIN17 worden ingezet voor de koppeling met de CAN-bus.
  • PIN02 is intern verbonden met de blauwe LED op de DevKit. Deze zal gebruikt worden om activiteit op de CAN-bus te signaleren.
Uiteindelijk blijven er dertien pinnen over om ingezet te worden voor diverse functies zoals het uitlezen van schakelaars of het aansturen van lampen. Dat lijkt best nog veel, maar zeker bij het dashboard red je het daar niet (zomaar) mee. Denk maar eens aan alle schakelaars en indicatielampjes en je gaat al snel over de dertien heen. Dat betekent dat een list bedacht moet worden of dat er een node bijgeplaatst moet worden. In een later bericht meer over dit dilemma.

Hierboven werden al de drie identificatiepinnen (PIN34, PIN36 en PIN39) genoemd. Die worden gebruikt om de node te identificeren. Alle nodes zijn namelijk gelijk. Niet alleen hardwarematig, maar ook softwarematig wil ik ze gelijk houden. Alle nodes krijgen dus dezelfde software, maar moeten wel verschillende functies uitvoeren. Bij het opstarten worden de drie pinnen uitgelezen en op basis hiervan worden sommige functies in de software wel of niet geactiveerd. De drie pinnen kunnen elk aan 0 volt of 3.3 volt gekoppeld worden en zo ontstaan er acht verschillende identificatiecodes (binair: 000, 001, 010, 011, 100, 101, 110 en 111). Dat betekent dus dat er op deze manier maximaal acht nodes mogelijk zijn. Lijkt me genoeg voor een Burton.

Voor de liefhebbers een stukje C-code waarmee de drie identificatiepinnen uitgelezen worden:

Functie "whoAmI".

De software wordt ontwikkeld in Visual Studio Code met de plug-in PlatformIO. Een prachtige combinatie waarmee vrij eenvoudig software voor diverse microcontrollers ontwikkeld kan worden. Voor diegene die al eens met de Arduino IDE gewerkt hebben, stap gerust over op PlatformIO. Daar ga je geen spijt van krijgen. Om de softwarefuncties te testen zijn twee nodes op een breadboard geplaatst. Hieronder een testopstelling met de verlichtingsschakelaar aan de ene node en de lampen (hier blauwe LED's) aan de andere node. Lijkt al snel een onoverzichtelijke spaghetti op zo'n breadboard.


Testopstelling. Het geel/oranje kabeltje is de CAN-bus.

Inmiddels is er al heel wat meer software geschreven waarover nog wel wat berichtjes gaan volgen. De basisopzet is gereed maar het is nog lang niet klaar. Morgen komt - als het goed is - de hoge voorruit binnen. Fijn, want die heeft wel even op zich laten wachten.

3 opmerkingen:

  1. Hoi RedDuck weer flinke stappen gemaakt. We hebben ons systeem inmiddels werkend ingebouwd. Ook wij liepen tegen de beperking aan van het aantal uitgangen. Dus hebben we gekozen voor een aantal extra accessoires die via relais worden geschakeld. Alles heeft zijn beperkingen. Het is onder het dashboard wel een hele (korte) Kabelboom met veel draden geworden omdat je niets doorlust. Daar hebben wij voor gekozen, tussen de uitgaande modules naar motorruimte en kofferbak zit nu veel minder draad, wat een van de voordelen is. Ook ieder aangesloten item heeft eigen massa, enerzijds omdat we via massa schakelen op de dashboardmodule. Anderzijds omdat we de geschakelde lasten ieder een eigen circuit geven bij de uitgaande modules. Wat we nu ervaren is dat we geen spanningsval hebben op allerlei overgangen dan wel langere te (dunne) draden waar relatief hogere stromen lopen Is oude settings. Dit levert een volle en stabielere ontstekingsspanning op. De spanningsregelaar blijft namelijk in tegenstelling tot de oude situatie nu heel stabiel.

    BeantwoordenVerwijderen
  2. Dat zijn goede resultaten. Die hoop ik ook te halen. Door de voeding naar de plek van de last te brengen i.p.v. veel lange draden die relatief veel stroom voeren, sla je i.d.d. twee vliegen in één slag. Minder verliezen en minder koper. Leuk om te lezen dat jullie al zo ver zijn.

    BeantwoordenVerwijderen