PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rp6 fährt zu schnell mit dem code von bascom



roboterheld
13.09.2007, 09:57
was ist an dem code falsch, die motoren rasen gleich los und fahren nicht so langsam an wie bei der routine von winavr-c , beim wert 70 haben die schon vollspeed. stimmt die config für den pwm-wert nicht bei bascom?

der wert liegt bei Pwm1a = 70, Pwm1b = 70



Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256


mfg

SlyD
13.09.2007, 14:06
Hallo,

ich kenne nun die ganzen Konstanten von BASCOM nicht - daher weiss ich nun nicht genau wie Dein PWM Modul konfiguriert ist.
Der Prescaler sollte aber anders eingestellt werden. 256 ist zu hoch (und damit die Frequenz ziemlich gering).

Die RP6Lib stellt das auf 19kHz Phase Correct PWM ein - schau Dir einfach die Initialisierung in der RP6Library an! Da sind auch erläuternde Kommentare zu finden.

Zitat:


TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
TCCR1B = (1 << WGM13) | (1 << CS10);
ICR1 = 210;



Mit der Einstellung hat er bei nem PWM Wert von 70 (und das beim hier möglichen Maximalwert von 210!) noch lange nicht die Maximalgeschwindigkeit erreicht.


In der RP6Library ist zusätzlich auch eine Regelung drin - also musst schon direkt die setMotorPower Funktion zum Vergleich hernehmen und die Regelung nicht verwenden (also nicht task_RP6System() aufrufen!)!

Mit der Regelung fährt er natürlich deutlich langsamer an.

Aber selbst mit setMotorPower werden die PWMs noch ein wenig langsamer hochgefahren im Timer Interrupt um abrupte Geschwindigkeitsänderungen zu vermeiden.

MfG,
SlyD

roboterheld
13.09.2007, 17:28
....auf 19kHz Phase Correct....

wie kommt ihr auf 19khz beim pwm?



Quarz = 8 MHz ; Prescaler = 1 ; Timer = 8 Bit ergibt: (8000000Hz/1) / (256*2) = 15,625 kHz


ich komme mit meiner rechnung auf 15,625 um den 19khz nahe zu sein die ihr am pwm habt.



was ist "WGM13" das finde ich hier

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial nicht.

welche bezeichnung wird dadurch ersetzt?

mfg

SlyD
13.09.2007, 17:34
s. Datenblatt S. 101

EDIT:
Und die gerade hinzugefügte Frage kannst Du ebenfalls im Datenblatt nachschauen. S. 107

MfG,
SlyD

roboterheld
13.09.2007, 17:48
welches datenblatt, das vom atmega oder irgendwo in der wiki?
mfg

SlyD
13.09.2007, 17:50
Im Wiki gibts keine Seite 101 ;)

Natürlich das Datenblatt vom ATMEGA32. Auf S. 101 steht wie man die PWM Frequenz im Phase Correct Modus berechnet.


EDIT:
grrr jetzt hast Du da oben schon wieder einen alten Beitrag editiert...


Quarz = 8 MHz ; Prescaler = 1 ; Timer = 8 Bit ergibt: (8000000Hz/1) / (256*2) = 15,625 kHz

ich komme mit meiner rechnung auf 15,625 um den 19khz nahe zu sein die ihr am pwm habt.



ICR1 auf 210 setzen dann passt es.

MfG,
SlyD

roboterheld
13.09.2007, 21:29
in bascom habe ich die register in lo und hi, muss jetzt die 210 in lo rein?

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
ICR1L = 210
ICR1H= 0


mfg

SlyD
14.09.2007, 11:08
Das sieht schon besser aus - allerdings kann es immer noch sein, dass BASCOM das nicht im richtigen Modus initialisiert und daher ICR1 gar nicht als TOP verwendet wird.

Hier hilft wohl nur mal ein Blick in die BASCOM Doku falls es sowas gibt.

MfG,
SlyD

roboterheld
23.09.2007, 18:53
wo muss ich was ändern um den wert 19khz noch zu erhöhen bzw damit die motoren bei vollgas noch weniger belastet werden ?

meine motoren laufen jetzt in dem bascom-demo mit den werten von winavr-c. haut gut hin. habe die werte wie in winavr-c direkt geändert.

mfg

SlyD
24.09.2007, 12:54
wo muss ich was ändern um den wert 19khz noch zu erhöhen


Du musst den ICR1 Wert verringern - also z.B. auf 200 setzen - nur senkst Du damit auch die Auflösung der PWM denn ICR1 ist im Phase Correct PWM Modus der TOP Wert.
Das gesagte gilt NUR für den Phase Correct PWM Modus mit den Einstellungen aus der RP6Library - bei Dir sieht es eher so aus als wäre es der Normal oder CTC Modus - schau dazu mal lieber ins Handbuch von BASCOM sonst ists nur Rätselraten!

Bringt aber sowieso nichts - 19kHz Phase Correct PWM sind schon gut so für diese Motoren.

MfG,
SlyD

roboterheld
24.09.2007, 13:25
hallo, ich habe das so geschrieben wie in winavr-c und nehme nicht die vorgegebene von bascom :



dim Tccr1a_set as byte
dim Tccr1b_set as byte

Reset Tccr1a_set .wgm10 ' werte wie in winavr-c
Set Tccr1a_set .wgm11
Set Tccr1a_set .com1a1
Set Tccr1a_set .com1b1

Tccr1a = Tccr1a Or Tccr1a_set ' dann mit or dem register zugewiesen

hier noch einmal das gleiche :

Reset Tccr1b_set .wgm12
Set Tccr1b_set .wgm13
Set Tccr1b_set .cs10

Tccr1b = Tccr1b Or Tccr1b_set

Icr1h = 0
Icr1l = 210


der motor verhält sich jetzt wie in winavr-c.