Содержание

Источник тока управляемый Arduino — StopTest.ru

// Arduino NANO V3, Atmega 328P,  robotdyn.com

//Барт Дмитрий, Stoptest.ru, апрель 2018

/******************************************/

#include <MsTimer2.h>        // библиотека для конфигурирования аппаратного прерывания от Таймера 2  

#include <OneWire.h>         // библиотека для управления устройствами по Протоколу 1-Wire (DS18B20)

OneWire DS18B20(11);             // подключаем датчик к выводу 11 платы

#define POWER_MODE 0             // режим питания датчика DS18B20 (0 значит с внешним питанием)

#define TEMP_MEASURE_PERIOD 200  // период измерения температуры с учетом коэффициента 10 (200 — значит 2000 мс)

#define ALARM_TEMPERATURE 50     // температура включения аварийного звукового сигнала

#define COOLER 6                 // обозначим вывод, управляющий вентилятором

#define COOLER_START 35          // температура включения вентилятора

#define COOLER_STOP 30           // температура вЫключения вентилятора

#define CRYSTAL_TEMP_LIMIT 175   // максимально-допустимая температура кристалла транзистора

#define JUNCTION_TO_SINK 4       // тепловое сопротивление кристал-радиатор, градус/Ватт, с учетом теплопроводящей прокладки

 

#define LED_GREEN 3              // обозначим вывод платы, управляющий зеленым светодиодом

#define LED_YELLOW 4             // обозначим вывод платы, управляющий желтым светодиодом

#define RELAY 12                 // обозначим вывод платы, управляющий реле

#define BEEP 5                   // обозначим вывод платы, управляющий излучателем звука

 

#define CHANNEL_A1 2             // обозначим аналоговый вход платы, который измеряет напряжение канала А1

#define CHANNEL_A2 1             // обозначим аналоговый вход платы, который измеряет напряжение канала А2

#define CHANNEL_B1 0             // обозначим аналоговый вход платы, который измеряет напряжение канала В1

 

#define A 10                     // определяем: канал А управляется ШИМ с вывода 10 платы Arduino Nano

#define B 9                      // определяем: канал B управляется ШИМ с вывода 9 платы Arduino Nano

 

#define CURRENT_PULSE 1          // задаем значение тока в импульсе для проверки скорости установления тока

 

uint8_t symbol, temperature;        // переменные типа uint8_t (значения от 0 до 255)

uint16_t timeCount,

timeCount1, timeCount2;             // счетчики времени с шагом 10 мс

boolean sensStatFlag, showTemp,

beepOn, beepFlag, alarmTempFlag,

currentPulseOn, currentFlag,

checkFlag, alarmCrystalFlag;        // логические переменные

float Ua1, Ua2, Ub1, current;   // переменные типа float для чисел с плавающей точкой

byte data[9];                       // массив для размещения девяти байт из памяти датчика DS18B20

 

float currentCheck[2],

crystalPower[2], crystalTemp[2];    // задаем массивы для хранения соответствующих значений по двум каналам

                      

void setup() {  

  Serial.begin(115200);                 // инициализируем работу с монитором порта в Arduino IDE

  TCCR1A = TCCR1A & 0xe0 | 1;           // устанавливаем режим ШИМ 82 кГц

  TCCR1B = TCCR1B & 0xe0 | 0x09;        

  analogWrite(B, 0);                    // ШИМ на выводе 9 (канал B), начальное значение ноль

  analogWrite(A, 0);                    // ШИМ на выводе 10 (канал А), начальное значение ноль

  pinMode(COOLER, OUTPUT);

  pinMode(LED_GREEN, OUTPUT);

  pinMode(LED_YELLOW, OUTPUT);

  pinMode(RELAY, OUTPUT);

  pinMode(BEEP, OUTPUT);

  MsTimer2::set(10, timerInterrupt);    // обозначим прерывания по таймеру с периодом 10 мс и обработчиком timerInterrupt

  MsTimer2::start();                    // разрешение прерывания

  analogReference(INTERNAL);            // задаем опорное напряжение АЦП:

}                                       // INTERNAL-1.1V (внутреннее), DEFAUL-5V(от питания), EXTERNAL-внешнее

 

 

void serialEvent()  {                          // функция вызывается при вводе любых символов в монитор порта Arduino IDE

  symbol = Serial.read();                      // значение кода ASCII, введенного символа, присваиваем переменной symbol

  

  if ((symbol==43)&(currentPulseOn==0)) {      // символ ‘+’ увеличивает ток при каждом вводе на 0.1 А

    current = current + 0.1;                   // увеличиваем ток на 0.1 А

      if (current > 4.9) {                     // не позволяем задать ток более 4.9 А

        current = 4.9;

        Serial.println(«Ток не может быть БОЛЬШЕ 4.9 АМПЕР»);

      }

      else {

        Serial.print(«Установленный ток: «);

        Serial.print(current,1);               // выводим задаваемый ток в монитор порта Arduino IDE

        Serial.println(» А;»);

        currentSet(A, current);                // вызываем функцию установки тока в канале А

        currentSet(B, current);                // вызываем функцию установки тока в канале В

      }

  }

  if ((symbol==45)&(currentPulseOn==0)) {      // символ ‘-‘ уменьшает ток при каждом вводе на 0.1 А

    current = current — 0.1;                   // уменьшаем ток на 0.1 А

      if (current < 0) {                       // не позволяем задать ток менее 0 А

        current = 0;

        Serial.println(«Ток не может быть МЕНЬШЕ НУЛЯ»);

      }

      else {

        Serial.print(«Установленный ток: «);

        Serial.print(current,1);

        Serial.println(» А;»);

        currentSet(A, current);

        currentSet(B, current);

      }

  }

  if ((symbol >= 48)&(symbol < 53)&(currentPulseOn==0)) {      // устанавливает ток грубо цифрами на клавиатуре от 1 до 4

    current = symbol — 48;                                        

    Serial.print(«Установленный ток: «);

    Serial.print(current,1);

    Serial.println(» А;»);

    currentSet(A, current);

    currentSet(B, current);

  }

  if (symbol==116) {                           // используем символ «t» — команда на вывод температуры радиатора в монитор порта

    showTemp = 1;                              // устанавливаем флаг процедуры вывода температуры

    Serial.println(«ВНИМАНИЕ. Включено отображение температуры радиатора»);

  }  

  if (symbol==117) {                           // символ «u», однократно измеряем напряжение в канале А по двум цепям и в канале B

    Ua1 = ReadVoltage(CHANNEL_A1);

    Ua2 = ReadVoltage(CHANNEL_A2);

    Ub1 = ReadVoltage(CHANNEL_B1);

    Serial.print(«Напряжение в канале А1: «);

    Serial.print(Ua1,2);

    Serial.println(» В»);

    Serial.print(«Напряжение в канале А2: «);

    Serial.print(Ua2,2);

    Serial.println(» В»);

    Serial.print(«Напряжение в канале В1: «);

    Serial.print(Ub1,2);

    Serial.println(» В»);

  }

  if (symbol==103) {                                     // символ «g», включаем зеленый светодиод

    digitalWrite(LED_GREEN,1);                          

    Serial.println(«Включен зеленый светодиод»);

  }

  if (symbol==121) {                                     // символ «y», включаем желтый светодиод

    digitalWrite(LED_YELLOW,1);                          

    Serial.println(«Включен желтый светодиод»);

  }

  if (symbol==114) {                                     // символ «r», включаем реле

    digitalWrite(RELAY,1);                              

    Serial.println(«Включено Реле»);

  }

  if (symbol==98) {                                      // символ «b», включаем прерывистый звуковой сигнал

    beepOn = 1;                                          // устанавливаем флаг для режима звукового сигнала

    Serial.println(«Включен прерывистый звуковой сигнал»);

  }

  if (symbol==112) {                                     // символ «p», включаем пульсирующий ток для тестирования

    currentPulseOn = 1;                                  // устанавливаем флаг для режима пульсирующего тока

    current = 0;                                         // сбрасываем переменную ручной установки тока

    Serial.println(«Включен режим пульсирующего тока в каналах А и В.»);

    Serial.print(«Ток в импульсе: «);

    Serial.print(CURRENT_PULSE);

    Serial.println(» А»);

    Serial.println(«Период импульсов 20 мс»);

  }

  if (symbol==115) {                                     // символ «s» останавливает все процедуры, кроме защитных

    showTemp = 0;                                        // прекратить вывод температуры радиатора

    beepOn = 0;                                          // прекратить подачу звуковых сигналов

    currentPulseOn = 0;                                  // прекратить работу в импульсном режиме

    current = 0;                                         // сбрасываем переменную ручной установки тока

    currentSet(A, current);                              // установить нулевой ток в канале А

    currentSet(B, current);                              // установить нулевой ток в канале B

    digitalWrite(LED_GREEN,0);

    digitalWrite(LED_YELLOW,0);

    digitalWrite(RELAY,0);

    Serial.println(«ВСЕ режимы отключены.»);

  }  

}

 

void loop() {  

                                            

  if (sensStatFlag==0) {                     // флаг статуса датчика температуры, если 0 то датчик готов к процессу преобр.температуры

    DS18B20.reset();                         // инициализация датчика

    DS18B20.write(0xCC, POWER_MODE);         // 0xCC — команда пропуск ROM так как датчик один

    DS18B20.write(0x44, POWER_MODE);         // 0х44 — команда на выполнение преобразования температуры

    sensStatFlag = !sensStatFlag;            // установим флаг, запущен процесс преобразования температуры, к датчику обращаться нельзя

    timeCount = 0;                           // начинаем отсчет времени, счетчик установлен в обработчике прерывания, считает по 10 мс

  }

  if (timeCount >= TEMP_MEASURE_PERIOD) {    // условие, выполняющееся если прошел период времени, превышающий TEMP_MEASURE_PERIOD  

    DS18B20.reset();                         // инициализация датчика

    DS18B20.write(0xCC, POWER_MODE);         // команда пропуск ROM так как датчик один

    DS18B20.write(0xBE, POWER_MODE);         // 0хBE — команда чтения памяти

    DS18B20.read_bytes(data, 9);             // читаем девять байт из памяти датчика побайтно и сохраняем в массив data

    int16_t raw = (data[1]<<8)|data[0];      // обработка байтов регистра измер-ой темп-ры (операция сдвига, операция ИЛИ)

    temperature = raw / 16;                  // преобразуем полученные данные в целое значение температуры в градусах Цельсия

    sensStatFlag = !sensStatFlag;            // сбросим флаг статуса датчика температуры, теперь он готов к следующему измерению  

      if (temperature >= COOLER_START) {    

        digitalWrite(COOLER,1);                         // включаем охлаждение

      }

      if (temperature < COOLER_STOP) {      

        digitalWrite(COOLER,0);                         // вЫключаем охлаждение

      }

      if (showTemp==1) {                                // выводим значения температур

        Serial.print(«Температура радиатора: «);

        Serial.println(temperature,1);                  // выводим измеренную температуру радиатора в монитор порта

        

        Serial.print(«Температура/мощность на кристалле A: «);

        Serial.print(crystalTemp[1],1);               // выводим рассчитанную температуру кристалла транзистора в монитор порта

        Serial.print(» / «);  

        Serial.println(crystalPower[1],1);            // выводим рассчитанную рассеиваемую мощность на транзисторе

        

        Serial.print(«Температура/мощность на кристалле B: «);

        Serial.print(crystalTemp[0],1);

        Serial.print(» / «);  

        Serial.println(crystalPower[0],1);

        Serial.println();  

      }

  }

  if (temperature >= ALARM_TEMPERATURE) {               // если температура радиатора превышает критическую

    currentSet(A, 0);                                   // отключаем ток в канале А

    currentSet(B, 0);                                   // отключаем ток в канале В

    beepOn = 1;                                         // включаем звуковой сигнал

    alarmTempFlag = 1;                                  // устан. флаг, показывающий что произошел перегрев радиатора

    

  }

  else if ((temperature < ALARM_TEMPERATURE)&(alarmTempFlag == 1)) {  // если темп. радиатора снизилась до безоп. значения

    beepOn = 0;                                                       // отключаем звуковой сигнал  

    alarmTempFlag = 0;    

  }

}

