Arduino-Impuls zum Transistorleistungsmaximum

Hallo, ich möchte eine Bestätigung erhalten, dass das, was ich tue, meinen Arduino Mega nicht braten wird.

Die Skizze, die ich verwende, um einen Impuls an Pin 8 an einen 2n3055 zu senden, der 12 Volt schaltet, lautet wie folgt:

int pulse = 8;
int sensorValue;

void setup() {
  pinMode(pulse, OUTPUT);
}

void loop() {
  int sensorValue = analogRead(A0);
  map(sensorValue, 0, 1023, 1, 2000);
  digitalWrite(pulse, HIGH);   
  delay(sensorValue);              
  digitalWrite(pulse, LOW);    
  delay(sensorValue);            
}

Ich verwende ein Potentiometer zwischen dem Arduino 5v und Masse, wobei der Wischer auf Pin A0 geht.

Skizzieren

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Ich möchte es wissen:

  1. könnte ich dies direkt von meinem USB mit Strom versorgen, anstatt den Transistor UND das Arduino von der Quellbatterie mit Strom zu versorgen.

  2. Wenn sie beide von der Batterie gespeist werden müssen, muss ich den Emitter an die Masse des Arduino UND die Batterie anschließen, um zu verhindern, dass der gesamte Strom durch die Arduino-Masse fließt und einen sauberen Impuls erhält, oder muss ich nur den Emitter anschließen an die Batterie negativ und das Signal wird OK sein.

  3. In welcher Konfiguration auch immer, wo ist der beste Ort, um ein analoges Messgerät mit einer Nennleistung von bis zu 3 Ampere anzubringen, damit ich den Gesamtstromverbrauch der Platine und der Transistorschaltung sehen kann.

  4. Zuletzt verwende ich dies, um die Hochspannungsseitenspule in einem Mikrowellentransformator zu pulsieren, sodass sie eine hohe Impedanz hat und beim Pulsen maximal 300 mA zieht, sodass ich den Arduino über USB und den Transistor von der Batterie mit Strom versorgen kann, damit ich kann im Handumdrehen umprogrammieren und einen eingestellten Puls haben, anstatt den Topf zu verwenden. (wie beim Schreiben des Codes für eine bestimmte Verzögerung und Hochladen während der Ausführung)

Diese Frage ist verwirrend und würde von einem Schaltplan profitieren; Hat die Batterie 12V und wo ist sie angeschlossen?
Während einige von uns Ihre Konfiguration verstehen können, sagt ein Bild anhand Ihrer verbalen Beschreibung mehr als tausend Worte. Bitte erwägen Sie, ein Schema für das hinzuzufügen, was Sie versuchen: Da Sie noch nicht über einen ausreichenden Ruf verfügen, erstellen Sie bitte eines und laden Sie es als Bild auf eine öffentliche Bildhosting-Site hoch. Hinterlassen Sie dann den Link hier als Kommentar zu Ihrer eigenen Frage. Jemand mit Bearbeitungsrechten wird es in die Frage einfügen.
+1 zu dem, was @AnindoGhosh gesagt hat, aber Sie können auch einen Link zu Ihrem Schaltplan bearbeiten. Besser noch, verwenden Sie Strg+M und fügen Sie ein Circuit Lab-Diagramm hinzu, Sie brauchen dafür keinen Repräsentanten: Es sollte jetzt behoben sein.
Warum nicht PWM verwenden, es ist so einfach wie ein analogWrite( pulse , dutyCycle );, wo dutyCycle = ( 255 * sensorValue ) / 1024;.
Ich mache kein PWM, weil ich eine variable Frequenz mit einem festen Tastverhältnis von 50 Prozent haben möchte. Das Variieren der Verzögerungs-Ein- und Ausschaltzeiten mit einem Pot erledigt das für mich. Wenn ich das Tastverhältnis variieren möchte, könnte ich einen zweiten Topf hinzufügen und ihn als Variable für die Ausschaltverzögerung verwenden.
Ich möchte zwei Dinge erwähnen: 1) Sie sollten Ihren Code kommentieren, damit die Leute (einschließlich Ihnen selbst) leicht verstehen können, was Sie zu tun versuchen. 2) Sie können ganz einfach eine PWM mit variabler Frequenz erstellen: Drücken Sie eine Taste, um die PWM-Frequenz zu erhöhen/zu verringern, und passen Sie anschließend den Vergleichswert entsprechend an, um das Tastverhältnis dort zu halten, wo Sie es möchten. Sie könnten auch einen Topf und den ADC verwenden, aber eine digitale Lösung ist zuverlässiger. Dies ist in C leicht mit den echten AVR-Registernamen möglich, aber ich weiß nicht, wie ich es auf Arduinese machen soll.
Ich brauche nicht wirklich einen anderen Weg, weil die Art und Weise, wie der Code geschrieben ist, genau das tut, was ich will, aber danke für die Eingabe. Der Code ändert die Verzögerung für die Ein- und Ausschaltzeit gleichermaßen, während er variabel ist, und gibt mir einen Puls mit variabler Frequenz und einem Tastverhältnis von 50 Prozent, was ich will.

Antworten (2)

int sensorValue = 1;

Warum initialisieren Sie diese Variable auf 1, wenn sie dann in der ersten Zeile von überschrieben wird loop()?

Verzögerung (Sensorwert);

