Hitec Drehzahlsensor im Eigenbau

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Chris Benndorf
    Member
    • 30.12.2008
    • 414
    • Chris
    • MFSV Sippersfeld, Pfalz (und auf der Wiese nebenan)

    #1

    Hitec Drehzahlsensor im Eigenbau

    Ich habe ein wenig gebastelt und einen meiner Arduinos dazu gebracht, die Drehzahl meines Helis zu messen und an die Hitec HTS-SensorStation zu uebermitteln. Der Vorteil der Bastel-Loesung ist, dass man auch andere Sensoren nutzen kann, als die von Hitec vorgegebenen - sprich: Alles, was ein Rechteck-Signal erzeugt!

    Hier der Arduino-Code:

    Code:
    /*
      RPM Sensor for Hitec HTS-SS
      
      Times a pulse on D2 and pulses it out on D13 in Hitecs RPM sensor format
     
      This example code is in the public domain.
     */
    
    #define LED  13
    #define SENSOR  2
    
    void setup() {                
      pinMode(LED, OUTPUT); 
      pinMode(SENSOR, INPUT);
      
      digitalWrite(LED, LOW);
      
      // PullUp for the sensor (may be needed for hall effect sensor)
      // digitalWrite(SENSOR, HIGH);  
    }
    
    void blink_Bit(bool b) {
      digitalWrite(LED, b);     // turn the LED on (HIGH is the voltage level)
      digitalWrite(LED, LOW);   // turn the LED off by making the voltage LOW
    }
    
    void blink_BCD(uint8_t bcdnum) {
      // 0 = all bits set  
      if (bcdnum == 0)
        bcdnum = 10;
      
      // Blink bcdnum of bits  
      for (int i = bcdnum; i>0; i--) {
        blink_Bit(HIGH);
      }  
      
      // Fill up to 10 bits
      for (int i = 10 - bcdnum; i>0; i--) {
        blink_Bit(LOW);
      }  
      
      // long line of stop bits 
      delayMicroseconds(25);               // wait a second...
    }
    
    void blink_Packet(uint32_t rpm) {
      uint8_t value[10] = {0,0,0,0,0,0,0,0,0,0};
      uint8_t i = 0;
      
      // Convert RPM to BCD
      while(rpm > 0){
        value[i] = rpm % 10;
        rpm /= 10;
        i = i + 1;
      }
      // Send 2 Start bits
      blink_Bit(HIGH);
      blink_Bit(HIGH);  
      
      // and 5 digits as BCD
      blink_BCD(value[4]);
      blink_BCD(value[3]);
      blink_BCD(value[2]);
      blink_BCD(value[1]);
      blink_BCD(value[0]);
    }
    
    void loop() {
      uint32_t duration;
      uint32_t rpm;
    
      //Time one rotation, but wait no longer than .5 seconds for a pulse
      duration = pulseIn(SENSOR, HIGH, 500000L);
      rpm = duration;
      if (duration > 0) {
        //Add 2% as offset for the magnet, since it is not measured by pulseIn()
        rpm += rpm / 50L; 
        
        // Devide one Minute (60 * 1000 * 1000 microsecs) by duration of a rotation
        // And devide it again by 10 because the HTS-SS needs it this way
        rpm = 6000000L / rpm; 
      }
    
      // Send rpm to HTS-SS
      blink_Packet(rpm);
    
      // it needs some time...
      delayMicroseconds(500000L -  duration);               // wait half a second
    }
    Eine kleine Schaltung dazu werde ich demnaechst auch noch liefern, bis dahin ist das wohl eher etwas fuer "Kenner", wobei jeder gerne eingeladen ist, daran mitzuwirken...

    PS: Achtet beim Basteln darauf, dass die Sensor-Station 3,3V Signal braucht! Die normalen Hall-Effekt-Sensoren (TL4905) funktionieren erst ab 3,8V!

    Gruss
    Chris
    Rex 600 N/GT5, 600 ESP/GR-18+3xG, Warp 360 und Atom 500 mit Brain, X3/GR-18+3xG
    GR mz-24
  • Chris Benndorf
    Member
    • 30.12.2008
    • 414
    • Chris
    • MFSV Sippersfeld, Pfalz (und auf der Wiese nebenan)

    #2
    AW: Hitec Drehzahlsensor im Eigenbau

    So, es ist vollbracht - Drehzahl- und Temperatursensor im Eigenbau:



    Als Temperatursensoren (blaue Draehte in den Motor) kann man ganz billige 10KOhm-NTC-Widerstaende nehmen, die Genauigkeit reicht fuer unsere Belange allemal aus.

    Der Code fuer den ATtiny45 (8Mhz) mit einem Allegro A1120 Hall-Sensor (kann 3,3V!) und ohne weitere Bauteile (optional LED + Widerstand):

    Code:
    /*
      Hitec RPM Sensor 
      
      Reads sensor pulse on Port_B1 and pulses it out on Port_B0 in Hitecs RPM sensor format
     
      This example code is in the public domain.
     */
    
    #define HTS_SS  0
    #define SENSOR  1
    #define STATLED  4
    
    /*
      digitalWrite() ist too slow to get the timing right at 8 MHz so we have to 
      address the registers directly
    */
    #ifndef cbi
    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
    #endif
    #ifndef sbi
    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
    #endif 
    #ifndef nop
    #define nop()  __asm__("nop\n\t"); 
    #endif
    
    void setup() {                
      pinMode(HTS_SS, OUTPUT); 
      pinMode(STATLED, OUTPUT); 
      pinMode(SENSOR, INPUT);
      
      digitalWrite(HTS_SS, LOW);
      digitalWrite(STATLED, LOW);
      
      // PullUp for the sensor (may be needed for hall effect sensor)
      digitalWrite(SENSOR, HIGH);
    }
    
    void loop() {
      uint32_t duration;
      uint32_t rpm;
    
      //Time one rotation, but wait no longer than .5 seconds for a pulse
      duration = pulseIn(SENSOR, HIGH);
      rpm = duration;
      if (duration > 0) {
        // the duration is a bit off, so add some percentage to get it right...
        rpm += rpm / 13L; 
        
        // Devide one Minute (60 * 1000 * 1000 microsecs) by duration of a rotation
        // And devide it again by 10 because the HTS-SS needs it this way
        rpm = 6000000L / rpm; 
        
        // If we got a valid signal, we light up the LED
        digitalWrite(STATLED, HIGH);
      }
    
      // Send rpm to HTS-SS undisturbed from interrupts 
      // otherwise the signal is to unstable
      cli();
      blink_Packet(rpm);
      sei();
      
      // a little pause...
      delay(100);               // wait a tenth of a second
      
      // Switch the LED off again...
      digitalWrite(STATLED, LOW);
    }
    
    void blink_Packet(uint32_t rpm) {
      uint8_t value[10] = {0,0,0,0,0,0,0,0,0,0};
      uint8_t i = 0;
      
      // Convert RPM to BCD
      while(rpm > 0){
        value[i] = rpm % 10;
        rpm /= 10;
        i = i + 1;
      }
      
      // and 5 digits as BCD
      pulseout_decimal_digit(value[4],true);
      pulseout_decimal_digit(value[3],false);
      pulseout_decimal_digit(value[2],false);
      pulseout_decimal_digit(value[1],false);
      pulseout_decimal_digit(value[0],false);
    }
    
    void pulseout_decimal_digit(uint8_t bcdnum, boolean send_start) {
      // 0 = all bits set  
      if (bcdnum == 0)
        bcdnum = 10;
      
      // Send 2 Start bits with the first packet
      if (send_start == true) {
        sbi(PORTB,HTS_SS);
        nothing();
        cbi(PORTB,HTS_SS);
        nothing();
        sbi(PORTB,HTS_SS);
        nothing();
        cbi(PORTB,HTS_SS);
        nothing();
      }
      
      // Blink bcdnum of bits  
      for (int i = bcdnum; i>0; i--) {
        sbi(PORTB,HTS_SS);
        nothing();
        cbi(PORTB,HTS_SS);
        nothing();
     }  
      
      // Fill up to 10 bits
      for (int i = 10 - bcdnum; i>0; i--) {
        nothing();
        nothing();
      }  
      
      // long line of stop bits - VERY important timing!
      nothing();
      nothing();
      nothing();
      nothing();
      nothing();
      nothing();
      nothing();
      nothing();
      nothing();
      nothing();
    }
    
    // Some nops as delay to get the timing right
    void nothing(){
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
      nop();
    }
    Der Code ist sehr kritisch im Timing, deswegen ist er auch sehr hemdsaermelig geschrieben. Er laesst sich aber mit der Arduino-Umgebung compilieren und programmieren. Man braucht aber die Hardware-Beschreibung fuer die TinyAVRs und einen Programmer.

    Die "Schaltung" werde ich auch noch einstellen...

    Kabel und Stecker findet man uebrigens in dieser Apotheke, z.B.:

    Litze-gecrimpt-Serie-ZH
    Buchse/Gehaeuse-RM-15-mm-2Pole

    Gruss
    Chris
    Rex 600 N/GT5, 600 ESP/GR-18+3xG, Warp 360 und Atom 500 mit Brain, X3/GR-18+3xG
    GR mz-24

    Kommentar

    • miro911
      Senior Member
      • 15.02.2012
      • 1957
      • Jochen
      • Düsseldorf und Umgebung

      #3
      AW: Hitec Drehzahlsensor im Eigenbau

      Ok , ich gebe es zu ! Ich verstehe nur Bahnhof
      TDR II Speed mit Pyro 900 Custom
      DiaboloS mit Scorpion 4540 Custom

      Kommentar

      • Chris Benndorf
        Member
        • 30.12.2008
        • 414
        • Chris
        • MFSV Sippersfeld, Pfalz (und auf der Wiese nebenan)

        #4
        AW: Hitec Drehzahlsensor im Eigenbau

        Zitat von miro911 Beitrag anzeigen
        Ok , ich gebe es zu ! Ich verstehe nur Bahnhof
        Mir geht's dabei scheinbar nicht viel besser: Wollte gerade mal einen Flug damit machen, da kippt beim Hochtouren der Heli fast um! Ich Voll-Depp habe nur einen Magneten eingeklebt und mir somit wunderschoene Vibrationen eingehandelt Dabei ist im HZR des Rex 450 extra ein Platz fuer EINEN Magneten vorgesehen... Grosse Helis sind doch viel toleranter!

        Dann werde ich wohl doch auf optische Abtastung des AuRo-Zahnrades umschwenken, dann habe ich wenigstens auch bei ausgeschaltetem Motor die Drehzahl.

        Gruss
        Chris
        Rex 600 N/GT5, 600 ESP/GR-18+3xG, Warp 360 und Atom 500 mit Brain, X3/GR-18+3xG
        GR mz-24

        Kommentar

        • Darko
          RC-Heli Team
          Forum-Nanny
          • 27.06.2005
          • 8289
          • Darko
          • MSV Oberhausen, Neulussheim, Karlsruhe

          #5
          Re: Hitec Drehzahlsensor im Eigenbau

          Hallo Chris,

          Warum keinen Phasen Sensor?

          Gruß
          Darko

          Kommentar

          • Chris Benndorf
            Member
            • 30.12.2008
            • 414
            • Chris
            • MFSV Sippersfeld, Pfalz (und auf der Wiese nebenan)

            #6
            AW: Re: Hitec Drehzahlsensor im Eigenbau

            Zitat von Darko Beitrag anzeigen
            Warum keinen Phasen Sensor?
            Mein Grund: Ich moechte die Kopfdrehzahl wissen und nicht die (verfaelschende) Motordrehzahl.

            Theoretisch ist aber genauso ein Phasensensor anschliessbar. Ein Phasensensor ist mWn. aber auch erheblich aufwendiger und somit teurer (der Spektrum-Sensor kostet weit ueber 20 Euro). Ein gekaufter Magnetsensor (Align) ist fuer 10.- Euro zu bekommen.

            Ansonsten weiss ich derzeit auch nicht, wie man so einen Phasensensor aufbaut - vermutlich ein einfacher Comparator oder Schmitt-Trigger?!

            Gruss
            Chris
            Rex 600 N/GT5, 600 ESP/GR-18+3xG, Warp 360 und Atom 500 mit Brain, X3/GR-18+3xG
            GR mz-24

            Kommentar

            • Husi
              Member
              • 11.01.2007
              • 117
              • Mirko
              • Darmstadt

              #7
              AW: Re: Hitec Drehzahlsensor im Eigenbau

              Moin Chris,

              saubere Arbeit von dir. Berichte bitte weiter (auch wenn ich mit MPX unterwegs bin).

              Zitat von Chris Benndorf Beitrag anzeigen
              Ansonsten weiss ich derzeit auch nicht, wie man so einen Phasensensor aufbaut - vermutlich ein einfacher Comparator oder Schmitt-Trigger?!
              Viel Ahnung habe ich auf diesem Gebiet (noch) nicht. Darum nutze ich im Augenblick diesen Sensor: SM-Modellbau - Brushless Drehzahlsensor für ca. 15€, den ich direkt am Regler verlötet habe.

              Viele Grüße
              Mirko
              Angehängte Dateien

              Kommentar

              • Chris Benndorf
                Member
                • 30.12.2008
                • 414
                • Chris
                • MFSV Sippersfeld, Pfalz (und auf der Wiese nebenan)

                #8
                AW: Re: Hitec Drehzahlsensor im Eigenbau

                Zitat von Darko Beitrag anzeigen
                Warum keinen Phasen Sensor?
                Demnaechst in diesem Theater (heute angekommen):




                Das ist uebrigens dieser Phasensensor, wobei so ziemlich jeder andere auch gehen wird...

                Melde mich in Kuerze, wenn ich den AVR programmiert und auf eine kleine Platine verfrachtet habe...

                Gruss
                Chris
                Rex 600 N/GT5, 600 ESP/GR-18+3xG, Warp 360 und Atom 500 mit Brain, X3/GR-18+3xG
                GR mz-24

                Kommentar

                • Chris Benndorf
                  Member
                  • 30.12.2008
                  • 414
                  • Chris
                  • MFSV Sippersfeld, Pfalz (und auf der Wiese nebenan)

                  #9
                  AW: Hitec Drehzahlsensor im Eigenbau

                  So, ich habe gerade den ersten Test abgeschlossen, der mich aber vor ein Problem stellt:

                  Wie ermoeglicht man jemandem, der keine Erfahrung mit AVRs hat, die Anzahl Zaehne fuer das Ritzel und das HZR und die Menge Magneten im Motor einzugeben, wenn man nur 3 Pins frei hat (mit 7-8 Pins koennte man das binaer codieren)?. Wenn man einen Programmer hat, ist das ja auch kein Problem - Aber fuer Otto Normalverbraucher...?

                  Ahhh, ich wusste doch, dass Phasensensoren schwierig sind

                  Falls jemand eine Idee hat, raus damit!

                  PS: Ansonsten tut's, wie es soll! Die Konfig ist aber noch hart codiert...

                  Gruss
                  Chris
                  Rex 600 N/GT5, 600 ESP/GR-18+3xG, Warp 360 und Atom 500 mit Brain, X3/GR-18+3xG
                  GR mz-24

                  Kommentar

                  • Darko
                    RC-Heli Team
                    Forum-Nanny
                    • 27.06.2005
                    • 8289
                    • Darko
                    • MSV Oberhausen, Neulussheim, Karlsruhe

                    #10
                    AW: Hitec Drehzahlsensor im Eigenbau

                    Serielle Schnittstelle wäre mein Vorschlag. Dafür reichen 2 Pins...
                    nen USB zu seriell Wandler hat man von irgendeinem FBL System meistens zu hause...

                    Ansonsten.. hmm schwierig

                    Kommentar

                    • Linus
                      Senior Member
                      • 11.03.2010
                      • 1338
                      • Marc
                      • Zumikon

                      #11
                      AW: Hitec Drehzahlsensor im Eigenbau

                      Moin,

                      LED und Taster oder Codierbrücke. Die LED kann dann im Programmiermodus nett blinken und einem alles mitteilen was es braucht - mit dem Taster oder der Brücke wird programmiert. Regler-like.

                      LG
                      Linus
                      [FONT="Century Gothic"]linus[/FONT]

                      Kommentar

                      • Chris Benndorf
                        Member
                        • 30.12.2008
                        • 414
                        • Chris
                        • MFSV Sippersfeld, Pfalz (und auf der Wiese nebenan)

                        #12
                        AW: Hitec Drehzahlsensor im Eigenbau

                        Moin,

                        die Idee mit der seriellen Schnittstelle ist zwar softwareseitig leichter umzusetzen, ist aber spannungsabhaengig (3,3/5V) und kann leicht etwas kaputt machen. Die ganzen Schutzmechanismen einzubauen waere (mir) widerum zu aufwaendig.

                        Die Idee mit dem Taster und der LED finde ich gar nicht schlecht... Wir haetten sogar ein Display, dass die Werte anzeigen kann: Den Drehzahlmesser in der Anlage! Dh.: Wenn man das Setup macht, koennte das Display dazu genutzt werden, die ausgewaehlten Werte darzustellen.

                        Wenn man aber mal abschaetzt, fuer wieviele das ueberhaupt interessant ist, lohnt sich der Aufwand wahrscheinlich gar nicht. Ich war gerade bei meinem favorisierten Elektronikdealer auf der Webseite und habe dort fuer 15 Euro eine Teensyduino-Platine mit USB-Port gesehen. Damit waere es jedem Unerfahrenen moeglich, soetwas zu basteln und zu programmieren. Es sind ja nur noch zwei dreiadrige Kabel an den richtigen Pins anzuloeten. Nachteil: das Ganze koestet dann ca. 30 Euro... Alle die einen AVR programmieren koennen, haben ja sowieso alle Moeglichkeiten offen.

                        Mal sehen, wie ich da weitermache...

                        Gruss
                        Chris
                        Rex 600 N/GT5, 600 ESP/GR-18+3xG, Warp 360 und Atom 500 mit Brain, X3/GR-18+3xG
                        GR mz-24

                        Kommentar

                        • Del Torres
                          Senior Member
                          • 17.05.2010
                          • 1376
                          • Hendrik
                          • Meersburg

                          #13
                          AW: Hitec Drehzahlsensor im Eigenbau

                          Halte uns auf dem Laufenden

                          Den Phasensensor hätte ich noch rumliegen

                          Perfekt wäre natürlich wenn das Ganze ohne der Sensor Station geht ;-)

                          Kommentar

                          • nettworker
                            Member
                            • 01.03.2012
                            • 111
                            • Dieter

                            #14
                            AW: Hitec Drehzahlsensor im Eigenbau

                            Gibts eigentlich was neues?

                            Kommentar

                            Lädt...
                            X