void  timerInterrupt() {                                // обработчик прерывания с периодом 10 мс

   timeCount++;                                         // счетчик    

   timeCount1++;                                        // еще один счетчик  

   timeCount2++;                                        // еще один счетчик

  

   //*** защита от превышения допустимой мощности на транзисторе, расчитывается каждые 20 мс на каждом транзисторе

   checkFlag = !checkFlag;                              // каждые 10 мс переменная меняет свое значение на противоположное (0 или 1)

   crystalPower[checkFlag] =                            // вычислим рассеиваемую мощность на кристалле

   currentCheck[checkFlag] * ReadVoltage(checkFlag*2);

   crystalTemp[checkFlag] =                             // выислим температуру кристалла

   JUNCTION_TO_SINK * crystalPower[checkFlag] + temperature;

  

   if (crystalTemp[checkFlag] > CRYSTAL_TEMP_LIMIT ) {  // если превышена рассчетная температура кристалла транзистора

     currentSet(A, 0);                                  // отключаем ток в канале А

     currentSet(B, 0);                                  // отключаем ток в канале В

     beepOn = 1;                                        // включаем сигнал аварии

     alarmCrystalFlag = 1;                              // устанавливаем флаг превышения температуры кристалла транзистора

     timeCount2 = 0;                                    // обнуляем счетчик для отсчета времени работы аварийного сигнала

     showTemp = 0;                                      // прекратить периодический вывод температуры

     current = 0;                                       // сбрасываем переменную ручной установки тока

     Serial.println(«ВНИМАНИЕ. Превышение допустимой мощности на транзисторе»);

     Serial.print(«Температура/мощность на кристалле: «);

     Serial.print(crystalTemp[checkFlag],1);

     Serial.print(» / «);  

     Serial.println(crystalPower[checkFlag],1);  

   }

   else if ((crystalTemp[checkFlag] < CRYSTAL_TEMP_LIMIT)&(alarmCrystalFlag == 1)&(timeCount2 > 500)) {

     beepOn = 0;

     alarmCrystalFlag = 0;

   }

    

   //*** прерывистый звуковой сигнал

   if (beepOn==1) {

     if (timeCount1 > 10) {

      timeCount1 = 0;

      beepFlag = !beepFlag;

      digitalWrite(BEEP,beepFlag);          // формируем прерывистый звуковой сигнал  

     }

   }

   else {

     digitalWrite(BEEP,0);                  // выключаем прерывистый звуковой сигнал

   }

  

   //*** режим импульсного тока

   if (currentPulseOn==1) {                            // проверка скорости установки тока, проверяем на осциллографе

     currentFlag = !currentFlag;

     currentSet(A, CURRENT_PULSE * currentFlag);  // период следования импульсов тока 20 мс

   }

}

 

float ReadVoltage(int pin){           // функция измерения напряжения с усреднением 20, в функцию передаем необходимый вход АЦП

  uint8_t n;

  float averageU, sumU, k;

    for (n = 0; n < 20; n++)  {

      sumU+=analogRead(pin);

    }  

    switch (pin)  {                   // из-за разброса параметров резистивных делителей используем разные поправочные коэффициенты

      case 0:      

        k = 0.01730;                  // коэффициент для измеренного напряжения в канале В1 (на выводе А0 платы Arduino)

        break;

      case 1:

        k = 0.01723;                  // коэффициент для измеренного напряжения в канале А2 (на выводе А1 платы Arduino)

        break;

      case 2:

        k = 0.01728;                  // коэффициент для измеренного напряжения в канале А1 (на выводе А2 платы Arduino)

        break;

    }

  averageU = k * sumU/20;

  return averageU;                    // функция возвращает измеренное усредненное значение напряжения

}

void currentSet(int channel, float cur) {  // функция установки тока, передаем ей канал и необходимый ток в данном канале

  analogWrite(channel, cur*51.0);

  currentCheck[channel-9] = cur;           // передаем текущий установленный ток в массив значений токов поканально для проверки

}

Как регулировать мощность переменного тока / Хабр

Решил как-то отец собрать для дачи некое устройство, в котором, по его заверению, можно будет варить сыр. Устройство сие вид имело могучий и представляло из себя железный короб, подозрительно напоминающий старую стиральную машинку. Внутрь короба (все также добротно!) были вмонтированы три тэна по 1700 Ватт каждый. В общем сыра должно было хватить на небольшой посёлок.

Изделие (внешне выглядящее как что-то из безумного макса), должно быть весьма технологичным и поддерживать заданную температуру в максимально узких пределах. Для этого рядом появилась ещё одна коробка с симисторами, к которым подключались ТЭНы и схема, выдающая высокий уровень при переходе синусоиды через ноль. А у меня появился интересный проект.

Итак нам нужно выходить на заданную температуру и поддерживать её, с этим должен справляться алгоритм ПИД регулятора. Глубоко вдаваться в его работу не буду, скажу лишь что он получает на вход текущую ошибку, а на выходе выдает какое-то число в заданных пределах. У меня таким числом будет мощность выдаваемая на ТЭН, хотя в принципе, это может быть любой инерционный процесс, например обороты двигателя. Что важно для ПИД регулятора, это чтобы выходная величина производила воздействие линейно. Поэтому попробуем разобраться в способах регулировки мощности и их линейности.

Как вообще регулируется мощность?

Мощность — это произведение силы тока на напряжение. Если представить это произведение графически, то для постоянного тока, это будет площадь прямоугольника со сторонами равными напряжению и току

Так как при постоянном сопротивлении и напряжении ток тоже будет постоянным, то заменим ось тока на ось времени. Сопротивление я беру постоянным для объяснения принципа регулирования.

Тогда при заданном напряжении (12 В) и сопротивлении в 12 Ом, по закону Ома: I=U/R, получаем ток равный 1 А, и соответственно мощность за единицу времени будет равна 12 Вт. При другом сопротивлении мощность, естественно тоже изменится.

Теперь, если мы хотим регулировать мощность за единицу времени, нам нужно как-то изменять площадь фигуры за единицу времени. Самым чистым способом будет просто изменять напряжение, тогда и мощность будет пропорционально изменяться. Но контроллер, как и любые цифровые устройства, не умеет плавно изменять напряжение на ножках, он может либо «поднимать» их до высокого уровня, либо «опускать» до низкого уровня. Этот недостаток он компенсирует скоростью, даже самый дохленький современный МК может работать на частотах в миллионы тактов в секунду. Чтобы регулировать мощность, контроллер будет очень быстро «дрыгать» ножкой, тем самым изменяя результирующая площадь импульса за единицу времени.

На этом принципе устроена широтно-импульсная модуляция, она же ШИМ. Изменяя время (ширину) импульса за период мы изменяем выдаваемую мощность. На рисунке выше, показано два периода ШИМа. Каждый период имеет отношение площади импульса к площади всего периода 0.5, те половину времени периода контроллер выдает высокий уровень сигнала, другую половину низкий. Отношение времени высокого уровня сигнала к времени низкого называется скважностью. Красная линия на графике отражает результирующую мощность за единицу времени, по ней видно что при скважности 0.5 мощность также упала на половину (с 12 до 6 Вт). Хорошая новость состоит в том, что, ШИМ в контроллерах реализован аппаратно. Так что для регулирования чего-то достаточно его запустить и, по необходимости, изменять скважность.

Для постоянного тока, режим ШИМа оптимален, причем чем более инерционный прибор мы к нему подключаем, тем меньшую частоту ШИМа можно использовать. Для большого ТЭНа достаточно чуть ли не одного герца, а вот для светодиодов лучше использовать частоту побольше. Кстати частота ШИМа в подсветке экрана ноутбука, зачастую оказывается чуть ли не решающим фактором при покупке, так как, при слишком низкой частоте, глаза будут быстро уставать.

Если попробовать провернуть трюк с ШИМом для переменного напряжения, мы увидим что все сломалось и мощность перестала регулироваться линейно

одинаковые промежутки времени стали давать нам разную площадь, а значит разную мощность. Однако, если разбить полученные отрезки на на ещё более мелкие, то процентное соотношение ширины импульса к ширине кусочка будет выравниваться.

Если мы возьмем равный процент выдаваемой мощности от каждого кусочка, в результате мы получим такой же процент, от мощности всей волны, а на выходе мы получим линейный регулятор мощности для переменного тока. Причем чем большую частоту будет иметь ШИМа, тем на большее количество кусочков он разобьет синусоиду, а значит мы получим большую линейность.

Это было бы решением всех проблем, но в моем случае устройством коммутировавшим нагрузку был не быстрый транзистор, а симистор — медленный прибор, с максимальными рабочими частотами в пределах нескольких сотен герц, к тому же симистор можно только открыть, закроется он сам при переходе через ноль. На таких частотах управлять переменным напряжением которое имеет частоту 50 Гц, линейно не получится. Поэтому здесь нужно использовать какой-то другой подход и как раз для него, помимо симисторов, была установлена схема перехода через ноль.

В случае с симисторами лучше разбить синусоиду на куски с одинаковыми площадями и записать время каждого такого кусочка в таблицу. Тогда каждое последующее значение из таблицы будет линейно увеличивать мощность.

На графике выше полуволна синусоиды разбита на части разные по времени, но имеющие одинаковую площадь, а значит несущие в себе одинаковую мощность. Все что нам останется сделать это загрузить таблицу с временными интервалам в наш котроллер, синхронизировать какой-то из его таймеров с частотой синусоиды, для этого используется схема перехода через ноль, и просто брать из таблички нужное значение, в течении которого будет высокий уровень. Суть метода похожа на ШИМ, но немного доработанный и синхронизированный с источником переменного напряжения.

Расчёт таблицы мощности

Теперь можно перейти непосредственно к расчёту.

Изначально задача заключается в том чтобы разбить синусоиду на нужное нам количество кусочков, каждый из которых будет иметь одинаковую площадь. На этом моменте, обычно проступает холодный пот, так-как площадь под графиком это и есть геометрическое определение интеграла.2(t).

Неопределённый интеграл от квадрата синуса

Теперь нужно подобрать пределы для определенных интегралов. Выберем, насколько частей мы хотим разбить нашу синусоиду: я выбрал сто, чтобы можно было регулировать мощность с шагом в 1%.

Итак мы нашли чему будет равен неопределённый интеграл и даже выбрали шаг. Теперь нужно подобрать пределы интегрирования. Смысл их подбора заключается в том, чтобы значение определенного интеграла было постоянным при их смене. Напомню, что неопределенный интеграл это формула, а определённый вполне конкретное число. Определённый интеграл считается по формуле:

То есть мы берем неопределённый интеграл, подставляем в него верхнее число, затем нижнее, и вычитаем второе из первого.

Наш неопределённый интеграл является смешанной тригонометрической функцией, а значит не имеет общего аналитического решения. Чаще всего такие функции решаются либо числовыми, либо графическими методами. Графический метода заключается в том что мы строим графики для правой и левой части уравнения их пересечение будет решением уравнения. На рисунке показано решение уравнения для 0.2

Наряду с графическим методом можно использовать численный, то есть подбор решения. Будем подставлять в неопределённый интеграл числа до тех пор пока не найдём решение). Можно использовать лист и бумажку чтобы попрактиковаться в математике, можно онлайн калькулятор, я же буду использовать Python и библиотеки numpy:

import numpy as np
rad_arr=list()
#записываем неопределённый интеграл
integral=lambda rad: (rad/2)-(math.sin(2*rad)/4)
#составляем простенький цикл для подбора решений
for x in np.arange(0, 0.78, 0.015):
  #шаг подбора
	for xx in np.arange(0, 3, 0.00001):
		if func(xx) >= x:
			print(xx)
      rad_arr.append
			break;

Отлично мы получили массив чисел (пределов интегрирования!), валидность этих чисел можно проверить подставив их в интеграл. В результате должна получится площадь равная выбранному шагу! Теперь, если подставить полученные числа на график мощности, должна получится следующая картина:

Если все сошлось, то можно двигаться дальше и задать получившимся числам размерность времени, потому что сейчас они в радианах. Чтобы это сделать нужно выяснить угловую скорость, для частоты сети, то есть количество радиан в секунду.

Тогда узнаем сколько сколько длится одна радиана

Теперь, значения задержек в радианах, превратим во время, умножив каждое значение на период радианы (T). Проверим ход своей мысли: действительно-ли получится время задержки, если умножить задержку, на период? Задержка имеет размерность радиан, период — секунд за радиану, мы хотим их перемножить. Тогда рад * ( сек / рад ) = сек. Мы получили время, а значит ход мыслей должен быть верным.

