ШИМ-регулятор на Arduino

  Простой ШИМ-регулятор легко можно сделать с помощью Arduino. Для примера возьмём всем известный контроллер Arduino UNO , который построен на ATmega328.  Он имеет 14 цифровых входов/выходов ( 6 из которых могут использоваться как выходы ШИМ)  и  6 аналоговых входов. Arduino UNO недорого можно купить здесь - http://ali.pub/y24f1



   Для наших целей понадобится один аналоговый вход - А0, который используем для подключения переменного резистора, а также один выход ШИМ - возьмём 11. Соберём простую схему : 



      И напишем простую программу для управления яркостью светодиода , подключённого к 11 выходу ШИМ. Регулировать будем переменным резистором, который подключен к аналоговому входу А0.








   Получаем первый результат  -  яркость светодиода изменяется с помощью переменного резистора. Для управления какой-нибудь силовой нагрузкой включённой в сеть 220 вольт такой ШИМ тоже сгодится, только желательно сделать гальваническую развязку между силовой частью и Arduino.  Можно взять готовый кусочек схемы из предыдущей страницы " ШИМ-регулятор 220 В( IGBT)"
    




    Провёл небольшие испытания этого ШИМ-регулятора - сначала как обычно подключил активную нагрузку ( лампочку накаливания) а затем и коллекторный двигатель. Всё работает. Снял видео - 


                                       


 Далее по плану использовать обратную связь от таходатчика коллекторного двигателя для поддержания стабильных оборотов, а также увеличить частоту ШИМ. 

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

и подал это сигнал на аналоговый вход  А1.  Для защиты входа Ардуино от перенапряжения поставил ещё стабилитрон на 5.1  вольт. Получилась такая схема




 Для написания программы  управления оборотами коллекторного двигателя  использовал библиотеку PID - регулятора для Arduino.


#include <PID_v1.h> // подключаем библиотеку PID-регулирования
double pwmSet, pwmSpeed, pwmOut; //  //переменные для пид-регулятора
PID myPID(&pwmSpeed, &pwmOut, &pwmSet, 0.2, 0.5, 0, DIRECT);
// Подобрал коэфф пид-регулятора Kp=0.2, Ki=0.5, Kd=0 .
#define PWM_PIN   11 // выход ШИМ
#define SET_PIN    0 // установка оборотов  0-5 вольт  мин-макс
#define TACHO_PIN  1 // сигнал от таходатчика 0-5 вольт  мин-макс

void setup() {
    myPID.SetMode(AUTOMATIC);
}
void loop()  {
    pwmOut = constrain ( pwmOut , 0, 250); // это необязательно - по умолчанию 0-255
    pwmSet  =  analogRead(SET_PIN); // считываем показания потенциометра регулировки скорости
    pwmSpeed = analogRead(TACHO_PIN); // считываем показания таходатчика
    myPID.Compute(); //  здесь происходят вычисления пид-регулятора - то есть pwmOut
    analogWrite(PWM_PIN, pwmOut);//  получаем выходной сигнал ШИМ
}

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



