Throttle Quadrant – verbeterde flaps sensor

In het originele throttle quadrant waarop mijn ontwerp is gebaseerd wordt een microschakelaar gebruikt om veranderingen in de flaps en speedbrake hendel posities te detecteren.
Deze schakelaar schuift over een golfpatroon in een MDF paneel: de toppen van de golven sluiten de schakelaar, in de dalen tussen de toppen is de schakelaar open.
Op deze manier kunnen met slechts 1 schakelaar alle standen van de hendel worden gedetecteerd door het aantal keer te tellen dat de schakelaar sluit en opent.
Daarbij is het nog wel van belang om te kijken of dat aantal toe of afneemt, m.a.w. in welke richting de hendel wordt bewogen.

Hiervoor werd een slim truukje toegepast: dankzij de wrijving kan een wasknijper op de as van de hendel een klein stukje met de hendel mee bewegen totdat hij ofwel tegen een microschakelaar drukt of in de andere richting tegen een vaste stop. Zolang de hendel in de ene richting beweegt is de microschakelaar gesloten, zodra de hendel de andere kant op gaat opent de schakelaar.
Een leuke oplossing, maar een nadeel is dat deze afhankelijk is van de klemkracht van de wasknijper en onderhevig is aan slijtage.
Ook zijn de positie van de microschakelaar en het MDF golfpatroon erg kritisch om het geheel soepel te laten bewegen zonder dat het blokkeert.

Daarom ben ik toch op zoek gegaan naar een meer robuuste manier om de positie van flaps hendel te detecteren.
Na het zien van deze video realiseerde ik me dat ook een hall effect sensor gebruikt kan worden om contactloos een positie te detecteren.
Toen ik vorig jaar voor een ander project een aantal magneten had besteld zaten er bij de levering een aantal gratis 5x5x5 mm neodymium kubusmagneetjes.
Deze zou ik in een aantal uitsparingen in een MDF encoder wiel kunnen lijmen en met een hall effect sensor detecteren.
Met een tweede sensor zou ook de richting kunnen worden gedetecteerd.

Maar in plaats van magneten heb ik besloten om een encoder wiel met gaten en optische sensors te gebruiken.
Door twee optische sensors en een logisch circuit genaamd een D-flipflop te gebruiken kan ook de richting worden gedetecteerd waarin het encoder wiel draait.

Een sensor is aangesloten op de D-ingang van de flipflop, de andere op de clock (CK) ingang.
De sensors zijn zo geplaatst dat de sensor die verbonden is met de clock ingang een opgaande flank genereert (opening in het encoder wiel komt in de sensor, dus signaal gaat van 0 naar 1) op het moment dat de andere sensor een opening in het wiel ziet (1) of niet (0)
Op deze manier wordt altijd een 0 ingeklokt in de flipflop als de hendel de ene kant op beweegt en altijd een 1 als de hendel de andere kant op beweegt. De uitgang van de flipflop geeft dus aan in welke richting de hendel beweegt.

De functie van de hardware flipflop kan ook in het OpenCockpits SIOC script worden geimplementeerd

//
// B737 Throttle Quadrant
// Flaps handle input
//
// 9 flaps positions: 0, 1, 2, 5, 10, 15, 25, 30, 40
// 0v9 May 27, 2017 Theo Deckers

var 0000, value 0
{
  &FLAPS_POS  = 0          // flaps position
  &FLAPS_DX   = 2047.875   // max flaps value (16383) divided by (nr of detents - 1)
}

Var 0599, name FLAPS_POS
{
  &FLAPS_CTRL = &FLAPS_POS // output flaps_pos value to FSUIPC
}

Var 0597, name FLAPS_DX    // Variable for incremental value of flaps position

Var 0500, name FLAPS_SW_ZERO, Link IOCARD_SW, Input 0     // Flaps zero switch
{
  IF &FLAPS_SW_ZERO = 1     // Flaps zero
  {
    &FLAPS_POS  = 0         // reset position to 0
  }
}

Var 0501, name FLAPS_SW_MOVE, Link IOCARD_SW, Input 2     // Flaps handle moving

Var 0502, name FLAPS_SW_DIR, Link IOCARD_SW, Input 8     // Flaps handle direction sensor 
{
  IF &FLAPS_SW_DIR = 1             // rising edge on direction sensor
  {
    IF &FLAPS_SW_MOVE = 1          // handle inbetween detents
    {
      L0 = &FLAPS_DX               // increase position
    }
    ELSE
    {
      L0 = 0 - &FLAPS_DX           // decrease position
    }
    &FLAPS_POS = LIMIT 0 16383 L0  // increase or decrease flaps position value; between 0 and 16383
  }
}

Var 0503, name FLAPS_CTRL, Link FSUIPC_INOUT,  Offset $0BDC, Length 4

In de FLAPS_POS variabele wordt de positie opgeslagen die wordt gewijzigd door de flaps hendel en die via de FSUIPC FLAPS_CTRL FSUIPC offset wordt doorgegeven aan Flightsim.
Afhankelijk of de flaps hendel omhoog gaat (FLAPS_SW_DIR = 1) of omlaag (FLAPS_SW_DIR = 0) krijgt de FLAPS_DX variabele een positieve of negatieve offset.