Для расчётов я опять предпочту python:

#стандартная частота сети
frequency = 50
#находим частоту в радианах
rad_per_s=frequency*(2*math.pi)
#находим период радианы
s_per_rad=1/rad_per_s
#находим задержки используя полученный ранее массив
delay_arr=[x*s_per_rad for x in rad_arr]

На этом моменте мы получили универсальную таблицу задержек, теперь необходимо конвертировать её специально под микроконтроллер.

Расчёт таймера МК и перевод таблицы

Время необходимо перевести в понятную для МК величину — количество переполнений таймера. Но сначала необходимо определится с частотой таймера: чем выше частота, тем точнее он будет отмерять время, но с другой стороны, тем меньше времени будет оставаться на выполнение остальной программы. Здесь необходимо найти золотую середину.

Для определения минимально допустимой частоты таймера, надо найти числа в массиве с минимальной разностью между ними. Разность тем меньше, чем ближе в максимуму синусоиды мы двигаемся. Тогда возьмем задержку при которой синусоида достигает единицы и число перед ним, после чего найдем их разность:

5 мс — 4.9363 мс = 0.0636 мс

Получившееся число является максимально допустимым периодом между прерываниями таймера, тогда через него найдём минимально допустимую частоту

1 / 0.0636 = 15 КГц

Значит для заданной точности в 1% будет достаточно таймера с частотой 15КГц. Частота МК составляет 16 МГц, значит между прерываниями будет 1000 тактов процессора, этого достаточно для выполнения остальной части программы, так что можно смело настраивать таймер на заданную частоту.

Для настройки таймера на определенную частоту, не кратную тактирующей используется режим таймера CTC — Clear Timer on Compare. В этом режиме таймер досчитывает до заданного числа и сбрасывается, после чего операция повторяется. Число при котором будет происходить совпадение считается по формуле

Число = Тактовая частота МК / предделитель таймера / выбранная частота

Частота выбрана, теперь нужно перевести таблицу в тики таймера. Делать я это буду опять на Python

#задаем частоту таймера
generator_freg=15000
#получаем время одного периода таймера
one_tick=1/generator_freq
#получаем массив с тиками таймера
tick_arr=[x/one_tick for x in delay_arr]

В общем-то на этом весь расчёт окончен, остается только отзеркалить получившийся массив для второй половины полуволны и загрузить в МК. Далее по прерыванию от синхроимпульса, нужно подать низкий уровень, на ножку управления симистором, запустить таймер и считать его переполнения (совпадения, тк. у нас режим CTC). Как только количество переполнений достигнет нужного числа из таблички, подаем высокий уровень на управляющую ножку. На этом линейный регулятор мощности переменного напряжения готов!

Заключение

Надеюсь статья была понятна и её было интересно читать. В дополнение хотелось бы сказать, сигнал перехода через ноль не приходит идеально вовремя, поэтому может потребоваться дополнительная коррекция, чтобы это исправить.

Код расчетов на python

import math
import numpy as np

rad_arr=list()
integral=lambda rad: (rad/2)-(math.sin(2*rad)/4)
for x in np.arange(0, 0.78, 0.015):
  for xx in np.arange(0, 3, 0.00001):
		if func(xx) >= x:
			print(xx)
      rad_arr.append
			break;

frequency = 50
rad_per_s = frequency * (2 * math.pi)
s_per_rad = 1 / rad_per_s

delay_arr = [x * s_per_rad for x in rad_arr]

generator_freg = 15000
one_tick = 1 / generator_freg

tick_arr = [x / one_tick for x in delay_arr]

print(tick_arr)

Также, если кому-то будет интересно, могу поделится исходником готового регулятора для ардуино.

cxema.org — Мощный стабилизатор тока и напряжения на TL494

Мощный стабилизатор тока и напряжения на TL494

Этот стабилизатор обладает неплохими характеристиками, имеет плавную регулировку тока и напряжения, хорошую стабилизацию, без проблем терпит короткие замыкания, относительно простой и не требует больших финансовых затрат.  Он обладает высоким кпд за счет импульсного принципа работы, выходной ток может доходить до 15 ампер, что позволит построить мощное зарядное устройство и блок питания с регулировкой тока и напряжения. При желании можно увеличить выходной ток до 20-и и более ампер.

В интернете подобных устройств, каждое имеет свои достоинства и недостатки, но принцип работы у них одинаковый. Предлагаемый вариант — это попытка создания простого и достаточно мощного стабилизатора.

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

Номиналы некоторых компонентов на схеме могут отличаться от номиналов на плате, т.к. плату разрабатывал для своих нужд.

Диапазон регулировки выходного напряжения от 2-х до 28 вольт, в моем случае максимальное напряжение 22 вольта, т.к. я использовал низковольтные ключи и поднять напряжение выше этого значения было рискованно, а так при входном напряжении около 30 Вольт, на выходе спокойно можно получить до 28-и Вольт.  Диапазон регулировки выходного тока от 60mA до 15A Ампер, зависит от сопротивления датчика тока и силовых элементов схемы.

Устройство не боится коротких замыканий, просто сработает ограничение тока.

Собран источник на базе ШИМ контроллера TL494, выход микросхемы дополнен драйвером для управления силовыми ключами.

Хочу обратить ваше внимание на батарею конденсаторов установленных на выходе. Следует использовать конденсаторы с низким внутренним сопротивлением на 40-50 вольт, с суммарной емкостью от 3000 до 5000мкФ.

Нагрузочный резистор на выходе применен для быстрого разряда выходных конденсаторов, без него измерительный вольтметр на выходе будет работать с запаздыванием, т.к. при уменьшении выходного напряжения конденсаторам нужно время, для разрядки, а этот резистор быстро их разрядит. Сопротивление этого резистора нужно пересчитать, если на вход схемы подается напряжение больше 24-х вольт. Резистор двух ваттный, рассчитан с запасом по мощности, в ходе работы может греться, это нормально.

Как это работает:

ШИМ контроллер формирует управляющие импульсы для силовых ключей. При наличии управляющего импульса транзистор,  и питание по открытому каналу транзистора через дроссель поступает на накопительный конденсатор. Не забываем, что дроссель является индуктивной нагрузкой, которым свойственно накапливание энергии и отдача за счет самоиндукции. Когда транзистор закрывается накопленный в дросселе заряд через диод шоттки продолжит подпитывать нагрузку. Диод в данном случае откроется, т.к. напряжение с дросселя имеет обратную полярность. Этот процесс будет повторяться десятки тысяч раз в секунду, в зависимости от рабочей частоты микросхемы ШИМ. По факту ШИМ контроллер всегда отслеживает напряжение на выходном конденсаторе.

Стабилизация выходного напряжения происходит следующим образом. На неинвертирующий вход первого усилителя ошибки микросхемы (вывод 1) поступает выходное напряжение стабилизатора, где оно сравнивается с опорным напряжением, которое присутствует на инверсном входе усилителя ошибки. При снижении выходного напряжения будет снижаться и напряжение на выводе 1, и если оно будет меньше опорного напряжения, ШИМ контроллер будет увеличивать длительности импульсов, следовательно транзисторы больше времени будут находиться в открытом состоянии и больше тока будет накачиваться в дроссель, если же выходное напряжение больше опорного, произойдет обратное — микросхема уменьшит длительность управляющих импульсов. Указанным делителем можно принудительно менять напряжение на неинвертирующщем входе усилителя ошибки, этим увеличивая или уменьшая выходное напряжение стабилизатора в целом. Для наиболее точной регулировки напряжения применён подстроечный многооборотный резистор, хотя можно использовать обычный.

Минимальное выходное напряжение составляет порядка 2 вольт, задается указанным делителем, при желании можно поиграться с сопротивлением резисторов для получения приемлемых для вас значений, не советуется снижать минимальное напряжение ниже 1 вольта.

Для отслеживания потребляемого нагрузкой тока установлен шунт. Для организации функции ограничения тока задействован второй усилитель ошибки в составе ШИМ контроллера тл494. Падение напряжения на шунте поступает на неинвертирующий вход второго усилителя ошибки, опять сравнивается с опорным, а дальше происходит точно тоже самое, что и в случае стабилизации напряжения. Указанным резистором можно регулировать выходной ток.

Токовый шунт изготовлен из двух параллельно соединённых низкоомных резисторов с сопротивлением 0,05Ом.

Накопительный дроссель намотан на желто белом кольце от фильтра групповой стабилизации компьютерного блока питания.

Так как схема планировалась на довольно большой входной ток, целесообразно использовать два сложенных вместе кольца. Обмотка дросселя содержит 20 витков  намотанных двумя жилами провода диаметром 1,25мм в лаковой изоляции, индуктивность около 80-90 микрогенри.

Диод желательно использовать с барьером Шоттки и обратным напряжением 100-200 вольт, в моем случае применена мощная диодная сборка MBR4060 на 60 вольт 40 Ампер.

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

Подробное описание и испытания блока можно посмотреть в видео

Печатная плата тут 

регулятор перегрева LD1117 3.3V (входное напряжение 5V-2A)

У вас есть несколько заблуждений. Но не волнуйтесь, многие люди смущаются этими принципами, когда впервые изучают электронику. Я постараюсь выяснить заблуждения и ответить на ваши конкретные вопросы одновременно:

1) Регулятор, который объявляет 800 мА, означает, что он может выдавать до 800 мА без сгорания. Это не означает, что регулятор автоматически ограничивает ток до 800 мА. Это также не означает, что он всегда обеспечивает 800 мА для любой нагрузки. Он просто указывает максимальный безопасный ток, на который способен регулятор. В нормальных условиях нагрузка вашей цепи должна быть намного меньше максимальной. В противном случае вам нужен больший регулятор.

2) LD1117 является линейным регулятором. Эти типы регуляторов должны иметь соответствующую емкость на входах и выходах. В противном случае, выход может колебаться и вызывать любое количество проблем в вашей цепи. Это также приведет к неправильным показаниям на вашем мультиметре без вашего ведома. Таблица данных для вашей части скажет вам, какую емкость и какой тип (керамика, алюминий и т. Д.) Использовать. Вот снимок экрана рекомендуемой схемы от LD1117 STMicroeletronic:

3) Из вашей диаграммы фризирования выглядит, что вы неправильно использовали функцию амперметра на мультиметре. Амперметры предназначены для появления «невидимых» в вашей цепи. Это означает, что схема будет действовать так, как будто амперметр был просто куском провода. Вы подключили выход 3,3 В регулятора через амперметр к земле следующим образом:

смоделировать эту схему — схема, созданная с использованием CircuitLab

Поскольку амперметр действует как кусок провода, эта схема эквивалентна:

смоделировать эту схему
Видишь проблему? Вы получили выход 3,3 В, напрямую замкнутый на землю! Причина, по которой вы видите только 3А, заключается в том, что внутренние компоненты регулятора перегреваются и действуют как резисторы. Если бы LD1117 был немного более громоздким, он бы выдавал намного больше, чем 3А. Фактически, если бы регулятор был идеальным источником напряжения, ваш ток был бы бесконечным! Подходящее место для установки амперметра здесь:

смоделировать эту схему

4) Вы, разработчик схемы, не должны «ограничивать входной ток» нагрузкой. Нагрузка (Arduino) будет потреблять столько тока от регулятора, сколько ему необходимо для работы в любой момент времени. И эта текущая ничья изменится, поскольку Arduino выполняет разные задачи. Фактически, если вы попытаетесь реализовать текущий ограничитель, он, вероятно, вызовет отключение питания, и Arduino перезагрузится или заблокируется.

Маловероятно, что Arduino потребуется более 800 мА, чтобы что-то сделать, так что с регулятором все должно быть в порядке. В типичных обстоятельствах плата разработки, такая как Arduino, должна потреблять только 10 с или 100 мА.

Так что, если регулятор перегревается, есть две возможности:

a) Выбранный вами регулятор не может справиться с текущим потреблением нагрузки. Например, если вы пытаетесь подключить 50 светодиодов с номиналом 20 мА, ваш LD1117 будет перегреваться, пытаясь поднять ток 1 А. В этом случае вам нужно будет выбрать регулятор с большей пропускной способностью по току.

