PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Augangsfrequenz an ATMega8



Borki90
22.12.2007, 20:55
Hallo

Ich arbeite gerade an der Motor-Treiber Einheit an meinem Roboter.

Für die Berechnung von der Ausgangsfrequentz des Treibers habe ich die Formel aus der dem Wiki genommen:

(Quarzfrequenz/Prescale ) /(Timerauflösung*2)

Jedoch erhalte ich bei einer Messung mit dem Multimeter (Brymen BM805) immer ein total anderer Wert..
Hat irgendwer eine idee woran das liegen könnte? An der Ungenauigkeit des Gerätes kann es nicht liegen, denn der Unterschied beträgt immer eininge kHz..

mfg Borki90

Meine Page: www.Borki90.roboterbastler.de

Besserwessi
23.12.2007, 00:42
Im "Fast-PWM" Mode ist die Frequenz dopplet so hoch wie im "normalen" PWM Mode. Für Timerauflösung sollte die obere Grenze des Timers stehen.

Ein häufig gemachter Fehler ist ein Fehler in der Interpretation des Clock Settings. Wenn der RC Oszillator nicht auf der kalibrierten Frequenz schwingt, können die Abweichungen zum nominalen Wert recht groß sein.
Bei genügend hoher Frequenz sind Fehler von ein Paar kHz für die Frequenzanzeige bei billigen Multimetern nicht ungewöhnlich.

Borki90
23.12.2007, 01:07
Ich sollte noch anmerken, dass ich mich noch nicht so mit Controller auskenne...

Was meinst du mit Fast-PWM?

Der AVR läuft im Moment mit einem externen 16MHz Quarz (Fusebits aktiviert) und wird mit Bascom Programmiert.
Wie kann man die Quarzfrequenz überprüfen?

Vielen Dank für die Antwort

mfg Borki90

PS: Soo billig ist das Multimeter auch nicht... ^^

Besserwessi
23.12.2007, 16:23
Es gibt 2 Sorten von PWM: Fast und PhaseCorrect. Die unterscheiden sich im wesenlichen durch die höhere Frequenz beim fast-PWM. Die Details stehen in den Datenblättern.
Bei einem 16 MHz Quarz merkt man eine falsche Frequenz eigentlich recht schnell, denn da kommen im wesentlichen 1 MHz vom internen RC in Frage oder ggf. der Takt Teiler bei einigen neueren MEGA.... Sonst ist das PWM Signal eine gute Wahl um die Frequenz nachzumessen, aber darum geht es ja gerade.

Welche Frequenzen werden denn erwartet und gemessen ? ggf. auch mal den Code posten, dann wird es einfache den Fehler zu finden.

Borki90
23.12.2007, 16:38
Die Frequenz des Quarzes stimmt, soweit ich das messen kann.. einem "Wait 1" Enspringen auch etwa 1s Wartezeit..

Hier der aus meiner Sicht relevante teil des Codes:


$regfile = "m8def.dat"

$crystal = 16000000

$baud = 9600

Config Pinc.1 = Input
(...)
Config Pinb.2 = Output

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8


Daraus ergibt sich die erwünschte Frequenz: +/- 15kHz

Die gemessene Frequenz: 490Hz

Die gemessene Frequenz bleibt bei uterschiedlicher Abtastrate gleich, es kann also nicht daran liegen, dass das Multimeter die PWM nicht mag. (was auch nicht zu erwarten war..)

mfg Borki90

Besserwessi
23.12.2007, 23:09
Das sieht nach einem wirklich BASCOM spezifischen Problem aus. Es ist wirklich schwer zu sagen was der Compiler draus macht, außer man schaut sich den ASM Code an. Mit dem BASIC compiler kenne ich mich leider nicht so aus.

Borki90
23.12.2007, 23:10
Trotztem Danke... Ich werde den Post mal im Bascom Forum Verlinken..

mfg Borki90