- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Suche Servotester mit 555er

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.10.2004
    Ort
    Bad Harzburg
    Alter
    36
    Beiträge
    302

    Suche Servotester mit 555er

    Hallöchen Bastler,

    ich habe hier vor längerer Zeit ein Beitrag gelesen mit einer Schaltung für ein Servotester mit ein 555er IC mit dem man Servos im kompletten drehbereich testen kann.
    Ich habe den "Servotester" vom großen C und muss sagen das der mich nicht gerade begeistern konnte. Dieser kann wenn es hochkommt ein viertel der dem servo zu verfügung stehenden Drehbereich testen.

    Deshalb bin ich nun seit Stunden auf der Suche dieser Schaltung, leider erfolg los.

    Statt dessen habe ich diese interessante Seite gefunden:

    http://www.elektronik-kompendium.de/...lt/0310131.htm

    und dachte das das ja quasi das ist was ich suche. Ich bin mir nur nicht sicher ob diese Schaltung genügt, weil dort beschrieben ist das man das Puls-Pausen-Verhältnis nicht kleiner als 1:1 bekommt und ich mir nicht sicher bin Ob ein Steuersignal von einem servo nicht auch längere Pausen als Pulse benötigt um beide seiten voll Auszulenken.

    Also bitte ich euch mir mit der Schaltung von der Seite weiterzuhelfen oder , wenn ihr habt, die schaltung für den Servoterster zu verlinken.

    MfG Jan

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Diese Schaltung geht sehr gut /www.domnick-elektronik.de/elek555.htm
    ziwschen D1 und Pot noch einen Widerstand mit 47k einfügen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.678

    Re: Suche Servotester mit 555er

    Zitat Zitat von Devil
    ... mit dem man Servos im kompletten drehbereich testen kann ...
    Ich hab mir mit nem tiny13 und einem Poti einen Servotester aufgebaut.

    .........................Bild hier  Bild hier  

    Bauteile:
    1 tiny13
    1 Steckfassung für den tiny
    1 Poti 100k
    1 Winkelstecker mit 3 Kontakten (für Servo)
    2 Kondensator VisKo 100 nF
    1 2950 (LowDrop Spannungsregler 5V für den tiny13)
    1 Streifenrasterplatine 12 x 24 Löcher
    etwas Schaltdraht für Brücken
    Anschluss für Spannungsversorgung 6 .. 7 V je nach Servo - die Anschlussspannung geht direkt auf den Servo.

    Ich hab noch nen ISP-Wannenstecker drauf, der ist aber nicht wirklich erforderlich. Ausserdem habe ich noch 2x2 Buchsenkontakte drauf zum Messen der Stromaufnahme und so und einen Kontaktstift auf Sig, um das Steuersignal für den Servo am Oszilloskop anzusehen.

    Der Stellbereich ist frei wählbar per Software im Programm. Er ist bei mir aber so eingestellt, dass ich die meisten Servos an beide Anschläge fahren kann.
    Geändert von oberallgeier (14.09.2017 um 18:16 Uhr)
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    @oberallgeier
    Das ist mal ein sehr gelungenes Projekt!
    Ist das irgendwo ausführlich beschrieben?

    Den Poti fragst Du sicher über einen AD-Wandler des Tinys ab, oder? Ist das genau genug, oder springt der Servo auch ab und an?

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.678
    Zitat Zitat von thewulf00
    ... gelungenes Projekt! ...
    Danke *gggg*.

    Zitat Zitat von thewulf00
    ... Ist das irgendwo ausführlich beschrieben? ...
    Wie man´s nimmt. Ich hab in meinem Ordner (das ist das Ding im Regal für Papier *ggg*) den Schaltplan in Bleistift auf kariertem Papier, und in meinem PC-Projektordner den Code. Ich dachte (bisher) nicht, das zu veröffentlichen, weils wohl genug Threads darüber gibt und die Lösung recht einfach ist (und es ist ein eher frühes Werk von mir: Assembler, nicht wirklich pfiffig programmiert und so . . . .).

    Zitat Zitat von thewulf00
    ... Den Poti fragst ... AD-Wandler des Tinys ... Ist das genau genug, oder springt der Ser vo auch ab und an?
    Der Ser vo springt geringfügig, wenn überhaupt (zumindest die Preisklasse, die ich üblicherweise kaufe) - weil das Poti vom Ser vo nicht sooo genau ist, vor allem aber, weil die Verbindung zwischen Abtriebsstummel des Ser vos und dem Poti im Ser vo weder spielfrei noch starr ist. Wegen des Controllers ist das wohl nicht. Der läuft zwar nur mit internem Oszillator bei 9,6 MHz, das ist eine Genauigkeit, die für den Ser vo völlig ausreicht. Den ADC betreibe ich mit 10Bit, das heißt, dass ich die rund 1,5 ms - die das Ser vosignal wegen der großen Bandbreite bestreicht - recht genau aufteilen kann. Und da der tiny13 nix anders tut, als den einen Ser vo zu bedienen, kann ich die Aufteilung der Rampe recht genau machen. Ich müsste mal nachsehen wieviel das ist, ich glaub es sind 4µs-Schritte (Interrupts).

    Was natürlich noch von Vorteil ist: man kann damit recht hübsch gehackte Ser vos (also mit verbliebener Elektronik aber ohne interne Verbindung Poti-Abtriebswelle) testen. Völlig ausgeweidete Ser vos, wie ich sie betreibe, brauchen aber eine richtige H- Brücke.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Du betreibst sie also als Getriebemotor ohne Elektronik? Das ist ja ja auch ungewöhnlich. Aber dann sind sie wenigstens wieder genauer :-p

    Dein kleines Projekt finde ich sehr nützlich, vor allem aber sehr ästhetisch - durch die Miniaturisierung. Ich bin auch ein Freund des Minimalen (zumindest in der Größe).

    Ich glaube, den Schaltplan kriege ich auch so hin, aber die Software interessiert mich...
    Eine Frage noch: Warum ein 100K-Poti?

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.678
    Zitat Zitat von thewulf00
    ... Getriebemotor ohne Elektronik ... genauer ...
    Ja, ich bin über den Geradlauf beider etwas unterschiedlicher Motoren (Zeitkonstante 12 bzw. 8 ms) auf meinem Dottie selber überrascht. Die Regelung gleicht die Unsymmetrie der Motoren aus: weniger als +/- 1mm bei 1 m Laufstrecke.

    Zitat Zitat von thewulf00
    ... Ich glaube, den Schaltplan kriege ich auch so hin, aber die Software interessiert mich...
    Man(n) sollte doch keine Arbeit zweimal machen. Schaltplan und Bestückung - handschriftlich *gggg*. Ich glaube, im Schaltplan fehlt die GND-Verbindung des 2950, die muss sein = (2) an GND.

    Code:
    ; Sicherung vom 21jan08, 13:46 nach Datei servo1_servoplatine-gut.asm
    ;===================================================================================
    ;* Target MCU        : ATtiny13
    ;* Target Hardware   : Servotester-Platine, Servo auf PB3, Poti auf PB4
    ;* Target cpu-frequ. : 9,6 MHz, interner Oszillator
    ;===================================================================================
    ;*Versionsgeschichte:
    ;====================
    ;x1599 21jan08 12ff Version für die "Servoplatine" adaptiert
    ;       dazu ISR+adc+servo1-x30-gut.asm abgeändert.
    ;
    ;* Aufgabenstellung
    ;* ISR zum Testen von einem Servo mit der Servotester-Platine
    ;    Servo über getrennte Leitung, max. 1 A, vom Labornetzteil versorgt
    ;    Portbelegung, Schaltung auszugsweise (übernomm. v. srv-adc+pwm-x29b.asm)
    ;
    ; Vcc(6V LNT) -----------------------------------------Vcc-Servo1
    ;                                                                 
    ; Vcc -----------tiny13-Vcc                                 
    ;         |                                                
    ;         |      tiny13-PB3=pin2----------------+---Signal-Servo1   
    ;         |                                     |               
    ;         |              + - - (poti1->ADC) - - +               
    ;         |              |                                      
    ;         |      tiny13-PB4--------+                           
    ;         |                        V                           
    ;         |                   +--------+                       
    ;         +-------------------+ 25klin +----+                  
    ;                             +--------+    |                  
    ;                                           |                  
    ; GND---------------------------------------+----------GND-Servo1
    ;             
    ;* ===============================================
    ; ######### Original war: ISR+adc+servo1-x30-gut.asm
    ;===================================================================================
    ; Speicherbelegung
    ;r14  low-Byte der ADC-Wandlung (lsb)
    ;r15  high-Byte der ADC-Wandlung: Beide ergeben einen Wert zwischen 0...1023
    ;r16 Mehrzweck, high-Byte in Pausen "pause_an", "pause_aus", "led_ende" u.ä.
    ;r17            low-Byte in Pausen, s.o.
    ;
    ;r18  --        --
    ;r19  --        --
    ;r20  --        --
    ;
    ;r21  Byte        Steuerbyte. Es werden nur Bits ausgewertet
    ;        "Rampe" an-aus, 1=Rampe an, bit 1 = Servo 1 , bit 5 = Servo 2
    ;        Übernahme Rampenwert, 1=Daten wurden noch nicht übernommen vom
    ;        Hauptprogramm in die ISR, 0=ISR hat Daten abgeholt und zwar
    ;            bit 2 = Servo 1 , bit 6 = Servo 2
    ;r22  1/2 Word lsb    Zeitwert Rampe aus auf-ab-Rechnerei im Hauptprogramm
    ;r23  1/2 Word msb zu r26
    ;r24  1/2 Word LSB    Zeitwert Rampe aus ADC/Poti im Hauptprogramm
    ;r25  1/2 Word MSB        wird vom r14/15 geholt und zurechtgerechnet
    ;
    ;r26  1/2 Word LSB    GESAMTDAUER Servoimpuls MUSS in r26/27 sein wegen sbiw
    ;r27  1/2 Word MSB    Zeitwert für GESAMTDAUER Servoimpuls, etwa 500 Takte ?
    ;
    ;r28  1/2 Word lsb    LSB RampenCOUNTER Servo1, wird in ISR runtergezählt
    ;r29  1/2 Word msb    MSB      Counter stammt vom ADC
    ;r30  1/2 Word lsb    LSB Auf-ab-COUNTER Servo2, wird in ISR runtergezählt
    ;r31  1/2 Word msb    MSB
    ;
    ;===================================================================================
    
    #include "tn13def.inc"
    
    ; Interrupthandler-Tabelle (aus ATTiny13_doc2535.pdf, Seite 42)
    ;    Address Code    Labels        ; Comments
    .org    0x0000    rjmp    anfang        ; Reset Handler
    ;.org    0x0003    rjmp    isr_x13        ;TIMO_OVF = Timer0 Overflow Handler
    
    .org    0x0006    rjmp    isr_ctc        ; IRS für Timer0 CompareA Handler
    ;
    ;===================================================================================
    ; Deklarationen für den Praeprozessor
    ; Konstanten        ####### evtl. auch keine Konstanten definiert
    ;
    #define    a    r16    ;Kurzbezeichung für Allzweckregister r16
    ;
    ;    Anschlussbelegung, vgl. srv-adc+pwm-x29b.asm
    #define servo1    3    ;Servo 1 auf Port PB3
    #define potiadc    2    ;Poti 1 am Port PB4 geht auf ADC-Kanal 2
    ;
    ;Festwerte und div. Daten für adcdat etc ====>
    #define    adcpsc    7    ; =7 ==> Clock/128, 9,6 MHz werden 75 kHz, vgl. doc, S93
    ;#define adcdat    3    ;Dummywert vom ADC   ###>>> "Nur" 8Bit-Wandlung ! ? ! 
    #define msges    5000    ;Gesamtzeit der Rampe: 5000 ISR-Zyklen sind 20 ms
    #define mstest    500    ;Test ergibt mit mstest 500 und tmprs 40: für 2,0 ms
                ;  das heisst: 4 µs Interrupt-Abstand (Fehler +4%)
    #define msmin    180    ;Minimalwert für Rampe: 0,5 ms
    #define    tmrprs    38    ;Preset im Timer-Register (hoffentlich für CTC)
    ;
    ;===================================================================================
    ; Hauptprogramm
    ;===================================================================================
    ;
    anfang:
        rcall      mc_init        ;Initialisiere den Mikrocontroller
        rcall    isr_ini        ;Initialisiere die ISR
        rcall    adcinit        ;ADC initialisieren
    ;
        sei            ; .. Interrupts allgemein zulassen im Hauptprogramm
    
    anfang2:
        rcall    adc_hol        ;Hole Daten vom ADC in Register low=r14 + high=r15
    ;
        rjmp    anfang2
    ;        
    ;===================================================================================
    ; Prozeduren
    ;===================================================================================
    ;
    adc_hol:    ;=== Hole Daten vom ADC, wird erst NACH der Wandlung verlassen
                    ;Nach Wandlung sind die Werte in; L=r14,H=r15
        ldi    r16,potiadc    ;Poti ist auf ADC-Kanal 2. >> Kanal 0 = Pin1=PB5,
                    ; K1(ADC1)=Pin7=PB2, K2=Pin3=PB4 und K3=Pin2=PB3
        rcall    rdadc        ;ADC auslesen
        ret        ;=====----->>>>>
    ;
    rdadc:        ;=== Hole Daten vom ADC in die Register low=r14 + high=r15
        out    admux,r16    ;vgl.doc2535, S 79
        sbi    admux,adlar    ;Result left adjusted ==> NUR 8-Bit-Wandlung
        sbi    adcsra,adsc    ;Wandlung starten
    adrdy:        ;=== Warte bis ADC fertig ist ==> ZWEI Wandlngen durchführen
        sbic    adcsra,adsc    ;Skip if bit is cleared => dann ADC fertig   
        rjmp    adrdy        ; .. wenn nicht fertig, warten
    adrdyb:
        sbic    adcsra,adsc    ;Erst zweite Wandlung bringt korrektes Erbebnis,
        rjmp    adrdyb        ;  vgl. doc2535, sonst könnte alter Wert da sein.
            ;   Dies dann, ###===>>> nur WENN der Kanal umgeschaltet wurde.
    ;    in    r14,adcl    ;Daten einlesen, zuerst Low-Byte - nicht bei adlar
        in    r15,adch    ;vgl. oben ADMUX (out 3), ADSC
        ret        ;=====----->>>>>
    ;
    ;===================================================================================
    ; Initialisierungprozeduren, für µC, ADC und Timer-ISR
    ;===================================================================================
    ;
    mc_init:    ;=== Initialisiere Mikrocontroller
            ; PB0 (servo1) + PB3 (servo2) = Ausgang, PB4 (poti1) = ADC-Eingang
        ldi    r16,0b00001000    ;Ausgang (1) auf PB3, Eingang (0) auf PB4
        out    ddrb,r16    ;Datenrichtungsbits setzen, Port ist Ausgang
        ldi    r16,0b11100111    ;Datenrichtungsbits setzen
        out    portb,r16    ;  und initialisieren
        ret        ;=====----->>>>>
    ;
    adcinit:    ;=== Initialisiere ADC und hole Daten
        ldi    a,adcpsc    ;Setze adpsc0,1,2 => Clock/128, siehe define
        out    adcsra,a    ;Lade prescaler ==>  75 kHZ, siehe define
        sbi    admux,potiadc    ;Wandlung vom Kanal ADC2 = PB4 = potiadc
        sbi    admux,adlar    ;Result left adjusted ==> NUR 8-Bit-Wandlung
        sbi    adcsra,aden    ;AD en-able einschalten
        sbi    adcsra,adsc    ;Wandlung zum Initialisieren starten
    ;
    adrdy_in1:    ;=== Warte bis ADC fertig ist ==> ZWEI Wandlngen durchführen
        sbic    adcsra,adsc    ;Skip if bit is cleared => dann ADC fertig   
        rjmp    adrdy_in1        ; .. wenn nicht fertig, warten
    adrdy_in2:    ;=== Warte bis ADC fertig ist ==> ZWEI Wandlngen durchführen
        sbic    adcsra,adsc    ;Skip if bit is cleared => dann ADC fertig   
        rjmp    adrdy_in2        ; .. wenn nicht fertig, warten
    ;
        ldi    r16,0b00000000    ;Dummy-Muster
        mov    r14,r16        ;Muster nach r14
        mov    r15,r16        ;  .. und nach r15
    
        sbi    adcsra,aden    ;AD en-able einschalten
        sbi    adcsra,adsc    ;Wandlung zum Initialisieren starten
    
        ret        ;=====----->>>>>
    ;
    ;
    isr_ini:    ;=== Initialisierung der ISR (war mal isrinit_x15)
    ;
    ;;Timer Register werden belegt
        ldi    a,(1<<wgm01)    ;prescaler ist 1, waveform = CTC
        out    tccr0a,a    ;Register TCCR0 ist für den Prescaler zuständig
        ldi    a,(1<<cs00)    ;prescaler ist 1 => kein Prescaling, Abstand zum
        out    tccr0b,a    ;  nächsten Interrupt bestimmt der
                    ;  CTC-Prescaler tmrprs
        ldi    a,(1<<ocie0a)    ;Hier Interrupts nach CTC eingeschaltet
        out    timsk0,a    ;Register TIMSK ist dafür zuständig 
        ldi    a,tmrprs    ;Hier wird der Timer vorgeladen. Er läuft dann
        out     TCNT0,a       ; .. tmrprs mal durch bevor ein Interrupt auftritt
        out    ocr0a,a        ;Preset tmrprs in OCR0A
                        ; .. Interrupts allgemein zulassen im Hauptprogramm
    ;    ret        ;=====----->>>>>
    ;
    ;
    ;===================================================================================
    ; Interrupt-Service-Routine
    ;#######>>>>> Muss real nicht zuerst der (letzte) PC gepusht werden ?
    ;===================================================================================
    ;
    ;
    isr_ctc:    ;=== Immer wieder Veränderungen
    ;
        sbiw    r27:r26,1    ;Pointer von 5000 runterzählen
                    ;  für EINEN Servoimpuls von 20 ms
        breq    i_neu        ;  .. und Spezialfall "null" ==> Daten umschaufeln
                    ;  und Rampe einschalten. WENN keine neuen Daten da
                    ;  sind, dann alte Daten nehmen :(
    ;
    ; Jetzt wird nachgesehen, ob eine der Rampen ausgeschaltet werden muss. Das steht
    ; im Portbit ddrb
    ;
    isr_nn:        ;=== Zähler der ISR steht nicht auf Null
    s1_pran:    ;=== Servo1: Prüfe, ob Rampe ist an
        in    r20,portb
        sbrs    r20,servo1    ;Ist Rampe von servo1 an?
        rjmp    i_raus        ;Wenn Rampe nicht an ist, dann gleich raus
    ;
        sbiw    r29:r28,1    ;Decrementiere Rampenwert
        brne    i_raus        ;weiter, wenn noch nicht Null zu servo2
        cbi    portb,servo1    ;  Sonst Lösche Rampe für Servo1
    ;
        rjmp    i_raus
    
        sbiw    r29:r28,1
        breq    i_neu
        rjmp    i_raus
    
    i_neu:                ;Daten neu in Register und port servo1 umschalten
        ldi    r28,low(msmin)
        ldi    r29,high(msmin)
    ;    mov    r17,r15        ;Es ist adlar gesetzt, das ADCLH ist in r15
        ldi    r18,0
        add    r28,r15
        adc    r29,r18
                    ;Und ADC-Wert gleich nochmal draufaddieren
                    ;  aber nur die Hälfte
        clc            ;Clear carry für anschliessende Division /2
        ror    r15        ;
        add    r28,r15
        adc    r29,r18
    ;
        ldi    r26,low(msges)    ;Loopgrenzen für Gesamtloop 20 msec
        ldi    r27,high(msges)
        sbi    portb,servo1    ;  Und setze Rampe für Servo1. FERTIG
    ;
    i_raus:
        reti        ;=====----->>>>>
    ;
    ;===================================================================================
    ; Ende des Quellcodes
    ;===================================================================================
    Zitat Zitat von thewulf00
    ... Warum ein 100K-Poti? ...
    Das war das Einzige lineare, das hier rumlag.
    Geändert von oberallgeier (14.09.2017 um 18:13 Uhr)
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Ah ok.

    Die 2.Zeichnung ist ja der Hammer. Ich mach das alles nie so geplant, sondern löte i.d.R. spontan...

    Da fällt mir ein: Am Freitag habe ich sowas ähnliches gebaut. Ich wollte den Drehencoder (quasi digitales Poti) ansteuern und hab den Wert des Encoders auf den Servo geschickt. (Also die Pulslänge ändere ich durchs Drehen)

    Aber du sag mal: Seh ich das richtig, dass das einer dieser reduzierten Conrad-Mini-Digitalservos ist? Wenn ja, hast Du den auch mal ungehackt angesteuert? Meine Schaltung geht nur mit analogen, irgendein Trick fehlt mir noch...

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.678
    Zitat Zitat von thewulf00
    ... 2.Zeichnung ... Ich ... löte i.d.R. spontan ...
    Ich bin ja noch etwas in den Anfängerschuhen - da muss man so etwas eben ein bisschen planen.

    Zitat Zitat von thewulf00
    ... Drehencoder ... Wert des Encoders auf den Servo geschickt ...
    Hmmm, verstehe ich das richtig? Du hast den Servo als Zeigerinstrument benutzt? Habe ich manchmal gemacht - mit meinen irDME´s oder mit meinem Sharp-GP2D120. Der Abstand (z.B. über ADC gemessen) wird so auf den Servo gegeben, dass der "Zeigerausschlag" mir Wert und Dynamik bringt (na ja, die Dynamik nur im Rahmen der Stellgeschwindigkeit des Servo).

    Zitat Zitat von thewulf00
    ... einer dieser reduzierten Conrad-Mini-Digitalservos ...
    Genau so einer ist das. Originalzustand. Der lässt sich einwandfrei mit dem gezeigten Servotester ansteuern, braucht aber reichlich Saft. Bei 6 .. 7V stelle ich die Strombegrenzung meist über 800 mA.
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    800mA - Omg.

    Naja, dafür sehen aber Deine Schaltungen besser aus...

    Naja, man kann es als Zeigerinstrument sehen, oder als Servotester.
    Der große Conradservo macht das genau wie der kleine. Aber der digitale macht nicht mit. Dabei schicke ich bloß 20ms-Impulse mit 1-2ms High. Machst Du das ebenso?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test