б) Что-то замыкается на землю или тянет больше тока, чем должно. Вы испытали это, замкнув выход регулятора на землю с помощью функции амперметра вашего мультиметра. Это также может произойти с неуместным проводом, непреднамеренным паяльным мостом или неисправным компонентом.

Проблема, которую вы имеете, очевидно (б) выше.

Настройка тока драйвера шагового двигателя просто и доступно на CNC-Design.ru

     Драйвер шагового двигателя является достаточно важным компонентом любого ЧПУ устройства, управляя движением каждой из осей. Перед использованием необходимо убедиться, что они правильно установлены и настроены, чтобы не допустить перегорание шаговых моторов или платы контроллера Arduino Sheild.

     Настройку тока драйвера необходимо сделать для решения нескольких достаточно важных моментов:
— уменьшить вероятность пропуска шагов при низком токе;
— снижение нагрева драйвера и шагового двигателя при высоком напряжении;
— снизить шум при высоких значениях тока;

     Для настройки тока нам понадобится:
— контроллеры с установленными драйверами;
— драйвера А4988 или DRV8825;
— мультиметр;
— отвертка.

     Для начала необходимо собрать и подключить всю систему в полношаговом режиме. После сборки «бутерброда» из контроллера Ардуино, ЧПУ шилда и драйверов шаговых двигателей необходимо подключить шаговые двигатели. В описании к выбранным моторам надо узнать значение максимального тока Imax (для примера у шагового двигателя 17HS8401 это значение 1,8А)
     Затем надо рассчитать значение опорного напряжения Vref на переменном резисторе для каждого типа драйверов, у нас их два: А4988 или DRV8825.
     Формула опорного напряжения Vref для драйверов отличается.

 

     Расчет для драйвера типа А4988.
Для A4988 формула расчета зависит от номинала резисторов, которые распаяны на плате драйвера. Если присмотреться, то можно увидеть надписи R050 или R100.

     На приведенной фотографии они обведены черными кружками, их значение R100.
     В общем виде формула выглядит как:

Vref = Imax * 8 * (RS)

Imax — максимальный ток на обмотках двигателя, из описания;
RS — сопротивление резистора, если резистор подписан R100, то RS=0,100, при R050 значение RS=0,05.

Для двигателя из нашего примера 17HS8401

Vref = 1,8 * 8 * 0,100 = 1,44 В.

Из-за того, что рабочий ток двигателя обычно рекомендуется ограничивать в 70% от максимального тока, для уменьшения перегрева двигателя, полученное значение необходимо умножить на 0,7.

Vref= 1,44*0,7 = 1,01 В.

 

     Расчет для драйвера типа DRV8825.

Формула опорного напряжение для данного типа драйвера:

Vref = Imax/2

При рекомендованной работе на 70% от максимального тока двигателя, подставив значения для нашего примера, получим следующие значения:

Vref = 0.7*1,8 / 2 = 0.63V

 

     Настройка тока драйвера на контроллере.

Для настройки необходимо подключить сборку плат к компьютеру, 

Включить на мультиметре измерение постоянного напряжения напротив положения «20».

 

Для измерения напряжения необходимо минусовой щуп приложить к минусу на CNC Sheild, а положительный щуп замкнуть с подстроечным резистором, который по совместительству является «+» в данной схеме.

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

Настройку расчетных значений необходимо повторить это для всех активных драйверов в сборке. 

LM7805: все о регуляторе напряжения

El LM7805 — регулятор напряжения., Но не путать с делителем напряжения о котором мы уже говорили в другой из наших предыдущих статей. Кроме того, это не просто стабилизатор напряжения, это один из наиболее часто используемых производителями в проектах DIY всех видов. Его функция, как следует из названия, состоит в том, чтобы регулировать сигнал напряжения цепи, в которую он встроен.

Компонент, который не всегда хорошо ценится и который иногда не используется во многих проектах. Но это вполне важно, если вам нужен стабильный сигнал напряжения. Особенно важен LM7805 при создании силовых схем для наших схем. Например, чтобы создать самодельный блок питания с определенными характеристиками, один из этих регуляторов не должен отсутствовать.

Что такое регулятор напряжения?

Un напряжение или регулятор напряжения, такой как LM7805, представляет собой устройство, способное изменять сигнал напряжения он попадает на свой вход и выдает другой сигнал напряжения на своем выходе. На этом выходе напряжение обычно ниже и с определенными характеристиками, необходимыми для предотвращения рисков или для правильной работы цепи, в которую оно подается, если она чувствительна к колебаниям напряжения.

Для этого в регуляторе напряжения есть внутренняя схема с рядом резисторов и транзисторов биполярное соединение таким образом, чтобы можно было точно настроить сигнал напряжения подходящим образом Вы можете увидеть внутреннюю схему, которая интегрирована в корпус этого устройства на изображении выше.

На рынке есть много разных регуляторов напряженияда, большинство из них довольно дешево. Помимо LM7805 вы также найдете 7809, 7806, 7812 и т. Д. Из семейства 78xx. Хотя в этой статье мы остановимся на 7805, который является одним из самых популярных.

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

Применение регуляторов напряжения

Как вы понимаете, такую ​​микросхему, как LM7805, можно использовать для многих целей. Например, источники питания они обычно объединяют одну из серии 78xx. Фактически, блок питания, как мы объясняли в предыдущей статье, состоит из нескольких этапов:

  • Трансформатор: можно преобразовать входное напряжение 220 В в подходящее из 12, 6, 5, 3, 3.3 или любое другое значение.
  • Мостовой выпрямитель: тогда этот сигнал будет иметь правильное напряжение, но он останется альтернативным сигналом, после прохождения через этот мост отрицательный сигнал будет исключен.
  • конденсаторы: теперь сигнал имеет форму холмика, то есть некоторых импульсов напряжения, которые при прохождении через конденсатор будут сглажены, представляя собой почти прямую линию.
  • Регулятор напряжения: наконец, регулятор уточнит этот сигнал, чтобы сделать его полностью плоским и стабильным, то есть сделать его сигналом постоянного тока.

Другой пример применения регулятора напряжения должен питать определенные интегральные схемы, на которые нельзя подавать сигнал, превышающий определенную цифру. Например, представьте датчик или микросхему, мощность которых не может превышать 3.3 В. Что ж, в этом случае можно использовать регулятор, чтобы избежать рисков превышения этого барьера. Вся избыточная энергия рассеивается 78xx в виде тепла.

Теме статьи:

LM317: все о регулируемом линейном стабилизаторе напряжения

7805: распиновка и таблица данных

Там различные производители LM7805, например STMicroelectronics, TI, Sparkfun и т. д. Кроме того, вы можете найти его как в традиционном пакете, так и в модуле, чтобы упростить интеграцию в ваши проекты с Arduino. В зависимости от купленной вами модели советую зайти на официальный сайт производителя, чтобы проверить характеристики в специальные таблицы для модели. Помните, что, хотя все они похожи, могут быть некоторые изменения от одного производителя к другому.

Если вы купите его в упаковке ТО-220, вы найдете 3-контактная распиновка. Они пронумерованы, и один соответствует входу напряжения, которое вы хотите модулировать, два центральных контакта — GND или земля (общий), третий контакт — для выхода уже регулируемого напряжения, то есть стабильного сигнала, который мы будем использовать в качестве источника чувствительной цепи, которую мы хотим заставить работать. Но вам придется добавить некоторые дополнения, такие как конденсаторы, как рекомендовано производителем, чтобы выход был адекватным.

В случае с модулем он немного дороже, но может значительно упростить вам задачу. Он включает в себя устройство 7805, а также другие элементы, которые вы они упростят использование с Arduino. Вам не нужны дополнительные конденсаторы или что-то еще. Кроме того, он включает в себя радиатор для поддержания надлежащей температуры, рассеивающей тепло, выделяемое 78xx, и две соединительные платы для входа и выхода (Vcc и GND на каждом конце), что упрощает его реализацию.

Другие модели

Лас- различия между различными моделями, доступными в серии 78xx регуляторов напряжения довольно просто. Цифра, которая сопровождает это семейство, указывает максимальное напряжение, поддерживаемое каждым регулятором. Например:

  • LM7805: 5 В и 1 А или 1,5 А. в некоторых случаях.
  • LM7806: 6 В
  • LM7809: 9 В
  • LM7812: 12 В

Dónde Comprar

Если хочешь купить, у вас это доступно на Amazon, помимо других специализированных магазинов электроники. Вы можете купить два варианта:

  • LM7805 В пакете ТО-220 за 4 евро можно купить 10 таких устройств.
  • LM7805 в модуле по цене чуть менее 6 евро за единицу.

Как видите, они довольно дешевые устройства

Интеграция с Arduino

Если вы думаете об этом интегрироваться с проектом с Arduino, Raspberry Pi или другим типом платы, Нет проблем. Вам не придется использовать определенные библиотеки, как с другими модулями, и вам не придется добавлять дополнительный код в вашу Arduino IDE, поскольку этот 78xx самодостаточен и просто предназначен для изменения входного сигнала напряжения. Вы должны обладать только знаниями в области электроники, необходимыми для того, чтобы разместить ее в нужном месте на вашей схеме …


Правильная настройка тока для шаговых двигателей

Добавлено в закладки: 30

Я сам очень долго не уделял этому вопросу должного внимания. Во первых не хотел разбираться. Во вторых считал, что настройка в рабочих условиях (во время тестовой печати на завышенных режимах) самая правильная. Это конечно верно, но настал момент, когда в моей коллекции появился третий вид драйверов TMC2100 и чтобы их адекватно сравнить с драйверами A4988 нужно их одинаково и правильно настроить по току используемого шагового двигателя.

 

Что нам даёт правильная настройка тока для шаговых двигателей?

  1. Снижение шума от работы принтера при завышенном токе
  2. Избавление от сдвига слоёв (пропуска шагов) при низком токе
  3. Снижение нагрева шагового двигателя или его драйвера

 

Какие обычно используют шаговые двигатели?

 

17HS4401 ток 1,7A – обычные

17HS8401 ток 1,8А – более мощные

17HS4402 ток 1,3A – по некоторым сведениям менее шумные, чем 17HS4401

 

Драйверы шаговых двигателей

A4988 на ток до 2А – очень широко распространён и недорогой

DRV8825 на ток до 2,2А – интересен большей мощностью и микрошагом 1/32

TMC2100 на ток RMS 1,2А  (с пиками до 2,5А) – интересен самостоятельным дроблением микрошага 1/16 до 1/255, что в итоге снижает шум работы шагового двигателя не загружая при этом дополнительными расчётами Ардуину.

Видимо для этого драйвера больше подходят двигатели с низким током, например 17HS4402. С этим двигателем драйвер будет меньше нагреваться, а значит его достаточно обдувать низкооборотистым бесшумным вентилятором.

 

Настройка тока на драйверах ШД

Минусовой щуп мультиметра подсоединяем к контакту GND (минус, он общий), плюсовым прикасаемся к корпусу подстроечного резистора на драйвере. Крутим подстроечный резистор отвёрткой и замеряем расчётное напряжение Vref. Таким образом мы выставляем правильный ток для драйвера шагового двигателя. Для каждого вида драйвера своя формула расчета Vref.

 

Vref – пин замера напряжения для установки тока по формуле.

Current Limit – ток шагового двигателя.

 

A4988

Формула Vref для A4988 изменяется от номинала токочувствительных резисторов. Это два чёрных прямоугольника на плате драйвера. Обычно подписаны R050 или R100.

Vref = Current Limit * 8 * (RS)

RS = 0,100
Vref = Current Limit * 8 * 0,100 = Current Limit / 1,25

RS = 0,050
Vref = Current Limit * 8 * 0,050 = Current Limit / 2,5

Например для 17HS4401: Vref = 1,7 / 2,5 = 0,68В

 

DRV8825

Current Limit = Vref * 2

Vref = Current Limit / 2

Например для 17HS4401: Vref = 1,7 / 2 = 0,85В

 

TMC2100

Irms = (Vref * 1,77A) / 2,5V

Vref = (Irms * 2,5V) / 1,77A

Current Limit = 1.41 * Irms

Например для 17HS4401: Vref = (Current Limit * 0,707 * 2,5В) / 1,77А = (1,7 * 0,707 * 2,5) / 1,77 = 1,697В

