PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit bascom PWM an RN-Control



Vior
05.11.2009, 22:30
Hallo

Ich möchte gerne bei meinem RN-Control beim Anschluss Motoren ein pulsweiten moduliertes Signal von 0 Volt bis Akkuspannung 12 Volt ausgeben. Ich brauche momentan Bascom.
Ich hab schon viel nach so einem Thema in diesem Forum gesucht aber nichts gefunden, kennt sich jemand von euch aus? Kann mir jemand einen Link zu einem solchen Thema schreiben?

Ich verstehe wie ich die vier Ausgänge ein und ausschalten kann. Also 12 Volt, 0 Volt und -12 Volt zwischen zwei dieser vier Schraubklemmen.
Ich habe aber keine Ahnung, wie ich z.B. ein Signal von 5 Volt bekomme. Ich habe die Timer-Auflösung auf 10 Bit gesetzt.
Aber wenn ich nun mit
"Compare A Pwm = Clear Down"
"Pwm1a = 1023" auf
"Pwm1a = 1" setze komme ich nur auf 9,24 Volt runter und wenn ich
"Pwm1a = 0" setze springt es gleich runter auf 0 Volt.

Ich habe schon die Hilfe im Bascom gelesen, die RN-Wissen-Seite "Bascom und PWM" aber ich verstehe nicht, warum das Signal an den Ausgängen nicht tiefer als 9 Volt geht....

Ich hoffe Ihr könnt mir helfen.
mit besten Grüssen

Vior

Che Guevara
06.11.2009, 12:12
Hallo Vior,

ich benütze immer folgenden code bei meinem RN-Control:



$regfile = "m32def.dat"
$crystal = 16000000
$framesize = 32
$hwstack = 32
$swstack = 32


Config Portb.0 = Output
Config Portb.1 = Output
Config Portc.6 = Output
Config Portc.7 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Portb.0 = 1
Portb.1 = 0
Portc.6 = 0
Portc.7 = 1

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Pwm1a = 512 'von 0 bis 1023
Pwm1b = 512 'von 0 bis 1023


Enable Interrupts


Do

!nop

Loop

End


probier ihn doch bitte mal aus und sag mir, ob es funktioniert.
Vielleicht wäre es auch sinnvoll, wenn du deinen ganzen Code hier reinstellen würdest, nicht nur so einen kleinen Ausschnitt.

Gruß
Chris

rolber
06.11.2009, 17:05
Hallo !!
PWM bedeutet : Pulsweitenmodulation
D.h. wenn du PWM programmierst , wird immer ein Rechtecksignal der angelegten Spannung ausgegeben .
Das einzige was du bei PWM änderst, sind die Ein- bzw. Ausschaltzeiten des Rechtecksignals.
Natürlich kannst Du durch eine nachgeschaltete Elektronik daraus eine entsprechende Spannung erzeugen (Kondensator , Transistor u.s.w).
Im RN-Wissen ist alles ausführlich beschrieben.

MfG

Roland

Richard
06.11.2009, 17:44
Hallo


Aber wenn ich nun mit
"Compare A Pwm = Clear Down"
"Pwm1a = 1023" auf
"Pwm1a = 1" setze komme ich nur auf 9,24 Volt runter und wenn ich
"Pwm1a = 0" setze springt es gleich runter auf 0 Volt.

Ich habe schon die Hilfe im Bascom gelesen, die RN-Wissen-Seite "Bascom und PWM" aber ich verstehe nicht, warum das Signal an den Ausgängen nicht tiefer als 9 Volt geht....

Ich hoffe Ihr könnt mir helfen.
mit besten Grüssen

Vior

Moin Moin.

pwm1a=1023 enspricht volle Sopannung, hier 12V
Pwm1a = 0 entspricht dann halt 0V

1024 / 5 = 204,8 = ~ 205

Pwm1a = 205 sollten dann ~ 5 V ergeben

Das ist eine Gepulste Spannung, wenn Du das mit einem
Multimeter messen willst solltest Du einen Elco ~ 10µ
parallel schalten.

Gruß Richard

for_ro
06.11.2009, 17:55
pwm1a=1023 enspricht volle Sopannung, hier 12V
Pwm1a = 0 entspricht dann halt 0V

1024 / 5 = 204,8 = ~ 205

Pwm1a = 205 sollten dann ~ 5 V ergeben

Es tut hier nicht wirklich was zur Sache, weil am Ausgang eh ein Rechteck rauskommt, aber deine Rechnung ist so nicht korrekt.
Wenn 1023 12V entsprechen und du teilst die durch 5, dann musst du auch die 12V durch 5 teilen, was also 2,4V ergibt. Sonst würde ja
1024 / 1 = 1024 und sollte dann 1V ergeben (ist aber 12V).
5V würde bei 1024/12*5 ~ 427 erreicht.

Vior
06.11.2009, 18:26
Ich hab den Code per RS232 rübergeladen und getestet, bei den Ausgängen messe ich aber eine Spannung von 11 Volt obwohl es ja eigentlich 6 Volt sein müssten...

