Forum: FPGA, VHDL & Co. Entladung Kondensator messen.


von f4lkon (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

momentan komme ich bei einer Sache nicht weiter und würde um einen 
Ratschlag bitten. Ich arbeite mit einem Altera Cyclone 3 Board ohne ADC. 
Ich will die Zeit messen bis sich eine LED gegen GND geschaltet entladen 
hat. Dazu schalte ich den Output Pin kurz an um den Ledkondensator 
aufzuladen. Nach einer halben Sekunde setzte ich den Output auf 0. Nun 
will ich die Zeit messen bis mein Inputpin durch den Spannungsabfall auf 
Low fällt und die Zeit anhalten. Ich hatte zunächst versucht einen Bidir 
Pin zu definieren und mit einem oe zu arbeiten. Dies hat nicht 
funktioniert. Heute habe ich es mit einem Schmitt Trigger (diesen extern 
mit 5V versorgt) und einem Input Pin der auf abfallende Flanke reagiert 
versucht. Der Pin geht hinter dem Schmitt Trigger zwar auf Low aber dies 
ohne messbare Zeitverzögerung. Ich hab mal ein Bild von meinem Aufbau 
hochgeladen. Bin für jeden Ratschlag dankbar.

von ich (Gast)


Lesenswert?

Musst mal googlen, da gibt es einiges im Netz oder schon hier auf der 
Seite. Ich glaube man nutzt einen Timer + Interrupt-Pin. Der Aufbau 
sieht abenteuerlich aus. Steht die Kapazität der LED und der Zuleitungen 
noch in einem brauchbarem Verhältis?

von ich (Gast)


Lesenswert?

Ne sry, kein Interrupt-Pin. Einfach nach "LED als Sensor" googlen.

von P. K. (pek)


Lesenswert?

Ich denke, Du solltest mindestens den GND vom FPGA und den GND des 
74'ers miteinander verbinden (ich kenne die Belegung Deines Steckboards 
nicht so genau, aber zurzeit schaut's nicht danach aus als die zwei 
zusammenhängen).

Jetzt nochmals messen.

von tim (Gast)


Lesenswert?

Was hat den nicht funktioniert? Wenn du nach dem laden des Kondensators 
den Ausgangspin wieder auf 0 setzt, dann entlädst du den Kondensator 
wieder. Das heisst du würdest immer eine 0 messen.

Der Ansatz mit dem Bidirektionalen Pin macht für mich Sinn. Du musst den 
Ausgang aber auf 'Z' schalten und nicht auf 0.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

f4lkon schrieb:
> Ich will die Zeit messen bis sich eine LED gegen GND geschaltet entladen
> hat. Dazu schalte ich den Output Pin kurz an um den Ledkondensator
> aufzuladen.
Häh?
Was ist denn ein Ledkondensator?
Was willst du eigentlich messen/feststellen/ermittlen?

> Der Pin geht hinter dem Schmitt Trigger zwar auf Low aber dies
> ohne messbare Zeitverzögerung.
Wie hast du das festgestellt?
Welche Zeit erwartest du denn überhaupt?
Dir ist schon klar, dass in deinem Schaltplan der Eingang über einen 
Inverter einfach mit dem Ausgang verbunden ist. Dass da eine LED mit 
dranhängt ist Nebensache...

> Ich hab mal ein Bild von meinem Aufbau hochgeladen.
Ich schlage vor, einen Schaltplan zu posten, statt eines Bildes für das 
Reverse-Engineering.

von f4lkon (Gast)


Lesenswert?

Hallo,

danke für einige Hinweise. Den Schaltplan reiche ich nach sobald ich aus 
der Uni raus bin. Was der Schmitt Trigger macht habe ich mir so 
angeschaut:

test=IORD_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE);
printf( "test1:  %i ", test );
IOWR_ALTERA_AVALON_PIO_DATA(GPIO0_D_BASE,0x01);
usleep(100000);
test=IORD_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE);
printf( "test2:  %i ", test );
IOWR_ALTERA_AVALON_PIO_DATA(GPIO0_D_BASE,0x00);
test=IORD_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE);
printf( "test3:  %i ", test );
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE,1);