При таком Vref шаговый двигатель возможно будет нагреваться, поэтому Vref придётся подстроить во время работы.

 

 

В некоторых случаях для снижения нагрева драйвера приходится снижать Vref, а значит для защиты от пропуска шагов нужно уменьшать ускорения в прошивке.2. Отсюда вывод: уровень шума можно снизить почти на любом 3D принтере, снижая ускорения и Vref, но при этом Vref придётся подбирать опытным путём.

 

Сравнение громкости работы двигателя на разных Vref

  • Шаговый двигатель Wantai 42BYGHW609 ток 1,7А
  • Драйвер A4988
  • 3D принтер Mendel90

 

Тестовый G-код примерно такой (правил в процессе и после)

G21
G90
M107
G28 X0
M117 Run Test…
G1 F12000 X100
G1 F6000 X5
G1 F12000 X100
G1 F6000 X200
G1 F3000 X100
G1 F1500 X5
G1 F3000 X100
G1 F1500 X200
M117 Test Done!
G91
G28 X0
M84
G90

 

Используем аудиоредактор Audacity. Примитивный микрофон подключен к встроенной аудиокарте ПК. Микрофон прижат к корпусу ШД и сверху обмотан поролоном. Надеюсь этого хватит для регистрации уровня шума.

Vref устанавливаю на 0,58В, запускаю программу из Pronterface и записываю звук с микрофона. Затем повторяю запись на Vref  = 0,78В. Картинки уровней громкости складываю в Фотошопе для наглядности сравнения. Вот что получилось:

Красным Vref = 0,58В

Синим Vref = 0,78В

 

На некоторых скоростях разность в громкости вполне существенная. Такие напряжения взяты для наглядности, хотя и не сильно отличаются. На не настроенном драйвере может стоять любое напряжение Vref!

 

Пожалуйста не путайте ток с напряжением Vref, когда пишете об этом

 

Подробнее про эти драйверы можно почитать на сайтах производителей:

https://www.pololu.com/category/120/stepper-motor-drivers

https://github.com/watterott/SilentStepStick/blob/master/docu/FAQ.md

 

Для более глубокого понимания формул смотрите отдельную тему на форуме по этому вопросу.

Ссылка на обсуждение на форуме методов борьбы с шумом 3D принтера.

Метки: A4988, DRV8825, TMC2100, драйверы&nbsp&nbsp 2016-01-12&nbsp&nbsp &nbsp&nbsp Раздел: Настройка, Электроника&nbsp&nbsp
Автор: AKDZG Просмотров: 273 872&nbsp&nbsp 47 комментариев

Мощность

. Можно ли сделать регулируемый источник постоянного тока / напряжения с помощью Arduino?

Вы в основном описываете (если вы добавите в смесь индуктивность и диод) простой импульсный стабилизатор. То есть, в упрощенном виде, сигнал ШИМ, некоторое сглаживание (катушка индуктивности, диод, конденсатор) и обратная связь.

Используйте PWM Arduino для включения P-канального MOSFET в источник питания. Этот импульсный источник питания затем подается через катушку индуктивности, а затем сглаживается конденсатором:

смоделировать эту схему — Схема создана с помощью CircuitLab

M1 переключает питание для зарядки остальной цепи.L1 + C1 сглаживает ШИМ, давая постоянное плавное напряжение. D1 замыкает цепь между L1 и C1 в одном направлении, сохраняя заряд только в правой части цепи.

R1 отключает полевой МОП-транзистор, когда его не используют.

R2 — очень маленький «шунтирующий» резистор (например, 0,1 Ом).

Размер C1 и L1 определяется частотой переключения вашего ШИМ и текущими потребностями схемы. Чем выше частота переключения, тем меньше может быть катушка индуктивности. Чем выше потребляемый ток, тем больше должен быть C1.

Чтение A1 дает выходное напряжение схемы, поэтому вы можете отрегулировать ШИМ (с помощью PID было бы хорошо), чтобы получить определенное напряжение.

Считывание A0 и A1 и вычитание одного из другого дает вам падение напряжения на R2. Исходя из этого, вы можете рассчитать ток через R2, используя закон Ома. Затем вы можете использовать это, чтобы настроить ШИМ, чтобы дать вам определенный ток.

Конечно, нельзя делать и то, и другое одновременно. У вас либо есть постоянный ток (во время первой фазы зарядки, чтобы довести напряжение элемента до 4.2 В), а затем переключитесь на постоянное напряжение, пока ток не упадет примерно до 0,3 ° C. Для мертвых ячеек начальная фаза постоянного тока (IIRC) 0,1C может восстановить ячейку.

Некоторые важные замечания о литиевых элементах:

  • Они взрываются (спросите у Samsung), будьте осторожны. Было бы неплохо поэкспериментировать с клеткой, содержащейся в огнестойком контейнере.
  • Литий-ионные и литий-полимерные элементы
  • не любят чрезмерной разрядки, но до тех пор, пока они не были заряжены обратно, их, как правило, можно восстановить.
  • Элементы
  • , которые используются в последовательной батарее и не были заряжены с помощью надлежащего балансировочного зарядного устройства, вполне могли быть заряжены в обратном направлении, если батарея «умерла».

Обратный заряд — это то, что на самом деле убивает литиевый элемент. По сути, никакие две ячейки не будут иметь одинаковую емкость. Если у вас есть, скажем, три последовательно соединенных элемента и вы разряжаете всю батарею до уровня ниже рекомендуемого минимума, одна ячейка будет иметь меньший заряд, чем другие. Если эта ячейка достигает нуля, ток от других ячеек начинает течь в обратном направлении через нее, и этот обратный ток вызывает осаждение кристаллов меди на слое электролита между электродами.Они пробивают слой электролита и замыкают два электрода вместе, и в этот момент ячейка мертва. Никакой восстановительной зарядкой не вернет, он физически поврежден.

Итак, в итоге:

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

Будет ли Arduino достаточно быстрой, чтобы управлять полевым МОП-транзистором, который закачивает волшебные пикси в конденсатор для достижения постоянного значения напряжения на указанном конденсаторе?

Конечно.Вы должны предварительно подготовить свою мощность, чтобы она всегда была в пределах допустимого предела (например, подайте питание на солнечную панель через подходящий понижающий регулятор 5 В, чтобы обеспечить чистое питание 5 В). В цепи всегда будет некоторая задержка из-за того, как долго катушка индуктивности «сопротивляется» изменениям напряжения. Типичному Arduino требуется ~ 100 мкс для выборки АЦП. В такой среде это время пренебрежимо мало, поскольку обычно оно намного быстрее, чем один период ШИМ. В любом случае вы не можете ответить быстрее, чем один период ШИМ.

Когда полевой МОП-транзистор находится в ненасыщенном состоянии, его сопротивление велико, и много энергии теряется в виде тепла. Можно ли НЕ использовать ШИМ для управления им, а вместо этого выключать или включать его в каждом цикле, чтобы минимизировать потери мощности?

Это то, что делает ШИМ. Он включен или выключен. Включен в начале цикла, затем выключен на полпути. Да, есть короткий период дважды за цикл, в то время как выполняет переключение , но это будет минимально по сравнению с периодами включения и выключения.Потери от этого переключения будут незначительны по сравнению, скажем, с использованием MOSFET в качестве регулируемого сопротивления, управляемого операционным усилителем с обратной связью от токового шунта (то есть линейного регулятора ).

Основы Arduino: регулировка яркости светодиода

Эта статья была переведена на английский язык и изначально была опубликована для deviceplus.jp.

Device Plus представил множество приложений и примеров Arduino, но базовые знания по-прежнему важны, независимо от того, что вы делаете!
В этой статье мы знакомим вас с «ключевыми» основами электроники Arduino, позволяя Arduino регулировать яркость светодиода.

Вы можете легко включать и выключать светодиод между ВЫСОКИМ (5 В) и НИЗКИМ (0 В) состояниями, подключив его к цифровым выходным клеммам Arduino. Однако, поскольку цифровой выход может выводиться только в одном из двух состояний, вы не можете регулировать такие элементы управления, как яркость.
Вместо этого для этой цели можно использовать выход «ШИМ». ШИМ можно использовать для регулировки яркости светодиода путем многократного переключения между ВЫСОКИМ и НИЗКИМ состояниями.
В этой статье мы узнаем, как использовать ШИМ для регулировки яркости светодиода.Мы также узнаем, как написать программу, которая использует выход ШИМ для постепенного включения светодиода.

[Содержание]

・ Яркость не может быть отрегулирована цифровым способом
・ Изменение яркости светодиода с помощью цифрового выхода
・ Регулировка яркости с помощью ШИМ
・ Постепенное мигание светодиода

Яркость не регулируется цифровым способом

Как мы объяснили в прошлый раз, яркость светодиода изменяется в зависимости от протекающего тока. Сравнивая резистор 330 Ом с резистором 10 кОм, подключенным для регулировки величины тока, подключенного к светодиоду, например, через 330 Ом протекает больший ток с меньшим сопротивлением, что приводит к более яркому свечению светодиода.В качестве альтернативы, протекающий ток также изменится, если вы измените напряжение источника питания, подключенного к светодиоду.

При подаче 5В и 3,3В 5В делает светодиоды ярче. Если вы хотите осветить светодиод еще ярче, вы либо «уменьшите сопротивление», либо «увеличите напряжение», как объяснено в предыдущей формуле для отношения между током, протекающим через светодиод, и сопротивлением.

Однако цифровой выход Arduino имеет только два состояния: ВЫСОКИЙ (5 В) или НИЗКИЙ (0 В), что означает, что значения напряжения и сопротивления не могут быть изменены, даже если схема подключена как есть.Таким образом, яркость светодиода не регулируется. Хотя есть только два состояния выхода, HIGH и LOW, яркость светодиода можно изменить с некоторой изобретательностью.

Изменение яркости светодиода с помощью цифрового выхода

Давайте изменим яркость светодиода, используя только цифровой выход. Яркость можно регулировать, заставляя светодиод мигать. На самом деле управляйте светодиодом шаг за шагом, чтобы увидеть, как меняется яркость. Подключите светодиод к контакту 5 Arduino, как показано ниже:

Затем создайте программу, как показано ниже, и запишите ее в Arduino.Светодиод должен мигать с интервалом в одну секунду.

В программе светодиод загорается в «digitalWrite (LED_PIN, HIGH)» (строка 11) с выходом HIGH, а затем ждет продолжительности, указанной в «delay (ON_TIME)» (строка 12). Продолжительность указывается в миллисекундах; если вы укажете 1000, светодиод будет гореть в течение одной секунды.

Затем светодиод выключается в «digitalWrite (LED_PIN, LOW)» (строка 14) с выходом LOW, а затем отключается на время, указанное в «delay (OFF_TIME)» (строка 15).Светодиод мигает при повторении этой программы.

Теперь давайте сократим продолжительность включения и выключения. Продолжительность включения может быть изменена с помощью «const int ON_TIME» (строка 3), а продолжительность выключения может быть изменена с помощью «const int OFF_TIME» (строка 4). Измените оба значения на «500» и напишите программу для проверки состояния светодиода. Скорость мигания должна увеличиться. По мере уменьшения значений до «250», «100», «75», «50» и т. Д. Мигание должно становиться быстрее. При значении около «10» светодиод горит постоянно.Если он мигает слишком быстро, человеческий глаз не успевает за ним, из-за чего свет будет казаться постоянно включенным.

Теперь давайте изменим продолжительность включения и выключения. Установите для «ON_TIME» и «OFF_TIME» значение «10». Затем последовательно измените значение «ON_TIME» на «9», «8», «7»… «1» и проверьте состояние свечения светодиода. По мере уменьшения значения вы можете видеть, что светодиод становится темнее.

Светодиод выглядит темнее, потому что продолжительность освещения сокращается, а количество свечения уменьшается.Другими словами, вы можете регулировать яркость светодиода, изменяя «продолжительность свечения». Этот метод позволяет вам управлять яркостью светодиода с помощью цифрового выхода Arduino, оснащенного только функциями включения и выключения.

Регулировка яркости с ШИМ

Как описано выше, вы можете регулировать яркость, регулируя соотношение HIGH и LOW, заставляя светодиод мигать в течение короткого цикла. Однако создавать собственную программу для управления продолжительностью мигания нецелесообразно. Если для обработки других программ требуется время, интервал мигания сместится, изменяя яркость.

