Датчик переменного тока ZMCT103C +доработка
- Цена: примерно 100 р включая доставку
- Перейти в магазин
Это гальванически изолированный датчик силы переменного тока от 10 мА до 5А. По сути трансформатор тока на плате с операционным усилителем, позволяющим регулировать напряжение на выходе модуля. Согласно спецификации на токовый трансформатор, гальваническая развязка обеспечивает безопасность от импульсных скачков напряжения амплитудой до 4.5 kV.

На выходе платы переменное напряжение, примерно повторяющее форму тока в первичной цепи. Данное устройство не является датчиком в общепринятом смысле, преобразующим входной параметр (в данном случае силу переменного тока) в постоянное выходное напряжение или постоянный ток некоторого диапазона (обычно от 4 до 20 мА). В общем это просто модуль гальванической развязки на основе токового трансформатора, плату которого по идее можно было заменить нагрузочным резистором на трансформатор тока, и делителем выходного напряжения.

Токовый трансформатор должен работать в режиме короткого замыкания вторичной обмотки. Тем самым он обеспечивает выходной ток, пропорциональный силе тока в первичной цепи. Если обмотку ТТ не замкнуть — на ней может развиться высокое напряжение холостого хода, и наступит пробой. На практике, применительно к данному трансформатору, вместо короткого замыкания допустимо нагрузить на резистор Rн сопротивлением в десятки или единицы Ом и мощностью 0.5 Вт, с которого снять выходное напряжение через более высокоомный регулируемый делитель.

Поэтому вопрос зачем тут операционник — остается открытым, если не считать фильтра от высокочастотных помех.
Для тестирования модуля применены генератор сигналов различной формы в качестве источника тока, и цифровой «true rms» амперметр для контроля силы переменного тока в первичной цепи. А также цифровой милливольтметр «true rms» и осциллограф на выходе платы. Генератор сигналов обеспечивает выходное напряжение до нескольких вольт RMS на нагрузке 50 Ом. И это напряжение было подобрано так, чтобы сила тока составила 50 мА.

Плата подключается тремя проводами: общий, питание, и выход. Напряжение питания платы 10V.

При токе в первичной цепи 50 мА, выходное напряжение модуля меняется подстроечным резистором от нескольких mV до 500 mV. Я выбрал соответствие 1mV / 1 мА, значит при этом токе на выходе платы примерно 50 mV.
Амплитудно-частотная характеристика модуля более-менее равномерна в диапазоне частот от 100 до 1500 Гц. Тем не менее его можно использовть и за пределами этого диапазона, в том числе для сетевого напряжения 50 Гц. Но только если измерение тока производится на фиксированной частоте. И откалибровать конкретно для этой частоты.
График АЧХ в области низких частот:

График АЧХ в области высоких частот:

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

Принципиальная электрическая схема модуля. Он представляет собой двухкаскадный усилитель на ОУ LM358 с 10-кратными коэффициентами усиления каскадов. Kус не регулируется, но между каскадами регулируемый делитель напряжения на подстроечном резисторе RV. Конденсаторы C2 и C5 образуют фильтры НЧ, обрезая слишком высокие частоты. Питание однополярное, средняя точка сформирована искусственно делителями напряжения на резисторах.

Доработка модуля ZMCT-103C
Цель — сделать полноценный датчик, выдающий постоянное напряжение, пропорциональное силе переменного тока в первичной цепи.
Для этого заменим второй усилитель на активный выпрямитель на ОУ по следующей схеме:

Схема изменится следующим образом. Вместо конденсатора C5 ставим резистор 10 кОм. Вместо резистора R9 и конденсатора C6 ставим диоды VD. Резистор R11 удаляем.

На плате разрезаем дорожку между конденсаторами C5 и C6. И ставим одну проводную перемычку между освободившимся выводом C5, и выходом модуля.

Должно получиться примерно так:

Резистор R5, определяющий Kус первого, и теперь единственного каскада усиления, временно заменил на 150 кОм для увеличения Кус до 15. Это для работы на малых токах менее 1 ампера.
Теперь на выходе модуля постоянное напряжение (точнее пульсирующее), пропорциональное измеряемому току. Его можно подать например на стрелочный прибор. Или поставить интегрирующую цепочку, далее в микроконтроллер или цифровой вольтметр.
Тестируем на синусоидальном токе частотой 500 Гц.
Результаты калибровки на небольших токах. Вверху амперметр переменного тока в первичной цепи. Внизу милливольтметр постоянного напряжения на выходе платы.

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

На выходе платы переменное напряжение, примерно повторяющее форму тока в первичной цепи. Данное устройство не является датчиком в общепринятом смысле, преобразующим входной параметр (в данном случае силу переменного тока) в постоянное выходное напряжение или постоянный ток некоторого диапазона (обычно от 4 до 20 мА). В общем это просто модуль гальванической развязки на основе токового трансформатора, плату которого по идее можно было заменить нагрузочным резистором на трансформатор тока, и делителем выходного напряжения.

Токовый трансформатор должен работать в режиме короткого замыкания вторичной обмотки. Тем самым он обеспечивает выходной ток, пропорциональный силе тока в первичной цепи. Если обмотку ТТ не замкнуть — на ней может развиться высокое напряжение холостого хода, и наступит пробой. На практике, применительно к данному трансформатору, вместо короткого замыкания допустимо нагрузить на резистор Rн сопротивлением в десятки или единицы Ом и мощностью 0.5 Вт, с которого снять выходное напряжение через более высокоомный регулируемый делитель.

Поэтому вопрос зачем тут операционник — остается открытым, если не считать фильтра от высокочастотных помех.
Для тестирования модуля применены генератор сигналов различной формы в качестве источника тока, и цифровой «true rms» амперметр для контроля силы переменного тока в первичной цепи. А также цифровой милливольтметр «true rms» и осциллограф на выходе платы. Генератор сигналов обеспечивает выходное напряжение до нескольких вольт RMS на нагрузке 50 Ом. И это напряжение было подобрано так, чтобы сила тока составила 50 мА.

Плата подключается тремя проводами: общий, питание, и выход. Напряжение питания платы 10V.

При токе в первичной цепи 50 мА, выходное напряжение модуля меняется подстроечным резистором от нескольких mV до 500 mV. Я выбрал соответствие 1mV / 1 мА, значит при этом токе на выходе платы примерно 50 mV.
Амплитудно-частотная характеристика модуля более-менее равномерна в диапазоне частот от 100 до 1500 Гц. Тем не менее его можно использовть и за пределами этого диапазона, в том числе для сетевого напряжения 50 Гц. Но только если измерение тока производится на фиксированной частоте. И откалибровать конкретно для этой частоты.
График АЧХ в области низких частот:

График АЧХ в области высоких частот:

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

Принципиальная электрическая схема модуля. Он представляет собой двухкаскадный усилитель на ОУ LM358 с 10-кратными коэффициентами усиления каскадов. Kус не регулируется, но между каскадами регулируемый делитель напряжения на подстроечном резисторе RV. Конденсаторы C2 и C5 образуют фильтры НЧ, обрезая слишком высокие частоты. Питание однополярное, средняя точка сформирована искусственно делителями напряжения на резисторах.

Доработка модуля ZMCT-103C
Цель — сделать полноценный датчик, выдающий постоянное напряжение, пропорциональное силе переменного тока в первичной цепи.
Для этого заменим второй усилитель на активный выпрямитель на ОУ по следующей схеме:

Схема изменится следующим образом. Вместо конденсатора C5 ставим резистор 10 кОм. Вместо резистора R9 и конденсатора C6 ставим диоды VD. Резистор R11 удаляем.

