Назад

Аналоговая электроника в браузере: семь схем, которые можно запустить и измерить

Блок питания на 5 В в Velxio: два генератора сигналов в роли трансформатора со средним выводом, два диода 1N4007, сглаживающий конденсатор и стабилизатор 7805, а осциллограф показывает входные 12 В переменного тока и выпрямленное напряжение

Большинство руководств по Arduino сразу переходят к коду. Но компоненты вокруг микроконтроллера — аналоговые: резистор, который защищает светодиод, делитель, превращающий показания датчика в напряжение, транзистор, коммутирующий двигатель, стабилизатор, который делает 5 В из сетевого адаптера. Когда что-то из этого собрано неправильно, никакой код это не исправит.

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

Эта статья проведёт вас через семь проектов. В первых пяти нет ни одного микроконтроллера, только компоненты. В последних двух аналоговые схемы сочетаются с Arduino и ESP32. Каждый проект есть в галерее примеров, и каждое число ниже считано с симулятора и сверено с формулой, которая его объясняет.

Перед началом: три прибора

Одна вещь, которую стоит знать: для схем с источниками переменного тока Velxio рассчитывает короткий интервал времени с момента подачи питания (несколько периодов сигнала) и показывает осциллограмму этого интервала. Расчёт повторяется при каждом изменении, так что картинка остаётся актуальной, но это не непрерывная запись.

1. Светодиод и резистор: закон Ома

Батарея на 9 В, амперметр с показанием 15,18 мА, резистор 470 Ом с вольтметром параллельно, показывающим 7,136 В, и горящий красный светодиод

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

Приборы рассказывают всю историю:

Вот формула для выбора резистора: R = (Vпитания − VLED) / I. Для 15 мА от батареи на 9 В: (9 − 1,8) / 0,015 = 480 Ом, так что 470 Ом — ближайший стандартный номинал.

Попробуйте: щёлкните правой кнопкой по резистору и поставьте 1 кОм. Ток падает до 7,2 мА, светодиод тускнеет, а его собственное напряжение почти не меняется (1,81 В). Светодиод держит своё напряжение почти постоянным и позволяет резистору задавать ток.

Открыть схему «Светодиод и закон Ома» в Velxio

2. Блок питания на 5 В: выпрямитель, конденсатор и стабилизатор

Классический линейный блок питания, тот самый, что стоит внутри каждого старого сетевого адаптера, состоит из четырёх каскадов:

  1. Трансформатор. Он превращает сетевое переменное напряжение в более безопасное и низкое переменное. Здесь это вторичная обмотка 12-0-12 В со средним выводом, изображённая как два генератора сигналов в противофазе (по 12 В амплитуды каждый, 50 Гц).
  2. Выпрямитель. Два диода 1N4007, по одному на каждую половину вторичной обмотки. Каждый проводит в свой полупериод, поэтому на выходе получается положительный импульс каждые 10 мс: двухполупериодное выпрямление.
  3. Сглаживающий конденсатор. Конденсатор на 220 мкФ заряжается на каждом пике и питает нагрузку между ними. Напряжение на нём не плоское: между пиками оно проседает. Это проседание и есть пульсации.
  4. Стабилизатор. 7805 берёт это колеблющееся напряжение и держит на выходе ровно 5 В, пока на его входе остаётся хотя бы примерно на 2 В больше, чем на выходе.

Осциллограмма в начале статьи показывает 12 В переменного тока с трансформатора и выпрямленное напряжение на конденсаторе. Конденсатор колеблется между 10,1 В и 11,8 В — около 1,7 В пульсаций при нагрузке 50 мА, — а вольтметр на выходе показывает стабильные 5,000 В.

Быстрая оценка пульсаций: ΔV ≈ I / (2·f·C): 0,05 А / (2 × 50 Гц × 220 мкФ) = 2,3 В. Эта формула предполагает, что конденсатор питает нагрузку весь полупериод; в действительности диоды подзаряжают его немного раньше, поэтому измеренные 1,7 В ниже.

Попробуйте: щёлкните правой кнопкой по конденсатору и поставьте 47 мкФ. Пульсации вырастают до 6 В, впадины опускаются до 5,9 В — ниже того, что нужно 7805, — и его выход проседает до 3,9 В на каждом периоде. Вот почему в блоках питания ставят большие конденсаторы.