Mein Code sieht so aus, ich hab jedoch nur das eine Paar Ausgänge eingeschaltet und die auch nur auf Knopfdruck pulsweitenmoduliert.


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32


$crystal = 16000000 'Quarzfrequenz
$baud = 9600

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein


Config Portc.7 = Output
Portd.7 = 0
Config Portc.4 = Output
Portc.4 = 0


Config Portb.0 = Output
Portb.0 = 1
Config Portb.1 = Output
Portb.1 = 0
Config Portd.6 = Output
Portd.6 = 1


Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 1023
Pwm1b = 1023
Tccr1b = Tccr1b Or &H02


Do
Start Adc
Dim Ws As Word
Ws = Getadc(7)
If Ws > 400 And Ws < 450 Then
Portc.7 = 0
Else
Portc.7 = 1
End If
If Ws > 330 And Ws < 380 Then
Portc.4 = 0
Else
Portc.4 = 1
End If
If Ws > 260 And Ws < 305 Then
Portb.0 = 0
Portb.1 = 1
Else
Portb.0 = 1
Portb.1 = 0
End If
If Ws > 180 And Ws < 220 Then
Pwm1a = 5
Else
Pwm1a = 1023
End If
Loop
End


Ich dachte mir auch das ich nun je nach dem, was ich für "Pwm1a" einsetze, sich auch die Spannung am Ausgang A linear ändert, aber genau das funktioniert nicht.

Auf dem einen Taster habe ich noch die Funktion, das die Spannung ihr Vorzeichen ändert und auf zwei weiteren, das je eine LED leuchtet, solange der Taster gedrückt ist. Das funktioniert alles, so wie ich mir das vorstelle, aber das mit der PWM leider nicht...

Ich hoffe ihr könnt mir helfen.

mit besten Grüssen

Vior

Bammel
07.11.2009, 11:28
aber bei dir im code ist doch kein wert zu sehen der dir die 6 volt ausgibt. müsste theoretisch der pwm1a wert von 512 sein.

du hast bei dir im code entweder volle leistung 12volt oder fast keine etwas um 0volt herum.

es können auch bei einbem treiber-ic spannungen abfallen. beim L298 habe ich mal gelesen das das 3 volt sein sollen.

Vior
07.11.2009, 23:09
In dem Beispiel-Code den ich geschrieben habe, habe ich pwm1a auf 5 gesetzt, solange ich den Taster 4 gedrückt habe. Bei diesem Wert von 5 müsste ich ja theoretisch eine Spannung von fast 0 Volt messen. Aber ich messe 9.3 Volt, was für mich einfach keinen Sinn macht (die Akkuspannung beträgt 12Volt, was ja 1024 entsprechen würde, also 5 etwa 12/200 Volt)...
Ich habe keine Ahnung, was ich falsch mache und wäre wirklich sehr froh, wenn mir jemand von euch helfen könnte. Ist etwas an meinem Code falsch? oder könnte das auch am RN-Control liegen? Ich habe es vor 5 Tagen erst bekommen. Sollte ich mein Problem auch mal im RN-Control-Forum posten? Oder könnte es daran liegen, das ich nur zu hohe Spannungen messe, weil ich noch keinen Verbraucher (Motor, Lampe) angeschlossen habe?

gruss
Vior

Bammel
07.11.2009, 23:15
ich habe leider kein rn-control sonst würde ich das mal für dich prüfen. ich hba zwar nen eigenen motortreiber hier aber da sind die L298 drauf. und meinen roboter demontieren möchte ich dafür auch sehr ungern.

Vior
07.11.2009, 23:31
Klar, kein problem.

Ich habe erst gerade angefangen mit Microcontrollern und der Programmierung. Und als ich das RN-Control erhalten habe, da war das Beispiel-Programm/Test-Programm schon drauf. Da gibt es ja auch den Motorentest. Der beschleunigt die Motoren einmal von 0 Volt bis zur Akkuspannung und bremst sie anschliessend wieder bis auf 0 Volt ab.

Bei meinen Ausgängen messe ich aber eine Spannung, die nach dem Tastesrücken von 0 V sofort auf 9 V springt, sich dann kontinuierlich bis auf 11.5 V erhöht und dann wieder kontinuierlich bis auf 9 V abfällt und dann wieder direkt auf 0 V springt. Das verstehe ich einfach nicht..

woran könnte das liegen?

gruss
Vior

Bammel
07.11.2009, 23:43
naja es kommt ja eigentlich keine 5 voltspannung raus.. sondern IMMER 12volt diese wird aber nur gepulst PWM (PulsWeitenModulation) ist das stichwort. kann sein das man das so mit einem messgerät nicht messen kann. soweit ich das weis müsste man das erst nochmla glätten. aber frag mich nun nicht wie das weis ich nicht. hänge doch einfach la nen motor ran. dann wirst ja sehen ob der langsam anläuft oder aprupt schnell dreht.