124 комментария:

  1. Здравствуйте Александр. Смотрел ваше видео. Данная тема, тоже интересует. Но я новичек во всем этом. Вот интересное видео с использованием датчика холла.
    https://www.youtube.com/watch?v=x2fLvS8Ms9w

    ОтветитьУдалить
  2. Здравствуйте вы случайно неделание регулятора и управления бесколекторный двигателем от стиральной машины лж рабочее напряжение от 0 до 100 вольт постоянного тока ампераж сказать не могу

    ОтветитьУдалить
    Ответы
    1. Я такими пока не занимался, возможно там какое-то подобие частотного привода

      Удалить
  3. Здравствуйте Александр, никак не дождусь ардуино, тоже бы поэкспериментировал. А пока собираю разный материальчик. Вот интересное видео, можно связаться с автором, может что подскажет https://www.youtube.com/watch?v=cU9oF3OKIlY

    ОтветитьУдалить
  4. Александр, прокомментируй, пожалуйста что происходит в void loop

    ОтветитьУдалить
    Ответы
    1. Александр, я написал кое-какие пояснения в скетче, хотя я не большой специалист в программировании. Делал программу больше по аналогии и по интуиции. А что конкретно непонятно в этом скетче?
      Вообще на первый взгляд ПИД-регулятор - это просто, но вся проблема заключена в этих коэффициентах Kp, Ki, Kd а также в их подборе для каждого конкретного случая.

      Удалить
    2. Спасибо. Да, вот смотрю на вашу программу и вижу что просто. До этого читал, не понял толком ничего. Размазывают, растягивают, а что куда подставлять не понятно. Позже посмотрю ваши пояснения - спрошу ещё.

      Удалить
  5. Доброго всем времени.
    Вопрос к автору и повторившим, есть ли разница между регулятором на Ардуино и ТДА1085. в работе на динамическую нагрузку например болгарка.

    ОтветитьУдалить
  6. На сегодня всё проверено на TDA1085, а Arduino (как и другие контроллеры) будет работать не хуже и позволит реализовать гораздо больше возможностей в будущем.

    ОтветитьУдалить
  7. Спасибо за ответ.
    Да Ардуино должно давать больше возможностей. Неплохо было бы прикрутить тахометр или еще что нибудь, может счетчик оборотов, тогда получиться универсальный девайс.

    ОтветитьУдалить
  8. можете выложить саму библиотеку PID_v1.h

    ОтветитьУдалить
  9. Почему нет защиты, ведь не сложно реализовать.

    ОтветитьУдалить
    Ответы
    1. Подключайтесь, предлагайте свои решения, а я стараюсь всё очень постепенно добавлять.
      Всё в принципе просто сделать, только почему-то все ждут готовых решений.

      Удалить
  10. Великолепное по простоте решение! Особенно в программной части :). Есть два маленьких недостатка. Во-первых при такой обратной связи реальные обороты двигателя не определить, т.к. все импульсы таходатчика сглаживаются. Но это излечимо, если снимать с датчика не выпрямленное напряжение, а считать частоту импульсов. И во вторых, силовая часть будет малость по-дороже, чем в случае управления переменным током через симистор. Но зато как всё просто!

    ОтветитьУдалить
    Ответы
    1. Согласен с вами, я думаю примерно также, надо считать импульсы, тогда и обороты можно измерять.

      Удалить
  11. Я очень извиняюсь, но с нетерпением жду регулятор с тахометром. Когда можно, примегно ждать. Еще раз извините, но сам я не могу ничего написать.Очень жду.

    ОтветитьУдалить
    Ответы
    1. Буду работать над этим вопросом, но точно не могу сказать - это зависит очень от многих причин.

      Удалить
  12. У меня вопрос, что это за транзистор VT2 S8580?

    ОтветитьУдалить
  13. Здравствуйте. Хочу повторить эту схему. С ардуино уже знаком (часы,барометр собирал, светодиодиком моргал :)) , надеюсь получится. Вопрос по диоду RHRP3060. Его функции? Он скоростной,мощный (30А) , нужен именно такой или чем то можно заменить ?
    И спасибо за проделанную работу.

    ОтветитьУдалить
    Ответы
    1. Это защитный диод для работы с индуктивной нагрузкой, он должен быть быстродействующий - зависит от частоты ШИМ. Должен перекрывать рабочие напряжение и ток. Насчёт быстродействия - я подбирал по нагреву - сначала поставил по-моему FR1007 на 10 ампер 1000 вольт - на малой частоте ШИМ не нагревался - как только я увеличил частоту до 10-20 кГц - стал сильно греться. Тогда поставил RHPR3060 - стала нормальная температура . То есть главный параметр - это быстродействие.

      Удалить
  14. Увы, по быстрому повторить не получится. Как я понимаю, логичное продолжение проекта это драйвер hcpl 3120 и транзистор Fga25n120 ? Так в наших радиоларьках запросили 3$ за драйвер и 11$ (!) за транзистор, про диод уже и спрашивать не стал. Всё заказал на eBay, (к примеру: 10 драйверов всего 2.45 и 5 транзистров за 4$ ). Придётся ждать.

    ОтветитьУдалить
    Ответы
    1. Знакомая история, я почти всё так заказываю.

      Удалить
  15. Может, пока подскажете, что заранее заказать для новой версии с тахометром.

    ОтветитьУдалить
    Ответы
    1. Дисплей будет LCD1602, а для обработки сигнала таходатчика компаратор LM393

      Удалить
    2. Спасибо, буду готовиться.

      Удалить
  16. Доброго дня, хочеться повторить Вашу схему. Подскажите программа для ардуино в свободном доступе, ткните где/как скачать. И еще вопрос, она программа, совместима с ардуино мини?
    Извините за ламерские вопросы)) учусь...
    Спасибо.

    ОтветитьУдалить
    Ответы
    1. Программу легко набрать, она прямо в тексте на этой странице и на фото тоже. С мини должна быть совместима.

      Удалить
  17. Этот комментарий был удален автором.

    ОтветитьУдалить
  18. александр подскажите наименование стабилитронов vd2, vd4, vd8 и диодный мост на входе тахо?

    ОтветитьУдалить
  19. 1N4742A и 1N4733A подойдут?
    а вот диодный мост какой?

    ОтветитьУдалить
    Ответы
    1. Подойдут любые 0.5 или 1 Вт, 1N4742A и 1N4733A тоже подойдут.
      Диодный мост абсолютно любой, напряжение до 50 вольт, ток небольшой.

      Удалить
  20. и мощность резисторов хотелось бы узнать )
    а еще скажите почему с5 на 400 вольт?

    ОтветитьУдалить
    Ответы
    1. Амплитуда у синусоиды питающей - 310 вольт ( 220 вольт это действующее значение)
      R12 у меня 2 Вт, R11 - два 5-ватных сопротивления по 20 Ком. Остальные 0.25 Вт.

      Удалить
    2. А разве R10 не на 3 ватта?

      Удалить
    3. Да, R10 стоит на 3 ватта

      Удалить
  21. Транзистор FGA25N120ANTD с диодом внутри между эмиттером и коллектором .нужен ли тогда диод VD5 ?

    ОтветитьУдалить
    Ответы
    1. Диод нужен, он ставится параллельно индуктивной нагрузке и в обратной полярности.

      Удалить
  22. А параметры схемы которая идет с таходатчика у вас подобраны таким образом, что когда вы потенциометром устанавливаете, допустим, 2.5 В, у вас двигатель раскручивается до таких оборотов, что с таходатчика приходит 2.5 Вольта, или это необязательно, главное чтобы просто было меньше 5?

    ОтветитьУдалить
    Ответы
    1. Просто непонятно, как работает регулятор, он должен сравнивать входной сигнал с потенциометра и с датчика или нет?

      Удалить
    2. Подстроечник R3 устанавливается так, чтобы на максимальных оборотах на вход Ардуино поступало 5 вольт. Тогда получается диапазон 0 - 5 вольт.

      Удалить
    3. Совершенно верно, сравнивает два сигнала - с потенциометра и с таходатчика

      Удалить
  23. А на последнем рисунке с кодом, это весь программный код, или ещё что-то есть?
    просто попробовал сейчас его загрузить, у меня на выходе стабильно 0 почему-то.
    Как при разных сигнлах на А1 и А0 так и при одинаковых

    ОтветитьУдалить
  24. Наверно у вас нет этой библиотеки PID_v1.h - загрузить надо.

    ОтветитьУдалить
    Ответы
    1. http://www.picshare.ru/view/8122613/
      в том и дело что есть...
      единственное, на что я думаю, у меня не оригинальная ардуинка, может быть поэтому..
      А весь код точь в точь как Ваш
      http://www.picshare.ru/view/8122614/

      Удалить
    2. А помните, в первоначальном коде вы задавали уменьшение выходной переменной в 4 раза, в это случае нужно ли так делать? просто на выходе то изначально предел сигнала 1024

      Удалить
  25. Разобрался, это почему-то некорректно отображался именно сам светодиод, когда подключил к двигателю всё заработало)

    ОтветитьУдалить
  26. А ещё, последний вопрос... Почему у вас в строке
    PID myPID(&pwmSpeed, &pwmOut, &pwmSet, 0.2, 0.5, 0, DIRECT);
    задан параметр DIRECT? Директ это ведь прямое рягулирование, и уменьшение сигнала входного сигнала приводит к уменьшению сигнала на выходе? Там разве не нужно было написать Reverse?

    ОтветитьУдалить
    Ответы
    1. Нет, DIRECT правильно -
      https://playground.arduino.cc/Code/PIDLibrarySetControllerDirection

      Скорость увеличивается при увеличении выходного сигнала,
      скорость уменьшается при уменьшении выходного сигнала.

      Удалить
  27. Здраствуйте помогите в написании скетча для ардуино уно управление двигателем постоянного тока с реверсом поддержанием момента и торможением?

    ОтветитьУдалить
    Ответы
    1. Я больше по аппаратной части, программы у меня очень упрощённые получаются - не программист я. Мне бы самому помощь в программировании не помешала бы.

      Удалить
  28. Все собрал, движок 750 Вт (Ручной фрезер), сгорает выходной транзистор, видать пусковой ток очень большой (сопротивление обмоток на холостую 10-12 Ом). Есть мысли как ограничить пусковой ток (аппаратно или программно)? Частоту увеличил до 4 кГц, датчик тахометра поставил цифровой. Кому интересно скетч выложу.

    ОтветитьУдалить
    Ответы
    1. Да, интересно. Делаю для 1.2 квт фрезера.

      Удалить
  29. Здравствуйте, Александр. Собрал я электропривод к инвалидной коляске на двигателе с "индезита" 370 Вт. Питание 75-80 В (6 аккумуляторов ИБП 12В). Управлял китайским ШИМ регулятором 0-90 В, За месяц два сгорело. Хочу сделать ШИМ на ардуинке, силовую часть на FGA25N120ANTD. Пробовали ли Вы для управления использовать драйвер hcpl 3120?

    ОтветитьУдалить
    Ответы
    1. Пока сделал пробный регулятор на NE555 с гальвнической развязкой от 220 вольт и с драйвером TLP250. Он похож на HCPL3120. Также аппаратную защиту по току сделал. На компараторе.

      Удалить
  30. Подскажи пожалуйста какая площадь радиаторов и как сильно греется ? у меня нагрузка примерно 500 вт.

    ОтветитьУдалить
    Ответы
    1. У меня был двигатель мощностью 300 ватт, включал без нагрузки, в общем ничего особо не грелось.
      Радиаторы были такие - для транзистора - http://ali.pub/1t9krd
      Диод Шоттки стоял - http://ali.pub/1t9kuo . Площадь можете сами посчитать.

      Удалить
  31. Добрый день. Александр, Вы планируете развитие проекта например как тут https://youtu.be/KpTU8BqM6UI?t=2m59s ?

    ОтветитьУдалить
    Ответы
    1. Да, планирую и делаю сейчас, но всё очень медленно получается.

      Удалить
  32. Здравствуйте! Я так понимаю для тэна эта схема тоже подойдет? Можно ли использовать сторонний источник +12В? Нужно ли как-то программно ограничивать шим(ведь после моста у нас будет 310В)? Для чего резистор R10 0,1 Ом между истоком и землей? Обязательно ли использовать диод D8, если нагрузка чисто активная?
    Заранее благодарю за ответы.

    ОтветитьУдалить
    Ответы
    1. Схема в принципе подойдёт и для ТЭНа. Резистор R10 0.1 ом - для защиты по току. Можно посмотреть страницу у меня сайте - ШИМ-регулятор 220 В ( IGBT ) - http://www.motor-r.info/p/blog-page_28.html . Там реализовано питание от трансформатора и защита по току. Диод D8 при активной нагрузке не нужен.

      Удалить
    2. Защита по току будет сделана на следующем этапе, будет аппаратная защита и ещё датчик тока.

      Удалить
    3. Спасибо. Буду пробовать. А как подобрать R10? У меня нагрузка тэн на 130 Вт. Присмотрел мосфет STP4NK60ZFP(N-ch Vds=600V Id25=4A Rds=2Ohm), думаю должно хватить, как и моста на 2А 1000В.

      Удалить
  33. Я бы поставил транзистор и мост с большим запасом по току. А резистор R10 подбирать не надо - он используется как датчик тока - делителем можно задавать уровень срабатывания - можно и 0.01 ом.
    Последняя схема на странице - http://www.motor-r.info/p/blog-page_28.html

    ОтветитьУдалить
    Ответы
    1. Спасибо. Теперь понятно по R10. Тут чем меньше, тем лучше. Тем более, что сигнал усиливается операционником. Мост и мосфет подберу чуть мощнее.

      Удалить
  34. Здравствуйте, у вас на схеме две земли или одна? Не могу просто понять все собрал по схеме и не работает??

    ОтветитьУдалить
  35. Т.е одна общая или две отдельные?

    ОтветитьУдалить
  36. Ксть кто онлайн люди помогите! Очень нужна эта схема но вот не могу понять что за две земли!

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. Да, две земли, я там не очень корректно нарисовал. Земля Ардуино гальванически развязана с сетью 220 вольт. Сейчас постараюсь исправить.

      Удалить
    3. Да,землю ардуино и землю силовой части следует связать.

      Удалить
    4. Схему исправил , должно быть понятно - две земли и они развязаны.

      Удалить
    5. Посмотрите вот эту страницу - http://www.motor-r.info/p/blog-page_28.html . Схема в самом низу страницы - силовая часть там получше - с Ардуино буду делать такую.

      Удалить
  37. Т.е земля диодного моста и земля ардуины должна быть связана?

    ОтветитьУдалить
    Ответы
    1. Нет, земли разные. Оптрон PC817 именно для такой развязки стоит.

      Удалить
    2. А как быть если ц меня ардуина и драйвер мосфета питаются от компьютерного БП АТХ? В нем же земля общая

      Удалить
    3. Опасно это, я бы так не делал. Брал бы два разных блока питания . Посмотрите вот эту страницу - http://www.motor-r.info/p/blog-page_28.html . Схема в самом низу страницы - силовая часть там получше - с Ардуино буду делать такую.

      Удалить
  38. Спасибо 12в на транзистоах появились:) Но вопрос еще а как igbt транзистор подключать? На хеме стоит полевой мосфет

    ОтветитьУдалить
    Ответы
    1. http://www.motor-r.info/p/blog-page_28.html

      Удалить
    2. Смотрел, но как подключать так и не понял

      Удалить
  39. У igbt транзистора коллектор и эмиттер. А на схеме полевой у него сток исток? У меня тоже fga25n120!

    ОтветитьУдалить
  40. Люди, выручайте! Все равно не работает монтаж правильный соплей между дорожками нет

    ОтветитьУдалить
  41. Автор! Помогите с подключением транзистора

    ОтветитьУдалить
  42. Ответы
    1. Светодиод меняет яркость? Когда крутите переменный резистор.

      Удалить
    2. Какую нагрузку подключаете - мотор? Вместо нагрузки можно подключить лампочку на время запуска.

      Удалить
    3. Также можно все испытания проводить на небольшом напряжении вмечто 220 вольт.

      Удалить
    4. отлично! заработало всем спасибо ОГРОМНОЕ за помощь!! Автор на самом деле модчина схема проста до безобразия если в ней разобраться а так вполне рабочая

      Удалить
  43. Вопрос еще а можно ли как то ограничить выходное напряжение до 110вольт?

    ОтветитьУдалить
    Ответы
    1. В ардуино есть функция map
      http://arduino.ru/Reference/Map

      Или, как вариант, после myPID.compute();
      выполнить pwmOut=pwmOut/2;
      и далее по тексту.

      Удалить
    2. Мне управлять не с ардуино а с match3 чпу шпиндель 500ватт 110вольт постоянка

      Удалить
    3. Тогда только трансформатор 220/110 и подавать на силовой мост, а для 12В(драйвера) брать мост послабее и запитывать от 220В.

      Удалить
  44. И при этом оставить регулировку шим сигналом 0-110вольт

    ОтветитьУдалить
  45. И при этом оставить регулировку шим сигналом 0-110вольт

    ОтветитьУдалить
  46. Приветствую! Собрал ШИМ-регулятор по Вашей схеме. Работает отменно! Двигатель подобный Вашему, либо такой-же, но вот импульсный таходатчик из двигателя я извлек, поскольку долго воевал с корректным отображением оборотов на LCD 1602, а Вашу схему обработки сигнала таходатчика, я тогда не видел. Сейчас установлен оптический, инфракрасный датчик, и одна метка на валу, то есть один оборот - один импульс, так отображение максимально корректно, в виду высокой оборотистости двигателя. Еще вывод ШИМ у меня на пятом контакте, на нем удвоенная частота ШИМ.
    Поскольку мои навыки написания скетчей, скажем так, не велики, столкнулся с проблемой - Ваш скетч ПИД алгоритма, у меня работает не корректно, а точнее я могу только увеличивать обороты, а вот с уменьшением - помогает лишь полная остановка двигателя через ресет ардуино. Подозреваю дело в количестве импульсов на оборот? Что нужно изменить/дописать в Вашем скетче?
    Спасибо!

    ОтветитьУдалить
    Ответы
    1. Заданием скорости является вход, считываемый с потенциометра. Проверьте качество контактов,номинал резистора или попробуйте заменить сам резистор.
      Скетч построен на готовой пид-библиотеке и врядли стоит туда влезать. Единственное с чем можно попробовать поиграться-коэффициенты пид-регулятора, но это, скорее всего, вашу проблему не устрвнит.

      Удалить
    2. Потенциометр новый, десятиоборотный. В моем скетче ШИМ-регулятора, на LCD выводятся показания потенциометра в процентах, от значения 0.00, до 100.00, и есть подтягивающий резистор на 10k, подключенный на gnd и A0. Показания потенциометра отличные, дребезга нет и все работает, а вот ПИД-алгоритм ни в какую.

      Удалить
    3. А зачем вам подтягивающий резистор? В схеме я его не вижу.

      Удалить
    4. Решил немного обезопаситься. Если потенциометр будет дребезжать, будет обрыв, возможны броски, а это чревато выходом из строя силового мосфета. В моем случае это IGBT. Два уже спалил, один по невнимательности, а другой только что, пробуя разные скетчи с ПИД-алгоритмами.

      Удалить
    5. Скорее всего, эта подтяжка и не даёт снизить скорость до минимума, задавая минимальное начальное смещение.

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

      Удалить
    7. Здравствуйте, прочитал ваши комментарии. Я сам не очень силён в программировании, поэтому и обратился к ПИД-библиотеке. Но вы тоже должны были изменить скетч - у меня информацию об оборотах даёт аналоговый сигнал. Если вы используете оптический датчик - должен быть другой скетч. Покажите ваш вариант - совместными усилиями что-нибудь сделаем.
      Или надо написать что-нибудь без ПИД, от простого к сложному

      Удалить
    8. Доброго времени суток. Грешил на вывод ШИМ на пятом пине, поменял на одиннадцатый, результат тот-же.
      Мой скетч содержит вывод данных на дисплей LCD 1602 по шине I2C (нужна соответствующая библиотека). Данные в виде процентов потенциометра и количество оборотов. Чтение датчика оборотов происходит с помощью прерывания CHANGE, поскольку с другими методами чтения, я столкнулся с ошибками чтения. CHANGE считывает данные два раза в секунду, по этому есть задержка в изменении ШИМ и чтение происходит в кратности 120+ оборотов. Если выставить задержку (delay) 500, то можно считывать кратность 60+, но при этом изменение ШИМ будет два раза в секунду (сейчас четыре).
      В планах уйти от задержки.
      В скетче присутствует часть вашего скетча ШИМ регулятора.
      Скетч:
      //Библиотеки.
      #include

      //ШИМ.
      int pwmPin = 11; // Выход ШИМ (Пятый пин ардуино - удвоеная частота ШИМ).
      int analogPin = 0; // Потенциометр.

      //Проценты ШИМ.
      int Value=0; // Переменная для хранения значения.
      float Value_percent=0;

      //Обороты.
      int valrpm = 0; // Переменная для хранения значения.
      void rpm() {
      valrpm++;
      }
      LiquidCrystal_I2C lcd(0x3f, 16, 2);

      void setup() {

      //ШИМ.
      pinMode(pwmPin, OUTPUT); // Установка порта на выход ШИМ.

      //Обороты.
      attachInterrupt(0, rpm, CHANGE);

      Serial.begin(9600);
      lcd.init();
      lcd.backlight();
      }

      void loop()
      {
      //ШИМ.
      Value = analogRead(analogPin); // Считывается напряжение с потенциометра - значения от 0 до 1023.
      analogWrite(pwmPin, Value / 4); // analogRead-значение от 0 до 1023, analogWrite в диапазоне от 0 да 255.

      //Обороты.
      valrpm = 0; // сбрасываем счетчик и ждем.
      lcd.setCursor(0, 0);
      lcd.print("RPM: ");

      delay(250); // так как прерывание CHANGE, срабатывает два раза (delay 500), то и считываем каждые пол секунды.

      lcd.print(valrpm * 1 * 120);
      lcd.print(" ");

      //Проценты ШИМ.
      lcd.setCursor(0, 1); // Устанавливаем курсор на вторую строку и нулевой символ.
      lcd.print("Power: % ");

      lcd.setCursor(0, 1);
      lcd.setCursor(7, 1);
      Value_percent=(float)100.0/1023*Value;
      lcd.print(Value_percent); // Выводим на экран значение с аналогового входа (от 0 до 1023 пропорционально от 0% до 100%).

      }

      Удалить
    9. Не отобразилась библиотека! LiquidCrystal_I2C.h

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

      Удалить
  47. Как я понял - это ваш скетч регулятора ШИМ с индикацией оборотов, но без обратной связи. Я правильно понял? И как работает - нормально?

    ОтветитьУдалить
    Ответы
    1. Я просто не понял, у вас не работает нормально ШИМ с вашим скетчем или только моим ( пид-регулятор)

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

      Удалить
    3. Конечно выкладывайте, я только за.

      Удалить
  48. Александр, подскажите какой лучше ставить полевой транзистор: FGA25N120AN или FGA25N120ANTD?

    ОтветитьУдалить
  49. И еще один момент, при открывании оптопары PC817 путем регулировки резистора R1 c ардуино, происходит снижения напряжения на коллекторе оптопары с 12В до 1 волта. И напряжение на затворе полевого транзистора не хватает для его открытия. Почему это происходит? Получается блок питания не выдает стабилизированное напряжение 12в? Или может быть другая причина?

    ОтветитьУдалить
    Ответы
    1. Сейчас я не могу проверить, но у меня всё работало нормально. Проверьте, правильно ли вы собрали драйвер на двух транзисторах разной проводимости.
      Ещё - я вам уже писал - более правильная схема силовой части - на страничке "ШИМ-регулятор 220 В ( IGBT ) " - http://www.motor-r.info/p/blog-page_28.html - последняя схема.
      Там сделано питание драйвера от отдельной обмотки трансформатора, драйвер применён специализированный - TLP250, а также защита по току есть - которую тоже можно с Ардуино применить. И транзистор там тоже мощнее - FGH60N60

      Удалить
    2. Спасибо, будем дальше грызть этот "черствый гранит" радиотехники ))).

      Удалить
  50. Привет:

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

    Использование оптоакопальдора.
    https://www.forosdeelectronica.com/attachments/1524646492646-png.166310/

    http://4.bp.blogspot.com/-EN05co7M-cQ/VqKnd2m4zMI/AAAAAAAAAgk/PKXq63Osd5M/s1600/3.jpg

    Привет.


    ОтветитьУдалить
    Ответы
    1. Я не понял вопроса.

      Удалить
    2. Привет:

      Можете ли вы создать схему, которая использует только цифровые сигналы в Arduino?

      В вашей схеме используются только аналоговые сигналы.

      Сердечный привет.

      Удалить
    3. Да, конечно можно.
      Выход ШИМ здесь уже цифровой. Чтобы сделать измерение оборотов двигателя - можно использовать датчик Холла или использовать формирователь сигнала индуктивного датчика и подсчитывать импульсы.
      Вместо переменного резистора для регулировки оборотов двигателя можно использовать кнопки - больше - меньше-, например.

      Удалить
    4. Силовую часть лучше использовать со страницы -" ШИМ регулятор на 220( IGBT)" - https://www.motor-r.info/p/blog-page_28.html - в самом низу страницы - там более правильная схема.

      Удалить