На плате разрезаем дорожку между конденсаторами C5 и C6. И ставим одну проводную перемычку между освободившимся выводом C5, и выходом модуля.

Должно получиться примерно так:

Резистор R5, определяющий Kус первого, и теперь единственного каскада усиления, временно заменил на 150 кОм для увеличения Кус до 15. Это для работы на малых токах менее 1 ампера.
Теперь на выходе модуля постоянное напряжение (точнее пульсирующее), пропорциональное измеряемому току. Его можно подать например на стрелочный прибор. Или поставить интегрирующую цепочку, далее в микроконтроллер или цифровой вольтметр.
Тестируем на синусоидальном токе частотой 500 Гц.
Результаты калибровки на небольших токах. Вверху амперметр переменного тока в первичной цепи. Внизу милливольтметр постоянного напряжения на выходе платы.

Как видим, выходное напряжение пропорционально силе переменного тока в первичной цепи.
Самые обсуждаемые обзоры
| +37 |
794
31
|
| +89 |
3408
43
|
Я исп. такую схему подключения трансформатора тока к MK
Надо было тогда в розетку датчик втыкать, а не хьюлет-паккардом хвастаться.
Сейчас тема электросетей вообще не раскрыта в обзоре.
Тиристоры конечно недопустимы, от них более жесткие помехи.
То есть 220В при двух полупериодах, а диодом мы одну отсекаем.
Даже если через энергию считать, то так же выходит, полпериода нагревается, полпериода нет. Где я обсчитался?
Объяснение очень примитивное, зато понятное
Лампочки автомобильные на 12В например кое-как светят красным при 2-3В напряжения, сопротивление спирали уменьшается и немного сами компенсируют изменение напряжения. Удобно при создании нагрузки для батареек.
я не о том подумал.
Лампочки дефицитны и часто перегорают. Главное же: вечные скандалы «кто должен менять лампочку?!» и «опять лампочу скоммуниздили, ввернули назад уже горелую!». Доходило до рукоприкладства и даже клеймили «свои» лампочки как коров.
Диоды бесплатны (тащили с заводов-газет-пароходов) и заметно продлевают срок службы лампочки. А полный свет в подъезде и не нужен.
Гости в восторге. Говорят, «бункер Гитлера».
Решение с двумя диодами оказалось лучше. Ну, а мерцание — лишь добавило «вау!»-эффекта посетителей.
Любое упоминание некоего «ИИ» давно стало ярким маркером человека, не способного мыслить самостоятельно.
Ну и оценка дрейфа нуля во времени.
А насчет частотных замеров — датчик имеет рабочий диапазон в зависимости от электронной схемы (и фантазий продавца) 45-55Hz или 20Hz~400Hz. У производителя внятного указания нет. Но в любом случае такие датчики являются низкочастотными и замеры на высоких частотах (килогерцы и выше) смысла не имеют.
… ну, или использовать как часть другой конструкции, где входной резистор собран из 5-6 последовательно соединенных. Но на имеющейся плате на это нет места.
На входе 0.3 мА действующего тока, на выходе вероятно то же, на резисторе 100 Ом ток превращается в напряжение 30 мВ и далее усиливается. Странно что не поставили трансформатор 1:100 например. Но так дешевле наверное, условно по 10 витков на обмотке и всё.
А когда резистор пробьет (не если, а именно когда), трансформатор полыхнет ясным пламенем. И мы не знаем, на самом деле, двух вещей: а) действительно ли межобмоточная изоляция настолько хороша, что способна выдержать температуры при которых испаряется медь, и б) действительно ли пластик корпуса этого трансформатора — не горючий.
Проверять на себе — как-то неуютно. Ну, мне так кажется.
поменял входной на 5 штук 1206 суммарно 155 кОм — на выходе чистый синус, что и требовалось получить.
а) оно рассчитано на самый распространённый случай — 50-60 герц, остальное никого не интересовало
б) в соответствующей ардуинской библиотеке запросто может уже быть компенсация нелинейности
в) а может и не быть, потому что в таком применении никому великая точность не интересна
г) в целом почти гарантированный ответ на любой вопрос «почему так сделано» будет «чтобы заработало, если тупо прицепить к АЦП ардуины».
А то я так и не понял, как его к обычной старой ATMega подключать и отслеживать это самое переменное напряжение. И бросил. Так и валяется у меня.
Теперь, может быть, докончу этот проект.
А до 16А им измерить можно?
После соответствующей доработки.
А вот насчёт большего тока — присоединяюсь к вопросу. И да, он так-то до 10 ампер, но…
В этих всех либах ВЕЗДЕ мутные Delay() и delay_ms(), которые никогда НЕ работают.
Мне они НЕ даются, и я на них постоянно туплю. С тех времён. Уже дошёл до выученной беспомощности.
Потому что когда берёшь просто пример либы и запускаешь его отдельно — всё идеально работает. А как только пытаешься сложить примеры:
* Опроса по USART
* Опроса кнопок
* Вывода на HD44780
* Расширению IO на сдвиговых регистрах
* Опроса 1-Wire через ногодрыганье
… то всё завиает, тупит, рушится и не работает.
Поэтому я, скорее всего, опять поинтересуюсь и брошу. И буду ныть, да. Потому что внушил себе, что НЕ УМЕЮ. И так оно и получается.
UPD. Я плотно тусил с DI HALT и даже пробовал его RTOS — но и там не понял, как и что делать.
Из того, что научился — это по прерываниям в EEPROM писать и по прерываниям DMX-сигнал через USART принимать.
Пишу я на старой AtMega8, у меня под неё AVR Dragon есть.
Ардуино по мне ещё мутнее. С этими delay и библиотеками.
UPD2. Последней попыткой было купить датчик молний (тут на Муське был обзор) и прикрутить его к Ардуине (купил). И прям вот библиотеку использовать. Не заработало вообще прям.
Те же самые, совершенно стандартные в школьных задачках библиотечные функции делей, делей_мс совершенно неприменимы в реальных проектах, это просто маркер школоты.
Да, если некоторая библиотека как-то выдаёт пристойный результат — пользуйтесь на здоровье. Но не забывайте, что вся экосистема ардуино — всего лишь школьная парта для отработки базовых понятий программирования МК.
Вон, на 4ПДА вообще эпичнейший тред вокруг проекта «Ё-радио». И, ничего — люди превозмогают. Заодно учатся программировать.
Просто растите, развивайтесь, пишите свои программы в «чистых» средах разработчиков. на том языке, который вам лично близок и ясен.
Сами-то платки «ардуиновского формата» — шикарные полуфабрикаты для конструирования совершенно любой автоматики. Просто, надо не зацикливаться на детских примерах и школьных готовых библиотеках.
Остальное примерно так же — если не бороться с мейнстримом, то всё будет легко и просто. Ну да, будет, допустим, не EEPROM, а просто 4 мегабайта флеша с wear leveling где-то в недрах Espressif SDK… с точки зрения использования — начхать.
Но иногда нужен мелкий однокорпусный клоп. С мощными лапами И чёткие тайминги.
И вот тут без вдумчивого программирования на ассемблере уже никуда.
Задачи бывают разные…
Но вот бывают случаи… И в необъятном семействе STM долго выбираешь по периферии, и к редким «аналогам» приглядываешься. а порой тупо достаёшь из ящика мелкую ATtiny — и ваших-нет, задача решена с минимумом обвязки.
Но: это ведь уже думать надо…
А так — ну да. Я питон сильно недолюбливаю, но то уже стереотипы жертвы Перла, а объективно — для задачи выгодно выбирать самый высокий уровень, на котором её можно разумно сделать.
А уж куплена микроконтроллерная заготовка в магазине Юный техник или в Чип и Дип; стоит на этой плате AVR или STM — вообще дело десятое и не повод для детсадовских обзывалок.
P.S. Кстати: Arduino вовсе не конкретное семейство микроконтроллеров AVR. Это давно экосреда, школа микроконтроллерному обучению. Ардуинки сегодня повсеместно клепают на чипах STM, ESP и их многочисленных китайских клонах. Общим остаётся только своеобразная среда разработки, основанная на С++, но со своим термитником своеобразных и повально глючных библиотек.
Остаётся либо завистливо вздыхать либо пользоваться готовыми образцами и парадигмами, поставляемыми со средой разработки. Далеко не всегда безупречными и в любом случае не оптимальными.
Фактически, полагаясь на качество имеющихся библиотек и шаблонов (паттернов программирования), всё равно загоняем себя в угол ардуино-решений. Просто на более высоком уровне сложности.
Зато появились любопытные PIC-подобные чипы с занятной периферией. Например, четырьмя независимыми 12-bit ADC. Или другими забавностями.
Прогресс не стоит на месте. Но это не повод забывать простых, надёжных старичков.
Но, честно говоря, при всём при этом первое, что я сделал бы, если нужен результат — это взял бы что-то современное — esp, stm, что угодно — чтобы не бояться за каждый байт на той атмеге и вообще соскочить на более высокий уровень, а прерывания пусть рантайм инициализирует
Ну а так, delay — ересь устаревшая. Писать надо код по типу ртос, чтобы выполнение кода не блокировало прерывания.
не говоря уж, что низкоуровневый код и esp это вообще слабосочетаемое.
А проблема delay в том, что оно блокирует параллельный код (в том числе работу с шинами). В случае esp32 многоядерность позволяет вешать непрерывные задачи на одно ядро, а прерывающиеся на второе (не в случае c3, конечно, там в модельном ряду ногу сломишь).
Начиная с того, что «Ардуино» вовсе не семейство микроконтроллеров.
И кончая тем, что никакое вкорячивание RTOS никак не решает конкретную задачу отслеживания таймингов.
Ну, а призыв «купи новую, они нынче дешёвые» вообще за пределами обсуждения тонкостей и приёмов программирования.
Это не вкорячивать ртос. Это писать функции, которые не блокируют выполнение программы. В отличие от delay().
Я уже второй раз объясняю, что человек спрашивал как заставить его прибор работать, а не как «написать код правильно».
Я как раз не умею писать с Delay и поэтому НЕ пишу.
Но 99% всех примеров с Delay. И их проблема в том, что они ОТДЕЛЬНО работают. Но когда собираешь их всех в главный цикл — всё рушится и виснет.
И не надо мне про STM32. У меня лежит ST-Link и BluePill. Но с чего начать. Как сделать 100 таймеров и вызывать их в программе — я НЕ знаю. Опять же я могу помигать идиотским светодиодиком. И на этом всё заканчивается.
Потому что тут ещё и ужасные 3.3 вольта. И как к ним подключить HD44780 — я не знаю.
А ещё я в старом проекте подключил HD44780 через сдвиговый регистрв в 8битном формате. А все библиотеки МЕНЮ (каким чёртом образом оно вообще относится к экрану?!!) хотят подключение по SPI или 4 старшим битам напрямую.
Там о том, как 99% всех библиотек содержат Delay.
О том, как множество примеров через Delay мигают светодиодиком, а когда ты хочешь отсылать данные на HD44780 и в USART — виснут, потому что Delay(500) тупо вешает все остальные задачи.
О том, как я пытался запустить пример с сенсором удара молний, и советчики предлагали мне купить под него целую измерительно-паяльную лабораторию, чтобы разобраться.
О том, как я пытался понять STM32. И наткнулся на то, что одни топят за HAL, другие против него. На то, что в IAR я пытался сделать как на ATmega — записать что-то в регистры процессора для настройки USART, и IAR этих названий регистров не увидел, хотя в PDF на процессор они есть.
О том, как примеры под STM32 сделаны то на Cube, то на IAR, то на Keil — и ты не знаешь, с чего начать.
А МНЕ ПРОСТО НАДО РЕШИТЬ ЗАДАЧУ.
Я щас готов дойти до того, чтобы брать ОВЕНские ПР200 и ПР205 и делать их «плоскими».
Ну, там платы на разъёмах собраны стопочкой. Вот удлинить провода от разъёмов и расположить эти паты плоско в длину. А дисплей и кнопки вынести на переднюю панель прибора.
Потому что в ПЛК и ПРках я ПРОСТО СТАВЛЮ ТАЙМЕР и он РАБОТАЕТ. И не блокирует другие задачи.
За ДВАДЦАТЬ ЛЕТ Я НЕ СМОГ ПОНЯТЬ, почему в ПЛК я могу сделать много таймеров, а в МК их две или пять штук и как их использовать.
При этом написать конечный автомат я могу. Логику работы — могу.
Но вот сделать так, чтобы всё работало между собой и по таймерам (типа обмена с 74HC595 или как его там: выставили данные, подождали, выставили CLK и так далее) — НЕ МОГУ.
Которая великолепна для обучения АЗАМ программирования. Школьная парта.
Но совершенно не рассчитана на практическое применение в готовых устройствах.
Тем не менее, при наличии некоторой упоротости, можно очень неплохо программировать в среде Arduino IDE — как используя экосреду Wired, так и на чистом C (и даже с применением ассемблера).
Что называется: «жить захочешь — не так раскорячишься». :-)
Ваш великолепный проект — яркая тому иллюстрация.
Молодец!
1. Я НЕ программирую в Arduino. Я программирую в AVR Studio на ATMega 8.
2. «при наличии некоторой упоротости, можно очень неплохо программировать» — чему меня это может научить? Я крайне рад, что у тебя она есть. Но 20 лет моей тупости (благодаря ТАКИМ коментариям) убивают самооценку. И ничему не учат.
3. «жить захочешь — не так раскорячишься» — тоже ничем не учит.
Зашёл на Ваш сайт — о, да, это высокомерное хамство мы уже раньше встречали. Перекрестились и больше не заглядывали.
Но это не значит, что их нельзя «отобрать у ребёнка» и задействовать для своих нужд. Просто нужно понимать, какие стандартные функции после этого не должен будет вызывать свой собственный код и код используемых библиотек.
Но если таймеров программе нужно очень много, то достаточно задействовать один аппаратный и с его помощью организовать любое нужное количество программных.
Вон, в компьютерах семейства IBM PC апаратный таймер всего один, и ничего, живут же люди, программные на него десятками и сотнями вешают (даже не подозревая, что «цари-то не настоящие»).
Почитайте документацию на процессор (разделы «Interrupts» и Timer/Counter") и, например, статьи arduino.ru/Tutorial/Arduino_Interrupts, arduino.ru/Tutorial/Arduino_Interrupts_part2, arduino.ru/Tutorial/Arduino_Interrupts_part3, habr.com/ru/articles/453276/
(Поиск по словам Arduino и timer огромное число ссылок выдаёт, в том числе и на готовые библиотеки).
У меня Atmega 8!!!
2. Я НЕ понимаю никаких аналогий. Зачем мне отбирать у детей? Зачем мне значит про ненастоящих царей.
Вот ТЫ — понимаешь. И поэтому используешь метафоры, которые мне со стороны кажутся издёвкой.
3. Ещё раз: Я НЕ ПРОГРАММИРУЮ НА АРДУИНЕ!!!
4. Готовые библиотеки мееня путают. Они НЕ делают то, что надо МНЕ. Я подключил дисплей HD44780 через сдвиговые регистры. Где такая библиотека, которая поможет мне под уже разведённую плату?!
5. КАК КОНКРЕТНО ИЗ ОДНОГО ТАЙМЕРА СДЕЛАТЬ СТО?!
КОНКРЕТНО. КАК? Без Ардуино.
Как сделать так, чтобы работал обмен к примеру со сдвиговым регистром без Delay():
* Выставили данные
* Подождали xx ms
* Выставили CLK
* Подождали yy ms
… и так до бесконечности.
Здесь как минимум надо ДВА таймера для разных времён выдержки.
Так же с обновлением LCD, сканированием кнопок и тому подобное. Мне нужны сотни таймеров, которые я смогу запускать и тормозить.
UPD. И ЗАЧЕМ мне читать про ПРЕРЫВАНИЯ, если я спрашиваю ПРО ТАЙМЕРЫ?! И то, как из одного-двух сделать сто?!
Лучше читани-ка пост мой по ссылке: cs-cs.net/electronika-mikrokontrollery-bespomoshnost
Там я описал ВСЕ проблемы, с которыми столкнулся.
Я к тому, что я умею работать по прерываниям с USART, EEPROM — но к таймерам это НЕ относится.
И к тому, что уже лет 15 назад я понимал что «они чтобы сделать диммер ламп берут какой-то таймер и по его прерыванию что-то делают».
Я даже написал это самый диммер. Но на один канал, потому что дальше кончились таймеры.
Я тоже не люблю использовать чужие библиотеки. Но если человек программировать не умеет и учиться особо не желает, то он быстрее найдёт подходящую библиотеку, чем напишет свой нормально работающий код.
Для меня, программирующего что угодно ещё со времён, когда персональных компьютеров вообще не существовало, это задача элементарная. И объяснить могу без труда. Но до того, как это начну, хотелось бы узнать уровень подготовленности собеседника. Вы знаете, что такое прерывания? Умеете работать со списками (хотя бы однонаправленными)?
Здесь, как раз, нужен только один таймер:
* Выставили данные
* «Зарядили» таймер на xx ms и задали для него первую функцию-обработчик, выставляющую CLK.
* В функции-обработчике прописали «заряжание» таймера на yy ms и задавание для него следующего обработчика.
… и так до бесконечности.
Да не проблема. Важно только, чтобы производительности процессора хватало на то, чтобы успевать обрабатывать события быстрее, чем поступают новые.
Потому, что единственное, что делает таймер после того, как его запустили, — по истечении заданного времени вызывает определённое прерывание процессора.
:-)
Аппаратные кончились. Но даже у современных PC аппаратный таймер всего один. Но не одноразовый, а периодический (дёргающий своё прерывание много раз в секунду).
И все, кому в программах нужно много разных таймеров, просто в обработчике его прерывания работают со списком программных «таймеров».
Ему всё думается, что если при программировании ПЛК он на экране рисует четыре прямоугольника класса «таймер», пронумерованных соответственно, то в потрохах ПЛК действительно будут работать три независимых цепочки логических элементов.
У него нет ни малейшего понимания о процессорах, архитектуре операционных систем, принципах построения многозадачных приложений, принципах построения систем с гарантированной доступностью или с гарантированным временем отклика…
Но это чудо в перьях мнит себя Великим Шаманом (загляните на его сайт — только припасите бумажный пакетик). Богом громов и молний, вылетающих из собранных его лапками бытовых распредщитов на 220 В.
И, как все сумасшедшие, крайне болезненно реагирует даже не на мягчайшую критику — на малейшие признаки сомнения в непререкаемости его Авторитетного Крайнего мнения по любым вопросам — от вождения городского такси до управления государством.
Думаю, и в противоположную сторону оно тоже так.
Но для контроля тока 50 Гц — вполне себе решение. Главное — понимать, что творишь и аккуратно к этому относиться.
Так-то, трансформаторы этой серии по номиналам тока отличаются только коэффициентом трансформации (то есть, количеством витков обмотки). Хуже того: я вообще не уверен, что у датчиков «на 5 А» и «на 20 А» обмотки выполнены проводами разных калибров. Есть у меня подозрения…
а зачем, собственно, разными?
Опять же, по феншую, нагружать токовый трансформатор принято контрольным сопротивлением, омически равным самой обмотке.
То есть, между обмотками измерительных трасформаторов 1:100 и 1:1000 должна быть вполне очевидная разница.
На практике же совершенно уверен, что и обмотки мотаются одним проводом, просто с раным количеством витков. И нагрузочный резистор можно подбирать по своему усмотрению — лишь бы обмотку не перегрузить, а уж на тонкости линейности и частотных характеристик никто просто не смотрит.
Опять же: «ардуиновское применение», клиент и так доволен хоть какому-то отклику.
В общем: получив горстку ZT103, можно распоряжаться ими по своему усмотрению, не вижу в этом ни малейшей крамолы.
Если такая нужда возникнет — строим график «входной ток — напряжение» и смотрим на линейность. Если ошибка устраивает — используем. Если нет — ищем другой датчик.
Есть и другой вариант: шунтируем датчик шунтом с сопротивлением равным сопротивлению датчика. Что-бы через датчик шло 1/2 тока.
Провода самого электромонтажника-самоделкина.
Превышение токовой (или потенциальной) нагрузке на вторичной (измерительной) нагрузке решается тупо подбором номинала балластного (измерительного) резистора.
И всё. В бытовом применении вообще никаких проблем нет. Выбираем из катушек семейства ZT10х любые, подходядящие по номинальному «коэффициенту трансформации» и диаметру проходного отверстия.
Там насыщение не грозит даже магнитопроводу из буковой ножки от венского стула.
Калибровать именно на той частоте и форме сигнала, с которой будете работать (обычно 50 Гц синус из сети), потому что модуль заметно частотозависим и автор сам это отмечает.
Обязательно иметь эталонный амперметр (true RMS) в первичной цепи и вольтметр (желательно тоже true RMS либо DC после выпрямителя) на выходе платы.
Делать несколько точек, а не одну: например 0.5 А, 1 А, 2 А, 5 А, чтобы увидеть реальную линейность, а не только совпадение в одной точке.
Простейший пример: прогоняете через первичку 0.5/1/2/5 А, измеряете выход (после вашей доработки/фильтра), строите табличку, по которой дальше в МК считаете ток.
Что бы я добавил к модификации
После активного выпрямителя обязательно ставил бы интегратор (RC‑фильтр) с подобранной постоянной времени, чтобы получить более стабильное DC‑напряжение, если не нужно видеть форму полупериодов.
Для работы с МК я бы вообще подумал: или о прямом съёме переменного сигнала с трансформатора/усилителя на АЦП (с виртуальной серединой, как в схеме из комментов), или о выпрямлении в МК (оцифровка выборками и расчёт RMS в коде), чтобы не терять информацию о несимметрии и искажениях.
В любом случае закладывал бы программный коэффициент калибровки и смещение нуля, чтобы можно было компенсировать реальный Kус платы и дрейф нуля без перепайки.
Практическая пошаговая схема калибровки
Собираете тестовый стенд: источник тока/нагрузка (лампа, ТЭН, автотрансформатор и т.п.) + поверенный амперметр в разрыв первички.
Подаёте 50 Гц, по очереди выставляете несколько значений тока и записываете: I_эталон, U_выход.
Строите таблицу или график U(I):
если зависимость почти линейная – считаете K (В/А) по МНК или просто по средней,
если заметно «заваливается» на малых токах – используете кусочно‑линейную аппроксимацию или калибровочную таблицу в прошивке.
Проверяете нулевой дрейф: при отсутствии тока смотрите, что на выходе, и вычитаете это как оффсет в коде.