Arduino обеспечивает PWM (широтно-импульсную модуляцию), которая может периодически выводить HIGH и LOW. Функцию ШИМ, периодически переключающуюся между ВЫСОКИМ и НИЗКИМ с заданной скоростью, можно использовать для регулировки яркости светодиода, как описано ранее.

Однако контакты, которые можно использовать для ШИМ, фиксированы в Arduino. Выход PWM доступен только для контактов, у которых есть знак «~» рядом с номером (то есть 3, 5, 6, 9, 10 и 11). Обратите внимание, что другие контакты не поддерживают вывод ШИМ.

PWM имеет преимущество стабильного вывода без влияния на работу программы, поскольку PWM генерируется на микрокомпьютере Arduino.
Теперь подключите светодиод к контакту 5, чтобы попробовать операцию. Заранее подключите светодиод, как в схеме, показанной ранее.
Затем напишите программу, как показано ниже, и перенесите ее в Arduino. Светодиод должен светиться немного темнее.

Для вывода с ШИМ установите целевой вывод в режим вывода с помощью «pinMode ()» (строка 6). Фактический вывод происходит с помощью «analogWrite ()» (строка 10). Укажите целевой номер вывода, а затем установите соотношение HIGH в диапазоне от 0 до 255. «0» всегда выводит LOW, а «255» всегда выводит HIGH.«127» одинаково выводит как HIGH, так и LOW.

В этой программе вы можете указать коэффициент ШИМ в «const int DUTY» (строка 3). Измените значение, чтобы увидеть, как меняется яркость.

Сделать постепенное мигание светодиода

Выход с использованием ШИМ расширяет способ свечения светодиода. Теперь давайте постепенно изменим ШИМ, чтобы получить эффект постепенного увеличения яркости светодиода.

Напишите программу, как показано ниже

Вышеупомянутая программа сохраняет коэффициент ШИМ в переменной «i», используемой в функции loop (), чтобы она могла увеличивать значение, чтобы светодиод постепенно становился ярче.

Обработка while (строка 14) увеличивает значение с шагом, указанным в STEP, пока i не достигнет 255. Увеличенное значение выводится с помощью analogWrite () (строка 15) для изменения яркости светодиода. Кроме того, ему предписывается ждать в течение времени, указанного параметром WAITTIME, каждый раз, когда изменяется выход ШИМ (строка 16).

Когда коэффициент ШИМ достигает 255, он уменьшается до 0 для постепенного затемнения светодиода (строки с 21 по 25). Вы можете изменить скорость мигания, изменив значение WAITTIME (строка 3) или STEP (строка 4).

На этот раз мы научились управлять яркостью светодиода. Увидимся в другой статье!

Как правильно установить ограничение тока двигателя в драйвере шагового двигателя A4988

В этом руководстве мы рассмотрим, как правильно установить ограничение тока в драйвере шагового двигателя A4988. Эти драйверы шагового двигателя становятся все более популярными для проектов ЧПУ, 3D-печати, робототехники и Arduino, потому что они действительно дешевы и просты в использовании, требуя всего два контакта для управления ими.

Одна важная вещь, которую необходимо настроить при использовании этих драйверов, — это ограничение тока двигателя. Это особенно важно, когда вы используете более высокое входное напряжение, чем рассчитано на двигатель. Использование более высокого напряжения обычно позволяет получить больший крутящий момент и более высокую скорость шага, но вам нужно будет активно ограничивать количество тока, протекающего через катушки двигателя, чтобы не сжечь двигатель.

Для этого есть два метода: один — использовать мультиметр для физического измерения тока, протекающего через одну из катушек, а второй метод, который мы собираемся рассмотреть, — это вычислить, а затем отрегулировать опорное напряжение на драйвере, которое не требует подключения или питания двигателя.

Вот пошаговое видео о том, как установить ограничение тока двигателя для драйвера шагового двигателя A4988.

Что нужно для установки ограничения тока на шаговом драйвере

Как установить ограничение тока на драйвере шагового двигателя A4988

В каждом пакете драйверов двигателя вы получите небольшой радиатор, который должен быть прикреплен к микросхеме драйвера, и вам понадобится небольшая отвертка, чтобы отрегулировать этот потенциометр, чтобы установить предел тока.

Мы собираемся установить предел тока двигателя на макетной плате, так как нам нужно перемкнуть контакты спящего режима и сброса, а затем подать питание на логическую схему платы через заземление и контакты VDD.Питание может подаваться от источника 5 В на вашем Arduino.

Начнем с подключения нашего драйвера.

Теперь нам нужно рассчитать опорное напряжение, которое мы собираемся установить.

Это делается по следующей формуле:

Vref = Imot x 8 x Rsen

Опорное напряжение равно максимальному току двигателя, умноженному на 8, а затем на сопротивление измерения тока.

Максимальный ток двигателя можно найти в паспорте двигателя, у нас — 0.9А. Текущее сопротивление считывания можно найти в техническом описании вашего драйвера, но чаще всего оно составляет 0,068 Ом для новых драйверов.

Используя эту формулу, мы вычисляем, что опорное напряжение должно быть установлено на 0,49 вольт.

Самый простой способ установить напряжение — это подсоединить отрицательный вывод мультиметра к заземляющему контакту Arduino с помощью одного провода из крокодиловой кожи.

Затем подключите положительный провод к металлической части небольшой отвертки, используя другой провод из крокодиловой кожи.

Теперь вы можете одновременно изменять опорное напряжение и считывать напряжение на мультиметре, что упрощает настройку.

Установите мультиметр в режим измерения постоянного напряжения, а затем поместите отвертку на потенциометр. Теперь вы должны получить значение опорного напряжения. Поворот отвертки против часовой стрелки уменьшает напряжение, а по часовой стрелке увеличивает напряжение.

Мы устанавливаем его на 0,49 В, затем снимаем и заменяем отвертку, чтобы еще раз проверить, и все готово.Теперь вы можете завершить остальные подключения к Arduino или подключить его к своему 3D-принтеру или щиту драйвера шагового двигателя.

Как вы обычно устанавливаете ограничение тока двигателя драйвера шагового двигателя A4988? Дайте мне знать в разделе комментариев.

Рекомендации по источникам питания микроконтроллера для Arduino

Питание Arduino имеет немного волшебства. Когда я впервые начал с ними работать, это было неочевидно, но в Arduinos есть встроенные регуляторы. Использование этого преимущества позволяет увеличить длину проводки источника питания за счет использования источника питания с более высоким напряжением, чем номинальное 5 В или 3.3 В, необходимое микроконтроллеру (MCU) для логических уровней. Некоторые Arduino принимают входное напряжение от 6 до 16 В постоянного тока, что намного выше максимального номинала микроконтроллера, но плата Arduino точно регулирует напряжение питания, а также дополнительную мощность для периферийных устройств Arduino. Я видел, как опытные инженеры были сбиты с толку относительно аргументов в пользу питания 3,3 В Arduino от источника питания 9 В постоянного тока, пока им не объяснили это.

Требования к питанию микроконтроллера

Часто упускается из виду выбор подходящего источника питания для микроконтроллеров.Хотя сосредоточенные усилия и предусмотрительность могут заключаться в деталях самой конструкции, многие проблемы с производительностью и надежностью могут быть связаны с выбором и подключением источника питания. Семейство плат для разработки Arduino предоставляет решения для этих проблем, но легко ошибиться, не понимая, какие варианты доступны при разработке. Это не так просто, как сказать, что для Arduino 5 В используется источник питания 5 В постоянного тока, а для Arduino 3,3 В — 3.Источник питания 3 В постоянного тока.

Требования к питанию Arduino

Многие Arduinos используют микроконтроллер ATmega328P. ATmega328 от Microchip имеет широкий диапазон допустимых значений напряжения постоянного тока. (Vcc — это регулируемое напряжение питания постоянного тока, необходимое для работы ИС, и его часто называют напряжением питания для ИС.) Чаще всего Arduinos предназначены для работы либо с логикой уровня 3,3 В для низкого энергопотребления, либо с логикой 5 В для быть совместимым с устаревшими логическими устройствами TTL. Приведенные ниже примеры относятся к 3.Устройства с напряжением 3 В постоянного тока, для которых важнее источник питания. Однако те же принципы применимы к устройствам на 5 В постоянного тока.

Рисунок 1: Технические характеристики платы Arduino. (Источник: www.arduino.cc)

Пример: Arduino Pro Mini

Во-первых, предположим, что в схемотехнике используется что-то вроде Arduino Pro Mini. Максимальный ток, потребляемый Arduino, составляет 200 мА. Маловероятно, что сам Arduino будет потреблять 200 мА, но предположим, что между Arduino и другими подключенными к нему устройствами они потребляют в общей сложности 200 мА.В таблице данных ATmega328p показано, что минимальное напряжение высокого логического уровня на выводе составляет 90% от Vcc. Таким образом, если Vcc составляет 3,3 В постоянного тока, минимальное напряжение на выводе, которое будет считаться высоким логическим уровнем, составляет 0,9 * 3,3 В постоянного тока = 2,97 В постоянного тока. Любое значение, видимое на цифровом выводе ниже 2,97 В, находится в неопределенном диапазоне и приведет к непредсказуемым результатам от Arduino.

Между источником питания и Arduino всегда есть некоторое расстояние. Чем больше расстояние, тем больше потеря напряжения в проводке источника питания.Но сколько потеряно? Поскольку 26 AWG — это обычный выбор для проводки цепей малой мощности и он находится на меньшем конце диапазона калибра проводов, в нем меньше меди. Меньше меди означает меньшую стоимость. Многожильный кабель 26 AWG — хороший выбор из-за гибкости прокладки проводов. 26 AWG достаточно велик, чтобы выдерживать 2,2 А для проводки шасси, что более чем в десять раз превышает потребляемый ток 200 мА, который мы указали для максимального тока, потребляемого Arduino для нашей конструкции. Источник питания 3,3 В постоянного тока и 26 AWG кажутся отличным выбором, но давайте рассмотрим его поближе.

Обрыв линии источника питания Провод

Quality 26 AWG имеет сопротивление 40,81 Ом на 1000 футов или 40,81 миллиом на фут. При токе 200 мА по проводам источника питания у нас будет падение напряжения на каждый провод, как показано ниже. Имейте в виду, что нам нужно проложить провод от источника питания к Arduino, а затем обратно к отрицательной стороне источника питания. Мы видим, что на высоте десяти футов мы потеряли 5 процентов нашего источника 3,3 В постоянного тока. На высоте 20 футов мы потеряли почти 10 процентов.Это действие снижает напряжение, подаваемое на Arduino, до 4,5 В; нижний предел гарантированного максимального высокого напряжения цифровой логики.

Таблица 1: Потери в линии. Расстояние указывает физическое расстояние между платой и источником питания. (Источник: Автор)

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

Контактное сопротивление

Контактное сопротивление часто не рассматривается или даже не понимается.Сопротивление провода 26 AWG составляет 40,81 Ом на 1000 футов в зависимости от диаметра поперечного сечения провода. Однако в каждой точке проводки, где мы разместили соединение, мы создали точку, в которой поперечное сечение пути тока уменьшается и, следовательно, имеет более высокую точку сопротивления.

Соединение круглого разъема приведет к контакту штифта со стволом только в точке касания. Соединители лезвий дают такую ​​же уменьшенную площадь по всей поверхности. Даже винтовой зажим не может соответствовать сопротивлению поперечного сечения самого провода.Учтите, что любая оконечная нагрузка со временем подвержена окислению и повышенному сопротивлению из-за многократного подключения и отключения проводов в течение срока службы системы. Каждая из этих точек может легко иметь контактное сопротивление 40 миллиом. Вот так; каждая точка подключения может добавить эквивалентное сопротивление 1 фута провода 26 AWG. С двумя подключениями к Arduino и двумя подключениями к источнику питания любая система будет иметь как минимум 4 завершения. Теперь у нас есть потери в источнике напряжения 5 процентов на 8 футах и ​​10 процентов на 18 футах между Arduino и его источником питания.

Таблица 2: Потери в линии и контактное сопротивление

Выбор одного источника питания — различные расстояния?

