Hallo Mikrocontroller-Gemeinde, ich möchte eine Schaltungsaufgabe lösen und möchte wissen, ob dies mit einem FPGA realisiert werden kann. Ich besitze keine Kenntnisse zur FPGA Hardware und Programmierung (lediglich Mikrocontroller) und hätte gern eine Einschätzung, ob sich die Einarbeitung für diese Aufgabe rentieren würde. Die Aufgabe, die ich lösen will ist folgende: Auf die Schaltung gehen 64 Leitungen mit analogen Signalen. Hier kommen auf jeder Leitung nacheinander Impulse mit einer Breite von 100ns rein. Des weiteren gibt es ein digitales Clock Signal. Das Clock Signal zeigt an, dass der Impuls nun auf der nächsten Leitung zu erwarten ist. Die Amplitude der Impulse soll gemessen und mit einem gespeicherten Durchschnittswert verglichen werden. Bei Abweichungen vom Durchschnittswert soll ein Ereignis ausgelöst werden. Die gesuchte Schaltung müsste daher folgende Komponenten beinhalten: - Clockgesteuerter Demultiplexer - A/D-Wandler - Referenzwertermittlung (Durchschnitt) und Speicherung - Referenzwertvergleicher Falls Ihr mir den Einsatz eines FPGAs empfehlen könnt, wäre ich auch dankbar, wenn Ihr mir einen in Frage kommenden Typen empfehlen könnt. Dass die FPGA-Einarbeitung zeitaufwendig sein wird, ist mir bewusst. Vielen Dank im Voraus!
@Maik M. (maikm) >Auf die Schaltung gehen 64 Leitungen mit analogen Signalen. Da braucht man schonmal einen AD-Wandler oder Komparator. >Hier kommen auf jeder Leitung nacheinander Impulse mit einer >Breite von 100ns rein. Wie oft kommen die Pulse? 1 mal pro Sekunde? Kommt jeweils immer nur ein Puls auf einer Leitung oder mehreren gleichzeitig? > Des weiteren gibt es ein digitales >Clock Signal. Das Clock Signal zeigt an, dass der Impuls >nun auf der nächsten Leitung zu erwarten ist. Was heißt das GENAU? Ist der Taktimpuls immer genau am Anfang/Mitte/whatever des Pulses oder nur ungefähr in der Nähe? >Die Amplitude der Impulse soll gemessen und mit einem >gespeicherten Durchschnittswert verglichen werden. >Bei Abweichungen vom Durchschnittswert soll ein Ereignis >ausgelöst werden. Hmm. >- Clockgesteuerter Demultiplexer Naja, du brauchst hier ggf. einen analogen 64:1 Mux. Machbar, aber aufwändig. >- A/D-Wandler >- Referenzwertermittlung (Durchschnitt) und Speicherung Das macht man digital. >- Referenzwertvergleicher Dito. >Falls Ihr mir den Einsatz eines FPGAs empfehlen könnt, Dazu braucht man mehr Angaben, siehe oben. Ggf reicht auch ein etwas schnellerer uC. >wäre ich auch dankbar, wenn Ihr mir einen in Frage kommenden >Typen empfehlen könnt. Jedes Mittelklasse-FPGA sollte reichen, viel mehr kannst du als Anfänger so oder so nicht nutzen.
Die A/D Wandler im FPGA können keine Impulse mit 100ns Pulsbreite messen. Damit ist die Lösung allein mit dem FPGA nicht machbar. Das FPGA kann aber einen externen A/D-Wandler und externe Multiplexer ansteuern.
Danke für die ersten Einschätzungen. Hier noch weitere Infos zur Aufgabe: - Die Impulse kommen nacheinander, nicht gleichzeitig, auf den Leitungen rein. Auf welcher Leitung der nächste Impuls kommt ist bekannt und wird über den Takt angezeigt. - Die Leitungen sind umlaufend und endlos mit den Impulsen belegt, d.h. nach der 64sten Leitung geht es mit der ersten weiter. - Der absolute Maximalwert der Impulse ist nicht von Interesse. Nur die Abweichung vom Durchschnittwert bzw. Normalwert soll erkannt werden. Daher ist der Zeitpunkt der Messung nicht wichtig, er muss nur konstant sein (ggf. wird der Impuls für kurze Zeit in einem Kondensator gehalten).
@Maik M. (maikm) >- Die Impulse kommen nacheinander, nicht gleichzeitig, auf den Leitungen > rein. Auf welcher Leitung der nächste Impuls kommt ist bekannt und > wird über den Takt angezeigt. Das vereinfacht die Sache. >- Die Leitungen sind umlaufend und endlos mit den Impulsen belegt, d.h. > nach der 64sten Leitung geht es mit der ersten weiter. OK. >- Der absolute Maximalwert der Impulse ist nicht von Interesse. > Nur die Abweichung vom Durchschnittwert bzw. Normalwert soll erkannt > werden. Daher ist der Zeitpunkt der Messung nicht wichtig, er muss nur > konstant sein (ggf. wird der Impuls für kurze Zeit in einem > Kondensator gehalten). Naja, hier trennen sich die Konzepte. 1.) Man könnte über einen analogen 64:1 MUX auf einen analogen Spitzenwertdetektor gehen und dann den Wert per langsamen (internen) AD-Wandler einlesen. Den vergleicht man mit dem alten Maximalwert und schaltet dann entsprechend einen Ausgang. Für diesen Ansatz tut es fast jeder kleine, einfache uC ala AVR, PIC, whatever. 2.) Man könnte nach dem MUX einen schnellen (100MSPS)++), externen AD-Wandler nehmen und den Puls vollständig digital erfassen und auch digital das Maximum auswerten. Hier wird man ein FPGA brauchen, um den externen AD-Wandler schnell genug ansteurn/auslesen zu können. Den Rest macht man im FPGA per Statemachine oder Softcore. Pragmatiker nehmen das 1. Konzept, Akademiker das 2. ;-)
Der Hauptteil deiner Schaltung wird der MUX und der AD Wandler sein. Zur Ansteuerung dieser Komponenten kan man zwar ein FPGA nehmen aber das ist doch etwas "oversized" und wahrscheinlich auch nicht die kleinste und preiswerteste Lösung. Wir wissen immer noch nichts über den Pegel deiner Impulse, die Frequenz deines Clock Signales und der zeitliche Zusammenhang zwischen Clock-Flanke und Impulsbeginn. Ich würde für den Zweck, wenn alle nichtgenannten Bedingungen es auch erlauben, ein PIC24FJ64GC010 oder PIC24FJ128GC010 + 2 externe 8Bit Analog Mux nehmen. Die Chips haben ein 12Bit/10Msps AD Wandler mit 50 Eingängen, DMA und genug Power für die Bearbeitung.
@ Falk Bist Du sicher, dass Du Dich nicht vertan hast? Er sprach doch ausdrücklich NICHT von dem Maximalwert sondern zuerst von einem Durchschnitt und dann von einem arbiträren Wert.
Wobei hier, wie so häufig eine Lösung diskutiert wird, ohne das das Problem genannt wird. Eigentlich sollte das lt. Netiquette ja beschrieben werden. Evtl. ist eine andere Lösung ja angemessener.
Weitere Infos zur Aufgabe: - jede Leitung, jeder Impuls wird über einen OP geführt, so dass die Amplitude eingestellt werden kann (500mV .. 3V). Einen 8bit ADC halte ich für ausreichend. - um das Problem mit dem Messzeitpunkt zu entschärfen, könnte der OP über eine Diode einen Kondensator speisen (vor dem Demultiplexer). - Eine AD Wandlung pro Impuls ist ausreichend. Bei einer Impulsbreite von 100ns ergibt sich nach dem Demultiplexer eine Samplingfrequenz von 10MHz. - Das Taktsignal könnte mit der pos. Flanke den Demultiplexer schalten und mit der neg. die ADC auslösen. - Wichtig wäre, dass kein Impuls verpasst wird. Nochmals Danke für Eure Einschätzung und Vorschläge!
@ Klaus (Gast) >Bist Du sicher, dass Du Dich nicht vertan hast? Nö. > Er sprach doch >ausdrücklich NICHT von dem Maximalwert Er sprach von Amplitude, das ist der Maximalwert. Wenn sich der zeitlich ändert, soll das signalisiert werden.
@ Maik M. (maikm) >- jede Leitung, jeder Impuls wird über einen OP geführt, so > dass die Amplitude eingestellt werden kann (500mV .. 3V). > Einen 8bit ADC halte ich für ausreichend. >- um das Problem mit dem Messzeitpunkt zu entschärfen, könnte > der OP über eine Diode einen Kondensator speisen (vor dem > Demultiplexer). Nennt sich Spitzenwertdetektor. Aber den braucht man nur einmal, HINTER dem MUX. >- Eine AD Wandlung pro Impuls ist ausreichend. Bei einer > Impulsbreite von 100ns ergibt sich nach dem Demultiplexer > eine Samplingfrequenz von 10MHz. Aber nur, wenn du den Zeitpunkt des Maximalwertes GENAU triffst! Kannsrt du das? >- Das Taktsignal könnte mit der pos. Flanke den Demultiplexer > schalten und mit der neg. die ADC auslösen. Das sind Nebensächlichkeiten. >- Wichtig wäre, dass kein Impuls verpasst wird. Kriegt man schon hin.
Falk B. schrieb: > @ Klaus (Gast) > >>Bist Du sicher, dass Du Dich nicht vertan hast? > > Nö. > >> Er sprach doch >>ausdrücklich NICHT von dem Maximalwert > > Er sprach von Amplitude, das ist der Maximalwert. Wenn sich der zeitlich > ändert, soll das signalisiert werden. Aber er sprach auch von "Impuls" "Amplitude" lässt sich eigentlich nur auf eine Wechselgrösse im stationären Zustand anwenden. Ich bezog mich aber vor allem auf diesen Satz von Dir: "Den vergleicht man mit dem alten Maximalwert und schaltet dann entsprechend einen Ausgang." Der Vergleichswert - so habe ich das verstanden - soll der Durchschnitt der "Impulsamplitude" (wenn ich das jetzt mal so nenne) sein oder irgendein arbiträrer Wert. Ich mag mich irren oder auf etwas irrelevantes beziehen. Es schien mir nur zweckmäßig auf eine Diskrepanz hinzuweisen. Hoffe das wird sich klären.
Gern nenne ich auch die eigentliche Anwendung, möchte aber darum bitten, nicht mit Fragen wieso weshalb warum vom Kern der Fragestellung abzuweichen: Es soll eine sehr schnelle Objektkontrolle mit 64 Lichtschranken entstehen. Die Sender (LED) und Empfänger werden mit dem gleichen Clock gemultiplext. Der Multiplex-Betrieb ist erforderlich, da der Abstand von Sender 1 zu Sender 2 nur einige Millimeter beträgt und ein Sender mehrere Empfänger beleuchtet. Somit darf immer nur ein Sender-Empfänger Pärchen aktiv sein. Der Abstand von Sender zu Empfänger soll variabel bleiben ohne die Schaltung neu abgleichen zu müssen. Daher ist der Vergleichswert im Empfänger flexibel zu halten (er ist bei nicht unterbrochener Lichtschranke (z. B. nach Einschalten des Systems) zu bilden).
Maik M. schrieb: > Gern nenne ich auch die eigentliche Anwendung, möchte aber > darum bitten, nicht mit Fragen wieso weshalb warum vom Kern > der Fragestellung abzuweichen: > > Es soll eine sehr schnelle Objektkontrolle mit 64 Lichtschranken > entstehen. Die Sender (LED) und Empfänger werden mit dem > gleichen Clock gemultiplext. > Der Multiplex-Betrieb ist erforderlich, da der Abstand von > Sender 1 zu Sender 2 nur einige Millimeter beträgt und ein Sender > mehrere Empfänger beleuchtet. Somit darf immer nur ein Sender-Empfänger > Pärchen aktiv sein. Tja. Der Sinn der Frage nach dem Problem ist ja gerade, dass die Fragesteller hier oft unangemessene Lösungen versuchen. Wie - aus meiner Sicht - auch in diesem Fall. Stand der Technik war da schon vor langer Zeit ein schnelleres Verfahren. Aber gut. Da Du das nicht wünschst, halte ich mich raus. Viel Erfolg.
@Klaus (Gast) >> Er sprach von Amplitude, das ist der Maximalwert. Wenn sich der zeitlich >> ändert, soll das signalisiert werden. >Aber er sprach auch von "Impuls" "Amplitude" lässt sich eigentlich nur >auf eine Wechselgrösse im stationären Zustand anwenden. Streng genommen hast du recht. >Ich bezog mich aber vor allem auf diesen Satz von Dir: "Den vergleicht >man mit dem alten Maximalwert und schaltet dann entsprechend einen >Ausgang." >Der Vergleichswert - so habe ich das verstanden - soll der Durchschnitt >der "Impulsamplitude" (wenn ich das jetzt mal so nenne) sein Wahrscheinlich. >oder irgendein arbiträrer Wert. Eher nicht.
@ Maik M. (maikm) >Es soll eine sehr schnelle Objektkontrolle mit 64 Lichtschranken >entstehen. Die Sender (LED) und Empfänger werden mit dem >gleichen Clock gemultiplext. Sinnvoll. >Der Multiplex-Betrieb ist erforderlich, da der Abstand von >Sender 1 zu Sender 2 nur einige Millimeter beträgt und ein Sender >mehrere Empfänger beleuchtet. Somit darf immer nur ein Sender-Empfänger >Pärchen aktiv sein. OK. >Der Abstand von Sender zu Empfänger soll variabel bleiben ohne >die Schaltung neu abgleichen zu müssen. Daher ist der Vergleichswert >im Empfänger flexibel zu halten (er ist bei nicht unterbrochener >Lichtschranke (z. B. nach Einschalten des Systems) zu bilden). AHA! Also beim Einschalten wird EINMALIG kalibriert. Das ist schon etwas anderes. Darauf muss zumindest die Auswertelogik Rücksicht nehmen.
Falk B. schrieb: > AHA! Also beim Einschalten wird EINMALIG kalibriert. Das ist schon etwas > anderes. Darauf muss zumindest die Auswertelogik Rücksicht nehmen. Falk B. schrieb: > @Klaus (Gast) >>oder irgendein arbiträrer Wert. > > Eher nicht. Oder doch. :-)
Moin, Für solche Sachen hat man mit nem FPGA deutlich mehr Spass als nem uC-Hack, würde ich mal vom Schiff aus prognostizieren. Rein darum, dass bei solchen Analog-Mux-Orgien die Abtastzeitpunkte immer ein Thema sind. Du könntest natürlich mit "Brute Force" draufhauen, einen 64-Channel-ADC verwenden (nicht ganz günstiger Spass...) und schauen, ob du mit einem DSP die Daten einfach alle analog einziehst und verrechnest. Den Umschaltzeitpunkt musst du allerdings per Timer-Eingang füttern. Genau da wird es mit einer einfachen CPU schon mal knifflig mit dem genauen Timing, wenn der Timer keine harte Pulsmessung kann. Für nen Prototyp lässt sich sicher sowas mit nem Blackfin und nem kleinen 250k-Gater erschlagen. Gehe mal davon aus, dass bei der Aufgabe die Entwicklungsarbeit die relevanten Kosten generiert, nicht die HW.. Der Vorteil am DSP/FPGA-Gespann ist, dass sich die Komplexitäten von solchen Anwendungen (mit Realtime-Anforderungen) gut verteilen lassen. Wenn man eine gute Softcore-Lösung hat, braucht's ev. den DSP gar nicht mehr, aber das muss man sich erst mal aufbauen.
@Jürgen S. (engineer) Benutzerseite >Bin ich der einzige, der hier einen Analogmultiplexer sieht? Nö, du übersiehst, daß andere den auch sehen ;-) Beitrag "Re: Schaltungsaufgabe mit FPGA lösen" "Naja, du brauchst hier ggf. einen analogen 64:1 Mux. Machbar, aber aufwändig." Beitrag "Re: Schaltungsaufgabe mit FPGA lösen" "Man könnte über einen analogen 64:1 MUX auf einen analogen Spitzenwertdetektor gehen"
Strubi schrieb: > 64-Channel-ADC > verwenden (nicht ganz günstiger Spass...) Hast Du da einen Link dazu? Ein solche Lösung hätte auch den Charme nicht nur eine Sender-Empfänger-Kombination auswerten zu können, sondern auch Sender-Multiempfänger. Maik M. schrieb: > Es soll eine sehr schnelle Objektkontrolle mit 64 Lichtschranken > entstehen. Wenn ich es nicht überlesen habe, ist immer noch die Frage offen, wie schnell das Ganze ausgelesen oder umgeschalten werden soll. So ein Multiplexer arbeitet bekanntermaßen auch nicht in 'Nullzeit'. Falk B. schrieb: > Pragmatiker nehmen das 1. Konzept, Akademiker das 2. ;-) Mit meinem Vorschlag oute ich mich als zu 2. gehörig. Aber wenn das Projekt einen wissenschaftlichen Background hat, ist Flexibilität von Vorteil. Rick
Moin Rick, Link habe ich nicht parat, mir fiel nur so ein relativ teurer Chip von TI ein, der speziell für Scanner-Sachen eingesetzt wird. Der kann allerdings keine 10 Msps und ist sonst auch mit 20 bit etwas overdosed. Macht ev. mehr Sinn, mehrere 16-Kanäler zu nehmen, ADI und Maxim sollten da was haben. Gruss, - Strubi
Nachtrag, bin gerade drüber gestolpert: Der TI-Chip ist der DDC264. Definitiv wohl nicht das Richtige für die Anwendung. Eher noch würde ich, da der Abtastzeitpunkt ja relativ genau definiert sein sollte, über einen puren FPGA-Hack (Sigma-Delta mit den differentiellen Eingängen) nachdenken.
Strubi schrieb: > Der TI-Chip ist der DDC264. Danke Dir. > Macht ev. mehr Sinn, mehrere 16-Kanäler zu nehmen, ADI und Maxim sollten > da was haben. Wird schon gemacht. Single-Chip wäre halt hübscher. Rick
Wenn bekannt ist, aus welcher Leitung der puls kommt, wurde ich eine riesige addiererschaltung mit einem schnellen OPV bauen und 64 Eingängen.(Also einfach 64 Widerstände zu den OPV) Hinten dran ein schneller ADC. Oder habe ich etwas übersehen?
@Chris (Gast)
>Oder habe ich etwas übersehen?
Ja. Dass benachbarte Kanäle auch ein Signal sehen, das man aber bei der
Auswertung des Kanals NICHT mit messen will.
Falk B. schrieb: > Ja. Dass benachbarte Kanäle auch ein Signal sehen, das man aber bei der > Auswertung des Kanals NICHT mit messen will. Alles klar, der einleitende Post ließ sich auch anders interpretieren: Maik M. schrieb: > Hier kommen auf jeder Leitung nacheinander Impulse mit einer > Breite von 100ns rein. Des weiteren gibt es ein digitales > Clock Signal. Das Clock Signal zeigt an, dass der Impuls nun auf der > nächsten Leitung zu erwarten ist.
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.