PIC PWM-Periode Servoansteuerung

Gast #1088712
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...
Gast
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.
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.
Gast
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)

}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.