@lkmiller: Ledkondensator gibt es nicht das war Käse. Halt eine Led die 
die sich als solche verhält.

Ich will die Entladungszeit dieser Led messen. Mit dem Oszi habe ich 
300ms gemessen.

Wie meinst du das mit dem Inverter genau? Vielen Dank!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

f4lkon schrieb:
> Ich will die Entladungszeit dieser Led messen.
> Mit dem Oszi habe ich 300ms gemessen.
Da muss man gar nicht messen, da kann man ja mitzählen. Das hört sich 
für mich nach "Wer misst, misst Mist" an. Den Messaufbau möchte ich 
sehen, und auch, was dabei herausgekommen ist...

> Mit dem Oszi habe ich 300ms gemessen.
Bleibt noch diese Schlüsselfrage:
>> Welche Zeit erwartest du denn überhaupt?
Wenn da irgendwas mit ms herauskommt, dann liegst du da sicher um 
mindestens 4 Zehnerpotenzen zu hoch! Und dein Messaufbau gibt irgendwas 
im ns Bereich gar nicht her.

> Ledkondensator gibt es nicht das war Käse.
> Halt eine Led die die sich als solche verhält.
Wieso sollte sich eine LED wie ein Kondensator verhalten?

> Was der Schmitt Trigger macht habe ich mir so angeschaut: ...
Was passiert da?
Als Tipp: die Zeiten, die du ermitteln willst, wirst du mit Software und 
printf() dazwischen sicher nicht erfassen können.

> Wie meinst du das mit dem Inverter genau? Vielen Dank!
Zeichne einen Schaltplan und sieh dir das an. Die LED ist einfach nur 
eine Pegelanzeige und der Inverter invertiert nur das Signal, das vom 
Ausgang ausgegeben wird.

von Duke Scarring (Gast)


Lesenswert?

Lothar Miller schrieb:
>> Halt eine Led die die sich als solche verhält.
> Wieso sollte sich eine LED wie ein Kondensator verhalten?
Nu enttäuschst Du mich aber, Lother ;-)
Von der Sperrschichtkapazität hast Du sicher schonmal was gehört.
Und bei einer LED ist die Sperrschichtkapazität auch von der 
Umgebungshelligkeit abhängig. So kann man ein LED verwenden um damit 
festzustellen, ob es hell oder dunkel ist. Ich vermute genau das möchte 
der Threadersteller machen.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
> Nu enttäuschst Du mich aber, Lother ;-)
Schade um den schönen Tag... ;-)

> Und bei einer LED ist die Sperrschichtkapazität auch von der
> Umgebungshelligkeit abhängig.
Und natürlich wie üblich von der anliegenden Sperrspannung...

> Ich vermute genau das möchte der Threadersteller machen.
Dann sollte er aber 1. die LED in Sperrrichtung betreiben
und 2. definiert entladen und vor allem: schneller messen...


Ich würde das ansatzweise so probieren:
1
FPGA-pin --------o------.
2
                 |      |
3
             --> -      -
4
             --> ^     | |
5
                 |      -
6
                 |      |
7
    GND  --------o------'
Und damit einen freischwingenden Oszillator aufbauen, und die 
Periodenzeit messen...

von Klaus (Gast)


Lesenswert?

Duke Scarring schrieb:
>> Wieso sollte sich eine LED wie ein Kondensator verhalten?
> Nu enttäuschst Du mich aber, Lother ;-)
> Von der Sperrschichtkapazität hast Du sicher schonmal was gehört.
> Und bei einer LED ist die Sperrschichtkapazität auch von der
> Umgebungshelligkeit abhängig.

Ob sich eine LED wie ein Kondensator verhält, hängt in erster Line nur 
von einem ab: Nämliche welche Größenordnung der Kapazität man erwartet 
;-)  Wenn man Zeitkonstanten im Millisekundenbereich erwartet, verhält 
sich die LED ganz und gar nicht wie ein Kondensator. Wenn man 
Kapazitäten im pF Bereich erwartet, dann verhält sich alles wie ein 
Kondensator. ;-)

