Forum: FPGA, VHDL & Co. Schaltungsaufgabe mit FPGA lösen


von Maik M. (maikm)


Lesenswert?

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!

von Falk B. (falk)


Lesenswert?

@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.

von Helmut S. (helmuts)


Lesenswert?

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.

von Maik M. (maikm)


Lesenswert?

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).

von Falk B. (falk)


Lesenswert?

@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. ;-)

von Hans-Georg L. (h-g-l)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

@ 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.

von Klaus (Gast)


Lesenswert?

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.

von Maik M. (maikm)


Lesenswert?

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!

von Falk B. (falk)


Lesenswert?

@ 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.

von Falk B. (falk)


Lesenswert?

@ 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.

von Klaus (Gast)


Lesenswert?

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.

von Maik M. (maikm)


Lesenswert?

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).

von Klaus (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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.

von Falk B. (falk)


Lesenswert?

@ 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.

von Klaus (Gast)


Lesenswert?

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. :-)

von Strubi (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

Bin ich der einzige, der hier einen Analogmultiplexer sieht?

von Falk B. (falk)


Lesenswert?

@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"

von Rick Dangerus (Gast)


Lesenswert?

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

von Strubi (Gast)


Lesenswert?

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

von Strubi (Gast)


Lesenswert?

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.

von Rick Dangerus (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@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.

von Chris (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.