Следовательно, при типичной схеме подключения источника питания мы теряем пять процентов напряжения источника 3,3 В между источником питания и Arduino на высоте восьми футов и 10 процентов на расстоянии 18 футов. Проще говоря, если бы мы использовали регулируемый источник постоянного тока, мы могли бы увеличить напряжение, чтобы компенсировать потери в линии и сопротивление контактов. Однако блоки питания дороги и занимают много места.Обычно во встроенных системах разработчики стараются иметь общий источник питания для нескольких встроенных контроллеров. Если один контроллер находится на расстоянии одного фута от источника питания, а последний — в 20 футах от источника питания, разработчик должен тщательно уравновесить каждый встроенный контроллер в пределах надлежащего диапазона.

Варианты источников питания Arduino Конструкции Arduino

позволяют обойти проблемы источников питания с потерями в линии и контактным сопротивлением, обеспечивая встроенное регулирование.Однако есть несколько способов питания Arduino, и не все из них обеспечивают преимущества встроенного регулирования:

USB Power — USB-кабель обычно используется для программирования Arduino через интегрированную среду разработки Arduino (IDE). Кабель USB не только обеспечивает диагностику через последовательный монитор IDE, но также обеспечивает питание 5 В постоянного тока для Arduino через контакт USB Vcc. Питание 5 В USB используется для непосредственного питания 5 В Arduino, или оно понижается, если оно равно 3.3Volt Arduino.

Питание 5 В или 3,3 В — Разработчик может подать соответствующее напряжение на выводы питания 5 В или 3,3 В Arduino. Эти контакты подключены непосредственно к контактам питания MCU на плате Arduino. Однако подача питания на эти контакты приведет к тому, что микроконтроллер Arduino станет восприимчивым к потерям в линии и потере контактного сопротивления от источника питания, упомянутого ранее.

Vin или Raw — Arduino может иметь этот вывод с пометкой «Vin» или «RAW» в зависимости от используемого варианта Arduino.Распространенной ошибкой является подключение к этому выводу источника питания 5 В или 3,3 В. Проблема в том, что у вас не только потери в линии и потери сопротивления контактов, упомянутые ранее, но и то, что этот вывод является входом во встроенную схему регулирования. Как и любой другой регулятор напряжения, вам необходимо подать на устройство немного больше напряжения, чем вы ожидаете получить от него. Если мы подадим 3,3 В постоянного тока на Vin, мы потеряем около 0,5 вольт через регулятор. Это означает, что микропроцессор и подключенные периферийные устройства будут работать только на 2.В лучшем случае 8 В постоянного тока. В сочетании с отмеченными потерями в линии и потерей контактного сопротивления, мы можем работать значительно ниже требуемого уровня напряжения.

Таблица 3: Потери в линии, сопротивление контактов и потери в регуляторе

V IN штырь, правильно используемый

Несмотря на описанную выше проблему, использование выводов V IN или RAW является решением проблемы потери напряжения источника. На плате Arduino контакты V IN или RAW являются входом для регулятора напряжения на плате Arduino.Все, что нам нужно сделать, это подать напряжение в указанном диапазоне, чтобы получить желаемый регулируемый выход на Arduino. Напряжение питания от 6 до 12 В постоянного тока, приложенное к Vin, или RAW, будет обеспечивать питание микроконтроллера Arduino, преодолевать любые потери напряжения на линии или контактном сопротивлении и обеспечивать выходную мощность на контакты 5 В и 3,3 В Arduino для питания периферийных компонентов. Диапазон входного напряжения Arduino основан на требованиях к напряжению на всей плате, включая энергию, необходимую микроконтроллеру для питания периферийных устройств.

Заключение

Стандартные блоки питания в диапазоне от 7 до 12 В не так распространены, как блоки питания 3,3 или 5 В постоянного тока, но они доступны. Заманчиво использовать более распространенные источники питания 5 В постоянного тока и 3,3 В постоянного тока для плат Arduino, но, судя по приведенным выше фактам, необходимо использовать менее распространенные альтернативы для наилучшего регулирования и производительности микроконтроллера.

Как измерить реальную и кажущуюся мощность переменного тока с помощью Arduino? — Блог о проектах DIY Solar и Arduino

Процесс калибровки

После загрузки кода в Arduino, если к вам прикреплен экран ЖК-дисплея, вы увидите значение тока, напряжения, активной и полной мощности. Обязательно ВЫКЛЮЧИТЕ источник переменного напряжения , который вы измеряете. Нажмите кнопку SELECT на ЖК-дисплее и подождите 5 секунд. Он должен пойти на 0 вольт . То же самое для переменного тока, показывающее 0A . Для людей, у которых нет LCD Display Shield, вы можете вручную компенсировать, введя значение смещения в код и повторно загрузив его снова. Необходимо откалибровать 2 значения смещения (VoltageOffset1 и VoltageOffset2). Сделайте то же самое для модуля переменного тока для 2 значений смещения (currentOffset1 и currentOffset2) и, наконец, powerOffset.

Регулировка переменного напряжения потенциометра подстроечного резистора

Эта настройка предназначена для регулировки амплитуды волны переменного напряжения. В отличие от переменного тока, мы рассчитываем и получаем ожидаемый ток, но для переменного напряжения нам нужно опорное напряжение для регулировки.

После завершения калибровки вы должны увидеть значение 0 вольт, когда напряжение не обнаружено. Теперь включает источник напряжения, а включает опорное напряжение считыватель (мультиметр или счетчик энергии). Сравните оба значения напряжения. Поверните подстроечный потенциометр (подстроечный резистор) с помощью маленькой отвертки , чтобы уменьшить или увеличить значение напряжения, обнаруженное Arduino. Вам необходимо поворачивать подстроечный резистор до тех пор, пока напряжение, отображаемое на ЖК-дисплее Shield или Serial Monitor, не станет равным опорному значению напряжения в вольтметре или измерителе энергии. И Поздравляем, Готово !!!!

Если вы действительно читаете коды, мы фактически уменьшили амплитуду потенциальной волны вдвое (в формуле это умноженное на 2).

RMSVoltageMean = (sqrt (VoltageMean)) * 2;

Вот почему при подаче контрольного напряжения измеренное значение высокое, и вам необходимо его уменьшить. F Амплитуда всей волны (x 1) искажается при приближении к 250 В, что заставило нас сделать этот выбор, чтобы преодолеть проблему искажения.

Ток — Arduino to Go

Ток: количество протекающей воды

В нашей системе водоснабжения мы можем измерить количество воды, протекающей по трубам.Если мы измерим поперечное сечение одной из труб в любой точке, мы сможем выяснить, сколько воды проходит через нее за заданный промежуток времени — например, мы можем измерить 1 галлон в секунду. Люди обычно называют это потоком воды — чем больше воды течет за определенный промежуток времени, тем сильнее течение.

Слово «ток» означает почти то же самое в цепи. Ток — это количество электрического заряда, проходящего через цепь за секунду.Сила тока измеряется в амперах (или амперах), поэтому ток также называется силой тока. Ток требует полного замкнутого контура, чтобы течь. Если ваша схема не является полностью замкнутым контуром (скажем, в цепи обрыв провода), то ток равен нулю.

Ток измеряется в амперах или амперах, что представляет собой количество электричества, протекающего в секунду

Количество тока в вашей цепи определяется двумя факторами:

  1. Сопротивление ваших компонентов в цепи. Компоненты, которым требуется больше тока, обычно имеют меньшее сопротивление. Мы объясним больше о сопротивлении позже в этой главе.
  2. Номинальный ток источника питания. Этот рейтинг указывает максимальную силу тока, которую может выдавать блок питания. Вы можете проверить номинальный ток (а также напряжение), посмотрев на выходной рейтинг , который обычно помещается в нижней части источника питания с другой информацией. (Мы рекомендуем вам приобрести блок питания с номиналом от 500 мА до 1 А для тока и 9–12 В для напряжения).

Текущие характеристики всех компонентов указаны на их корпусе или указаны в их технических данных, которые показывают, с каким потоком они могут справиться. Компонент не может заставить источник питания выдавать ток, превышающий номинальный.

Каков текущий предел для Arduino?

Плата Arduino имеет ограничение по входному току в один ампер. Как мы только что упоминали, мы рекомендуем вам приобрести блок питания с номиналом от 500 миллиампер (1/2 ампера) до 1000 миллиампер (1 ампер).USB-шнур, соединяющий ваш Arduino с компьютером, выдает 500 миллиампер (1/2 ампер), чего достаточно для работы платы Arduino и подачи питания на контакты. Блок питания с номиналом выше одного усилителя может повредить ваш Arduino.

Arduino может выдавать только 40 мА на каждый вывод ввода / вывода. Существуют и другие электронные компоненты, которые могут помочь вашему Arduino покрыть приложения с более высоким током, но 40 мА достаточно для питания компонентов, которые мы рассмотрим в этой книге.

Максимальный входной ток для Arduino — один ампер.Контакты ввода / вывода на вашем Arduino будут выдавать максимум 40 миллиампер.

Теперь давайте посмотрим, как измерить ток с помощью нашего мультиметра.

Измерительный ток

Измерение тока сложнее, чем измерение напряжения, и в процессе отладки оно выполняется реже, чем измерение напряжения. Так зачем мы вам показываем? Это полезное упражнение, чтобы понять, как ток течет по вашей цепи, и разницу между напряжением и током.Мультиметр — это ваш основной инструмент для отладки, поэтому мы хотим, чтобы вы знали, как его использовать для проверки многих электрических свойств.

Чтобы измерить ток, мы должны вытащить один из выводов компонента в цепи, чтобы вставить наш измеритель и сделать его частью петли схемы. В нашей схеме мы вытащим анод светодиода. Как всегда, , когда вы вносите изменения в свою схему, убедитесь, что она не подключена к источнику питания.

Регулировка мультиметра

Нам нужно переместить шкалу мультиметра, чтобы измерить 200 мА постоянного тока.Как и при измерении напряжения, при измерении тока мы хотим выбрать значение, превышающее ожидаемое. 200 миллиампер — это максимальное безопасное значение тока для нашего мультиметра без перемещения щупов (подробнее об этом на нескольких страницах), и поскольку мы не используем какие-либо сильноточные компоненты, такие как двигатели, мы можем быть уверены, что 200 миллиампер будут больше, чем текущая стоимость. Итак, оставьте щупы мультиметра подключенными к тем же портам, как показано ниже.

Теперь, когда вы правильно настроили мультиметр и расположили свою схему так, что анод светодиода вытащен из ряда связующих точек, мы можем снова подключить нашу Arduino к нашему USB-кабелю.Затем возьмите красный щуп вашего измерителя и прикоснитесь к выводу резистора, который находился в том же ряду связующих точек, что и анод светодиода (до того, как вы вытащили анод для этого упражнения), и прикоснитесь к черному щупу к аноду. светодиода, как показано ниже. Светодиод должен загореться, потому что мультиметр теперь является частью замкнутого контура вашей схемы. Поскольку мультиметр вставлен в цепь, он отображает ток (также известный как сила тока). На нашем счетчике было 14 миллиампер. Это может немного отличаться от показаний вашего прибора, что частично зависит от цвета светодиода.


Будьте осторожны при измерении высоких значений силы тока!

Пока вы измеряете относительно небольшие величины тока, такие как 14 миллиампер, которые мы измерили в нашей схеме, можно, чтобы красный зонд был подключен к порту mAVΩ мультиметра (измерения миллиампер, напряжения и сопротивления). Однако, если вы работаете с более сильными токами (более 200 мА), вам нужно сделать две вещи, чтобы избежать перегрева мультиметра: установите шкалу мультиметра на 10 А и переместите красный щуп с порта mAVΩ на порт 10A.Если вы забудете сделать эти две вещи, дополнительный ток может повредить ваш счетчик.

Рекомендуется оставить красный зонд в порте mAVΩ, так как это правильный порт для измерения большинства электрических свойств.

Вопросы?

Q: Можем ли мы контролировать, сколько тока проходит через наши цепи?

A: Да, величина тока зависит от того, какие компоненты вы подключили к своей цепи. Контроль величины тока — важный навык для безопасного использования более энергоемких компонентов, таких как двигатели.

Q: Связаны ли ток и напряжение?

A: Да, это так. Позже в этой главе мы увидим формулу, объясняющую их отношения.

Q: Почему на счетчике есть отдельный порт для высокого тока?

