-         

Ergebnis 1 bis 7 von 7

Thema: Gelöst: Servo zittert an AtMega8

  1. #1

    Gelöst: Servo zittert an AtMega8

    Anzeige

    Hallo,
    ich habe versucht, ein Servo (Graupner C 577) mittels eines Atmega8 in Betrieb zu setzen. Das Servo stellt sich auch, aber leider zittert es dann immernoch, zieht dabei 0,5A und die Position stimmt nicht.

    Geschrieben wurde das Ganze in Assember, Takt des AtMega8 ist 2MHz, verwendet wurde (noch recht umständlich) der Counter0 ohne Prescaler.
    Der Zeitraum zwischen den Overflows ist also 0,128ms.

    Hardwareseitig hängt die orangene PWM Leitung an PC0, das Servo hat eine eigene Batterie, welche aber mit dem GND des µCs verbunden ist.
    Code:
    .include "m8def.inc"
    
    	.def temp = r16
    	.def tan = r17
    	.def taus = r18
    
    
    
    
    
    .org 0x000
    	rjmp main
    .org OVF0addr
    	rjmp ovf0
    
    main:	ldi temp, Low(Ramend)
    		out SPL, temp
    		ldi temp, High(Ramend)
    		out SPH, temp
    		ldi temp, 0b00000001
    		out TCCR0, temp
    		ldi temp, 1 << TOIE0
    		out TIMSK, temp
    		ldi temp, 1
    		out DDRC, temp
    		ldi taus, 156
    		ldi tan, 12
    
    		sei
    
    loop:	rjmp loop
    
    ovf0:	sbic PINC, 0
    		rjmp vgl
    
    		cpi taus, 0
    		breq sein
    		dec taus
    		reti
    
    sein:	sbi PortC, 0
    		ldi taus, 156
    		dec tan
    		reti
    
    vgl:	cpi tan, 0
    		breq saus
    		dec tan
    		reti
    
    saus:	cbi PortC, 0
    		ldi tan, 12
    		dec taus
    		reti
    Nach meinen Berechnungen sowie nach der Simulation im AVR Studio liegen die Zeiten: ca 20ms AUS - 1,5ms AN - 20ms AUS....

    Aber es gibt 2 Probleme:
    1. Das Servo zittert auch im eigentlichen Ruhezustand noch
    2. Die Position (1,5ms AN müsste ca 50% sein) stimmt bei Weitem nicht, liegt so ungefähr bei 20%.


    Danke schon Mal im Vorraus für eure Mühe.

    Gruß

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    29.09.2006
    Ort
    Kempen / Ndrh.
    Alter
    54
    Beiträge
    60

    Re: Servo zittert an AtMega8

    Zitat Zitat von DEC
    Hallo,
    ich habe versucht, ein Servo (Graupner C 577) mittels eines Atmega8 in Betrieb zu setzen
    Ich meine mich aus meinen Fernsteuer-Zeiten daran zu erinnern, dass Graupner eine "negative Ansteuerung" verwendet hat, wohingegen alle anderen Hersteller (damals z.B. Multiplex) eine "positive Ansteuerung" bevorzugten.
    Für Dich heißt das, mal zu versuchen, die PWM probehalber so umzuprogrammieren, dass alle Pegel, die jetzt LOW sind HIGH werden und andersrum.
    Wie gesagt, ist nur eine Erinnerung, ich kann damit auch falsch liegen.

    Das Zittern kann nur kommen, wenn das Servo dauernd am Positionieren bleibt, weil z.B. Dein Programm eine ständig (leicht) wechselnde PWM herausgibt. Das lässt sich am einfachsten mit einem Oszilloskop kontrollieren.

    Gruß, Andreas

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    ausserdem sollten zwischen 2 impulsen unbedingt 10-20ms pause sein, das ist unter garantie die ursache fürs zittern also impuls von länge 1-2ms mit abstand von 10ms, das hat bei mir das zittern behoben

  4. #4
    Hallo,
    danke schon mal für die Antworten!

    Weiß jemand ob das C577 eine negative oder positive Ansteuerung hat?

    Eigentlich sollte das Programm ja immer ca 1,5ms Impuls und dann wieder 20ms Pause bringen. Die Pause hatte ich auch schon mal auf 12ms verringert, das brachte keine Verbesserung. Eventuell könnte einfach der AtMega8 keine gleichmäßigen Impulse bringen aber um das zu überprüfen sollte ich n Oszi haben und das hab ich leider keines.


    Gruß

  5. #5

    Problem gelöst!!

    Hallo,
    so hab das Problem gefunden!
    Ich hatte einen extremen Anfängerfehler beim setzen der Fuses gemacht, naja es waren in meinem Übersichtsblatt halt zwei Fuses verdreht. Seit dem ich die Fuses richtig gesetzt habe käuft die ganze Sache problemlos!

    Das Graupne Servo C 577 besitzt allderings schon eine positive Ansteuer-Logik!!

    Der oben gepostete Quelltext passt, das Servo stellst sich genau auf 50%.


    Gruß

  6. #6
    Hallo DEC,

    kannst du noch sagen was du mit den Fuses falsch gemacht hast? Würde mich noch interessieren.

    Danke Tungsten

  7. #7
    Servus,
    ja klar kein Problem!
    Das ganze Projekt ist ja für einen AtMega8 @ 2MHz ausgelegt.
    So hab ich in einer Zusammenfassung, die ich irgendwann einmal im Internet gefunden habe, nach den Fuse-Bits für 2MHz geschaut.
    Da stand dann drin, dass man die Fuse-Bits 0; 1; 3 setzen muss.
    Leider ist da dem Verfasser wohl ein Fehler unterlaufen, da man für 2MHz beim AtMega8 die Fuse-Bits 0;2;3 setzen muss.

    Somit ist der AtMega wohl in irgend einem Takt gewesen der halt einfach nicht gepasst hat, zumindest wollte das Servo diesen nicht akzeptieren.


    Gruß

Berechtigungen

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