Forum: Mikrocontroller und Digitale Elektronik pwm programm,atmega324


von Teoman K. (teoman_k)


Lesenswert?

Hallo,

ich bin neu in diesem Forum und habe ein Programm,das ich nicht 
nachvollziehen kann.Hierbei gehts um einen Servo der an einem Atmega324 
angeschlossen ist und mit PWM vor und zurück bewegt werden muss.
Der atmega324 hat eine Frequenz von 1Mhz und der Servo braucht 50Hz.
Benutzt wird Fast PWM,Prescaler: 1,Nicht-invertierte Modus.Der max.Wert 
im Fast PWM beträgt 19999(da Servo Periode von 20 ms hat) und dieser 
wird in ICR1 geschrieben.

Das folgende Programm ist korrekt allerdings kann ich nicht 
nachvollziehen warum er vor und wieder zurück fährt.Bedeuten denn nicht 
beide Anweisungen in der while Schleife eine Vowärtsbewegung?

#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRD |= 0xFF;
TCCR1A |= 1<<WGM11 | 1<<COM1A1 | 1<<COM1A0;
TCCR1B |= 1<<WGM13 | 1<<WGM12 | 1<<CS10;
ICR1A = 19999;
OCR1A = ICR1 - 2000; //17999
while (1)
{
      OCR1A = ICR1 - 800;
     _delay_ms(100);
    OCR1A = ICR1 - 2200;
   _delay_ms(100);
    }
}

von Oliver S. (oliverso)


Lesenswert?

Nein. Schau dir mal an, wie eine Servo-PWM funktioniert. Die Position 
des Servos wird über die Pulsbreite kodiert.

Oliver

von Bernhard S. (b_spitzer)


Lesenswert?

Einmal wird eine Pulsdauer von 800µs = 0,8ms ausgegeben, das ist 
Rechtsanschlag. Nach 100ms wird eine Pulsdauer von 2200µs = 2,2ms 
ausgegeben, das ist Linksanshlag (oder jeweils umgekehrt...).

Das Servo wird sich dabei mit Maximalgescheindigkeit bewegen aber 
vermutlich das Ende nicht erreichen. Servos brauchen je nach Typ für 
60-90° Drehwinkel zwischen 100ms und 300ms. In der Zeit schaltet du 
bereits wieder um.
Mache das ganze mal in kleineren Schritten in einer Schleife
1
for(uint16_t PULS=800; Puls <= 2200; Puls+=100) {
2
   OCR1A = ICR1 - Puls;
3
   _delay_ms(100);
4
}

und danach in die andere Richtung...

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.