A: В измерителе должны использоваться различные внутренние электрические цепи для измерения напряжения и высоких уровней тока, чтобы защитить его от повреждений. Низкие уровни тока (менее 200 мА) не повредят схему измерения напряжения, но все, что выше, может вызвать проблемы.Переключение порта — это способ изменения схемы, которая активна внутри нашего счетчика.

Q: Почему для измерения тока требуется, чтобы мы убирали выводы наших компонентов из цепи?

A: Для измерения тока мультиметр должен стать компонентом цепи. Затем весь ток в вашей цепи протекает через счетчик, чтобы он мог вычислить общую сумму. Мы объясним отношения между измерителем и вашими компонентами чуть позже в этой главе.

Сопротивление Напряжение

Источник питания переменного напряжения

с использованием LM317T

Продолжая наше руководство по преобразованию блока питания ATX в настольный блок питания, одним очень хорошим дополнением к нему является положительный стабилизатор напряжения LM317T.

LM317T представляет собой регулируемый трехконтактный стабилизатор положительного напряжения, способный подавать различные выходные напряжения постоянного тока, кроме источника питания с фиксированным напряжением +5 или +12 вольт, или в качестве переменного выходного напряжения от нескольких вольт до некоторого максимального значения все с токами около 1.5 ампер.

С помощью небольшой дополнительной схемы, добавленной к выходу блока питания, мы можем получить настольный блок питания, способный поддерживать диапазон фиксированных или переменных напряжений, положительных или отрицательных по своей природе. На самом деле это проще, чем вы думаете, поскольку трансформатор, выпрямление и сглаживание уже были выполнены блоком питания заранее, все, что нам нужно сделать, — это подключить нашу дополнительную схему к выходу желтого провода +12 В. Но сначала давайте рассмотрим фиксированное выходное напряжение.

Фиксированный источник питания 9 В

В стандартном корпусе TO-220 доступно большое количество трехконтактных регуляторов напряжения, причем наиболее популярным стабилизатором постоянного напряжения являются положительные регуляторы серии 78xx, которые варьируются от очень распространенных стабилизаторов напряжения 7805 + 5 В до 7824, Постоянный стабилизатор напряжения +24 В. Существует также серия фиксированных стабилизаторов отрицательного напряжения серии 79xx, которые создают дополнительное отрицательное напряжение от -5 до -24 вольт, но в этом руководстве мы будем использовать только положительные типы 78xx .

Фиксированный 3-контактный стабилизатор полезен в приложениях, где регулируемый выход не требуется, что делает выходной источник питания простым, но очень гибким, поскольку выходное напряжение зависит только от выбранного регулятора. Они называются 3-контактными регуляторами напряжения, потому что у них есть только три клеммы для подключения, а именно: Input , Common и Output соответственно.

Входным напряжением регулятора будет желтый провод +12 В от блока питания (или отдельного источника питания трансформатора), который подключается между входом и общими клеммами.Стабилизированное +9 вольт подается на общий выход, как показано.

Цепь регулятора напряжения

Итак, предположим, что нам нужно выходное напряжение +9 В от нашего настольного блока питания, тогда все, что нам нужно сделать, это подключить регулятор напряжения + 9 В к желтому проводу + 12 В. Поскольку блок питания уже выполнил выпрямление и сглаживание на выходе +12 В, единственными необходимыми дополнительными компонентами являются конденсатор на входе и еще один на выходе.

Эти дополнительные конденсаторы способствуют стабильности регулятора и могут иметь диапазон от 100 до 330 нФ.Дополнительный выходной конденсатор емкостью 100 мкФ помогает сгладить характерные пульсации, обеспечивая хорошую переходную характеристику. Этот конденсатор большой емкости, помещенный на выходе схемы источника питания, обычно называется «сглаживающим конденсатором».

Эти регуляторы серии 78xx обеспечивают максимальный выходной ток около 1,5 А при фиксированных стабилизированных напряжениях 5, 6, 8, 9, 12, 15, 18 и 24 В соответственно. Но что, если нам нужно выходное напряжение + 9 В, но есть только регулятор 7805, + 5 В ?.Выход + 5V 7805 привязан к клемме «земля, Gnd» или «0v».

Если мы увеличим напряжение на выводе 2 с 0 В до 4 В, то выходной сигнал также увеличится на дополнительные 4 В при условии, что входное напряжение будет достаточным. Затем, поместив небольшой стабилитрон на 4 В (ближайшее предпочтительное значение 4,3 В) между контактом 2 регулятора и землей, мы можем заставить регулятор 7805 5 В выдавать выходное напряжение +9 В, как показано.

Повышение выходного напряжения

Так как же это работает.Стабилитрон на 4,3 В требует обратного тока смещения около 5 мА для поддержания выходного сигнала, когда регулятор потребляет около 0,5 мА. Этот общий ток 5,5 мА подается через резистор «R1» с вывода 3.

Таким образом, номинал резистора, необходимого для регулятора 7805, будет R = 5 В / 5,5 мА = 910 Ом. Диод обратной связи D1, подключенный между входами и выходами, предназначен для защиты и предотвращает обратное смещение регулятора, когда входное напряжение питания отключено, в то время как выходное питание остается включенным или активным в течение короткого периода времени из-за большой индуктивной нагрузка, такая как соленоид или двигатель.

Затем мы можем использовать 3-контактные регуляторы напряжения и подходящий стабилитрон для получения различных фиксированных выходных напряжений от нашего предыдущего настольного источника питания в диапазоне от + 5 В до +12 В. Но мы можем улучшить эту конструкцию, заменив фиксированный регулятор напряжения регулятором переменного напряжения, таким как LM317T .

Источник питания переменного напряжения

LM317T — полностью регулируемый трехконтактный стабилизатор положительного напряжения, способный обеспечить 1,5 А с выходным напряжением в диапазоне от 1.25 вольт до чуть более 30 вольт. Используя соотношение двух сопротивлений, одно из фиксированного значения и другое переменное (или оба фиксированных), мы можем установить выходное напряжение на желаемый уровень с соответствующим входным напряжением в пределах от 3 до 40 вольт.

Регулятор переменного напряжения LM317T также имеет встроенные функции ограничения тока и теплового отключения, что делает его устойчивым к коротким замыканиям и идеальным для любого низковольтного или самодельного настольного источника питания.

Выходное напряжение LM317T определяется соотношением двух резисторов обратной связи R1 и R2, которые образуют цепь делителя потенциала на выходной клемме, как показано ниже.

LM317T Регулятор переменного напряжения

Напряжение на резисторе обратной связи R1 представляет собой постоянное опорное напряжение 1,25 В, V ref , возникающее между клеммой «выход» и «регулировка». Ток на клеммах регулировки — это постоянный ток 100 мкА. Поскольку опорное напряжение на резисторе R1 является постоянным, через другой резистор R2 будет протекать постоянный ток i, в результате чего будет получено выходное напряжение:

.

Тогда любой ток, протекающий через резистор R1, также протекает через резистор R2 (игнорируя очень малый ток регулировочной клеммы), при этом сумма падений напряжения на R1 и R2 равна выходному напряжению Vout.Очевидно, что входное напряжение Vin должно быть как минимум на 2,5 В больше, чем выходное напряжение, необходимое для питания регулятора.

Кроме того, LM317T имеет очень хорошее регулирование нагрузки, при условии, что минимальный ток нагрузки превышает 10 мА. Таким образом, чтобы поддерживать постоянное опорное напряжение 1,25 В, минимальное значение резистора обратной связи R1 должно быть 1,25 В / 10 мА = 120 Ом, и это значение может находиться в диапазоне от 120 Ом до 1000 Ом с типичными значениями R1 от 220 до 240 Ом. для хорошей устойчивости.

Если мы знаем значение требуемого выходного напряжения Vout и сопротивление резистора R1 обратной связи составляет, скажем, 240 Ом, то мы можем рассчитать значение резистора R2 из приведенного выше уравнения. Например, наше исходное выходное напряжение 9 В даст резистивное значение для R2:

.

R1. ((Vout / 1.25) -1) = 240. ((9 / 1.25) -1) = 1488 Ом

или 1500 Ом (1k5Ω) с точностью до ближайшего предпочтительного значения.

Конечно, на практике резисторы R1 и R2 обычно заменяются потенциометром для создания источника переменного напряжения или несколькими переключаемыми предварительно установленными сопротивлениями, если требуется несколько фиксированных выходных напряжений.

Но для того, чтобы сократить математические вычисления, необходимые при вычислении значения резистора R2 каждый раз, когда нам нужно определенное напряжение, мы можем использовать стандартные таблицы сопротивлений, как показано ниже, которые дают нам выходное напряжение регулятора для различных соотношений резисторов R1 и R2 с использованием сопротивления E24. значения.

Отношение сопротивлений R1 к R2

R2
Значение
Резистор R1 Номинал
150 180 220 240 270 330 370 390 470
100 2.08 1,94 1,82 1,77 1,71 1,63 1,59 1,57 1,52
120 2,25 2,08 1,93 1.88 1,81 1,70 1,66 1,63 1,57
150 2,50 2,29 2,10 2,03 1,94 1.82 1,76 1,73 1,65
180 2,75 2,50 2,27 2,19 2,08 1,93 1,86 1,83 1,73
220 3,08 2,78 2,50 2,40 2,27 2,08 1,99 1,96 1,84
240 3.25 2,92 2,61 2,50 2,36 2,16 2,06 2,02 1,89
270 3,50 3,13 2,78 2,66 2,50 2,27 2,16 2,12 1,97
330 4,00 3,54 3,13 2,97 2,78 2.50 2,36 2,31 2,13
370 4,33 3,82 3,35 3,18 2,96 2,65 2,50 2,44 2,23
390 4,50 3,96 3,47 3,28 3,06 2,73 2,57 2,50 2,29
470 5.17 4,51 3,92 3,70 3,43 3,03 2,84 2,76 2,50
560 5,92 5,14 4,43 4,17 3,84 3,37 3,14 3,04 2,74
680 6,92 5,97 5,11 4,79 4,40 3.83 3,55 3,43 3,06
820 8,08 6,94 5,91 5,52 5,05 4,36 4,02 3,88 3,43
1000 9,58 8,19 6,93 6,46 5,88 5,04 4,63 4,46 3,91
1200 11.25 9,58 8,07 7,50 6,81 5,80 5,30 5,10 4,44
1500 13,75 11,67 9,77 9,06 8,19 6,93 6,32 6,06 5,24

Заменяя резистор R2 на потенциометр 2 кОм, мы можем контролировать диапазон выходного напряжения нашего настольного блока питания примерно от 1.25 вольт до максимального выходного напряжения 10,75 (12-1,25) вольт. Затем наша последняя модифицированная схема переменного источника питания показана ниже.

Цепь источника переменного напряжения

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

Недостатки LM317T

Одним из основных недостатков использования LM317T как части схемы источника питания переменного напряжения для регулирования напряжения является то, что до 2,5 вольт падает или теряется в виде тепла на регуляторе. Так, например, если требуемое выходное напряжение должно составлять +9 В, то входное напряжение должно быть не менее 12 В, чтобы выходное напряжение оставалось стабильным в условиях максимальной нагрузки. Это падение напряжения на регуляторе называется «выпадением».Также из-за этого падения напряжения требуется какая-то форма радиатора для охлаждения регулятора.

К счастью, доступны регуляторы переменного напряжения с малым падением напряжения, такие как регулятор напряжения с низким падением напряжения National Semiconductor «LM2941T», который имеет низкое падение напряжения всего 0,9 В при максимальной нагрузке. За такое низкое падение напряжения приходится платить, поскольку это устройство способно выдавать только 1,0 А при регулируемом выходном напряжении от 5 до 20 вольт. Однако мы можем использовать это устройство для получения выходного напряжения около 11.1 В, что чуть ниже входного напряжения.

Итак, чтобы подвести итог, наш настольный блок питания, который мы сделали из старого блока питания ПК в предыдущем руководстве, можно преобразовать для обеспечения источника питания переменного напряжения с помощью LM317T для регулирования напряжения. Подключив вход этого устройства к желтому выходному проводу + 12 В блока питания, мы можем получить как фиксированные + 5 В, + 12 В, так и переменное выходное напряжение в диапазоне от 2 до 10 В при максимальном выходном токе 1,5 А.

alexxlab

leave a Comment