PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit m328p



fat tony
05.07.2011, 18:24
Hallo,
ich habe folgendes Problem.
Ich benötige eine Steuerbaren Analogausgang (0-5V), dazu will ich einen mC nutzen.
Habe mir überlegt einfach eine PWM zu erzeugen so das ich über das High/Low Verhältnis den Mittelwert verändern kann.

Jetzt stellt sich mir nur die Frage wie ich das Softwareseitig umsetzen kann ?
Ich brauche ein Programm dem ich über eine feste Periodendauer das Verhältnis zwischen Ein und aus vorgeben kann.

Das ganze einfach in der Hauptschleife laufen lassen und mit "wait" Zeiten Arbeiten hat war leider viel zu ungenau und mit Interrupts kenn ich mich leider zu wenig aus.

Hat jemand einen Lösungsansatz für mich?

Bammel
05.07.2011, 19:04
mach das ganze über die timer da kannst du hardwaretechnisch eine pwm erzeugen.

wenn du es ganz auf die spitze treiben willst könntest du das nach dem glätten nochmal mit dem AD-Wandler einlesen und regeln.

fat tony
05.07.2011, 19:12
Ne, geregelt muss es nicht sein.
Ich muss doch im Grunde zwei Timmer haben, und bei sagen wir einmal einer Periodendauer von 10ms
Je nach gewünschter Spannung:
t1 = 10*(1-x) t2 = 10*x
Wenn ich x jetzt zwischen 0 und 1 verändere kann ich prozentual die Spannung einstellen.
x = 0 0V
x = 0.5 2.5V
x = 1 5V
Aber ich muss ja irgendwie gewährleisten, dass neben der Modulation auch noch weiterhin der Sollwert eingelesen wird ohne, dass es zu Verzögerungen kommt!?

Bammel
05.07.2011, 19:22
lese mal im datenblatt was dort zu den timern steht.

der m328p generiert mit einem timer ein PWM signal und das von selbst. du musst nur, bei einem 8bit timer, einen wert von 0 - 255 vorgeben.

daneben hast du noch alle zeit der welt was anderes zu machen

wkrug
05.07.2011, 20:01
Ich würd es auch über die Timer und Hardware PWM machen.
Dazu ist noch nicht mal ein Interrupt nötig, weil die PWM Generierung rein in Hardware läuft.
Bei den 8 Bit Timern hast du ne 8 Bit PWM ( 256 Stufen ) mit dem 16Bit Timer ( Timer 1 ) gibts 65536 Stufen und 2 PWM Ausgänge OCR1A, OCR1B.
Einzig die PWM Frequenz ist nicht stufenlos wählbar, sondern abhängig von der Taktfrequenz des Controllers, dem Prescaler und der Eingestellten Auflösung. Denn die PWM des Timer1 kann man mit verschiedenen Auflösungen laufen lassen.

Was noch zu beachten wäre ist, das der Controller keine großen Lasten treiben sollte. LED's oder Siebensegmentanzeigen direkt vom Controller zu speisen ist keine gute Idee, wenn man die PWM's benutzen will. Man kriegt dann die Ausgangsspannung nicht mehr auf 0V runter.
Sollen solche Lasten betrieben werden müssen den Controllerports Treiber nachgeschaltet werden.

fat tony
05.07.2011, 22:37
Ich habe die folgende Funktion gefunden:

PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() (http://arduino.cc/en/Reference/AnalogWrite) function.
Jedoch kann ich diese Funktion nur nutzen wenn ich auch den Andruino-Programmer verwende oder sehe ich das falsch ?
Habe nur noch nie mir mit diesem gearbeitet, gibt es große Unterschiede ?

Hat jemand eine Programmbeispiel ? Eventuell sogar für Bascom ?

wkrug
05.07.2011, 22:58
Ich bin nun gerade kein Bascom Jünger, aber so weit ich weiß sind die PWM Funktionen in config timer... mit drin.

Würd die Frage mal in der Bascom Abteilung stellen, oder nach passenden Threats suchen oder u.U die Bascom Hilfe verwenden.

fat tony
08.07.2011, 09:52
Also ich habe jetzt das Tool von Arduino benutzt und es mit der analogWrite() (http://arduino.cc/en/Reference/AnalogWrite) - Funktion gelöst.
Funktioniert super :p

Danke für eure Hilfe.