Pull to refresh

Comments 66

Да, действительно. Исправляю.
Вопрос оригинальный, насчёт «зачем делать аппаратно то, что можно сделать программно?». Спросите, например, в Intel, зачем они делают навороченные процессоры, когда всё это можно сделать программно.

Всё для того же, ускорить процесс, уменьшить объём памяти под программу, уменьшить потребление энергии. У меня эта штука сделана на PIC12F1840.
Программная хитрость состоит в том, чтобы все процессы деления, по возможности, делать до процессов умножения или возведения в степень, чтобы промежуточный результат операций не превышал 65535 (или 32768 для действий со знаком).

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

А вот это самое интересное, вообще-то…
Know-how причём под NDS.
тогда это IMHO не tutorial
Т.е. типа «я пиарюсь»? :-)

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

Я постеснялся назвать это по-другому. Возможно, зря.

Однако, хороший лектор оставляет кое-что для самостоятельной проработки. :-)
Меня несколько удивил выбор частоты дискретизации. Она должна быть привязана не к периоду сигнала, а к наивысшей составляющей исследуемого сигнала.
Наивысшая составляющая, если её можно так назвать, априори неизвестна. Известен только приблизительно средний уровень помех.
Если неизвестна наивысшая составляющая, что вы должны её сами установить. Частота среза аналогового тракта должна быть минимум в два раза ниже частоты дискретизации — теорему Котельникова не обманешь (ну нам, во всяком случае, пока не удалось обмануть, хотя очень хотелось =)).
Ну и как уровень помех нам дает предположения о спектре сигнала и его высшей частоте. Любой прибор, измеряющий RMS будет иметь ограничения по учитываемой частоте и надо просто его указать в характеристиках. Но связывать частоту оцифровки с периодом произвольного сигнала — это выше моего понимания.

А у него, судя по всему, не произвольный сигнал, а промышленная частота, которая, как известно, является самым точным параметром в электро энергетике :)
А вот спектр искажений — другой разговор. И его надо ограничивать соответственно частоте дискретизации.

Насчёт полопоры. На неинвертирующий вход DA1 подана половина «опоры», на другой вход подано переменное напряжение, максимум которого не превышает этой пол-опоры. С помощью цепочки R3C2 на опорный вход компаратора подаётся только половина опоры с учётом смещения и прочих факторов, без переменной составляющей. Реальный урочень постоянной составляющей (точнее, крайне низкочастотный сигнал в пределах долей Герц + постоянная составляющая) отдельно измеряем на отдельном АЦП контроллера.
А по переходу через «0» измеряем, чтобы за один квазипериод оценить уровень (ср. кв. зн.). Иначе точности не будет.
Это всё же tutorial, а не настоящая техническая статья со всеми подробностями. Уж извините. Смотрите комментарий к предыдущему посту.
А т.н. формула Симпсона — см. здесь. Она даёт очень приличную точность для относительно гладких кривых. Если напряжение сильно зашумлено, то лучше не использовать.
Википедию я уже и сам посмотрел, но там очень скудно с пояснениями. Интересна оценка — эта формула выбрана просто что бы не вычислять корень, или увеличение точности существенно?
Корень вычисляется. Всё, что описано, это, в основном, эмпирические ходы, а не строгий математический анализ. Но во времена оно я обсчитывал численно интегралы, были варианты, когда для сравнения использовались аналитические варжения. Для некоторых вариантов кривых ошибок вообще не было в пределах точности компьютера.
Ну и по поводу периода — множество сигналов переходят через 0 за период множество раз — типичный пример сигналы АОН. Поэтому определять период через переходы — странновато, тут нужен настоящий спектральный анализ и выбор первой гармоники.
Написано же, что «квазисинусоидальный сигнал». Какое такое множество сигналов? Шум, гармоники? Их доля сравнительно невелика. Результат же получился сносным.
Статья интересная, но у меня вызвала много вопросов.
Ну например самое первое, что всплыло в уме в процессе прочтения: почему 8 бит? лет 5 назад было актуально, более того, лет 7 назад я сам занимался извращениями с математикой на асме (в том числе, для реализации умножения 16x16=32). Но сейчас начинать новый дизайн и при этом заниматься ужиманием целочисленной арифметики странно — можно же за те же деньги взять 32 бита и не париться.
Тема схемотехники слабо раскрыта — не показан формирователь пол-опоры и способ её подмешивания сомнительный, а это очень важно, пол-опоры очень сильно влияет на точность вычисления, наелись в своё время.
Но это ладно, интереснее про математику. Было бы неплохо описать суть формулы Симпсона и привести сравнение по точности с методом «в лоб».
И я не понял, зачем детектор нуля. Ну про измерение частоты-то понятно (хотя опять таки — тут самое интересное, это алгоритм измерения и передискретизации), но зачем цифровать именно от пересечения нуля?
Насчёт 8-битных. Тут, в основном, вопрос цены и потребления.
В том числе и батарейный вариант возможен.
Вопрос энергопотребления вообще наиважнейший. Если датчик один, то не очень важно, если сотня, то уже существенно.
что за задача такая — сотня датчиков на одном питании? Или сама задача — тоже под NDA?
На самом деле — это измерение тока. Датчиков тока в иных местах может быть очень много. Просто задача измеения тока плавно переходит в измерение пропорционального напряжения.
Так сама задача — тоже под NDA или её можно рассказать? Зачем нужно столько датчиков? Нам вот одного двухканального осциллографа хватает. Что у вас за установка такая? Корродирующий железнодорожный мост? Тк там вроде токи на много порядков слабее…

