ATtiny85 для управления реле, которое будет включать и выключать двигатель.

Я пытаюсь управлять реле 5 В (SRD-05VDC-SL-C) с помощью ATtiny85. У меня загружен простой скетч (пример Blink без задержки):

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);
  }
}

Все это питается от литий-ионной батареи 18650 (3,7–4,2 В), а измеренное входное напряжение составляет в среднем 3,88 В. Вот краткий набросок того, как выглядит схема:Схема управления двигателем ATtiny85 с помощью реле

Некоторые проблемы возникают БЕЗ подключенного двигателя:

  1. Если я подключу аккумулятор и реле напрямую, вы услышите щелчок, несмотря на то, что он рассчитан на входное напряжение 5 В.
  2. Если я попытаюсь запустить реле от контакта 0, осциллограф покажет, что напряжение на контакте 0 составляет около 2,72 В, когда реле выглядит переключенным. Если бы я заменил реле светодиодом, напряжение на выводе 0 составило бы около 3,88 В. Что вызывает падение напряжения? Я считаю, что тока должно быть достаточно, так как это литий-ионный аккумулятор.
  3. Какую защиту мне нужно реализовать в этой схеме?
  4. Хватит ли литий-ионной батареи для питания этой схемы? Если я подключаю только аккумулятор, реле и двигатель, он работает нормально. Проблема связана с добавлением ATtiny85.

Ответы (3)

Вы не должны управлять катушкой реле напрямую от вывода микроконтроллера.

Вместо этого я бы рекомендовал использовать NPN-транзистор между GND (эмиттер) и катушкой (коллектор), а затем напрямую подключить другую сторону катушки к положительному источнику питания.

Подключите диод параллельно катушке (т.е. катод диода к положительному источнику питания, анод диода к коллектору транзистора). Это «обратный» диод для защиты от обратной ЭДС, которую вы получаете с катушечными переключателями.

Поместите что-то вроде резистора на 330 Ом последовательно между базой транзистора и выводом микроконтроллера. Это ограничивает ток в базе транзистора до уровня, который находится в пределах возможностей микроконтроллера.

Это самый распространенный известный мне способ управления реле с помощью контакта GPIO микроконтроллера.

введите описание изображения здесь

Спасибо. Это работает отлично. Но тока от одной 18650 вроде бы не хватает для идеального запуска мотора в 100% случаев. Большую часть времени он не запускается, потому что этого недостаточно. Знаете ли вы какие-либо методы преодоления этого?
Кроме того, теперь кажется, что все это не работает, когда я подключаю двигатель. Осциллограф показывает, что реле не переключается, оно издает звук щелчка, поэтому я предполагаю, что оно пытается переключиться, но не доходит до конца или что-то сбрасывается. Увеличение напряжения/тока тоже не помогает; Я сейчас использую настольный блок питания.
вы можете попробовать уменьшить размер базового резистора до некоторой степени и обязательно использовать транзистор и напряжение катушки, соответствующие требованиям вашего реле.

Порекомендуйте добавить в этот скетч некоторые последовательные отладочные данные. Двигатели + микро без какого-либо типа изоляции питания в норме равны микроконтроллеру, который постоянно перезагружается. Последовательный вывод количества циклов может показать, что он просто продолжает сбрасываться.

Вам, вероятно, понадобится несколько конденсаторов для фильтрации. Может даже LC-фильтр.

Можете ли вы порекомендовать какие-либо руководства по настройке и использованию последовательной отладки? Спасибо
Вы используете Arduino IDE и загрузчик?
Да, поддельный Uno, на нем микросхема USB-to-serial CH340G. Я могу использовать последовательный монитор в Arduino IDE. Не знаете, как проверить загрузчик? Хотя я ничего с ним не делал, поэтому предполагаю, что загрузчик по умолчанию все еще там.
Сначала попробуйте ответ Питера, так как он, скорее всего, решит вашу проблему. Пожалуйста, обратитесь к веб-сайту Arduino для печати в COM.

Выходная цепь процессора не является переключателем с нулевым сопротивлением. Это пара полевых МОП-транзисторов, которые имеют конечное сопротивление при включении, и разница в напряжении, которую вы видите, связана с падением напряжения на МОП-транзисторе из-за тока, который вы пытаетесь получить от выходного контакта. В таблице данных для ATTiny должен быть указан максимальный рекомендуемый выходной ток и падение напряжения при этом токе.

У вас должен быть выходной контакт, управляющий транзистором или полевым транзистором, который, в свою очередь, управляет реле. Это должно позволить почти полное Vcc быть доступным для управления реле.

Было бы лучше использовать что-то вроде BD679, который может работать с током двигателя, и просто не использовать реле?
Я не знаю этот транзистор. Если это NPN, убедитесь, что он может подавать ток двигателя, не требуя большего базового тока, чем может безопасно обеспечить ATTiny. Если это полевой транзистор, убедитесь, что он будет полностью открыт со смещением затвора, которое может обеспечить ATTiny.