PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger hat Verständnissfragen zu PWM.



Eisbaer09
07.07.2013, 18:29
Hallo Leute,

ich möchte ein Projekt realisieren bei dem ein Servo angesteuert wird. Und zwar soll das Servo, bei einem Eingangsimpuls am PIC, schnellstens in die andere Richtung auslenken und dabei ganz langsam wieder in die Ausgangsposition zurückgehen. Für die Positionen ist jeweils der Vollausschlag angedacht.

Die Servos brauchen einen Impuls von ca 1ms für den einen Ausschlag bis 2ms für den anderen Ausschlag mit ner Pause von 19 bzw. 18ms. Komplette Impulslänge 20ms, welcher 50Hz entspricht.
Zu meinen Verständnisfragen:

Das Ansteuern kann man, Lt. Sprut, mit dem Timer 2 und der damit einfach zu realisierenden PWM machen.
Der Timer 2 Lässt sich scheinbar nur über den internen Takt (4mhz) steuern. Was ist der Interne Takt? Kann ich den Internen Takt mit einem externen Quarz beeinflussen?
Hintergrund: Wenn ich alle möglichen Teiler auf das höchste einstelle komme ich bei 4Mhz auf mehr als 61 Hz. Zumindest habe ich das so verstanden.


Wäre toll wenn einer meine vielleicht wirren Gedanken nachvollziehen kann und mir ne Antwort geben könnte.

Grüße
Michael

indeas
08.07.2013, 17:35
1. Habe leider keine Ahnung von Servos.
2. Der interne Takt entspricht der Oszillator- Frequenz / 4 = Befehle pro Sekunden.
3. Je nachdem was der PIC sonst noch so macht, kannst Du das PWM- Signal locker in der Hauptschleife erzeugen:
Start: Timer1 =0, Ausgang auf High setzen, dann Impulslänge (1...2ms) abwarten (= warten bis timer1 > xxx) Ausgang auf low setzen, dann den Rest erledigen und wieder warten bis Timer1 > yyy und das ganze wieder von vorne. Den Timer 1 kannst Du Dir ja entsprechend konfigurieren.
Nach dem Impuls hast Du ja noch mindestens 18ms um die anderen Dinge zu erledigen.
4. Würde einen C-Compiler verwenden z.B. den von CCS, der kostet nicht viel und kann ne Menge.

Eisbaer09
08.07.2013, 18:00
Danke für die Antwort.
Wenn ich das richtig verstanden habe kann ich den Takt erzeugen mit was ich will. Also egal ob Intern, mit Quarz oder Resonator und der Interne Takt ist dann 1/4 davon?

Der Pic soll nur das machen, für andere Zwecke wird er an dieser Stelle nicht gebraucht. Das mit den Schleifen (Timer0) hab ich mir auch schon Überlegt, Denn der Timer 2 Bringt mir ein genau invertiertes Signal.

Danke für das Angebot für C, aber ich habe das PIC2 Kit hier und versuche mich gerade mit ASM. Das liegt mir irgendwie besser, hab auch schon ein paar Dinge damit gemacht. Später werd ich mir das mit C mal genauer ansehen.

Grüße
Michael

MisterMou
08.07.2013, 18:57
Mach dich wegen den 50Hz nicht verrückt. Das ist nur ein Richtwert;)
Manche Servos können bis zu 200Hz gehen, langsamer geht natürlich auch.

indeas
09.07.2013, 09:22
Ich halte von Programmieren in ASM nichts, auch wenn ich ASM verstehe und mir hin und wieder das lst-File ansehe, um zu sehen ob der Compiler alles richtig gemacht hat.
Die komplette Programmerstellung in ASM dauert lange und Programme sind in der Regel kaum zu pflegen. Vor allem, wenn man x-Projekte am laufen halten muss...
PICKIT2 ist ein Superwerkzeug, mit dem arbeite ich auch. Den PICKIT3 brauchst Du Dir nicht wirklich:
http://http://www.eevblog.com/2009/10/21/eevblog-39-pickit-3-programmerdebugger-review/ (http://www.eevblog.com/2009/10/21/eevblog-39-pickit-3-programmerdebugger-review/)
Kennt Ihr das?

oberallgeier
09.07.2013, 09:46
Hallo Michael,

willkommen im Forum.

... Projekt ... ein Servo angesteuert ... Impulslänge 20ms ... bei 4Mhz auf mehr als 61 Hz ...Hier (klick) (http://www.rn-wissen.de/index.php/Servos) haben wir ein paar Informationen zu Servos zusammengetragen - besonders was das Timing, die Toleranzen dazu und den Unterschied zwischen den langsamen analogen und den schnellen digitalen Servos (klick nochmal) (http://www.rn-wissen.de/index.php/Servos#Unterschied_zwischen_Digital-_und_Analogservos) angeht. WENN Du einen digitalen Servo hast UND WENN Dir die schnelle Updaterate (sprich: kurze Servoperiode) dieser Teile in Dein Projekt passt, dann solltest Du Dich mit kurzen Periodenzeiten beschäftigen. Für den Normalfall reichen die 50 Hz und deren sattes Toleranzband. Hier (nochnKlick) (http://www.rn-wissen.de/index.php/Servos#Ansteuerung:_Signalform_und_Schaltung) - 2ter Absatz - ist in diesem Wikiabschnitt auch auf die variable Periodenzeit eingegangen worden.

In Assembler auf Atmel (ich habe keinerlei Erfahrung zu den PICs) hatte ich meine ersten Servotester programmiert - eine hübsche Aufgabe - und mein erster läuft immer noch: mit Regelmöglichkeit durch ein Poti, Messmöglichkeit für die Stromaufnahme . . . . Nur ist die Multipliziererei bei den Perioden- und Pulszeiten ziemlich aufwändiger als so ein Multiplikationszeichen in einer Hochsprache *ggg*.

Trick: Du kannst natürlich bei nem Timer die doppelte oder dreifache ISR-Frequenz einstellen und in der ISR mit einem Counter dieses Vielfache wegtickern . . .

Fazit:
- Wissenswertes zu Servos lesen!
- KANN Dein Servo (Datenblatt!) ne hohe Periodenfrequenz verarbeiten?
- Brauchst oder willst Du eine hohe Periodenfrequenz für den Servo?
- Entspricht die Schaltung den Ratschlägen im genannten Link?
- Loslegen

Nicht vergessen: Servos können Controller massiv stören. Zu Risiken und Nebenwirkungen lesen sie den Abschnitt "Achtung, Fehlermöglichkeiten!" im Wikiartikel. Ne separate Versorgung der Servos, getrennt von der des Controllers, ist immer die erste Wahl - und nicht den gemeinsamen GND vergessen.

Viel Erfolg

PsiQ
10.07.2013, 17:12
Weil du ja schon Sprut gelesen hast, hast du das eventuell schon gesehen,
wenn nicht kannst du dir mal den Code / Hintergrund dazu anschauen:

Servo Inverter

http://www.sprut.de/electronic/pic/projekte/servoinverter/index.htm

Da sollte ja dein Thema behandelt sein,
du musst dann in der Software halt noch eine Verzögerung für eine Drehrichtung einbasteln.