Hallo zusammen, Ich bin Felix, neu hier und beiße mir gerade an einem kleinen Problem die Zähne aus: Und zwar möchte ich einen Attiny104 benutzen (weil es da das tolle Entwicklungsboard für gibt) um folgendes zu tun: -Die Periode eines Zahnrades (~50 Hz) mithilfe eines Hallsensors bestimmen. Dafür nehme ich den Timer0 im Normalmodus und einen Input Capture Interrupt. Das geht auch, soweit ich das beurteilen kann. -Ein RC-Servosignal einlesen. Dafür habe ich vor, den Externen Interrupt zu nehmen und dann TCNT0 zu lesen. Nicht optimal, aber die Input Capture ist ja belegt. Gibt es bessere Alternativen? -Innerhalb der Periode einen Ausgang zwei mal an- und wieder ausschalten, zu Zeitpunkten die vom Servosignal abhängen. Diese Zeitpunkte berechne ich im Hauptprogramm. Es ist nicht besonders kritisch, wenn die neu berechneten Zeitpunkte erst bei der nächsten Umdrehung verwendet werden. Dafür habe ich zwei Ansätze versucht, die ich aber beide nicht hinbekomme: Den Output Compare Interrupt verwenden. Gibt es da einen Trick, um die vier Schaltzeiten in das Output Compare Register zu schreiben und das ein- und ausschalten zu unterscheiden? Alternativ habe ich versucht, im Hauptprogramm den Timer zu lesen, die Schaltzeiten zu berechnen und dann eine Fallunterscheidung zu machen. Das scheint aber zu langsam zu sein? Welchen dieser Ansätze haltet ihr für sinnvoller? Bin ich total auf dem Holzweg? Oder ist das für einen Attiny104 zu viel zu tun und ich brauche einen dickeren uC? Liebe Grüße, Felix
Felix R. schrieb: > zu nehmen und dann TCNT0 zu lesen. Nicht optimal, aber die Input Capture > ist ja belegt. Gibt es bessere Alternativen? Natürlich: Erste Maßnahme: Funktion tauschen, Das blöde Zahnrad läßt sich deutlich einfacher erfassen als der PWM-Wert. Also nutzt man natürlich die Hardware für den komplizierteren Teil. > Den Output Compare Interrupt verwenden. Gibt es da einen Trick, um die > vier Schaltzeiten Welche "vier Schaltzeiten"? Was sollen die tun? Wie hängt das doofe Zahnrad mit der PWM zusammen? > Welchen dieser Ansätze haltet ihr für sinnvoller? Bin ich total auf dem > Holzweg? Sieht definitiv so aus. Du verstehst nichtmal dein eigenes Problem...
c-hater schrieb: > Natürlich: Erste Maßnahme: Funktion tauschen, Das blöde Zahnrad läßt > sich deutlich einfacher erfassen als der PWM-Wert. Also nutzt man > natürlich die Hardware für den komplizierteren Teil. Ja, das werde ich mal versuchen. > Welche "vier Schaltzeiten"? Was sollen die tun? Wie hängt das doofe > Zahnrad mit der PWM zusammen? Ich möchte halt bei bestimmten Positionen des Zahnrades den Ausgang schalten. Dazu gehe ich davon aus, dass die Drehzahl sich von einer zur nächsten Umdrehung kaum ändert. Wenn der Magnet auf dem Zahnrad sich am Hallsensor vorbei dreht, berechne ich die neue Periodendauer. Nachdem z.B. die halben Periodendauer rum ist, weiß ich, dass der Magnet eine halbe Umdrehung vom Sensor entfernt ist. Dann möchte ich den Ausgang schalten. Idealerweise hätte ich einen Winkelsensor, aber das erscheint mir hardwaremäßig komplizierter als mein Ansatz. Das ganze soll bei einem sehr kleinen Modellhubschrauber die Taumelscheibe ersetzen, indem die Paddelstange mit einem Magneten versehen wird und über eine Spule (die wird mit dem Ausgang gesteuert) bei bestimmten Rotorpositionen ausgelenkt wird. Die Spule und der Magnet müssen dann nicht mechanisch verbunden sein, was den Aufbau einfacher und damit kleiner macht. Falls da jemand etwas mit anfangen kann ;) >> Welchen dieser Ansätze haltet ihr für sinnvoller? Bin ich total auf dem >> Holzweg? > > Sieht definitiv so aus. Du verstehst nichtmal dein eigenes Problem... Kann sein. Oder meine Beschreibung was suboptimal. Mea culpa...
Felix R. schrieb: > Ich möchte halt bei bestimmten Positionen des Zahnrades den Ausgang > schalten. Das ist eine vollkommen schwachsinnige Formulierung der Intention. Sehr wahrscheinlich: weil dir selber nicht klar ist, was du eigentlich erreichen willst... > Dazu gehe ich davon aus, dass die Drehzahl sich von einer zur > nächsten Umdrehung kaum ändert. Kann sein, kann nicht sein. Wer will das wissen, ohne es zumindest gemessen zu haben... > Das ganze soll bei einem sehr kleinen Modellhubschrauber die > Taumelscheibe ersetzen Nun fängt es an konkret zu werden. Darauf kann man aufbauen. Kannst du aufbauen... Als erstes solltest du dir die Frage stellen, warum du eigentlich irgendwelche PWM-Werte vermessen mußt... Das ist doch SCHWACHSINN. Die PWM-Werte gibt es nur deshalb, weil damit irgendwelche Motore angesteuert werden müssen. Interessent für dein Problem ist aber das (die) Signale, die letztlich zu diesen PWM-Signalen umgesetzt werden...
c-hater schrieb: > Das ist doch SCHWACHSINN. Die PWM-Werte gibt es nur deshalb, weil > damit irgendwelche Motore angesteuert werden müssen. Interessent für > dein Problem ist aber das (die) Signale, die letztlich zu diesen > PWM-Signalen umgesetzt werden... Die PWM-Werte kommen aus dem Empfänger. Ist doch viel einfacher, dieses komische Servosignal zu lesen als einen eigenen Empfänger zu bauen ;) Es gibt ein Summensignal, in dem alle 9 oder so Kanäle drin sind, aber das erscheint mir viel komplizierter, als nur die beiden benötigten Kanäle zu nehmen. >Kann sein, kann nicht sein. Wer will das wissen, ohne es zumindest >gemessen zu haben... Zumindest bei anderen Helis kommt das ungefähr hin. Und ob die Näherung gut genug ist, sehe ich ja wenn es läuft. Wenn nicht, muss halt ein Korrekturfaktor aus dem Gassignal oder so etwas her. Auf jeden Fall habe ich keinen passenden einfachen Winkelsensor gefunden. Aber um mal auf meine eigentliche Frage zurückzukommen: In ca. 20 ms vier Timerwerte vergleichen, vier mal einen Pin schalten, einen Input Capture machen und etwas rechnen - klappt das auf der Hardware oder brauche ich was stärkeres?
Ich kenne den Attiny104 nicht, aber bei den meisten AVRs kann man das Input Capture auf alle ADC-Eingänge routen. Beim ATtiny24 kann man so z.B. 8 Eingänge über ICP einlesen, beim ATmega48 in SMD sogar 10 (ADC0..7, ICP1, AIN0).
Kannst du mal erklären, warum du die Drehzahl der Taumelscheibe benötigst? Ist es nicht egal, an welcher Position die verstellt wird, wenn sie verstellt werden muss? Felix R. schrieb: > Aber um mal auf meine eigentliche Frage zurückzukommen: > In ca. 20 ms vier Timerwerte vergleichen, vier mal einen Pin schalten, > einen Input Capture machen und etwas rechnen - klappt das auf der > Hardware oder brauche ich was stärkeres? Auch ich kenne den Tiny104 nicht, aber auf jedem anderen kleinen Tiny würde ich sagen: ja, das ist kein Problem.
Felix R. schrieb: > Es > gibt ein Summensignal, in dem alle 9 oder so Kanäle drin sind, aber das > erscheint mir viel komplizierter, als nur die beiden benötigten Kanäle > zu nehmen. Ist es aber nicht. 1x PPM (und darum handelt es sich höchstwahrscheinlich) einzulesen ist viel einfacher als 2x PWM. Schlicht deshalb, weil man nur einmal die zur Erfassung gut geeignete Hardware (also die ICP-Funktionalität) benötigt und damit alle PWM-Kanäle aus dem Signal rausfischen kann. Die, die einen nicht interessieren, wirft man halt einfach weg. Ein paar Daten wegwerfen ist viel einfacher als eine zweiten ICP-fähigen Timer zu beschaffen... Aber unabhängig davon habe ich immer noch nicht dein Endziel kapiert. Was soll die Sache eigentlich bewirken?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.