Мне Очень понравилась Ваша первая ссылка :) Они хорошую траву курили.
Что касается потребления, про 120мА просто без комментариев, не знаю откуда взялось. Очень сомневаюсь что там можно столько получить, даже включив весь фарш на полную. Разве что закоротив пару ножек :)).
А вот с PIC интересно. Потребление контроллера складывается из статического и динамического: I = Is + Id*F, где F рабочая частота камня. Это, разумеется, очень грубая прикидка, не учитываюжая многих особенностей. Так вот, у ПИКа этого Is = 100мкА, Id = 30мкА/МГц. То есть на частоте 32МГц можно ожидать потребление порядка 1мА. Очень неплохой результат.


В качестве 32бит альтернативы я бы рекомендовал смотреть на EFM32ZG и STM32L0.

На самом деле в datasheet написано 4 мА при всех возможных факторах.

Посмотрел внимательнее даташит — действительно на высоких частотах потребление уже к 100мкА/МГц стремится — уже не так впечатляет :). Тот же EFM32ZG имеет 120-130 мкА/МГц, при этом вычислительная мощность очевидно гораздо выше, а цена такая же.

А чего тут знать? я дал ссылку на официальный datasheet, Значение называется «Total current into sum of all VDD power lines (source)» и находится на странице 44

Насчет цен — так на efind эти процессоры и по 46 рублей есть. Минимум так вообще — 60 центов.

А вам не кажется, что цена и ток связаны? То есть это просто выбраковка с пониженной частотой? Потому и корпус TSOP20.

Так это Абсолют Максимум Райтинг — то есть именно что ток, при котором оно ещё не сгорит, если нагрузить ножки.
А то, что нас интересует находится на 47й странице. Там 12мА на 24 МГц, то есть 500икА/МГц. Вполне нормальный показатель для не-low-power контроллеров.
Что до отбраковки — вполне возможно, st таким славится.

Вы правы. я все-таки программер, а не электронщик. Так что спутал.

Бывает. Просто "до 120ма супротив 30мка у PIC" смотрится впечатляюще — в 4000 раз :)
А на деле, если сравнивать сопоставимые характеристики (потребление на мегагерц на частоте 20-30МГц), получается разница "всего" раз в 5-6. То есть промахнулись на три порядка :)).

А если посчитать на мегабайт, то будет ещё лучше. Ибо 32бита — это в 4 раза больше, чем 8. :-)
О, а вот это вообще моя любимая тема? Сколько у вас получилось в активном режиме (при оцифровке периода) и в среднем (ну если за час, например, усреднить)?
Стоимость вашего ПИКа, если я правильно понял, рублей 60?

Да, кстати, как раз на тему ремарки про встроенные в контроллер опампы. Я как-то хотел использовать, но пришёл к выводу, что они мало что слабенькие, так ещё и потребление потребление системы увеличивали микроампер на 12. В нашем случае это категорически перевесило потенциальное сокращение количества корпусов и стоимости.
Встроенные ОУ была попытка использовать, но потом от них отказался. Не помню, почему конкретно, но что-то в них не понравилось. В данном примере используется встроенный компаратор. С ним проблем нет.
Оцифровка идёт по широковещательному запросу с головного контроллера. График оцифровки — штука переменная. Так что можно говорить только про ток в момент оцифровки.
Съём идёт за период, т.е. за 20 мс. Обсчёт идёт практически за 1 мс. При этом АЦП вырубаются сразу, как только сняты данные, и компаратор и периферия также.
Главный вклад в ток вносит, как ни странно, обмен по шине данных. Поскольку все датчики сидят на одной шине, то имеет место разделение по времени между ответами. Ожидание пропорционально кол-ву датчиков. Разумеется, можно и нужно вставлять в систему концентраторы. Но всё равно, если собирать, скажем с 9 датчиков, то последний будет сидеть в режиме задержки ответа в активном режиме 0.1(N-1)= 0.8 c.
Контроллер работает в данном случае на частоте 32 МГц. Ток потребления в активном режиме контроллера прядка 4 мА. Думаю, отсюда понятно, какое потребление получается.
График оцифровки — штука переменная. Так что можно говорить только про ток в момент оцифровки.

Ну работа контроллера в низкопотребляющем девайсе всегда штука переменная, по-этому имеет смысл говорить только об усреднённом (проинтегрированном) потреблении в каком-то режиме.
Ну например у меня девайс с непрерывной оцифровкой 4 точки на период двух каналов и выдачей в реалтайме в юарт на 9600 бод ел что-то прядка 24мкА. При этом в момент оцифровки, разумеется, потребление микроампер 400. Сейчас прикидывали потребление для нового устройства — уже 48 точек на период, но на другом камне, получается порядка 15-20мкА без математики и связи. При том, что сам АЦП там ест столько же, сколько в предыдущем камне.


А связь — rs485? Там основное потребление на сам драйвер уходит. Я бы предложил i2c — для физики много питания не нужно, а шину можно во сне слушать. Или просто на основе адреса вычислять таймслот и врубать драйвер незадолго до того, как тебя должен опросить мастер.

Связь по RS485 из-за того, что расстояние до устройства сбора может достигать в пределе до 100 м.Так что особо не разгуляешься. :-(

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

Беспроводка-то и используется в качестве запросного устройства, но у неё в импульсе до 100 мА плюс «протокольные мероприятия» на десяток секунд. Она используется, чтобы как раз не тащить эти самые 100 м. Но батарейка в ней катастрофически садится.

Это сложно, найти баланс между потреблением и удобством использования и монтажа…

100мА в импульсе? Это вы какой мощьностью свистите? Самые прожорливые трансиверы вроде не больше 25мА на 10мВт-ах хотят. А вообще, посмотрите в сторону BLE, сейчас много интересного предлагают.

Какой BLE? Тут речь идёт о километрах.

:))) до этого речь шла о сотне метров. Километры это да, уже сложнее.

Сотня — это гипотетическая длина кабеля от датчика до устройства сбора данных. А потом это всё ещё передать нужно в пакете.
А 100 метров чего? Поля или железобетона? Я бы в сторону LoRa посмотрел, она малопотребляющая.
Для обычной однофазки в розетке тоже считается, что там типа синусоида с положительной и отрицательной полуволнами. Но я вот не пойму, откуда там берется отрицательная полуволна, если ток поступает только по одной жиле, т.е. по идее обратного тока нет (ну за исключением из-за реактивной нагрузки)?
Даже не знаю, что ответить с ходу…

Если только так.
Физика разности потенциалов при сравнении с нулём такова, что ток может течь как в одну сторону, так и в противоположную. Отсюда появляются полуволны разной полярности.
Эм. Ток течет от точки, где электронов, больше в точку, где их меньше (типа упрощенно). Для того, чтобы ток тек от нуля, в нуле должно быть больше электронов по сравнению с фазой. Но откуда такому взяться?
В школе, насколько помню, синусоида была из-за того, что в генераторе постоянно менялась «полярность», т.е. фаза и ноль менялись местами (типа у генератора было 2 щетки).
Обычная ситуация — электроны откачали. Ноль — это не отсутствие электронов, это равенство заряда электронов и ядер. У атома железа 26 электронов, так что парочку из них вполне можно откачать.

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

А то тогда и при постоянном токе тоже был бы обратный ток при прекращении его подачи.

что-то типа того.
Ноль — это отсутствие свободных электронов

Коллега, я предлагаю вам доказать этот тезис. И за одно — придумать альтернативные теории электропроводности и теплопроводности металлов, которые хорошо объясняются моделью свободных электронов.
Да и если бы даже откуда-то взялась эта разность потенциалов в момент, когда должна быть отрицательная полуволна, то синусоиде по идее там неоткуда взяться, т.к. синусоиду создает генератор, т.е. только тогда, когда ток идет со стороны фазы.
Люблю флейм!

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

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

Если Ваш вопрос был тролллингом, то для меня слишком тонко.
Оказывается, это юмор такой. :-)
Про ноль немного ошибся. Свободные электроны то есть всегда, но нет где-либо скопления в одном месте их или отрицательно заряженных ионов.