Het ontwerp van het encoder wiel, de aluminium beugeltjes voor het monteren van de optische sensors en TQ paneel 5 waarop de sensors worden gemonteerd zullen binnenkort beschikbaar worden gemaakt in de Downloads sectie van dit blog.
De positie van de optische sensors is vrij kritisch: afhankelijk van de dikte van het flexibele isolatieplaatje tussen de beugeltjes en het sensor printje kan de positie iets afwijken, dus de gaten voor de sensorbeugeltjes in paneel 5 zijn slechts een indicatie.
Zelf heb ik eerst het encoder wiel gemonteerd, de sensors van spanning voorzien, ze proefondervindelijk op de juiste plaats geschoven en pas toen de gaten geboord.

Tijdens het schrijven en testen van het SIOC script liep ik tegen een paar onverwachte problemen aan:
– hoewel de signaal LED op de optische sensor ‘aan’ is bij een gat in het encoder wiel is het uitgangssignaal op dat moment ‘0’. Uit het schema van de sensor module blijkt de uitgang via een pull-up weerstand met de 5V voeding verbonden te zijn. Als een gat wordt gedetecteerd in het encoder wiel wordt de uitgang naar 0 getrokken.

Schema van de optische sensor module

Dit betekent echter dat de oorspronkelijke timing van het encoder niet gaat werken met de hardware flipflop implementatie: in plaats van een opgaande flank krijgt deze een neergaande flank. Als geen hardware flipflop wordt gebruikt is het geen probleem: schakelaars verbonden met Opencockpits master card ingangen genereren ook een 1 als ze verbinding maken met aarde.
Als wel een hardware flipflop wordt gebruikt moet met het huidige encoder wiel minimaal het clock signaal worden geinverteerd. Dit zou kunnen door een hardware inverter te gebruiken of door de rechtse optische sensor wat te verplaatsen.

– Toen ik net begon met het testen van mijn SIOC script zag ik de ingangen van de optische sensors zoals verwacht oplichten in de SIOC monitor. Na een probleem met een kortsluiting in de USB kabel/USB printplaat socket combinatie was de mastercard echter niet meer zichtbaar in SIOC monitor. Wat ik ook probeerde, de mastercard bleef onzichtbaar, dus ik was even bang dat er een probleem was ontstaan in een van de printplaten.
Een andere mastercard of een andere connector van de USB expansion card gebruiken hielp ook niet dus kon het probleem alleen nog in de USB kaart of in de software zitten.
Om een software probleem uit te sluiten heb ik de USB card op een andere computer aangesloten waarop nog niet eerder de SIOC software was geinstalleerd. Daar was de mastercard meteen zichtbaar.

Bij het vergelijken van de sioc.ini file op beide computers bleek het belangrijkste verschil te zitten in een regel MASTER=0,4,0,137 op de computer waar de mastercard niet zichtbaar was.
Met het derde getal wordt aangegeven hoeveel  mastercards zijn aangesloten, als die waarde 0 is wordt de mastercard dus niet gedetecteerd.
Deze regel ontbrak op de ‘goede’ computer.
Ik kan niet meer achterhalen hoe deze foute waarde precies in het bestand terecht is gekomen, maar het probleem is zeker niet door de USB kortsluiting ontstaan.
Mogelijk is het fout gegaan op Config Devices pagina van SIOC: ik vermoed dat ik daar per ongeluk een keer ‘0’ heb opgegeven voor het aantal aangesloten mastercards (#Cards).

Een aantal goede informatiebronnen voor SIOC programmeren en het Opencockpits IO systeem zijn:

www.lekseecon.nl – SIOC script voorbeelden
How to run multiple Opencockpits USB modules
SIOC reference manual

Voor de stab trim wielen zal een soortgelijke constructie met optische sensors en een encoder wiel worden gebruikt.
Als de stab trim wielen snel draaien zullen een groot aantal SIOC triggers worden gegenereerd door beide optische sensors, dus in die toepassing is het misschien handiger om de hardware flipflop te gebruiken.

TIjdens het experimenteren met verschillende plaatjes plexiglas die ik had liggen voor het encoder wiel kwam ik er achter dat sommige die ondoorzichtig leken de lichtsluis niet konden onderbreken, terwijl opaal/melkglas plexiglas (dat ik had aangeschaft voor de cockpit panelen) wel werkte.
Toen ik echter het gefreesde, gemonteerde encoder wiel ging testen bleek het tot mijn verbazing niet te werken.
Na onderzoek kwam ik er achter dat ondanks dat ik twee keer exact hetzelfde opaal plexiglas bij dezelfde webshop had besteld de tweede zending blijkbaar toch net iets verschillend was.
Ik had het op kunnen lossen door het encoder wiel te verven, maar besloot om toch maar een nieuw wiel te frezen van de eerste batch plexiglas die wel werkte.


Leave a comment