PC Programma                                                                         Laatste wijziging 2023-12-28


In het kort:
Een programma dat het gedrag van de slinger grafisch weergeeft en logt, en het instellen van diverse parameters mogelijk maakt.
Het programma loopt 24/7 op een wat oudere laptop.
Er is ook een Analyse programma waarmee de logfiles grafisch bekeken kunnen worden.
Zie ook de pagina over de Software Ontwikkeling waar je ook de broncode kunt downloaden.




Fig 1. Scherm afbeelding.


Van Links Boven naar Rechts Beneden:

- Tijd display.
Bij iedere centrum passage schuift de grafiek 1 pixel naar links. Nieuwe gegevens komen er vanaf rechts in, Alle timing signalen komen in 10 kHz ticks.
Geel: het verschil in centrum passeertijd met de vorige keer. Midden van de schaal is 0. Dit signaal is vooral bedoeld om de centrering van de vloer unit in te stellen.
Rood: de piek amplitude van het centrum detectie signaal, vlak vóór de passage. Dit signaal wordt zwakker naarmate er meer ellips is.
Lichtblauw: da amplitude van de slinger zoals berekend uit de passage van de randspoel.
Groen: de lengte van de lange as van de ellips, zoals berekend aan de hand van de Hall sensors.
Paars: de lengte van de korte as van de ellips, 10 x vergroot. Midden schaal = 0, positief = linksom, negatief = rechtsom.
Wit: de duur (= sterkte) van de aandrijf puls, resulaat van het mechanisme dat de amplitude stabiliseert.
Met de vinkvakjes kunnen de diverse sporen aan / uit gezet worden.

- Kompas display.
Toont in echte tijd de beweging van de slinger zoals gemeten met de Hall sensors. Met het vinkvakje "Persistence" blijven de dotjes staan totdat het kompas met de knop "Clear" gewist wordt. De tijd van laatste Clear is rechts zichtbaar, naast de actuele tijd. Hier is er 20 seconden verlopen, dat is ca. 5 periodes van de slinger. "Enlarge" maakt de schaling 10 x zo groot, en wordt gebruikt bij het nulstellen van de top unit.
De rode cirkeltjes op de rand geven de hoek van het slingervlak aan. Rechts = oost = 0°, linksom draaiend naar 180° zoals gebruikelijk in de meetkunde.    
- Het memo veld recht kan enkele zaken nummeriek weergeven, zoals de centrum passage tijden. Wordt gebruikt bij het centreren van de vloer unit.

- Parameters
Hier kunnen een aantal parameters ingesteld worden, zoals:
Maximum en minimum tijdsduur van de aandrijfpuls en de positie daarvan.
"Enable Drive" schakelt de aandrijving in of uit. Wordt o.m. gebruikt bij het bepalen van de Q van de slinger.
"Force" forceert de tijdsduur van de aandrijf puls, daarbij wordt de automatische regeling van de slingeramplitude uitgeschakeld.
Voor het detecteren van de Centrum- en Randspoel passages kan er ingesteld worden vanaf wanneer er getest wordt en wanneer er besloten wordt dat de passage gemist is. Aangezien de aandrijfspoel een impuls induceert in de andere spoelen moet er rond die tijd geen detectie plaatsvinden.
De actuele waarden worden getoond alsmede de actuele en piek waardes van de spoel-signalen. 
"Change Parameters" stuurt de instellingen naar de Arduino, die het dan opslaat in het EEPROM. De Arduino houdt in principe de slinger op gang en stabiliseert de amplitude. Bij uitvallen van de PC-communicatie loopt de slinger gewoon door.
"Other Half" schakelt naaar de andere helft van de slinger. We kunnen immers uit de data van de vloer unit niet opmaken in welke helft we zitten. 
"Resync" start een nieuwe cyclus om de timing software "in de pas" te laten lopen met de slinger.
"Radius" is de diameter van de Randspoel.
"Set_mm" is de doel-waarde voor de amplitude regeling.
"Set ticks" wordt momenteel niet gebruikt.
"Ampl" geeft de laatst gemeten slinger amplitude, berekend uit de rand passage tijd.

- Status
Geeft een aantal omstandigheden weer.

- Hall Sensors:
De actuele uitlezing van de Hall sensor waarden in A/D converter waarde (8 bit conversies),
De Noord-Zuid en Oost-West posities en de verst gevonden posties.
De berekende ellips parameters.

- General
Huidige tijd en de laatste keer waarop het kompas dislplay gecleared werd.
Een mogelijkheid om een commentaar regel tussen te voegen in de logfile.
De naam van de logfile. Verandert automatisch om middernacht.

- Power
Enkele parameters van de voedings voorzieningen,
Parameters voor het gebruik van een accu-backup en het management daarvan (momenteel nog niet gebruikt)

