- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 38

Thema: Weglaufen der Mittelstellung bei Servohack

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo,

    Zitat Zitat von oberallgeier
    Das hättste Dir jetzt patentieren lassen sollen
    Verdam..., hoffentlich noch nicht zu spät

    Zitat Zitat von radbruch
    Erste Umsetzung der Erkenntnisse wären wohl Belüftungslöcher in den Servogehäusen
    Wenn die Servos dauernd mit Höchstgeschwindigkeit laufen kann ich eigentlich nur sagen: je mehr Kühlung desto besser. Hab den Servo noch nicht unter Normalbedingungen, also den Servo als Servo unter die Lupe genommen. Aber auch da könnte ich mir Wärmeeinflüsse vorstellen (und hast Du ja auch schon bestätigt), besonders, wenn er mit Belastung läuft.

    @PICture: ich werd weiter nach der Hysterese Ausschau halten


    Damit man das Zustandekommen der Testergebnisse besser einschätzen kann, ein Bild der Testumgebung und das Servotesterprogramm auf einem ATtiny24 mit 16 Bit Timer. Rechts unten im Bild kann man die im Schraubstock eingespannte, jedoch von der mit Wärmweleitpaste angeklebten Aluplatte verdeckten Servoelektronik erkennen. Ein größerer "echter" Kühlkörper brachte viel bessere Ergebnisse. Rechte Seite des Steckbretts dient nur der Ausgabe der Meßwerte Versorgungsspannung des Ganzen: 5 Volt

    Bestimmung der Zeiten geschah durch Justieren des Potis, Horchen auf Motorgeräusche und Ablesen der Pulsweite - also keine Präzisonsmessungen Tendenz ist aber eindeutig.

    Code:
    '###################################################
    'File: servo_hack_01.bas
    'IDE: BASCOM-AVR DEMO Version 2.0.5.0
    '
    'Servotester mit Servopulseinstellung über Potentiometer
    'Servopuls Auflösung ist 2µs im Bereich 500 - 2546µs bei 50Hz
    '
    'ATtiny24
    'PA0 : ADC0, Eingang vom Poti
    'PA6 : OC1A, Servosignal - Ausgang zum Servo
    'PB0 : SW UART #1 , für Ausgabe der Pulsweite an 4 fach 7-Segmentanzeige
    '#######################################################
    
    $regfile = "attiny24.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 36
    $crystal = 8000000                      'internal Oscillator
    Osccal = &H8E                           'trim internal oscillator close to real 8MHz
    
    '##### Definitionen und Initialisierung für 7segment ausgabe ######
    Dim Number_string As String * 6
    Dim Digits(5) As Byte
    Dim X As Byte
    Dim Y As Byte
    Dim Idx As Byte
    Dim Num_to_disp As Word
    Declare Sub Display_value(num_to_disp As Word)
    Open "comb.0:115200,8,n,1" For Output As #1       'comb.0 -> TX ist Pin PB0
    Y = &B11111101                          'segment g
    For X = 1 To 5 : Put #1 , Y : Next      '7 segment initialisieren
    '#### Ende Definitionen und Initialisierung für 7 Segmentausgabe #######
    
    Dim Adc_result As Word
    Dim Timer1_overflows As Byte
    Timer1_overflows = 0
    
    Porta = Porta Or &B10111110             'all Pullups on at porta , exept PA6, PA0
    Portb = Portb Or &B11111110             'all Pullups on at portb , exept PB0 - TX
    Config Porta.6 = Output                 'servo at oc1a
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    Set Tccr1a.wgm11 : Set Tccr1b.wgm12 : Set Tccr1b.wgm13       'fast pwm - icr1 as top
    Icr1 = 19999                            ' :-) 50 Hz for Servo PWM
    Set Tccr1a.com1a1                       'clear oc1a on compare match
    Ocr1a = 1500                            '1,5ms pulse - Servo neutral position
    Set Tccr1b.cs11                         'timer1 on, prescaler 8 - 1Mhz at 8MHz systemclock
    
    On Timer1 Isr_show_pulsewidth
    Enable Timer1                           'overflow interrupt enable
    
    Enable Interrupts
    
    Do
      Adc_result = Getadc(0)                'read potentiometer position at ADC0 (PA0)
      Shift Adc_result , Left               'multiply by 2
      Adc_result = Adc_result + 500         'add offset for pulses from 500 till 2546µs
      Ocr1a = Adc_result                    'assign pulsewidth to compare register
    Loop
    
    Isr_show_pulsewidth:                    'isr may take time - no problem here
      Incr Timer1_overflows
      Timer1_overflows = Timer1_overflows And &B00001111       'display update about 3 times a second
      If Timer1_overflows = 0 Then Call Display_value(ocr1a)       'display actual pulsewidth
    Return
    
    '############ Folgende Zeilen bis zum Ende nur zur Datenausgabe über 7 Segmentanzeige #############
    Sub Display_value(num_to_disp As Word)  'gibt Dezimalzahlen bis 9999 aus
       Number_string = Str(num_to_disp)     'Zahl in String geben
       Str2digits Number_string , Digits(1) 'Ziffern im String in Byte Array geben
       X = Digits(1) + 1                    'in Digits(1) befindet sich Anzahl der Ziffern der Zahl
       For Idx = 5 To 2 Step -1
         If X < Idx Then
             Put #1 , &HFF                  'Leerstellen dunkel schalten
           Else
             Y = Lookup(digits(idx) , Pattern)       'Segmentpattern aus Tabelle fischen
             Put #1 , Y                     'Segmentpattern senden
         End If
       Next
    End Sub
    
    Pattern:                                'darzustellende Zeichen (hex 0..F...)
    'Segmente abcdefg:                      ' ":" = Doppelpunkt in der Mitte
       Data &B00000011                      'Ziffer "0", 0 = segment ein, 1 = aus
       Data &B10011111                      'Ziffer "1"
       Data &B00100101                      'Ziffer "2"
       Data &B00001101
       Data &B10011001
       Data &B01001001
       Data &B01000001
       Data &B00011111
       Data &B00000001
       Data &B00001001
       Data &B00010001
       Data &B11000001
       Data &B01100011
       Data &B10000101
       Data &B01100001                      'Ziffer "E"
       Data &B01110001                      'Ziffer "F"
       Data &B11111111                      'dunkel
       Data &B11111101                      'nur Segment g eingeschaltet (-)
    
    '########### ENDE  US-Meßprogramm_ICP.bas  ##############################################
    Gruß
    Searcher
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Testumgebung.jpg  
    Geändert von Searcher (16.09.2011 um 19:58 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.695
    Bravo, bravo! (Das zweite Mal wegen der besonderen Güte, nicht wegen der 15-Zeichen-Mindestgrenze!)
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    @all: bitte, Bitte, BItte, BITte, BITTe, BITTE kein Lob mehr. Sonst fühl ich mich genötigt weiterzumachen *schwitz*

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.695
    ... Sonst fühl ich mich genötigt weiterzumachen *schwitz* ...
    Kommt nicht infrage, denn wenn Du nicht schwitzt - müssen wir das selber machen - und selber schwitzen.
    Ciao sagt der JoeamBerg

  5. #5
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    72
    Beiträge
    13.143
    Tolle Sachen die da wieder im Gange sind.
    20 Sekunden Lauf ohne Last, max. Geschw., ohne Kühlkörper - Abweichung der Neutralstellung ca.46µs
    Das Servo ist gehackt, also ist ein fester Spannungsteiler auf dem Spannungseingang, der Vergeleichswert ist die Zeit und das Ganze driftet über der Temperatur.

    Es driftet hier um 46µs und das entspricht 4,6% der Impulsdauer?
    Entspricht das dann auch 4,6% der Spanung von 5V ?
    Kann man dem Spannungsteiler eine thermische Komponente geben?
    ...eine Diode auf den Chip kleben oder einen KTY oder erfordert es einen NTC der besonders empfindlich ist?

    So wurde ja früher kompensiert als noch nicht alles per SW ging.
    Man kann alternativ die Temperatur messen und in den Nullpunkt des PWM Wertes einrechnen.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo,

    weis nicht, ob es sich wirklich empfiehlt, das gehackte ES-05 mit der Originalelektronik zu betreiben. Das IC wird im Dauerbetrieb sehr heiß. Auf der anderen Seite der Platine befinden sich noch zwei Transistoren, die sich auch noch wirklich heiß anfühlen. Ich würde mich nicht trauen es über Minuten im Dauerbetrieb mit maximaler Geschwindigkeit laufen zu lassen. Bisher hatte ich es auch noch nicht unter Last betrieben.

    Zitat Zitat von Manf Beitrag anzeigen
    Kann man dem Spannungsteiler eine thermische Komponente geben?
    Aber noch ein paar Messungen:
    An die originalen Potianschlüsse wieder ein Poti (4,7k Trimmer) angeschlossen.
    Spannung über dem 4,7k Widerstand: 1922mV
    Schleifer auf den halben Spannungswert (961mV) eingstellt.
    Servo mit Servotester zum Stillstand gebracht - 1350µs Pulsweite
    Pulsweite um früher beobachtete Hitzeabweichung von 46µs verstellt und Spannungsteilerpoti nachgezogen bis Servo wieder zum Stillstand kam - 45mV Unterschied

    Die Totzeit erschwert eine genaue Festlegung von Meßzeitpunkten. Grob würd ich aber sagen, daß 1µs Abweichung einer Verschiebung von 1mV am Spannungsteiler entspricht.

    Das Verhalten wird unlinearer, je mehr man sich von der Mitte des Spannungsteilers fortbewegt.

    Es hat sich während der Versuche immer mal wieder eine andere Neutralstellung eingestellt - ca +-4µs. Bin noch nicht dahinter gekommen, woran das liegt. Temperatur könnte ich in dem Fall fast ausschließen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #7
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo Searcher !

    Zitat Zitat von Searcher Beitrag anzeigen
    Temperatur könnte ich in dem Fall fast ausschließen.
    Ich würde das bezweifeln, da der IC, wo angeblich der steuernde Controller sitzt und der Servopoti, bleiben doch nicht "cool".
    Geändert von PICture (19.09.2011 um 19:04 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

Ähnliche Themen

  1. Servo in Mittelstellung Bring
    Von manhunt im Forum Motoren
    Antworten: 14
    Letzter Beitrag: 08.05.2008, 20:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress