Найти тему
Электроника, ESP32, Arduino

Рисуем Ардуиной синус из розетки (простой осциллограф своими руками)

А почему бы и нет? Все необходимое чтобы нарисовать график изменения напряжения в бытовой электросети на борту Arduno имеется. (заодно и частоту узнаем).

Единственная проблема - переменный ток из розетки меняется в электрической цепи не только по величине, но и по направлению, а измерять отрицательные значения напряжений блок АЦП не умеет. Поэтому придется добавить в схему отдельный блок на операционном усилителе который будет конвертировать поступающие на вход значения напряжений в привычный для АЦП диапазон 0....5V. Это также позволит значительно увеличить входное сопротивление (сам прибор будет вносить минимальное влияние на измеряемую цепь).

Принципиальная электрическая схема
Принципиальная электрическая схема

Питается осциллограф от напряжения 12V. Схема на операционном усилителе рассчитана таким образом, что производит конвертацию входного напряжения в диапазоне от -15....+15V в диапазон 0....5V. ОУ питается от отдельного источника опорного напряжения собранного на линейном стабилизаторе 7805. Это же напряжение подается на вход AREF микроконтроллера. Также подключено 4 кнопки и монохромный дисплей с параллельным интерфейсом и разрешением 240*128 точек. Схему подключения дисплея мне было рисовать лень - все было спаяно по таблице да и на моем канале есть отдельная статья про этот дисплей.

Подключение дисплея 5,1" 240*128 TOSHIBA T6963C
Подключение дисплея 5,1" 240*128 TOSHIBA T6963C

Устройство собрано на ардуино-подобной платформе Mega 2560 R3 Core на базе микроконтроллера ATmega2560 от производителя INHAOS. Плата полностью обратно-совместима с оригинальной платой Arduino Mega 2560 - хотя по факту ей конечно не является. (на ней выведены дополнительные порты ввода/вывода, отсутствует встроенный стабилизатор напряжения и USB-UART преобразователь). За то в магазине INHAOS можно приобрести удобную макетную плату под пайку с мощным стабилизатором напряжения выполненным на базе линейного стабилизатора 7805 и промаркированными отверстиями для подключения периферии.

Для начала проведем тест вольтметра:

Измеряем напряжение на батарейке, и сравниваем с показаниями мультиметра
Измеряем напряжение на батарейке, и сравниваем с показаниями мультиметра
Меняем полярность источника питания и производим измерение
Меняем полярность источника питания и производим измерение

Скетч вольтметра очень простой:

Скетч двухполярного вольтметра на Arduino
Скетч двухполярного вольтметра на Arduino

Строка для вычисления напряжения имеет небольшое смещение:
float V = map(v, 0, 1023, -148, 152);
так как резисторы применяемые в схеме имели небольшую погрешность по сопротивлению.
Ни каких хитрых формул пересчета не требуется - и вы можете отдыхать пока Arduino за Вас работает.

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

Тырим картинку из Википедии и разбираемся с ней

Автор: Andshel - собственная работа, Общественное достояние, https://commons.wikimedia.org/w/index.php?curid=29098916
Автор: Andshel - собственная работа, Общественное достояние, https://commons.wikimedia.org/w/index.php?curid=29098916

По оси i мы будем измерять напряжение на входе ОУ. А вот сколько этих измерений (и с каким временным интервалом) потребуется сделать, чтобы нарисовать 1 период (T)?

Частота в сети f=50Гц
T=1/50 = 0,02 секунды или 20 миллисекунд
Для отрисовки одного периода Т я буду делать 100 измерений.
Одно измерение нужно будет проводить каждые 0.2 миллисекунды, или с частотой 5000 Гц

Естественно, что дисплей с такой частотой обновляться не сможет и поэтому придется применить следующий фокус:

  • делаем 200 измерений и сохраняем значения в оперативную память (для наглядности построим сразу 2 периода)
  • отображаем график из полученных значений на дисплее

Для того чтобы отмерять эти самые 0.2 миллисекунды будем использовать аппаратный 16 разрядный счетчик таймер 1. Запись полученных значений будем сохранять в процедуре прерываний, а картинку рисовать после сбора этих самых 200 значений.

Посчитаем прескалер таймера и количество тиков:

Расчет делителя и количества тиков
Расчет делителя и количества тиков

