ATtiny85 zur Steuerung eines Relais, das einen Motor ein- und ausschaltet

Ich versuche, ein 5-V-Relais (SRD-05VDC-SL-C) mit dem ATtiny85 zu steuern. Ich habe eine einfache Skizze hochgeladen (Blink without Delay Beispiel):

const int ledPin =  0;      // the number of the LED pin
int ledState = LOW;             // ledState used to set the LED
unsigned long previousMillis = 0;        // will store last time LED was updated
const long interval = 1000;           // interval at which to blink (milliseconds)

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

void loop()
{
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;   

    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    digitalWrite(ledPin, ledState);
  }
}

Das Ganze wird von einem 18650 Li-Ion-Akku (3,7 V-4,2 V) betrieben und der gemessene Eingang beträgt durchschnittlich 3,88 V. Hier ist eine kurze Skizze, wie die Schaltung aussieht:ATtiny85 Motorsteuerkreis mit Relais

Einige Probleme treten auf, OHNE dass der Motor angeschlossen ist:

  1. Wenn ich die Batterie und das Relais direkt anschließe, können Sie es klicken hören, obwohl es auf 5 V Eingang ausgelegt ist.
  2. Wenn ich versuche, das Relais von Pin0 auszulösen, zeigt das Oszilloskop an, dass die Spannung von Pin0 etwa 2,72 V beträgt, wenn das Relais zu schalten scheint. Wenn ich das Relais durch eine LED ersetzt habe, beträgt die Spannung von Pin0 etwa 3,88 V. Was verursacht den Spannungsabfall? Ich glaube, der Strom sollte ausreichen, da es sich um einen Li-Ion-Akku handelt.
  3. Welche Art von Schutz muss ich in dieser Schaltung implementieren?
  4. Wird der Li-Ion-Akku ausreichen, um diese Schaltung mit Strom zu versorgen? Wenn ich nur Batterie, Relais und Motor anschließe, läuft es einwandfrei. Das Problem kommt mit der Hinzufügung des ATtiny85.

Antworten (3)

Sie sollten die Relaisspule nicht wirklich direkt vom Mikrocontroller-Pin ansteuern.

Stattdessen würde ich empfehlen, einen NPN-Transistor zwischen GND (Emitter) und der Spule (Kollektor) zu verwenden und dann die andere Seite der Spule direkt mit der positiven Versorgung zu verbinden.

Schließen Sie eine Diode rückwärts parallel zur Spule an (dh Diodenkathode an positive Versorgung, Diodenanode an Transistorkollektor). Dies ist eine "Fly-Back"-Diode zum Schutz vor der Gegen-EMK, die Sie mit den Spulenschaltern erhalten.

Setzen Sie so etwas wie einen 330-Ohm-Widerstand in Reihe zwischen der Transistorbasis und dem Mikrocontroller-Pin. Dies begrenzt den Strom in die Basis des Transistors auf ein Niveau, das innerhalb der Fähigkeiten des Mikrocontrollers liegt.

Das ist die gebräuchlichste Art, die ich kenne, um ein Relais mit einem GPIO-Pin eines Mikrocontrollers zu steuern.

Geben Sie hier die Bildbeschreibung ein

Danke. Das funktioniert perfekt. Aber der Strom von einem 18650 scheint nicht auszureichen, um den Motor 100% der Zeit perfekt zu starten. Meistens springt es nicht an, weil es nicht reicht. Kennen Sie Techniken, um dies zu überwinden?
Außerdem scheint jetzt das Ganze nicht zu funktionieren, wenn ich den Motor anschließe. Das Oszilloskop zeigt, dass das Relais nicht schaltet, es macht ein Klickgeräusch, also vermute ich, dass es versucht zu schalten, aber nicht ganz dorthin gelangt oder etwas zurückgesetzt wird. Spannung/Strom erhöhen hilft auch nicht; Ich benutze jetzt ein Tischnetzteil.
Sie könnten versuchen, die Größe des Basiswiderstands etwas zu reduzieren, und stellen Sie sicher, dass Sie eine Transistor- und Spulenspannung verwenden, die Ihren Relaisanforderungen entspricht.

Empfehlen Sie, dieser Skizze einige serielle Debug-Ausgaben hinzuzufügen. Motoren + Mikros ohne irgendeine Art von Versorgungsisolierung entsprechen normalerweise einem Mikrocontroller, der ständig zurückgesetzt wird. Die serielle Ausgabe der Schleifenzahl kann zeigen, dass sie einfach immer wieder zurückgesetzt wird.

Sie benötigen wahrscheinlich ein paar Kondensatoren, um es zu filtern. Vielleicht sogar ein LC-Filter.

Können Sie Tutorials zum Einrichten und Verwenden von Serial Debug empfehlen? Danke
Verwenden Sie Arduino IDE und Bootloader?
Ja, ein gefälschter Uno, CH340G USB-to-Serial-Chip ist darauf. Ich kann den seriellen Monitor in der Arduino IDE problemlos verwenden. Sie sind sich nicht sicher, wie Sie den Bootloader überprüfen können? Obwohl ich nichts damit gemacht habe, gehe ich davon aus, dass der Standard-Bootloader noch vorhanden ist.
Probieren Sie zuerst Peters Antwort aus, da sie Ihr Problem höchstwahrscheinlich löst. Bitte beziehen Sie sich auf die Arduino-Website zum Drucken auf COM.

Die Ausgangsschaltung des Prozessors ist kein Nullwiderstandsschalter. Es handelt sich um ein paar MOSFETs, die beim Einschalten einen endlichen Widerstand haben, und die Spannungsunterschiede, die Sie sehen, sind auf den Spannungsabfall am MOSFET zurückzuführen, der auf den Strom zurückzuführen ist, den Sie vom Ausgangsstift ziehen möchten. Das Datenblatt für den ATTiny sollte den maximal empfohlenen Ausgangsstrom und den Spannungsabfall bei diesem Strom angeben.

Sie sollten den Ausgangspin einen Transistor oder FET ansteuern lassen, der wiederum das Relais steuert. Dies sollte ermöglichen, dass fast die volle Vcc verfügbar ist, um das Relais anzusteuern.

Wäre es besser, so etwas wie einen BD679 zu verwenden, der den Motorstrom verarbeiten kann, und einfach das Relais wegzulassen?
Ich kenne diesen Transistor nicht. Wenn es sich um einen NPN handelt, stellen Sie sicher, dass er den Motorstrom liefern kann, ohne dass mehr Basisstrom erforderlich ist, als der ATTiny sicher liefern kann. Wenn es sich um einen FET handelt, stellen Sie sicher, dass er mit der Gate-Vorspannung, die der ATTiny liefern kann, vollständig eingeschaltet wird.