von f4lkon (Gast)


Lesenswert?

So vom Handy etwas umständlich aber ich glaube es liegt vllt daran, dass 
mein Z state vom Boardpin nicht hochohmig genug ist. Die Led betreibe 
ich schon in Sperrrichtung. Die 300ms als tau sind natürlich utopisch 
was aber am sehr hochen widerstand vom Oszi kommt. Meine led hab ich mit 
4,6pf gemessen. Ich rechne bei der Schaltung so mit einem tau von ca 
15ms. Das mit dem freischwingenden Oszillator klingt gut. Das müsste 
mein tau verlängern oder irre ich mich?

von f4lkon (Gast)


Lesenswert?

Passt es denn so mit der Schaltung?
                                          5v

                                          |
                                          |
vom_board_3.3Vttloutput-----|-----------  |
                            R          |  |
                            |          |  |
                           _|-         |  schmitttrigger
                           LED         |___|  |         |
                            |+                |         |
                            |                 |         |
                            |                 |         |
vom_board_gnd----------------                 |         |minus
                                              |
inputpin--------------------------------------|


So hatte ich das gestern Nacht hingebastelt. Hoffe man kann das 
verstehen.

von spontan (Gast)


Lesenswert?

Dein Schmitt-Trigger wird mit 5 Volt und mit 3,3 Volt versorgt, oder 
wie?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

f4lkon schrieb:
> Meine led hab ich mit 4,6pf gemessen.
> Ich rechne bei der Schaltung so mit einem tau von ca 15ms.
Welchen Widerstand hast du da angenommen?
Mit  R = t/C = 15ms/4,6pF komme ich auf 3,26 Giga(!!!)Ohm.
Lass dir aus der Praxis sagen: da stimmt was nicht am Gedankengang...
Schon Widerstandswerte von feuchter Luft oder gar Kriechstrecken auf 
einer Leiterplatte sind deutlich niederohmiger.

f4lkon schrieb:
> Das mit dem freischwingenden Oszillator klingt gut.
> Das müsste mein tau verlängern oder irre ich mich?
Du müsstest den in Hardware bauen (also mit Verilog oder VHDL). In 
Software bist du garantiert zu langsam...

> So hatte ich das gestern Nacht hingebastelt.
Was ist R?

> Hoffe man kann das verstehen.
Du solltest auf jeden Fall auch den Minuspol deiner Versorgung und den 
GND-Anschluss des Inverters mit dem GND vom FPGA verbinden. Also so 
etwa:
1
                                          5v
2
3
                                           |
4
                                           |
5
vom_board_3.3Vttloutput-----o----------.   |
6
                            |          |   |
7
                            R          |   |
8
                            |          |   |
9
                            -          |   schmitttrigger
10
                            ^ LED      '---'  |         |
11
                            |                 |         |
12
                            |                 |         |
13
                            |                 |         |
14
vom_board_gnd---------------o-----------------+---------o-- minus
15
                                              |
16
inputpin--------------------------------------'
Aber wie gesagt: in dieser Schaltung hat die LED eigentlich nichts zu 
sagen. Denn die sperrt ja und ist über R mit einem aktiven Ausgang 
verbunden. Daher wirst du bestenfalls die Laufzeit durch den Inverter 
messen. Tatsächlich wird deine Schaltung also so wirken:
1
                                        5v
2
                                         |
3
                                         |
4
vom_board_3.3Vttloutput--------------.   |
5
                                     |   |
6
                                     |   |
7
                                     |   |
8
                                     |   schmitttrigger
9
                                     '---'  |         |
10
                                            |         |
11
vom_board_gnd-------------------------------+---------o-- minus
12
                                            |
13
inputpin------------------------------------'

von f4lkon (Gast)


Lesenswert?