Собственно говоря тут и считать то особо нечего - при использовании делителя 1 как только счетчик будет иметь значение 3199 - вызываем прерывание, делаем измерение, пишем результат в массив размещенный в оперативной памяти. (подойдет и делитель 8 (считаем до 399).

Установка делителя частоты для аппаратного таймера
Установка делителя частоты для аппаратного таймера

Итоговые настройки таймера выглядят следующим образом:

С таймером работать очень просто и без библиотек
С таймером работать очень просто и без библиотек

Для начала попробуем построить график синусоидальной ЭДС из розетки в мониторе порта.

Общий алгоритм будет такой:

  • определяем момент перехода через 0 синусоидальной ЭДС от отрицательной полуволны к положительной
  • запускаем таймер, считываем и записываем 199 значений с аналогового входа (первое значение у нас уже есть)
  • на основании полученных значений строим график изменения напряжения (должно получится ровно 2 периода (2T))

пишем скетч

В сеттапе настраиваем работу таймера, кнопок и всторенного светодиода (он нам подскажет что массив со значениями сформирован и готов к отображению)
В сеттапе настраиваем работу таймера, кнопок и всторенного светодиода (он нам подскажет что массив со значениями сформирован и готов к отображению)

В loop два условия:

Цикл loop
Цикл loop

Если нажата кнопка 1 - ждем пока напряжение перейдет через 0 от отрицательного полупериода к положительному, и запускаем таймер который будет делать одно измерение каждые 0,2мс (всего 199 измерений)

Если нажата кнопка 2 результаты отправляются в COM порт.

Процедура прерывания таймера по совпадению:

Данный код выполняется каждый раз когда счетчик до считает до 3199
Данный код выполняется каждый раз когда счетчик до считает до 3199

На вход ОУ от старинного советского трансформатора подаем переменное напряжение 6V (у кого в детстве была такая штука - имейте в виду, что диодный мост из неё я выкинул)

Старинный советский преобразователь для питания игрушек (стоимость 3 рубля)
Старинный советский преобразователь для питания игрушек (стоимость 3 рубля)
  • отключаем Arduino от компьютера (чтобы не вносить погрешность помехами от компьютера)
  • клацаем кнопку 2
  • подключаем Arduino к компьютеру
  • открываем в среде Arduino IDE плоттер по последовательному соединению
  • клацаем кнопку 3.

И получаем картинку из Википедии на которой отображаются 2 периода синусоидального тока из розетки.

Так вот ты какой синус электрический
Так вот ты какой синус электрический

Если бы таймер был рассчитан на другу частоту (не с интервалом измерения каждой точки графика 0.2мс) - картинка бы у нас съехала. Амплитудное напряжение у нас составляет 6*1,44=8.6 и его тоже видно на графике.

Аппаратная часть готова - осталось только вывести график на дисплей.

Строим график синусоидальной ЭДС на дисплее
Строим график синусоидальной ЭДС на дисплее

По вертикальной оси Y отображаем значение напряжения. 1 деление 1V (1 пиксель дисплея 0.2V). У меня дисплей с разрешением 240х128 точек - отображаемый диапазон составляет от -12V до + 12V (больше в такой дисплей не впихнуть). По горизонтальной оси Y отображаем диапазон измерений 200 точек с интервалом 0,2 мс. и получаем в виде картинки 2Т при частоте 50Гц.

Если вместо трансформатора к данному девайсу подключить одну из фаз мини-трехфазного генератора из Китая и крутануть вал рукой можно убедиться что ЭДС на его выходе тоже имеет форму синуса.

Проверяем форму выходное напряжение Китайского генератора
Проверяем форму выходное напряжение Китайского генератора

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

Резюмируем: Если вы

-17

то вам вполне по силам из

-18

построить своим руками прибор который в некоторых случаях сможет заменить осциллограф. А учитывая то, в семействе Arduino уже давно появились мощные 32 разрядные микроконтроллеры (а не только AVR как считает безнадежно отставший от жизни автор этого поста) позволяющие обрабатывать звук и видео - используя знания и кучу дешёвого "говнища" из Китая можно собрать вполне себе приличный аппарат для решения своих задач.

Фото для обложки стать
Фото для обложки стать

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

Полный список всех статей канала доступен по этой ссылке.
Всем добра.