Открыть блок питания на 5 В в Velxio

3. Ночник на фоторезисторе и двух транзисторах

Ночник в темноте: модуль датчика света, транзисторы Q1 и Q2 и горящий жёлтый светодиод

Автоматический ночник без микроконтроллера и без кода. Фоторезистор (LDR) измеряет освещённость, а два транзистора включают светодиод, когда становится темно.

Модуль датчика света — это делитель напряжения: фоторезистор сверху и резистор 10 кОм снизу. При дневном свете сопротивление фоторезистора мало, и выход модуля (AO) высокий; в темноте оно поднимается до сотен кОм, и AO падает почти до 0 В.

Зачем два транзистора? Потому что один делал бы наоборот: зажигал светодиод, когда светло. Первый каскад инвертирует сигнал.

В симуляции при 20 люксах (тусклая комната) AO держится на 0,50 В, Q1 закрыт, и через светодиод течёт 13 мА. При 30 люксах AO равен 0,67 В, Q1 открывается и светодиод гаснет. Щёлкните правой кнопкой по датчику света и меняйте Illumination (lux) в этом диапазоне, чтобы переключать его:

Та же схема при дневном свете: жёлтый светодиод не горит

Открыть ночник в Velxio

4. Транзисторный усилитель: каскад с общим эмиттером

Усилитель с общим эмиттером и осциллографом: сигнал на базе (зелёный) маленький, сигнал на коллекторе (красный) больше и перевёрнут

Вот так маленький сигнал становится большим: усилитель с общим эмиттером, строительный блок любого дискретного аудиоусилителя. Синусоида 1 кГц с размахом 0,4 В входит через разделительный конденсатор и выходит с коллектора примерно в четыре с половиной раза больше и перевёрнутой. (Источник 9 В — это символ лабораторного блока питания в левом верхнем углу; генератор сигналов — под ним.)

Работают здесь две вещи.

Смещение. Транзистор усиливает только тогда, когда он частично открыт. Делитель 47 кОм / 10 кОм задаёт на базе 1,54 В. Эмиттер находится на один диодный переход ниже, 0,89 В, поэтому через эмиттерный резистор 1 кОм течёт 0,89 мА. Тот же ток через коллекторный резистор 4,7 кОм создаёт падение 4,2 В, оставляя на коллекторе 4,83 В — около середины питания, с запасом для размаха в обе стороны.

Усиление. Изменение на базе появляется почти без изменений на эмиттере, поэтому оно меняет ток на ΔV / Re. Это изменение тока течёт через Rc и сдвигает коллектор на ΔV × Rc / Re в противоположную сторону. Значит, усиление равно −Rc/Re = −4,7. Симулятор измеряет 4,54: транзистор добавляет небольшое внутреннее сопротивление эмиттера около 26 мВ / Ie ≈ 29 Ом, и 4700 / 1029 = 4,57.

На экране осциллографа база (зелёный) колеблется на 0,4 В вокруг 1,5 В, а коллектор (красный) — на 1,8 В вокруг 4,8 В, причём его пики там, где у базы впадины.

Попробуйте: щёлкните правой кнопкой по генератору сигналов и увеличьте его амплитуду до 1 В. Коллектору потребовалось бы качаться на 9 В — больше, чем позволяет питание, поэтому вершина волны упрётся в 9 В, а низ — в насыщение: отсечка, звук перегруженного усилителя.

Открыть усилитель с общим эмиттером в Velxio

5. Термостат на компараторе с операционным усилителем

Термостат выше уставки: выход LM358 в высоком уровне, и красный светодиод, изображающий вентилятор, горит

Термостат, который включает вентилятор, когда становится тепло, на одном операционном усилителе LM358 и без кода.

Датчик. Сопротивление термистора NTC падает при нагреве (10 кОм при 25 °C, около 7,4 кОм при 32 °C). Модуль ставит его под фиксированный резистор 10 кОм, поэтому его выходное напряжение падает с температурой: 2,50 В при 25 °C, 2,12 В при 32 °C.

Уставка. Потенциометр — это второй делитель. Его движок стоит на 2,336 В — напряжение, которое термистор даёт при 28 °C. Вольтметр это показывает.

