mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuern des Servomotors funktioniert nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Grevak D. (xorda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich wollte einen SG90 mit meinem Atmega328P ansteuern, aber es 
funktioniert nicht. Dazu habe ich mir folgendes angeschaut: 
http://extremeelectronics.co.in/avr-tutorials/servo-motor-control-by-using-avr-atmega32-microcontroller/

Die PWM Leitung des Servos ist an PD5 angeschlossen

Mein Code:

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>

int main() {
    TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);
    TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10);
    ICR1 = 4999;

    DDRD |= 1 << DDD5;

    while(1) {
        OCR1A = 250;
        _delay_ms(1500);
    
        OCR1A = 500;
        _delay_ms(1500);
    }
}


Woran könnte das liegen?

: Bearbeitet durch User
Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grevak D. schrieb:
> Die PWM Leitung des Servos ist an PD5 angeschlossen

PD5 ist aber gar nicht der OC1A Ausgang beim Mega328. Du solltest PB1 
benutzen.

Autor: Grevak D. (xorda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke es klappt ! :D

Wo stehen die jeweiligen PINs für die Buffer?
Und wie finde ich heraus welche Winkel welcher Wert für OCR1A ist?

: Bearbeitet durch User
Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grevak D. schrieb:
> Wo stehen die jeweiligen PINs für die Buffer?

Was für Buffer? Die Pinbelegung der Mega48-328 stehen im Datenblatt auf 
der 2. Seite. Die Belegung ist fix, also liegt z.B. OC1A auf PB1, OC1B 
auf PB2 usw.

Grevak D. schrieb:
> Und wie finde ich heraus welche Winkel welcher Wert für OCR1A ist?

Schon der indische Artikel sagt ja, das das von Servo zu Servo etwas 
unterschiedlich ist. Im Allgemeinen bewegen sich die Servopulse immer 
zwischen 1ms und 2ms, so das die Mitte etwa bei 1,5ms liegt.

: Bearbeitet durch User
Autor: Grevak D. (xorda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, habe herausgefunden, dass es zwischen 130 und 600 liegt. Was dem 
Datenblatt des SG90 widerspricht. Danke für die Hilfe

Autor: Wolfgang (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Grevak D. schrieb:
> Was dem Datenblatt des SG90 widerspricht.
Das Datenblatt kann gar nicht wissen, dass du die Impulse mit dem Timer 
eines  Atmega328P erzeugen willst. Wie soll dein Wertebereich also dem 
Datenblatt widersprechen können.

Autor: Grevak D. (xorda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt steht zwischen 1 und 2 ms. Das müsste also bei 16Mhz und 
einen Prescaler von 64 4999 sein um dann zwischen ca. 250 und 500 zu 
kommen. Das weicht von 130 bis 600 ab. Also muss es kleiner als 1 ms und 
größer als 2 ms sein der Bereich

Beitrag #5414466 wurde vom Autor gelöscht.
Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grevak D. schrieb:
> Also muss es kleiner als 1 ms und größer als 2 ms sein der Bereich

Das ist bei den meisten Servos so. Der Bereich 1..2ms wird garantiert. 
Bei deutlich kürzeren oder längeren Zeiten kann exemplar- und 
typabhängig der Anschlag sein, so dass der Motor blockiert wird.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei man tunlichst darauf achten sollte, dass das nicht passiert. 
Solche Servos gehen ziemlich schnell kaputt, wenn sie gegen Block 
laufen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.