P.S. Ошибся веткой. Данный ответ — дополнение к ответу Jef239.
Ну теперь доказывайте, что свободных электронов везде одинаково. То есть, что нету скопления или недостатка.

А ионной проводимости в металлах и вправду нет, это проверяли.
Стоп… Пожалуйста, расскажите, как выглядит "отрицательно заряженный ион". Вы точно из нашего мира? Не из антиматериии сделаны?
Не, они бывают, но у кислорода, фтора, кислотных останков… называются анионами… Но причем тут электрохимия кислот? Вроде же о металлах говорили…
Очень смелое предположение «Период измерения может быть любым» :) Период измерения должен быть кратен полупериоду сигнала. Иначе я проинтегрирую горб синусоиды и получу заведомо больше среднеквадратичное значение. Отсюда сразу вытекает проблема: для измерения по этому алгоритму нужно знать частоту сигнала. Сам алгоритм не позволяет ее определить. Т.е. он работает исключительно на напряжении фиксированной, заранее известной частоты (а также он будет работать на кратных этой частоте частотах). Или я ошибаюсь? :)
Я имел ввиду следующее.
Если устремлять период измерения к 0, то в пределе получим мгновенное значение в конкретной точке. И наоборот, устремляя T в бесконечность, получим усреднённейшее значение.
Да, безусловно, знание частоты упрощает задачу. А если она неизвестна вообще, или сигнал шумоподобный? Как тогда быть? Единственный выход — поднять тактовую частоту и увеличить выборку. И чем длиннее период измерения, тем ближе результат будет к среднеквадратичному.

Но вообще-то полосу сигнала нужно бы знать, и обрезать от посторонних сигналов вне пределов полезного сигнала.
Вообще-то, судя по всему, под буквой T понимается не период измерения, а период сигнала. Равный 1/f, где f — частота сигнала.
Полоса сигнала ничего Вам не даст. Вам нужна точная частота сигнала. Из которой Вы получите точный период сигнала T. За который будете суммировать значения и возводить их в квадрат.
Сильно не вникал, но, думаю, не ошибаюсь.
В принципе, исходя из формы синусоиды, можно обойтись четвертью периода синусоиды при измерении, т.к. остальные три четверти дадут тот же самый результат. Главное — начать измерения в нуле и закончить в максимуме. Также подойдёт половина периода, тут уже все равно, когда начинать и когда заканчивать. Но вообще-то, если источник нагружен импульсным потребителем, то он может искажать, скажем, верхнюю или нижнюю полуволну синусоиды. Это плохой приемник, да. Но кто сказал, что Вы должны мерить только хорошие напряжения? В идеале нужно интегрировать период сигнала, т.е. верхнюю и нижнюю полуволны синусоиды.
Что касается «стремления интервала времени к нулю» — представьте, что Вы интегрируете малый промежуток времени в окрестности перехода напряжения через нулевой уровень. Получится, что напряжение равно нулю. А это неправильно.
Если говорить про «увеличение интервала времени», то здесь определение напряжения будет либо очень грубым, либо очень долгим, даже по человеческим меркам, а не по меркам вычислительной техники. Кому нужен прибор с задержкой отклика порядка нескольких секунд?
Отсюда следствие: нужен алгоритм определения частоты сигнала. И уже после того, как частота определена, нужно вычислять действующее значение напряжения/тока.
Цитата: «представьте, что Вы интегрируете малый промежуток времени в окрестности перехода напряжения через нулевой уровень. Получится, что напряжение равно нулю. А это неправильно.»
Наблюдается терминологическая неразбериха.
Имеются 2 понятия: среднеквадратичное значение и действующее значение.

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

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

Именно это я и имел ввиду. Потому что может понадобится всё, что угодно. Например, при вычислении гармоник.

Что касается полного или неполного периода, то при измерении токов в цепях, в которых работают различные симисторные устройства или что-нибудь подобное крайне не рекомендую всякие «обрезания», потому что из-за работы переключателей ток может быть несимметричным в принципе. Хотя производители регуляторов борются за симметрию, но вот у меня имеется своё устройство, в котором от экз. к экз. симметричность регулировки меняется до 10% от полуволны к полуволне. Это из-за разброса параметров компонентов.
Более того, если проводить измерение произвольным образом, просто за известный период, но обязательно за полный, то привязка к «0» вообще не нужна. Всё вычисляется прекрасно согласно обобщённому понятию среднеквадратичного значения.
Пример действующего прибора:
twitter.com/Y1Bosco/status/1119226973295992832.
Sign up to leave a comment.

Articles