Vielen Dank für deine Unterstützung! Ich hab den Schmitt Trigger jetzt 
mal rausgeworfen und die externe Versorgung auch. Ich hab es jetzt mit 
nem Tristate im Nios2 gemacht. Sprich Pin auf output und LED kurz 
aufladen. Danach pin in den Tristate 'Z' und per edge capture register 
auf low warten. Ich hatte in der Nacht keinen klaren Kopf und somit hab 
ich immer vergessen per ALTERA_AVALON_PIO_DIRECTION die Richtung, sprich 
Eingang/Ausgang, zu setzen.

von P. K. (pek)


Lesenswert?

Lothar Miller schrieb:
> Du solltest auf jeden Fall auch den Minuspol deiner Versorgung und den
> GND-Anschluss des Inverters mit dem GND vom FPGA verbinden.

Sag' ich doch... ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

f4lkon schrieb:
> Danach pin in den Tristate 'Z' und per edge capture register
> auf low warten.
Und wie gehts dann weiter?
Wer sollte den "Kondensator" dann halbwegs definiert entladen?
Oder soll er sich auf unerklärliche Art&Weise "selber" entladen?

von f4lkon (Gast)


Lesenswert?

Der Kondensator entlädt sich wegen dem hochohmigen Eingang selbst. 
Sobald die Spannung dabei unter 0.8V sinkt erkenne ich ihn als low.

von P. K. (pek)


Lesenswert?

f4lkon schrieb:
> Der Kondensator entlädt sich wegen dem hochohmigen Eingang selbst.

Hochohmig != Pull-Down

Vielleicht entlädt er sich, vielleicht erst später, vielleicht auch erst 
sehr viel später, oder...

Da würde ich den Rat des Pull-Downs beherzigen... ;-)

von f4lkon (Gast)


Lesenswert?

Hmm so im Tristate konnte ich schon mal verschiedene Zeiten messen was 
auch deine Aussage bestätigen würde;) Ich versuche es mal mit nem 3k 
Pulldown.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter K. schrieb:
> f4lkon schrieb:
>> Der Kondensator entlädt sich wegen dem hochohmigen Eingang selbst.
> Vielleicht entlädt er sich, vielleicht erst später, vielleicht auch erst
> sehr viel später, oder...
Oder vielleicht lädt er sich auch. Wenn du so einen Eingang nämlich 
komplett unbeschaltet lässt, dann stellt sich im langjährigen Mittel 
etwa VCC/2 ein. Damit leiten dann beide Eingangstransistoren und der 
IO-Pin verbraucht unnötig Strom...

f4lkon schrieb:
> Ich versuche es mal mit nem 3k Pulldown.
Und was erwartest du dann?
Es ist mir klar, dass man ohne Erfahrung kein "Gefühl" für 
Bauteilwerte hat, aber rechnen kannst du doch: tau = R*C.
Was ergibt das dann?
tau = 4,6pF*3kOhm = 4,6E-12 * 3E3 = ca. 14ns
Kannst du das prinzipiell auswerten?
Ich behaupte: Nein! Vermutlich ist nicht mal deine Taktfrequenz hoch 
genug, um einen Zähler in dieser Zeit wenigstens um 1 hochzuzählen... 
:-o

von f4lkon (Gast)


Lesenswert?

Hmm ok danke für den Hinweis! Bei 50 MHz ist das echt Käse. Meinst ich 
sollte doch lieber den Schmitt Trigger oder ein anderes R nehmen. Ich 
hab hier noch 1Mohm damit dürfte ich ja ca 700 mal zählen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nimm mal den 1 MOhm Widerstand. Du wirst dann ja sehen, was sich tut. 
Probieren geht hier über Studieren...

Allerdings sollte dir bewusst sein, dass schon der FPGA-Pin eine 
Kapazität hat. Das kannst du ja einfach mal messen, indem du nur den 
Widerstand an den Pin anschließt...

von Duke Scarring (Gast)


Lesenswert?

Lothar Miller schrieb:
> tau = 4,6pF*3kOhm = 4,6E-12 * 3E3 = ca. 14ns
> Kannst du das prinzipiell auswerten?
Dafür kann man einen TDC im FPGA realisieren.
Das ist dann aber recht akademisch (oder anders ausgedrückt mit Kanonen 
auf Spatzen...)

Duke

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.