pwm programm,atmega324

OP #6193512
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);
    }
}
#6193537
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...

Antwort schreiben

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.

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.