Hallo zusammen, für ein Projekt muss ich zeitgenaue Pulse auf zwei Ausgängen ausgeben. "Ohne" Jitter sollen "gleichzeitig" die Parameter der Pulse über eine serielle Schnittstelle verändert werden können. Puls 1 an erstem Ausgang: Pulsfrequenz einstellbar zwischen 1-2000Hz bei einer Auflösung von 1Hz. Pulsbreite einstellbar zwischen 1-300us bei einer Auflösung von 1us. Puls 2 an zweitem Ausgang: Pulsbeginn 1-400us nach rising edge von Puls 1 bei einer Auflösung von 1us. Pulsbreite 0,1-10us bei einer Auflösung von 0.1 us. Serielle Schnittstelle mit 115kBaud. Ich bin auf der Suche nach einem geeigneten Device (muss nicht unbedingt ein uC sein), dass diese Aufgabe übernehmen kann und einer Taktik dazu. Wichtige Kriterien abgesehen von Machbarkeit sind kleines Device, Eleganz, geringe Komplexität, möglichst kein Assemblercode und keine überteuerten Entwicklungstools, in dieser Reihenfolge. Vielen Dank für hilfreiche Ideen, Grüße Jörg PS.: im Anhang ein Bildchen, falls dass mit den Pulsdaten zu verwirrend ist.
Was suchst du genau? Schaltung, software, fertige Hardware, jemand der dir das baut? Ich würde ein 8 Pin ATtiny + Hühnerfutter nehmen, das ganze dann in C programmieren. Sollte an einem Abend problemlos möglich sein.
Ich wollte eigentlich keine Bsp. reinschreiben, damit die Vorschläge nicht nur in eine Richtung gehen. Aber vielleicht hilft es ja auch. Freddy, der erste Satz vom zweiten Teil deiner Antwort trifft fast genau das, was ich suche: "Ich würde ein 8 Pin ATtiny + Hühnerfutter nehmen, das ganze dann in C programmieren." Jetzt hätte ich gerne eine Taktik dazu. Z.B Lass den ersten Puls durch eine Timerinterruptroutine erzeugen und dann... ausserdem die serielle Schnittstelle hat dann und dann Zeit zu empfangen ... Meine Ideen waren: - kleines FPGA (hab ich keins gefunden, mit wenig Pins und trotzdem genug Gates) - bei kurzen Zeiten (0,1 - 10us) komme ich wohl um Schleifen und Assemblercode zählen nicht herum, bei grösseren Zeiten sollte ich ja Interrupts verwenden, damit Zeit bleibt für die serielle Schnittstelle - Atmel/PIC Zeugs und Interrupts/Schleifen (ich glaube die Rechenzeit reicht nicht aus bei 20 MHZ mit den angegebenen Werten) - Renesas R8C13 schöner Chip aber gleiches Problem - Arm LPC2101 intern mit PLL ich glaub bis 75MHz Takt = mehr Luft - Parallax Propeller: verteilen der einzelnen Aufgaben in verschiedene Cogs, allerdings hab ich noch nichts mit dem Chip gemacht und es gibt eine eigene Sprache (Spin) oder so. Tja vielleicht hat jemand noch andere Vorschläge oder weiß, dass es mit den oben genannten Vorschlägen so und so machbar ist. Vielen Dank.
Ein kleiner CPLD macht das locker. Ggf. muss man einen kleinen Mikrocontroller nehmen um die Kommunikation mit RS232 zu machen. MFG Falk
ist das ganze mit Timer/PWM/Compare Dingen zu lösen? z.B. mit mehreren Match Registern (LPC2101) und dann die Ausgänge vergattern? Dann wäre der uC unbelastet. Oder vielleicht geht es noch einfacher.
@ Joerg Rothe (marode) >ist das ganze mit Timer/PWM/Compare Dingen zu lösen? >z.B. mit mehreren Match Registern (LPC2101) und dann die Ausgänge >vergattern? Ist eine Lösung. Dann braucht man aber 4 Output Compare Einheiten für zwei Signale, eins zum setzen, eins zum Löschen. Ein D-FlipFlop sollte reichen, 74HC74, das sind sogar zwei drin. >Dann wäre der uC unbelastet. Ja. >Oder vielleicht geht es noch einfacher. Wüsste ich im Moment nicht. MFG Falk
Nein, mit einem uC geht das nicht. Zumindest waehrend der Kommunikation mit dem PC oder so waere das Timing futsch. Ob man das Timing nun mit 74HCxxx oder einem CPLD macht ist fast einerlei. Das CPLD ist viel teurer (3Euro vs Cents), dafuer viel kompakter (TQFP44 vs N x SSOP) und flexibler.
@ GRA (Gast) >Nein, mit einem uC geht das nicht. Zumindest waehrend der Kommunikation >mit dem PC oder so waere das Timing futsch. Ob man das Timing nun mit Quark. Die Output Compare Einheiten laufen unabhängig von der CPU. Bei hohen Pulswiderholraten werden die einmal konfiguriert und laufen autonom, da kann die CPU machen was sie lustig ist. Wenn längere Pulszeiten nötig sind und die CPU aushelfen müsste geht das auch, dann kann man mit geschicker Programmierung OHNE Interrupts nebenbei auch den UART pollen. >74HCxxx oder einem CPLD macht ist fast einerlei. Das CPLD ist viel Kaum. Ein CPLD ist eine Einchiplösuung, mit HC & Co wirds ein mittelgrosses TTL-Grab. MFG Falk
vielen Dank für die Vorschläge, hier mal der Weg, den ich einschlagen werde: Zutaten: - LPC2101 - davon ein 32-bit Timer - 1 Match Register löscht den Timer Counter, am Ende der Periode - 1 Match Register mit Ausgangspin startet High und geht dann Low bei erreichen der Pulsbreite des ersten Pulses - 1 Match Register wechselt einen Ausgang auf High bei erreichen des Delays - 1 Match Register wechselt einen Ausgang von High auf Low bei erreichen des Delays+Pulsbreite des zweiten Pulses - die letzten beiden Match Register Pinausgänge werden noch verundet und fertig - die volle CPU steht für die serielle Schnittstelle und SPI das ich noch vergessen habe zur Verfügung Wenn das hier Blödsinn ist, bitte ich um einen Aufschrei. Vielen Dank lg Jörg
@ Joerg Rothe (marode) >- LPC2101 Naja, ziemlichr Overkill. OK, der hat viele Compare Units. >Wenn das hier Blödsinn ist, bitte ich um einen Aufschrei. Prinzipiell sollte das laufen. Aber dafür nen 32 Bit Prozessor? Hmmm. MfG Falk
Ein MSP430 wäre wirklich ziemlich gut. Z.B. der F169 hat einen Timer A mit 3 Compare-Registern/Ausgängen, der Timer B ist auch noch drin, und hat nochmal 7 Compare-Einheiten, die man sehr gut zusammenschalten kann. Alle Compare-Einheiten lassen sich direkt auf einen Ausgang des µC legen. Kostet wenig, Entwicklungstools sind preisgünstig, Beispiele gibts massig im Netz und die CPU langweilt sich, nachdem sie die die Register eingestellt hat. Die Erzeugung der Impulse läuft völlig autonom ab.
Schau dir mal die AT90PWM Serie von Atmel an, dort kannst du über die Powerstages flickerfreien PWM erzeugen, ohne Rechenleistung der CPU zu verlieren, die PWM´s der Power Stage laufen bis zu 64 MHZ. Quarz ist keiner notwendig, da sich der Controller über den kallibrierten 1 Mhz Resonator die 64 MHz über ne PLL erzeugt und anschliessend für den CPU Takt auf 16MHz wieder runterteilen kann. Eine Powerstage besteht im Prinzip aus 4 hintereinandergeschalteten PWM Zählern, immer wenn einer abgelaufen ist fängt automatisch der nächste an, daran gekoppelt sind dann direkt zwei Ausgangsregister, welche den Zählern zugeordnet sind. Schau dir am besten mal das Datenblatt an. Kleines Beispiel Zähler 1 macht die Impulslänge Zähler 2 macht den Versatz zum 2 Ausgang (Totzeit) Zähler 3 mAcht die Impulslänge des 2 Ausgangs Zähler 4 die Zeit bis zum nächsten Impuls und das ganze dann noch 2-3 mal je nach Controller Hier der code unter Nutzung der atmel avr Bibliotheken: Psc0_use_64_mega_pll_clock(); Psc0_outputs_active_high(); Psc0_in_4_ramps_mode(); Init_psc0_all_compare_values(zähler1,zähler2, zähler3, zähler4) Enable_pscout00(); Enable_pscout01(); Start_psc(); Nebenbei kannst du noch über nenEingang oder über nen Analog Comparator nen Not Aus vorsehen. Lösung sieht dann wie folgt aus 5 Volt Spannungsregler µC z.B. AT90PWM3 232 Konverter für die serielle Schnittstelle ein paar C´s und R´s Ausgangstufe zusammen keine 10 Euro und fast kein Platz Benutze den AT90PWM3 für ein Schaltreglerdesign und programmiere ihn in C. Nebenbei kommuniziert er noch mit 115200 Baud mit dem PC, da die Power Stages ohne Rechenleistung arbeiten
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.