- Communication.
Informatie over de ethernet communicatie tussen dit programma en de Arduino.


De werking van het programma.
Het grootste deel van de programma code is zelfverklarend door naamgeving en commentaar regels.
De manier waarop de ellips parameters berekend worden vereist nog wel wat toelichting.

De coördinaten van de Bob worden afgeleid van de Hall sensor signalen volgens:

Ypos = (North - South) / (North + South); voor Oost-West idem.

Deze formule veronderstelt een perfecte lineariteit die er niet is, maar we doen het er mee.
Zie Afregelen Hall sensors.
Om de ellips parameters te vinden volgen we een aantal stappen. Zie tekening:



Voor dit voorbeeld neem ik een ellips die met de klok mee loopt onder de Foucault Precessie hoek A en een korte as b.
De stippen geven de meetpunten aan, ca. 10 per seconde, dus 40 stuks voor een hele periode.
We beginnen bij een centrum passage; dat moment is bekend in de berichten uit de Arduino.
Vanaf dat moment (1) bepalen we met pythagoras de toenemende afstanden vanaf het centrum en volgen we die totdat ze weer kleiner worden bij (3). De positie daarvóór (2) was dan de verste en we nemen die voor het bepalen van de FP hoek met de arctan2() functie..
Met de wetenschap dat de FP en de ellips parameters slechts langzaam veranderen kunnen we gemiddelden berekenen met het "lekkende emmer" algoritme:

NewAverage = OldAverage * (1-f) + NewValue * f,  bij  1 > f > 0.

Een kleine waarde van f geeft een langzaam gemiddelde, f dicht bij 1 geeft een snelle reactie.

De volgende stap is het bepalen van de korte as van de ellips. We nemen daarvoor de afstand van het eerste sample na de center passage.
We willen ook de richting weten waarin de ellips draait. Daarvoor roteren we de positie van dat eerste sample over minus de gevonden FP-hoek. Als we dat voor alle ellips punten zouden doen vinden we de ellips liggend om de horizontale as. Maar 1 punt is genoeg. De Y-polariteit van dat sample levert de draairichting op. Positief is rechtsom, negatief is linksom.

Om de lengte van de korte as in mm te berekenen gaan we uit van de wetenschap dat de amplitude van de slinger gestabiliseerd is op 230 mm. We kunnen dan eenvoudig de lengte van de korte as berekenen.
Als we deze berekeningen voor iedere halve zwaai zouden doen vinden we afwisselend positieve en negatieve waarden, Gemiddelden nemen zou dan tot 0 leiden. Daarom doen we de berekeningen om de andere halve zwaai. En veronderstellen we dat we de tel niet kwijt raken. Mocht dat toch gebeuren dan is er drukknop "Other Half" om het weer goed te maken.


Dit is
beslist een niet zo mooie manier, maar het blijkt goed te werken, zij het met een probleem.
Kijk naar de grafiek hieronder.


We zien in geel de tijd in uur-stappen, in lichtblauw de FP hoek over 360 graden, in wit de lengte van de korte as van de ellips en in groen het piek-signaal van de centrum passeerspoel.
De korte as wisselt van polariteit bij de N-Z en O-W overgangen. We zien daar ook de grootste amplitude uit de centrum detectie spoel. Dat klopt, want dan gaat de slinger over het centrum van die spoel. De korte as lijkt echter erg plosteling in polariteit te veranderen en je zou iets veel geleidelijkers verwachten. We zien van dat plotselinge ook niets terug in de groene lijn.
De vraag dringt zich op of er niet een fout in het algoritme zit.
Zie ook de pagina  "Niet Begrepen".


Over het stabiliseren van de slinger amplitude.
Dit is geïmplemnteerd in de Arduino firmware, Het PC-programma stelt alleen de parameters in voor het regelsysteem.
De amplitude van de slinger wordt berekend uit de tijd tussen het passeren van de centrum spoel en de randspoel.
Als de amplitude te groot is wordt de tijdsduur van de aandrijfpuls op de minimum waarde gezet, bij te kort op de maximum waarde.


Het Analyse programma leest één of meer logfiles en presenteert de gegevens in grafische vorm.
 


De diverse sporen kunnen afzonderlijk aan of uit gezet worden.
De belangrijkste zijn hierboven al genoemd.
We zien verder de snelheid van de FP (eerste afgeleide), amplitudes en passeertijden van de randspoel en de piekwaardes van de spoelsignalen die daar bij horen, en de waarde van de aandrijfpuls.
Dit programma gebruikt een middeling over een instelbaar aantal regels van de log file. Hier was dat 100, d.w.z. elk punt op de horizontale as vertegenwoordigt het gemiddelde van 50 volledige periodes van de slinger, oftewel ca. 200 seconden.