Ist es beabsichtigt, eine unterschiedliche Verzögerung von n Millisekunden zu haben , wobei n der Wert ist, der jedes Mal von Port A0 gelesen wird? Ist diese Verzögerung auch zweimal erforderlich, einmal nach dem Setzen des Ausgangspins auf High, einmal nach dem Setzen auf Low?


Sie benötigen einen Basiswiderstand zwischen pulse(Pin 8) und der Basis des 2n3055, dessen Wert davon abhängt, wie viel Strom Sie durch den Kollektor zulassen möchten. Wenn Sie den Transistor als Schalter verwenden, wird ein Minimum von etwa 220 Ohm empfohlen, um den Strom vom pulsePin unter etwa 25 mA zu halten, deutlich innerhalb der sicheren Grenzen für jeden Pin: Das absolute Maximum für jeden Pin ist auf 40 mA ausgelegt .

  1. Sie könnten den Arduino über USB und den Transistor über die Batterie mit Strom versorgen, solange die Masse des Arduino mit dem Minuspol der Batterie verbunden ist.
  2. In jedem Fall benötigen Sie Arduino-Masse, die mit dem Minuspol der Batterie verbunden ist.
  3. Schalten Sie es in Reihe mit der Spule, die Sie ansteuern, wenn Sie den Spulenstrom (den Kollektorstrom des Transistors) messen möchten. Wenn Sie die Kombination messen möchten, müssen sowohl Arduino als auch Transistor von der Batterie gespeist werden, und fügen Sie einfach das Messgerät in Reihe mit entweder dem positiven oder negativen Pol der Batterie hinzu, bevor Sie eine Verbindung zu Arduino oder Transistor herstellen. dh der gesamte Strom zur Batterie muss durch das Messgerät fließen.
  4. Ja, siehe Punkt 1.
Ich habe das falsch kopiert und eingefügt, es ist nur (int sensorValue;) in meiner Skizze, nicht sicher, wie ich es geändert habe ... und danke für die sehr hilfreichen Informationen. Ich schätze es. Außerdem verändere ich die Verzögerungszeiten, um das Tastverhältnis bei 50 zu halten, sodass der Impuls so lange ausgeschaltet ist, wie er eingeschaltet ist. es funktioniert gut auf meinem oskop und für die paar sekunden hatte ich den mut, alles zusammenzustecken, bevor ich eine bestätigung bekam. und ich habe einen Basiswiderstand, habe das einfach nicht hineingeschrieben.
i1279.photobucket.com/albums/y524/BJmalone/… ich glaube, ich habe alles drin ... ich hatte Zeit, aber ich habe es mit Farbe gemacht, also tut mir leid, wenn es nicht klar ist
@bradley Incorporated. Außerdem sollte der Kommentar zum schematischen Link auf der Frage und nicht auf der Antwort stehen. Versuchen Sie abschließend, den integrierten Schaltplan-Editor zu verwenden, indem Sie beim Bearbeiten Ihrer Frage Strg-M drücken.
@jippie Nein, du kannst Variablen mit delay() verwenden und es funktioniert. Der Optimierer erkennt, ob es sich um eine Konstante handelt oder nicht, und wenn es sich um eine Konstante handelt, behandelt er sie als statischen Wert.
Muss neu sein (> v0022). Hast du die Flyback-Diode übersehen?
Ich nutze den Flyback tatsächlich über eine Diode in einen Kondensator, der über die Spule angeschlossen ist. Das ist die Hauptleistung dieses Projekts, um zu sehen, wie viel Leistungsrücklauf vom Transformator in eine Kappe gesteckt wird, während die Leistung aufgezeichnet wird, die verwendet wird, um einen 12-Volt-Impuls in die Spule zu erzeugen. Wenn ich die Stromaufnahme aus dem Arduino weglasse, zieht die Spule nur 100 mA bei 181 Hz und erzeugt einen 292-Volt-Rücklauf, mit dem ich die Kappen auflade. Ich teste eine Freie-Energie-Theorie, die auf einer Festkörper-Bedini-Motor-ähnlichen Schaltung basiert. Wenn ich heute Abend mehr Zeit habe, werde ich den richtigen Schaltungseditor verwenden und alles Verpasste hinzufügen

1) Es hängt von der Stromaufnahme ab. USB hat eine PTC-Sicherung, die auf 500 mA eingestellt ist. Wenn Ihre Last das nicht überschreitet, dann ist es in Ordnung.

2) Strom findet den Weg des geringsten Widerstands, also ist das in Ordnung. Ich würde einen Optoisolator verwenden, um die beiden Geräte zu trennen. Immer wenn Sie eine große Stromlast schalten, wird viel Rauschen in Ihr System induziert.

3) Unterbrechen Sie einfach den Stromkreis, um den Stromverbrauch zu messen. Ziemlich genau zwischen Pluspol der Batterie und Last.

4) Ich würde empfehlen, auf einen MOSFET umzusteigen, anstatt den NPN-Transistor zu verwenden. Wenn Sie die Verlustleistungsberechnung für die beiden Geräte durchführen, ist dies sehr sinnvoll: MOSFET: P = (I ^ 2) (Ron) = (300 mA ^ 2) * (mOhm) => wenig Wärme NPN: P = ( I*U) = (300mA)*(0,7V) = 0,21W

Sie möchten PWM nicht verwenden, da analogWrite() auf 490 Hz festgelegt ist.