PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM-Decoder als Single-Chip Variante?



enoritz
23.06.2007, 10:59
Hallo Leute...

Ich hab mir die letzten Tage ein par Gedanken gemacht, wie man am besten PWM-Signale decodieren könnte. An und für sich ist das auch alles relativ simpel (max. 2 IC's + µC) um 7 Kanäle aufzulösen (z.B. an einem Input-Capture Eingang eines Timers).

Nur gibt es auch eine elegante Variante? Vieleicht ein IC das mehrere Kanäle auflösen und über I²C oder SPI ausgeben kann?

Wäre super wenn mir da jemand weiterhelfen könnte...

Viele Grüße

vohopri
24.06.2007, 06:48
Hallo enoritz,

wenn du nach der Decodierung fragst, solltest du schon mitteilen, wie die Signale codiert sind.

Dein Posting ist etwas unklar: Was heisst bei dir auflösen? Meinst du demultiplexen, meinst du pwm in analog Spannung umwandeln?

7 Leinungen rein und 7 raus? Oder eine rein und 7 raus?

grüsse,
vohopri

wkrug
24.06.2007, 10:18
Ich vermute er meint damit Servoimpulsketten einer Modell Fernsteueranlage.

Wenn Du sowieso schon weisst wie das mit dem dekodieren geht, warum proggst Du Dir dann nicht einfach selber so einen Chip zusammen ?

Sie größeren ATMEL Controller (z.B. ATMEGA 8 ) sollten alles an Bord haben, was man dafür braucht. Also Timer, SPI, TWI (I²C).
Das wird auch mit Sicherheit preisgünstiger als irgendwelche Spezial IC's.

Wenn auf die Bauform ankommt, kannst Du es auch mal mit einem Attiny 13 oder 15 versuchen, wobei die natürlich Hardwaremässig bei weitem nicht so gut ausgestattet sind und womöglich auch nicht genug Flash Speicher haben.

vohopri
24.06.2007, 10:33
Könnte sein, dass er das meint, aber das ist dann PPM und nicht PWM.

In dem Fall kommt ein multiplex ppm Signal rein und es gehen an die beispielsweise 7 Servos je ein PWM Signal raus. In dem Fall kann er das mit 1 Kleintransistor für die Synchronisation und einem 4017 für das demultiplexen und ppm -> pwm sehr einfach machen.

Diese einfache und Kostengünstige Lösung habe ich auf meiner Site vorgestell: http://www.jbergsmann.at/servo-signal-demultiplex-ppm-pwm.htm

grüsse,
Hannes

wkrug
24.06.2007, 10:42
In dem Fall kommt ein multiplex ppm Signal rein und es gehen an die beispielsweise 7 Servos je ein PWM Signal raus. In dem Fall kann er das mit 1 Kleintransistor für die Synchronisation und einem 4017 für das demultiplexen und ppm -> pwm sehr einfach machen.
Ich denk mal, so einfach will enoritz das nicht haben, sonst hätte er ja nicht nach i²C oder SPI gefragt.
Aber lass mal, enoritz soll sich erstmal äussern was er genau will, ansonsten gleicht das ja hier mal wieder einem schauen in die Glaskugel (bei mir ist aber zur zeit das Licht darin defekt).

vohopri
24.06.2007, 10:57
Na genau, drum hab ich ihn ja gefragt, wie er das meint.

vohopri

enoritz
24.06.2007, 11:11
Hey Leute!
Mir gehts tatsächlich um einzelne PWM-Kanäle. Was ich meinte war also folgendes:
Ich möchte 7 Eingänge für jeweils einen PWM-Kanal. Intern soll das exakte Tastverhältnis der einzeln anliegenden Signale ermittelt werden und über irgendeine (möglichst weit verbreitete und flinke, deshalb I²C oder SPI) Schnittstelle für ander Bauteile verfügbar gemacht werden.

Wäre schön wenn das ganze auch für relativ hohe Frequenzen funktionieren würde (ich sag mal so 32kHz), was aber rein rechnerisch bisher per Logik- und auch Programmierbare IC's funktionieren sollte. Das sei aber erstmal dahingestellt. Hauptsache ist erstmal eine zuverlässig funktionierende (und möglichst elegante, deshalb idealer Weise single-Chip) Variante.

Die Idee mit dem µC hatte ich auch schon. Nur möchte ich nicht für jedes Problem einen neuen Controller programmieren, das kam mir bisher immer irgendwie als "Holzhammer"-Methode vor. Außerdem würde ich da wohl auch nicht um einen externen Takt herumkommen (ich Vertrau den internen Oszillatoren der AVR's noch nicht so ganz übern Weg...).

Einen AVR würde ich also eher als letzten Ausweg sehen...

BASTIUniversal
24.06.2007, 11:50
Hi!
Ich würde einen AVR (neben einem CPLD) als eleganteste Lösung ansehen. Nur mit Logik IC's festzustellen wie groß das Tastverhältnis ist, wird vermutlich zu einem Gatter-Grab ausarten!
Ggf. ist dieser Weg für dich akzeptabel:
Mit zwei 74xxx4066 schaltest du (mittels AVR) immer einen PWM-Input auf den Timer-Eingang eines AVR. Diesen misst du dann aus und schaltest den nächsten PWM-Input auf den Pin.
Das ist zwar relativ aufwändig (du brauchst 8 Pins und 2 Logik-IC's + AVR), aber einfacher geht es vermutlich nur mit einem CPLD. Das Interface kannst du ganz leicht als SPI-Master/Slave oder mit der integrierten UART einbinden.

Die zweite Variante mit ausschließlich Logik-IC's, sieht vermutlich so aus:
- 2 4066 zur Kanal Auswahl, einen Inverter, drei Timer. Dann steht dir (je nach Auflösung) ein 2x8 Bit Interface plus Steuerleitungen zur Verfügung.

In allen Fällen wirst du eine Zeit Referenz (also einen Takt) benötigen, sonst kannst du das Verhältnis nicht bestimmen.

Hoffentlich habe ich die Frage richtig verstanden ^^
MfG
Basti

enoritz
26.06.2007, 21:26
Hey.. Danke für deine Antwort.

Die Idee mit dem CPLD ist vieleicht gar nicht schlecht, da ich wohl auch noch andere Logik auf meiner Platine aufbauen will...

Was ich bei Atmel bisher an PLD's gefunden hab sieht doch eigentlich ganz gut aus oder? Sind zwar wahre Monster bei, aber die kleineren Chips ganz unten (SPLD) sollten es wohl auch tun.

Nur stellt sich bei mir immer die Frage woher nehmen. Kennst du dich mit dem Thema aus? Welche IC's benutzt du selber und kannst du was empfehlen? Ich hab quasi noch gar nichts damit gemacht. Entsprechend auch die Fragen: Womit brennen und wie meine Logik beschreiben?

Gibts da Tutorials o.ä.?

sigo
26.06.2007, 22:09
Hi, du könntest auch einfach für die 2,1-fache Periodendauer des PWM-Signals einen 8-Bit-Port in Assembler auslesen und die Werte ins Ram schreiben. Anschließend (offline) analysieren und auf den I²C alle 7 (8) PWM-Werte ausgeben. Dann wieder samplen...
Du solltest einen neueren ATmega mit 20MHz und 1kByte RAM, besser 2kByte.
Wenn du das Assembler-Proggi linear schreibst, das sollte in <<10 Takten gehen. Bei 20MHz ist also eine Auflösung von 2MHz machbar...
Das sind bei 8-Bit-PWM ca. 8kHz PWM-Freqzenz. Evtl. schaffst du das samplen auch in nur 3-5 Takten, wenn man es linear hinscheibt, statt einer Schleife? (müsste selbst das Kommando raussuchen

Sigo

BASTIUniversal
26.06.2007, 22:11
Hi!
Also ich will mich gerade in die Thematik CPLD/FPGA einarbeiten, hab mir ein kleines Board mit dem Xilinx XC9572 bei eBay bestellt.
Die Programmierbare Logik von Atmel würde ich nicht verwenden, da kaum kostenlose Entwicklungssoftware bzw. nur veraltete zur Verfügung steht. Bei Xilinx (oder Altera) gibt es riesige Software Pakete umsonst.
Das "Programm" wird, ähnlich wie beim AVR, per ISP mit einem JTAG-Programmer in den CPLD geladen.
Die ersten "Programme" kann man ganz simpel mit Logik Elementen zeichnen und später (wenn es komplizierter wird) mit VHDL schreiben. VHDL ähnelt dabei ein wenig dem alten bekannten C.
Die kleinen CPLDs gibt es im PLCC44 Gehäuse, welches man gut löten kann (mit nem Sockel).
Infos über dieses ganze Thema sind etwas rar...aber wenn man sucht und entsprechend Zeit hat, kann man das auch im Hobby Keller anwenden.

MfG
Basti