GALLOPING GHOST besturing

Discussie in 'Besturen' gestart door Bruno van Hoek, 23 jul 2024.

  1. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.428
    Locatie:
    Boskoop
    Ik had daar natuurlijk ook al over na zitten denken. Een voordeel van de tegenwoordige 2,4 GHz ontvangers is dat de PWM in de ontvanger zelf gegenereerd wordt, en niet meer zoals bij de PPM systemen afhankelijk is van de binnenkomende ppmstroom. Daardoor heb je meestal wel een geldige PWM aan de uitgang, ook bij zenderuitval. Hoe de pulslengte daarvan is? Waarschijnlijk zoals Bruno suggereert gelijk aan de laatste geldige puls, tenzij je een failsafe ingesteld hebt. Of zoals bij mijn Multiplex ontvangers naar 1500 microseconden .

    ....laatste stuk weer verwijderd, verkeerd idee....
    Maar het maakt meteen duidelijk wat de hindernis is, zolang er een input signaal van de ontvanger komt (zie hierboven), "weet" de ATtiny niet dat de zender uitgevallen of buiten bereik is!
     
    Laatst bewerkt: 29 okt 2024
    Bruno van Hoek en Raymond-v-M vinden dit leuk.
  2. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.428
    Locatie:
    Boskoop
    Ander onderwerp, volgens mij kan de ISR veel korter als er maar één input is:
    Code:
    ISR(PCINT0_vect)
    {
      if (PINB & (1 << Rxch)) timer_ch = micros(); // upgoing edge detected, start the timer
      else {
        pulse_time = (micros() - timer_ch); // downgoing edge detected, transfer the pulse_time
        sync = 1; // start the loop
      }
    }
    Maar ik kan het (nog) niet testen......
     
    Laatst bewerkt: 29 okt 2024
    Bruno van Hoek en Raymond-v-M vinden dit leuk.
  3. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.428
    Locatie:
    Boskoop
    De achtergrond (ook voor mezelf, dan kan ik het nog eens terugzoeken :weetnie:):

    De ATtiny kan maar één pin change interrupt routine bevatten. Wel kun je die door meerdere pins triggeren, en dat heb je nodig als je meer dan 1 kanaal wilt uitlezen. Maar je moet dan in de ISR uitzoeken door welke pin de trigger veroorzaakt werd.
    Heb je bijvoorbeeld kanaal1 en kanaal2, dan moet je de volgende 4 mogelijkheden checken:
    - kanaal1 is 1 en was daarvoor nog 0 , opgaande flank voor kanaal1, start de timer. Zoniet dan niets doen.
    - kanaal1 is 0 en was daarvoor nog 1 , neergaande flank voor kanaal1, lees de pulstijd en update de puls. Zoniet dan niets doen.
    - kanaal2 is 1 en was daarvoor nog 0 , opgaande flank voor kanaal2, start de timer. Zoniet dan niets doen.
    - kanaal2 is 0 en was daarvoor nog 1 , neergaande flank voor kanaal2, lees de pulstijd en update de puls. Zoniet dan niets doen.
    Om de vorige status 0 of 1 vast te stellen heb je dus chWas1 en chWas2 nodig

    Heb je alleen maar kanaal1, dan wordt het een stuk simpeler, bedenk daarbij dat de ISR getriggered is, dus moet de pin van status veranderd zijn:
    - kanaal1 is 1 , opgaande flank voor kanaal1, start de timer. Zoniet dan is het de neergaande flank, lees de pulstijd en update de puls.
    Je hebt geen chWas1 nodig.
     
    Laatst bewerkt: 29 okt 2024
    Raymond-v-M en Bruno van Hoek vinden dit leuk.
  4. Bruno van Hoek

    Bruno van Hoek Vriend van modelbouwforum.nl PH-SAM Forum veteraan

    Lid geworden:
    23 aug 2002
    Berichten:
    11.222
    Locatie:
    Almere, MVA (ex-Daedalus Amsterdam)/ PH-SAM/F23D
    Ik heb even het nodige omhanden. dus ook hier het gaat even duren...
     
  5. Raymond-v-M

    Raymond-v-M Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    19 okt 2021
    Berichten:
    283
    Locatie:
    Sittard
    Het is marsepein mousse met chocoladeslagroom geworden!

    De vereenvoudige ISR loopt als een zonnetje.
    - Start van 1500 naar 1000 microseconden gezet
    - Ik heb de minimum potmeter eruit gehaald, zodat de ATtiny nu altijd met 1000 microseconden start- De stelrichting van maxpot omgedraaid (2000- maxpot (0..500)) --> (1200 + maxpot (0..800)) Hierdoor kun je met de maxpot het maximale tussen 1200 en 2000 microseconden instellen.
    Nu start hij dus zodra er een ppm signaal aanwezig is (met de huidige 2.4 GHz systemen is dat meestal zo) met 1000 microseconden, en treuzelt bij input van boven 1800 microseconden langzaam naar de ingestelde maxpot waarde. maxpot kun je instelllen door boven de 1800 microsecondeen input te geven, en dan aan de maxpot te trimmen, tot de gewenste instelling.
    Zo heb ik de stetch verfromfraaid (In het duits hebben ze er een beter woord voor: Verschlimmbessert):
    Code:
    /*
    A switch to propo channel conversion for ATTiny.
    ************************************************
    This converter will take a 3-position switched channel and change it to an increase-stop-decrease channel.
    1 potmeter will adjust the maximum end point of the servo output between 1200 and 2000 microseconsd, whilst the minimum output always is 1000 microseconds
    At the initial pulse arriving, the sisgnal will start at 1000 microseconds, steering the Servo into the safe throttle closed condition.
    The PWM from the receiver is captured with interrupts, based on Phil Green's Digispark V-tail mixer.
    
          ATTiny TOP VIEW:
               _____
            1-|  U  |-8
            2-|     |-7
            3-|     |-6
            4-|_____|-5
    
    */
    
    #define Rxch 0     // receiver channel connected to P0 (ATTiny physical pin 5)
    #define potmax 3.  // maximum throttle setting from potmeter on P3 (ATTiny physical pin 2)
    #define servo 4    // servo output from P4 (ATTiny physical pin 3)
    
    volatile unsigned long timer_ch; // all timer variables are unsigned long
    volatile int pulse_time = 1000;
    volatile byte chWas = 0, sync = 0;
    int RXpulse, Minpulse, Maxpulse, Outpulse = 1005;
    
    void setup()
    {
      pinMode(servo, OUTPUT);
      pinMode (potmax, INPUT);
      pinMode(Rxch, INPUT);
      timer_ch = 0;
      GIMSK = (1 << PCIE);   // Enable Pin Change Interrupts
      PCMSK = (1 << Rxch); // Enable interrupts for rx channel inputs
      sei();
    }
    
    void loop()
    {
      while (sync == 0);
      sync = 0;
      delay(6);  // do the o/p pulses mid-frame, reduces jitter...
      cli();
      RXpulse = pulse_time; // do an atomic copy in the quickest way
      sei();
    
      if (RXpulse <= 1200) Outpulse = Outpulse - 5;
      if (RXpulse >= 1800) Outpulse = Outpulse + 5;
    
      Minpulse = 1000;
      Maxpulse = 1200 + map(analogRead(potmax), 0, 1023, 0, 800); // Maxpulse: 1500 > 2000
     
      // constrain Outpulse between Minpulse and Maxpulse:
      if (Outpulse  < Minpulse) Outpulse  = Minpulse;
      if (Outpulse  > Maxpulse) Outpulse  = Maxpulse;
     
      digitalWrite(servo, 1); delayMicroseconds(Outpulse); digitalWrite(servo, 0); // servo out
    }
    
    ISR(PCINT0_vect)
    {
      if (PINB & (1 << Rxch)) timer_ch = micros(); // upgoing edge detected, start the timer
      else {
        pulse_time = (micros() - timer_ch); // downgoing edge detected, transfer the pulse_time
        sync = 1; // start the loop
      }
    }
     
    lecraM, Bruno van Hoek en max z vinden dit leuk.
  6. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.428
    Locatie:
    Boskoop
    Helemaal prima toch? V.w.b. de minpot: ik had aangenomen dat je een diesel- of glowmotor aandrijving ging gebruiken, en dat hiermee de minimum gasstand ingesteld kan worden. Maar dat zou mechanisch ook kunnen natuurlijk.

    Ik heb gisteren een aantal ATtiny's in de brievenbus gevonden, maar ik hoef de vereenvoudigde ISR niet meer te checken dus :oops:;):)

    2 dingetjes nog, zonder dat die de werking beïnvloeden:
    - volatile byte chWas kan vervallen ( sync niet!)
    - bij de Maxpulse regel staat in de begeleidende tekst nog steeds 1500 >2000

    Overigens, de Maxpulse regel ziet er zo begrijpelijker uit, mee eens. Maar als het alleen om het omdraaien van de pot richting gaat, kun je dat ook binnen de map() functie doen.
    Als voorbeeld:
    Maxpulse = 1200 + map(analogRead(potmax), 0, 1023, 0, 800) wordt dan Maxpulse = 1200 + map(analogRead(potmax), 0, 1023, 800, 0)
     
    Raymond-v-M en Bruno van Hoek vinden dit leuk.
  7. Bruno van Hoek

    Bruno van Hoek Vriend van modelbouwforum.nl PH-SAM Forum veteraan

    Lid geworden:
    23 aug 2002
    Berichten:
    11.222
    Locatie:
    Almere, MVA (ex-Daedalus Amsterdam)/ PH-SAM/F23D
    Prachtig toch, hoe we elkaar zo steeds beter maken....:thumbsup:
     
  8. Raymond-v-M

    Raymond-v-M Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    19 okt 2021
    Berichten:
    283
    Locatie:
    Sittard
    Prachtig! Alles op een presenteerblaadje!
    Filmpjes volgen als de hele Fleet set klaar is.
    Volgende uitdaging is de down uitslag beperken voor de repro SR2 actuator. Dat wil ik in de zender sketch aan gaan passen.
    Tobe heeft me daar een heel verhaal over gestuurd.
     
  9. Raymond-v-M

    Raymond-v-M Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    19 okt 2021
    Berichten:
    283
    Locatie:
    Sittard
    Even een uurtje tijd gehad om verder te knutselen.
    GG gas-servo emulator:
    IMG_2117.jpeg
    Krimkousje erom, en in het RX doosje inbouwen. Samen met 5V bec module en het ontvangertje. Potmetertje voor de maximale gasstand zit achter het trimmergaatje in het huisje, dus van buiten af te stellen:
    IMG_2118.jpeg

    Nu nog even een tywrapje als trekontlasting voor de kabeltjes, en poppetje gezien, kastje dicht.
    IMG_2119.jpeg

    Tja, en nu dan? Werkt het?


    Bijna klaar!
    Nu nog de digispark PPM encoder qau uitgangen optimeren voor GG. Later meer hierover. In de fleet kun je dan voor GG een andere digispark erin prikken (op het printje dat ik heb laten maken)
     
    Bruno van Hoek, HBZWEEF, theodorus en 4 anderen vinden dit leuk.
  10. Raymond-v-M

    Raymond-v-M Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    19 okt 2021
    Berichten:
    283
    Locatie:
    Sittard
    Het lijkt er toch echt op. Bedenk even dat de servo middels het toverprintje van Max en Bruno het rode gas-hendeltje naadoet.
     
    Bruno van Hoek en max z vinden dit leuk.
  11. Bruno van Hoek

    Bruno van Hoek Vriend van modelbouwforum.nl PH-SAM Forum veteraan

    Lid geworden:
    23 aug 2002
    Berichten:
    11.222
    Locatie:
    Almere, MVA (ex-Daedalus Amsterdam)/ PH-SAM/F23D
  12. Raymond-v-M

    Raymond-v-M Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    19 okt 2021
    Berichten:
    283
    Locatie:
    Sittard
    Zo. De Fleet heeft TBS, ter beschikking stelling, met dwangverpleging!
    Henk heeft hem vanmiddag, na demonstratie aan alle getuigen, in bewaring gesteld.
    Het past allemaal in het grotere plan, om een stukje GG geschiedenis te herschrijven…..
     
    HBZWEEF en Bruno van Hoek vinden dit leuk.

Deel Deze Pagina