Forum: Mikrocontroller und Digitale Elektronik Problem Modellbauservo-Ansteurung mit Atmega8


von Pfeiffy (Gast)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

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).

von qwertzuiopü+ (Gast)


Lesenswert?

Was ist deine Versorgung? Modellbau-Servos haben einen recht hohen 
Einschaltstrom.

von Pfeiffy (Gast)


Lesenswert?

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.

von Fragender (Gast)


Lesenswert?

Sind auch die Massen (GND) von den 6V (Servo) und dem ATMEGA8 verbunden? 
Sonst wird das nichts.

von Pfeiffy (Gast)


Lesenswert?

? muss ich die Masse des Trafos mit der Masse vom Atmega verbinden?

von Fragender (Gast)


Lesenswert?

> 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.

von Pfeiffy (Gast)


Lesenswert?

gib mir bitte deine Kontonummer!!

von me (Gast)


Lesenswert?

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?

von W.A. (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.