Forum: Mikrocontroller und Digitale Elektronik PIC PWM-Periode Servoansteuerung


von Tobi (Gast)


Lesenswert?

Hallo Leute ! Hab vorhandene Beiträge zum Thema durchforstet und bin 
leider nicht ganz auf meine Frage gestoßen, deshalb stell ich sie hier!

Also ich möchte ein handelsüblichen Modellbauservo ansteuern. Die 
PWM-Periode ist sodann 20ms und die Duty-Cycle-Dauer 1-2ms.
Ich habe ein PIC 16F627 mit 4Mhz Quarz und möchte den hardwaremäßigen 
vorhandenen PWM-Erzeuger nutzen.
Nach diverser Lektüre von Microchip hab ich eine Formel gefunden um die 
PWM-Periode auszurechnen. So tat ich dies.

PWM-Periode = [(PR2)+1]  4  Tosc * (TMR2 prescale value)

20ms = [(PR2)+1]  4  1/4Mhz * 16 (höchster Teiler)

20ms = [(PR2)+1] * 16µs

20ms/16µs = (PR2)+1

1250 = (PR2)+1

1249 = PR2

also müsste ich die Zahl 1249 ins PR2 Register laden. und nu kommts da 
dieses Register nur 8 Bit groß ist kann ich die Perioden dauer gar nicht 
erreichen. die maximalste Periode die ich erreichen kann wäre 4,1ms. 
dies reicht leider nicht. erkennt ihr ein fehler in meiner rechnung? wie 
wird das den üblicherweise gemacht? wenn ich den PIC mit 1Mhz Quarz 
betreibe würd ich zumindest bis 16,4ms kommen..
Würd mich sehr um Kommentare und Anregungen freuen...

von Ooohhh (Gast)


Lesenswert?

Eine Vorteiler verwenden ? Den kann man sicher konfigurieren.

von Erhard (Gast)


Lesenswert?

Hallo Tobi,

deine Rechnung stimmt.

Nimm am besten den Timer 1 und lass alle 20 ms einen Interrupt auslösen 
der dir dann deinen Ausgang setzt.

Ist der Ausgang gesetzt, startest du Timer 2, der nach der benötigten 
Periodendauer (1 - 2ms) den Ausgang wieder löscht.

Diese Methode benötigt zwar zwei Timer, aber alles läuft 
interruptgesteuert ab, und so hast du genügend Zeit für andere Aufgaben.

von Rambo (Gast)


Lesenswert?

Habe genau das gleiche Problem!

Kann eventuell einer mir zeigen, wie ich dann das interrupt genau 
dahinter setzte?

Danke!

von Chris S. (schris)


Lesenswert?

Es gibt da so einen HW-Modus, mit TMR2, daß der PWM für eine gewisse 
Zeit ausgesetzt wird, un erst danach wieder startet, aber da nur 2 
Kanäle,
habe ich immer die andere Methode bevorzugt, daß es jedoch in HW-PWM 
machbar ist, ist mir bekannt.

von Rambo (Gast)


Lesenswert?

Kann mir irgendwer helfen? Ich will einen Servo ansteuern aber ich hab 
keine ahnung wie ich das verhältniss richtig einstelle... es geht um die

void main (void)
{

OpenTimer2( TIMER_INT_OFF &
T0_8BIT &
T0_SOURCE_INT &
T0_PS_1_8 );
OpenPWM2(0xff);
SetDCPWM2(31); <---- welche zahl???? (Verhältnis)

}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.