Problem Modellbauservo-Ansteurung mit Atmega8

Gast #3961348
Hallo,
für ein Schulprojekt meines Sohne möchte ich ein Modellbauservo mit dem 
Atmega8 steuern. Hierzu brauche ich ja, wie ich gelesen habe eine 
20ms-Phase mit jeweils 1-2ms Peak, um die Position zu steuern.
Ich habe mir für meinen Atmega folgendes Programm geschrieben:
1
#define F_CPU 1000000UL
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6
int main(void){
7

8
  TCCR1A |= (1<<COM1A1) | (1<<WGM11); // non-inverting mode for OC1A
9
  TCCR1B |= (1<<WGM13) | (1<<WGM12) | (1<<CS11); // Mode 14, Prescaler 8
10

11
  ICR1 = 2500; // 320000 / 8 = 40000
12

13
  DDRB |= (1<<PB1); // OC1A set to output
14

15
  while(1){
16
//125 = 1ms
17
//187 = 1,5 ms
18
//250 = 2ms
19

20
    OCR1A = 250; // set to 0° --> pulsewidth = 1ms
21
    _delay_ms(1000);
22
    //
23
    OCR1A = 187; // set to 0° --> pulsewidth = 1ms
24
    _delay_ms(1000);
25
    //
26
    OCR1A = 125; // set to 0° --> pulsewidth = 1ms
27
    _delay_ms(1000);
28
    //
29
  }
30
}

Auf dem Oszi bringt es auch genau den gewünschten Effekt (20ms mit 1-2ms 
Peak). (Angeschlossen an OC1A)
Aber, mein Servo macht keinen Mux?!? Habe ich hier einen Denkfehler?
Es sind mir 2 Dinge aufgefallen:
- am Ausgang des Atmega (OC1A bzw. PB1) habe ich ja keine +5V, sondern 
im Takt immer Masse
- zum Spaß habe ich mal die FB angeschlossen und nachgeschaut was da 
rauskommt --> da habe ich eine Sinuskurve.
Ich mach hieran schon sehr lange rum und komme einfach nicht weiter.
Gruß
Pfeiffy
Gast
Pfeiffy schrieb:
> Es sind mir 2 Dinge aufgefallen:
> - am Ausgang des Atmega (OC1A bzw. PB1) habe ich ja keine +5V, sondern
> im Takt immer Masse
> - zum Spaß habe ich mal die FB angeschlossen und nachgeschaut was da
> rauskommt --> da habe ich eine Sinuskurve.
> Ich mach hieran schon sehr lange rum und komme einfach nicht weiter.
> Gruß
> Pfeiffy

Wie hast du das Servo angeschlossen?
Wie misst du das Signal (Schaltplan-Skizze würde helfen).
Gast
hallo,
das servo bekommt strom von einem trafo, ca. 6v, es muckt auch wenn ich 
die anschliesse, also ok. Das signal habe ich an den oc1a angeschlossen, 
hier prüfe ich auch mit dem oszi.
Gast
> muss ich die Masse des Trafos mit der Masse vom Atmega verbinden?

Logisch. Hast du etwa nur den Signal-Pin angeschlossen? Dann kann auch 
nichts funktionieren, wenn dein Servo-Trafo und der ATmega unabhängige 
Versorgungsspannungen haben. Die Masse dient als Bezugspunkt für das 
Signal zum Servo.
Gast
Pfeiffy schrieb:
> hallo,
> das servo bekommt strom von einem trafo, ca. 6v, es muckt

Ein einfaches Modellbauservo erwartet 4,8V-6V Gleichspannung.
Hinter einem Trafo brauchst du eine Gleichrichtung und Glättung!

Bei Mikrosevos musst du mit Anfahr und Blockierströmen >500mA rechnen.


Pfeiffy schrieb:
> ? muss ich die Masse des Trafos mit der Masse vom Atmega verbinden?
ja natürlich. wie soll der Signaleingang denn Hi/Lo erkennen, wenn es 
kein Bezugspotential gibt?
Gast
Pfeiffy schrieb:
>     OCR1A = 250; // set to 0° --> pulsewidth = 1ms
>     ...
>     OCR1A = 187; // set to 0° --> pulsewidth = 1ms
>     ...
>     OCR1A = 125; // set to 0° --> pulsewidth = 1ms

Die Kommentare passen nicht zu den gesetzten OCR-Werten

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.