Was mich dabei noch interessieren würde, wieviele verschiedene PWM Signale lassen sich von einem AVR generieren? Bzw. wie viele Servos könnte man mit einem uC anstenern?
lg binaer
Druckbare Version
Was mich dabei noch interessieren würde, wieviele verschiedene PWM Signale lassen sich von einem AVR generieren? Bzw. wie viele Servos könnte man mit einem uC anstenern?
lg binaer
Sieh Dir mal AT90PWM3 an der hat 10(!) Hardware-PWM-Kanäle. Also wirklich eine präzise und bequeme Sache.
Naja, wenn man Software-PWM macht, kommt drauf an wie man es macht. Benutzt man Timer, ist man durch deren Anzahl auch wieder beschränkt. Habe Deinen Code noch nicht genau angesehen. Benutzt Du Timer-Interrupts?
Nein, ich lasse den code einfach immer durchlaufen. Für UART anfragen etc benutze ich interrupts, die zeit die das in anspruch nimmt, wird dann aber wieder abgezogen, damit nicht ein zu langer pwm tackt entsteht. Ziemlich mühsam alles manuell gebastelt. ;)
lg binaer
Ach so. Cool. Und wie misst Du die Zeit, die für evtl UART-Bearbeitung verbraucht wurde? Oder ziehst Du einfach einen Erfahrungswert ab?
Das kann man ja genau vorherbestimmen... die Tackte, die die einzelnen Befehle bei der routine brauchen aufsummieren.
lg binaer
Bei den Interrupts gibts immer zwei möglichkeiten, entweder interrupt oder warteschleife, die genau gleich viel zeit verschlingt, so kommt es nicht drauf an. Bei den pwm generatoren wird auch immer x zeit verschlungen, dann wird geschaltet und dann nochmals y - x zeiit verschlungen. y konstant.
lg binaer
Meinst Du mit "PWM Generatoren" Hardware-PWMs? Die laufen ja total außerhalb des eigentlichen CPU-Cores, und verbrauchen somit keine Zeit. Du schreibst einfach x und y an der dafür vorgesehenen Adresse und die CPU bearbeitet sofort den nächsten Befehl. An dem betreffenden Pin wird dann die PWM ausgegeben. Solange Du nicht die Werte in den PWM-Registern überschreibst, bleibt der eingestellte duty cycle erhalten und die CPU kann ganz entpannt was anderes machen. Wie viele PWMs gibst Du im Moment eigentlich aus?
Ich meine damit natürlich meine software "pwm generatoren"...
ich werde beim nächsten projekt wo ich servos brauche (fast jedes projekt) mal diese hardware pwm generatoren ausprobieren.
ich gebe im moment 5 voneinander unabhängige PWM signale aus. für jede achse ein ;)
lg binaer
Dann wirds mit Hardware-PWM von der Anzahl her natürlich knapp, wenn Du 5 Achsen steuern willst. Die meisten gängigen AVRs haben 2 oder 3 Hardware-PWM-Kanäle. Das Problem "zu wenig PWMs" habe ich auch oft. Ich werde im Laufe der nächsten Monate, wenn ich Zeit hab, mal versuchen das ganze mit einem CPLD zu lösen, wo man dann gemütlich 20 richtig schnelle und präzise Hardware-PWMs hat, und der Controller nur noch die Änderungen über SPI oder I²C rausschickt., und das ganze Umschalten und Zählen wird im CPLD erledigt wird. Aber das ist noch Zukunftsmusik. Ich habe gesehen, dass du einen 8515 verwendest, der hat ja immerhin 3 Hardware-PWM-Kanäle.
Ja, aber 3 bringen mir nichts :( wenn ich 2 softwaremässig machen muss, kann ich gleich alle so machen ;)
Ja CPLD ist sicher net übel, aber ich denke das dürfte noch eine Herausforderung werden. Naja mit VHDL geht es noch, aber ich hab solches Zeug mal versucht durch logikschaltpläne zu basteln, das ist das perfekte chaos :(
Haltest mich über das Projekt auf dem laufenden ;)
lg binaer