...das scheint mir allerdings auch soWir ein größeres und längeres Projekt.........
Wenn sich so etwas überhaupt mit einem einzigen Controller lösen lässt.
Vielleicht hilft Dir PWM ja ein wenig weiter - ich wünsch´ jedenfalls gutes Gelingen!
Daniel
...das scheint mir allerdings auch soWir ein größeres und längeres Projekt.........
Wenn sich so etwas überhaupt mit einem einzigen Controller lösen lässt.
Vielleicht hilft Dir PWM ja ein wenig weiter - ich wünsch´ jedenfalls gutes Gelingen!
Daniel
... also mit PWM die Ansteuerung zu realisieren ist ja recht einfach. Aber....
auch mit dieser Auflösung bin ich nicht zufrieden. Warum? Na beim 10bit PWM habe ich bei 1.0ms einen Comparewert von 966, bei 1,5ms - 935 und bei 2,0ms Compare von 908. Somit über den gesamten Servoweg nur 58 Schritte Auflösung.
Gibt es eine Möglichkeit die Auflösung weiter zu erhöhen? Steh jetzt echt auf dem Schlauch....
![]()
Mit Hardware-PWM kann man (je nach Taktfrequenz) auch eine Auflösung von 1 us erreichen (also 1000 Schritte über den ganzen Servoweg).mit PWM die Ansteuerung zu realisieren ist ja recht einfach. Aber.... auch mit dieser Auflösung bin ich nicht zufrieden.
Damit kann man z.B. einen sehr genauen Servotester bauen.
Gruß Dirk
Hi! Ich habe kürzlich einen Tricopter gebaut. Hier ist das Auslesen des RC Empfängers sowie das erzeugen von RC-Signalen sehr zeitkritisch. Außerdem muss die Auflösung hoch sein. Das ist nicht unbedingt trivial, da man meistens ja nur einen 8bit (=256 Schritte) und einen 16bit (=65536 Schritte) Timer hat. 256 Schritte für das Servosignal oder das Empfängersignal waren mir z.B. zu wenig.
Zum Auslesen des Empfängers habe ich kürzlich einen Artikel im Wiki geschrieben. Zum erstellen der RC-Signale gibt es sehr viele unterschiedliche Möglichkeiten, wenn du willst kann ich dir meine Lösung schicken (schreib mir dafür am besten per PN deine email adresse)
Viele Grüße, William
-> http://william.thielicke.org/
@ Markus:
Eine Möglichkeit, mehr aus dem 16bit-Timer herauzuholen besteht darin, das Impuls-Pausen-Verhältnis des Signals zugunsten des Impulses zu verändern (z.B. durch einen halbierten Prescaler und entsprechend abgesenkte Compare-Werte). Dadurch fallen mehr Takte aud die High-Phase.
In allen Datenblättern steht außerdem "True 16bit design (i.e. allows 16bit PWM)".
Ich vermute daher, dass diese Begrenzung auf 10 bit ein Bascom-Problem ist. Leider hat mir bisher die Zeit gefehlt einmal auszuprobieren, ob man auf Registerebene nicht doch eine 16bit-Auflösung hingekommen kann. Vielleicht wäre das genau das richtge für diesen verregneten Sonntag heute![]()
...und es geht doch:
Dieser kleine Code erzeugt ein PWM-Signal mit ca. 30Hz, wobei die High-Zeit in 2000 (!) Stufen zwischen 1 und 2 ms variiert wird (pro Durchlauf etwa 4 Sekunden). Also echtes 16bit-PWM...Code:$regfile = "m8def.dat" $crystal = 4000000 DDRB.1 = 1 TCCR1A = &B10000000 TCCR1B = &B00010001 ICR1L = &B11111111 ICR1H = &B11111111 Dim Phase As Word Do For Phase = 2000 To 4000 Waitms 2 OCR1AH = High(phase) OCR1AL = Low(phase) Next Phase Loop
Jungs Ihr seid Spitze!!!
@William: Hast ne PM
@Daniel: Wow werde ich heute abend gleich mal ausprobieren! Vielen Dank auch Dir für den Tipp (und gleich den Praxisversuch!!!))
1000end Dank.
Markus
Hallo Daniel,
ich habe jetzt mal Deinen Code 1 zu 1 kopiert. Ich bekomme leider kein PWM Signal an Pin B.1 (OC1A) gemessen. Er bleibt nur auf "high". ??
Hi Markus,
sorry - da ist mit trotz "Copy - Paste" ein kleiner Dreher mit großer Folge unterlaufen:
Die ICR1-Register müssen in umgekehrter Reihenfolge beschrieben werden, also erst das ICR1H und dann ICR1L.
Das klingt jetzt zwar fast esoterischCode:ICR1H = &B11111111 ICR1L = &B11111111(zumal sie beide 0xFF enthalten), ist aber so. Wenn man zuerst das "Low"-Register beschreibt, läuft´s schief...
Gruß,
Daniel
Hi Daniel,
...ahhh, das muss man wissen. Das funktioniert echt gut! Ok eine 2000er Auflösung muss net sein aber ich habe hier schon einiges rumgespielt und das sieht sehr sehr gut aus. Das Servo ist so butterweich oder schnell und immer super präziese zu steuern. Muss mal mit nem größeren Code rundrum und mehr Kanälen spielen...
Merci
Gruß
Markus
Lesezeichen