mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pulse generieren mit AVRlib


Autor: B. Köppel (bekoeppel) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte für ein Schrittmotor-Projekt die AVRlib benützen, um 
kontinierlich Impulse zu generieren, die an eine Schrittmotorendstufe 
gereicht werden.
Die Endstufe generiert dann aus Richtung und Puls die Ansteuerung für 
den Schrittmotor.

Zum Einsatz soll dazu die pulse.h aus der AVRlib kommen. Die Einbindung 
klappt, die Funktionen können aufgerufen werden und ich versuche dann 
mit folgendem Code die Impulse zu generieren: (Beispiel für 300 Pulse 
bei 75Hz)
  pulseT1ASetFreq(75);
  pulseT1ARun(300);

Der Compiler compiliert brav ohne Fehler, das Programm lässt sich auf 
den Controller schieben, aber es werden keine Impulse an OC1A 
ausgegeben.
Ich bin ziemlich hilflos, weil ich in meinem Programm keinen Fehler 
finden kann.


Bitte helft mir, das Programm ans Laufen zu kriegen :D
Vielen Dank
Benedikt Köppel

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die AVRLib kenn ich nicht.Auf welchem AVR programmierst du denn?

Viele AVRs (z.B. der Mega16) besitzen Timer,die eine PWM in Hardware 
realisieren können.Das wären dann 3 Zeilen,um den Timer zu 
initialisieren,der Rest läuft dann quasi von alleine.Im Datasheet des 
Atmega16 ist z.B. alles ab Seite 71 prima (aber auf englisch) erklärt.

Hab jetzt deinen Sourcecode nicht gelesen,allerdings würde ich so 
relativ triviale Dinge wie einen Timer zu initialisieren dann doch 
lieber von Hand machen und auf die Lib wo immer es geht verzichten.

Autor: B. Köppel (bekoeppel) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende einen ATmega32 und weiss schon, dass es einen Timer gibt. 
Aber da ich mit dem Schrittmotor nachher auch eine genaue 
Positionssteuerung machen will, bringt mir PWM nichts, weil ich 
überprüfen können muss, wieviele Impulse ausgegeben wurden.
Die AVRlib könnte sowas, weil sie darauf programmiert wurde.

Ich könnte natürlich einen "normalen" Timer, also ohne PWM nehmen und 
bei jedem Overflow im Interrupt den Pin kurz auf high und wieder zurück 
auf low schalten.
Ich nehme mal an, dass ich das mit dem Timer1 vom ATmega32 realisieren 
kann, der ja zwei Ausgänge OC1A und OC1B hat. Aber wie könnte ich 
konkret den jeweiligen Prescaler und Vorladewerte berechnen, wenn ich 
die gewünschte Frequenz kenne?
Das Programm müsste so flexibel sein, dass ich eine Funktion habe, die 
mir auf den beiden Ausgängen völlig unabhängige Impulse ausgeben kann, 
und das in beliebiger Frequenz, die dann programmintern berechnet 
werden.


Gruss aus der verschneiten Schweiz
Benedikt Köppel

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benedikt Köppel wrote:

> Die AVRlib könnte sowas, weil sie darauf programmiert wurde.

???

Wie wärs mal mit nem Link, damit man weiß, wovon Du überhaupt sprichst.


Man kann sehr wohl die Impulse einer PWM mitzählen.
Die Overflow- und Compareinterrupts sind auch in den PWM-Modi aktiv.


Peter

Autor: B. Köppel (bekoeppel) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

entschuldige, hier natürlich der Link: 
http://hubbard.engr.scu.edu/embedded/avr/avrlib/do...

Okay, die PWM-Pulse lassen sich mitzählen. Hört sich schon mal gut an. 
Bei PWM wird aber die Geschwindigkeit anhand der Pulsbreite verändert, 
das nützt mir nichts. Der Schrittmotor verändert die Geschwindigkeit 
anhand der Impulsfrequenz. Kann ich das bei PWM auch einstellen?

Gruss
Benedikt

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.