Hallo!
Ich bin relativ neu in der Arduino und Elektrowelt und hätte eine Frage.
Ich habe einen Aufbau in dem ein sehr schnell schaltendes Ventil geschaltet wird. Ich habe etwa 10 Impulse pro Sekunde, ein Impuls hat in dem Bereich den ich messen möchte eine Dauer von ca. 0,00005 Sekunden bei dem eine Spannung von 63V angelegt wird und sich ein Strom von 9A aufbaut.
Mit einem Interrupt würde ich gerne die Strom- oder Spannungsspitzen zählen lassen und dann mit dem Arduino die Soll-Ist Frequenz vergleichen und somit rausfinden ob das Ventil Schaltaussetzer gehabt hat. (= Wenn die Ist Frequenz unterschrieben ist)
Ein Kollege meinte ein Schmitt-Trigger wäre dafür am besten geeignet da er sich nicht sicher war ob die A/D Wandler im Arduino das kann.
Hat da jemand Infos zu?
Anders würde ich einfach die 63V mit einem Widerstand auf Max 5V runterschrauben und dann mit den 5V/1023 Bits den passenden Bereich als Bedingung angeben.
Sprich wenn z.B. ein Interrupt gezählt werden soll wenn die Spannung 62V überschreitet und 62V, 900 Bits entsprechen:
if (Pin0 > 900)
...
Es wäre nett wenn jemand ein paar Infos oder Tipps geben könnte wenn ich mich auf dem Holzweg befinde.
Du willst doch eigentlich wissen, ob das Ventil tatsächlich auch den Schaltimpulsen folgen kann - sehe ich das richtig?
Dann nützt es nichts, den Ansteuerkreis zu überwachen, denn der wird (vermutlich) ja korrekt arbeiten.
Falls ich falsch liege bitte nochmal Korrektur.
Grüße
Klaus
Der ADC ist da der falsche Weg. Der braucht ca. 120µs Zeit zum Messen!! Bestenfalls 20µs wenn man ihn schneller macht. Wieso nimmst du nicht einen Komparator um abzufragen ob die Spannung einen bestimmten Wert übersteigt?
Der UNO hat sogar einen eingebaut (an Pin 6 und 7). Der wird von der IDE zwar nicht unterstützt, aber es gibt eine Library dafür. Oder du nimmst ein Komparator IC und gehst an einen externen Interrupt.
Der Einwand ist aber völlig berechtigt. Du weist nicht ob das Ventil mechanisch auch macht was du ihm sagst.
Das hätte ich noch erwähnen sollen... Ob die Mechanik funktioniert ist in meiner Überwachung vorerst egal. Mir geht es nur über einen konstanten Kontakt der Verbindung da der Aufbau stark vibriert.
Wo finde ich diese Libary?
http://www.leonardomiliani.com/en/2012/analogcomp-una-libreria-per-gestire-il-comparatore-analogico/
Auf dem UNO ist Pin 6 AIN0 (nicht-invertierend) und Pin 7 ist AIN1 (invertierend). Siehe auch den Auszug aus dem Datenblatt im Anhang
Wobei das mit Schmitt-Trigger + externer Interrupt auch gut gehen sollte. Der liefert dann 5V wenn die Eingangsspannung einen bestimmten Wert übersteigt.
Beim Komparator hast du lediglich volle Kontrolle über die Schaltschwelle. Das sollte hier aber nicht so wichtig sein. Du hast die Option den nicht-invertierenden Eingang mit der internen 1,1V Referenz zu verbinden. Dann hast du eine negative Flanke wenn der invertierende Eingang größer als 1,1V wird
Den Spannungsteiler (das sind zwei Widerstände!! Nicht einer) um von 63V auf maximal 5V zu kommen brauchst du natürlich in beiden Fällen.
Ok danke schonmal.
Ich konnte in der Zwischenzeit einen Strommesser auftreiben der mir Ströme von -20A bis 20A in 0,5V bis 4,5V ausgibt. Hat mal jemand für ein Oszi gebaut.
Könnte ich diesen nicht einfach über die Analoge Eingänge anschließen?
Das ist ein sukzessiver Approximations ADC! Du sagst dass deine Impulse nur 50µs dauern. Ohne den ADC Takt zu ändern dauert eine Messung ca. 120µs. Mit ein wenig Modifikation des ADC Codes dauert eine Messung minimal ca. 20µs. Das ist etwas knapp und dann musst du den Impuls genau erwischen. Das sieht für mich zu unzuverlässig aus.
Spannungsteiler -> Schmitt-Trigger -> externer Interrupt ist wahrscheinlich in der Tat das einfachste.
Wenn du 50µs Pulse messen willst, ist ein Interrupt auf einem Digitalpin die einzige Möglichkeit. Wenn da schnelle 63V Pulse kommen, brauchst du eigentlich keinen Schmitttrigger. Jeder digitale Pin hat bereits eine Hysterese eingebaut.
Ich würde das so machen:
Einen Spannungsteiler ca. 10k/1K, dann einen Längswiderstand 10k auf den Arduino-Pin.
Die internen Schutzdioden fungieren als Überspannungsschutz, und mit der Konstellation erkennt der Arduino ein HIGH ab ca. 30V und ein LOW unter ca. 13V.
guntherb:
Wenn du 50µs Pulse messen willst, ist ein Interrupt auf einem Digitalpin die einzige Möglichkeit. Wenn da schnelle 63V Pulse kommen, brauchst du eigentlich keinen Schmitttrigger. Jeder digitale Pin hat bereits eine Hysterese eingebaut.
Ich würde das so machen:
Einen Spannungsteiler ca. 10k/1K, dann einen Längswiderstand 10k auf den Arduino-Pin.
Die internen Schutzdioden fungieren als Überspannungsschutz, und mit der Konstellation erkennt der Arduino ein HIGH ab ca. 30V und ein LOW unter ca. 13V.
Könntest du das mit dem Längswiderstand nochmal genauer erläutern? Sorry für die dummen Fragen aber als Maschinenbauer bin ich da auf ganz fremden Gebiet unterwegs :D. Wie ein normaler Spannungsteiler aussieht weiß ich.
Das mit den 30V und 13V ist mir jedoch etwas zu ungenau da es ja auch sein kann das die Spannung sich aufbaut und dann der Kontakt abbricht. Die 63V kommen sehr schnell. Mir wäre ein HIGH bei 60V am Liebsten. Dann wüsste ich ob die Spannung sich wirklich komplett aufgebaut hat. Das LOW ist glaube ich eher egal.
Mit Längswiderstand sieht das so aus:
Aber die 60V Schaltschwelle wird so zu unsicher.
Die Schaltschwellen des ATmega sind zwar angegeben, aber recht ungenau.
Mit dieser Dimensionierung kann es auch sein, dass er z.B. erst bei 40V schaltet.
Wenn du das genauer haben willst, musst du wirklich einen Schmitttrigger mit Komperator und Widerständen aufbauen.
Also gehe ich richtig davon aus das R1 und R3 die 63V auf 5V runterschrauben sollen, und R2 als Referenzspannung an GND vom Arduino kommt? Oder verwechsele ich Analog und Digital?
... Lesen müsste man können...
Ich habe den Rest ganz überlesen. Dann fange ich die Idee mit dem Schmitttrigger wieder auf.
Diese läuft dann über den Digitalen Pin?
R1 und R2 teilen die Spannung runter, aber wer rechnen kann, stellt fest, dass es etwas mehr als 5V sind.
Jeder digitale Arduino Eingang hat aber auch Schutzdioden drin, die vor Überspannung schützen. Um diese nicht zu überlasten, ist der Längswiderstand R3.
damit gehst du auf z.B. auf den Arduino Pin2 (das ist beim Uno der Interrupt 0).
Die Schwellenspannungen findest du im Datenblatt des ATmega:
Du kannst dir auch einen Schmittrigger bauen bzw einen Komperator.
Aber: wenn du bei einer Spannung von 63V erst bei 60V auslösen willst, dann brauchst du eine Genauigkeit von 5% oder besser. Inklusive Genauigkeit der Spannungsversorgung, der Widerstände, Offest etc.
Ausserdem bezweifle ich, dass die 63V bei 9A auch immer 63V haben. Oder hast du das schon nachgemessen?
Schmitt-Trigger muss man nicht bauen. Da gibt es Digital ICs mit Schmitt-Trigger Eigenschaften. z.B. 74HC14 invertierende Puffer (zwei hintereinander oder eine fallende Flanke triggern) oder auch Logik ICs wie CD4093 NANDs (auch da wird invertiert)
Ein Arbeitskollege meinte jetzt einfach einen Spannungsteiler und Operationsverstärker da ich ja gleiche HIGH und LOW Werte habe und keine Hysterese.
Welche Ansteuerspannung benötigt mein Arduino Uno an den Digitalpins damit er schaltet?
toolmaker:
Ein Arbeitskollege meinte jetzt einfach einen Spannungsteiler und Operationsverstärker da ich ja gleiche HIGH und LOW Werte habe und keine Hysterese.
In anderen Worten ein Komparator. Wobei es dabei auch dedizierte Komparator ICs gibt. Aber die braucht man eher bei hochfrequenten Signalen. Da fehlt dann die Frequenzkompensation die ein OP hat.
Welche Ansteuerspannung benötigt mein Arduino Uno an den Digitalpins damit er schaltet?
Siehe #11. Low ist bis 0,3 * Vcc. High ist ab 0,6 * Vcc. Dazwischen ist der alte Wert. Verhält sich also wie ein Schmitt-Trigger.
Ein externes IC hat den Vorteil dass nur das IC Schaden nimmt wenn was mit der Schaltung nicht passt und nicht gleich der Arduino. Und wenn du dich um die Schaltschwelle sorgst, dann ist auch ein Komparator eine gute Wahl. Da kannst du die Schwelle mit einem Spannungsteiler/Poti einstellen.
Aber es gibt hier eben mehrere Optionen. So groß ist der Unterschied da nicht und letztlich sollte alles bisher genannte (außer dem ADC) funktionieren.
Serenifly:
Schmitt-Trigger muss man nicht bauen. Da gibt es Digital ICs mit Schmitt-Trigger Eigenschaften. z.B. 74HC14 invertierende Puffer (zwei hintereinander oder eine fallende Flanke triggern) oder auch Logik ICs wie CD4093 NANDs (auch da wird invertiert)
ja, aber bei den Genauigkeitsanforderungen die der Kollege hat, wird er damit nicht weit kommen. Da wird einen echten Komperator bauen müssen.
Ein Komperator könnte z.B. so aussehen:
die Hysterese brauchst du, damit du keine multiplen Interrupts bekommst.
Eine Einstellung mit Poti kannst du vergessen, die haben Temperaturdrift ohne Ende!
und du brauchst eine genaue Referenzspannung. Wenn du die 5v des arduino als Vergleich nimmst, dann kannst du deine Anforderung "Schalten bei 60V" vergessen. Das wird viel zu ungenau.
Es sei denn, du brauchste deine Schaltung nur um etwas zu testen. Dann könnte man auch die Arduino 5V nehmen und einen Trimmer. Aber für eine langzeitstabile Schaltung geht das nicht.
Vielen vielen Dank für den Input. Werde mich versuchen durch das Schaltbild von dir zu kämpfen und alles zu verstehen.
Melde mich dann wieder wenn alles klar ist und die nächsten Fragen auftauchen
Könnte mir jemand das mit den multiplen Interrupts nochmal erklären? Finde zu diesem Problem nichts im Internet.