Компаратор. У операционного усилителя без обратной связи такое большое усиление, что его выход прижимается к одному из питающих напряжений в зависимости от того, какой вход выше. Уставка идёт на + вход, а термистор — на − вход: ниже 28 °C напряжение термистора выше, и выход равен 0 В; выше 28 °C оно ниже, и выход скачком поднимается примерно до 3,7 В, зажигая светодиод. При 27 °C светодиод выключен, при 29 °C — включён.

Почему 3,7 В, а не 5 В? LM358 не может довести свой выход до положительного питания; он останавливается примерно на 1,3 В ниже. Проект 6 упирается в тот же предел.

Настоящий термостат добавляет гистерезис, чтобы не щёлкать туда-сюда, пока температура колеблется у порога. Проект 7 делает это в коде.

Попробуйте: щёлкните правой кнопкой по термистору и измените его температуру, или щёлкните правой кнопкой по потенциометру и измените его положение (от 0 до 1023), чтобы сдвинуть уставку.

Открыть термостат на операционном усилителе в Velxio

6. Arduino: превращаем ШИМ в настоящее аналоговое напряжение

Arduino Uno с вывода 9, подающим сигнал на RC-фильтр и повторитель напряжения на LM358 обратно на A0, и монитор порта, сравнивающий ожидаемое и измеренное напряжения

У Arduino Uno нет ЦАП: analogWrite() выдаёт не напряжение, а ШИМ — прямоугольную волну 490 Гц, среднее значение которой задаётся скважностью. Светодиоду или мотору это безразлично, но многим схемам нужно настоящее, стабильное напряжение. Аналоговый фильтр его создаёт.

PWM 0    expected 0.00 V  measured 0.02 V
PWM 64   expected 1.25 V  measured 1.26 V
PWM 128  expected 2.51 V  measured 2.51 V
PWM 192  expected 3.76 V  measured 3.77 V
PWM 255  expected 5.00 V  measured 4.03 V

До 192 ЦАП точен до 10 мВ. На 255 он останавливается на 4,03 В: фильтр действительно доходит до 5 В, но LM358 с питанием 5 В не может так высоко поднять свой выход. Решение — операционный усилитель rail-to-rail, например MCP6002, или использование только того диапазона, который может выдать LM358.

Открыть ШИМ-ЦАП на Arduino в Velxio

7. ESP32: термометр, который включает вентилятор

ESP32 считывает термистор NTC на GPIO34 и включает вентилятор (зелёный светодиод) через MOSFET 2N7000, а монитор порта печатает 35.0 C fan ON

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

Считывание температуры. Выход модуля NTC идёт на GPIO34 — входной вывод АЦП ESP32. Скетч усредняет 16 измерений, вычисляет сопротивление термистора из делителя (R = 10 кОм × V / (3,3 В − V)) и переводит его в градусы по уравнению Бета из даташита термистора: 1/T = 1/T₀ + ln(R/R₀)/β, где R₀ = 10 кОм при T₀ = 25 °C и β = 3950. Монитор порта печатает 25,0 °C, когда термистор настроен на 25 °C, и 35,0 °C при 35 °C.

Коммутация нагрузки. Вывод GPIO может дать несколько миллиампер, но не сотни, нужные вентилятору. Вместо этого GPIO25 через резистор 100 Ом управляет затвором MOSFET 2N7000, а MOSFET соединяет вентилятор (здесь — зелёный светодиод) с землёй. При 35 °C сток находится на 0,06 В: MOSFET полностью открыт.

Гистерезис. Вентилятор включается при 30 °C и выключается только ниже 28 °C. Без этого зазора в 2 °C температура, колеблющаяся у порога, включала бы и выключала вентилятор каждую секунду.

Для настоящего вентилятора используйте MOSFET с логическим уровнем, рассчитанный на ток вентилятора (2N7000 подходит только для малых нагрузок), и диод параллельно вентилятору, чтобы поглотить всплеск напряжения двигателя при выключении.

Открыть термометр и вентилятор на ESP32 в Velxio

Что мы исправили, пока всё это собирали

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

Если вы соберёте аналоговую схему в Velxio и числа не сойдутся с формулой, напишите нам на GitHub. Именно так были найдены эти проблемы.


Поделиться:
David Montero

Автор

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

Похожие статьи


Предыдущая статья
Шесть карманных игр для ESP32 и XIAO ESP32-S3, в которые можно играть в браузере
Следующая статья
Семь хэллоуинских проектов, которые можно собрать и запустить в браузере