Комментарии 66
Всё для того же, ускорить процесс, уменьшить объём памяти под программу, уменьшить потребление энергии. У меня эта штука сделана на PIC12F1840.
Программная хитрость состоит в том, чтобы все процессы деления, по возможности, делать до процессов умножения или возведения в степень, чтобы промежуточный результат операций не превышал 65535 (или 32768 для действий со знаком).
Это типичная ошибка, приводящая к потере точности при работе с целочисленной арифметикой. Сначала умножения, потом деления, за редкими исключениями. Для промежуточного результата размер переменной временно расширяется, например, до 32 бит. Накладные расходы на это достаточно низкие, чтобы сильно влиять на производительность.
Конкретное программное решение выходит за рамки данной статьи.
А вот это самое интересное, вообще-то…
Всё же, пожалуй, соглашусь с предыдущим оратором — туториал по моему видению это инструкция, по которой можно что-то сделать. А у Вас по всем темам только куски, везде надо додумывать самостоятельно. )
А по переходу через «0» измеряем, чтобы за один квазипериод оценить уровень (ср. кв. зн.). Иначе точности не будет.
Это всё же tutorial, а не настоящая техническая статья со всеми подробностями. Уж извините. Смотрите комментарий к предыдущему посту.
А т.н. формула Симпсона — см. здесь. Она даёт очень приличную точность для относительно гладких кривых. Если напряжение сильно зашумлено, то лучше не использовать.
Ну например самое первое, что всплыло в уме в процессе прочтения: почему 8 бит? лет 5 назад было актуально, более того, лет 7 назад я сам занимался извращениями с математикой на асме (в том числе, для реализации умножения 16x16=32). Но сейчас начинать новый дизайн и при этом заниматься ужиманием целочисленной арифметики странно — можно же за те же деньги взять 32 бита и не париться.
Тема схемотехники слабо раскрыта — не показан формирователь пол-опоры и способ её подмешивания сомнительный, а это очень важно, пол-опоры очень сильно влияет на точность вычисления, наелись в своё время.
Но это ладно, интереснее про математику. Было бы неплохо описать суть формулы Симпсона и привести сравнение по точности с методом «в лоб».
И я не понял, зачем детектор нуля. Ну про измерение частоты-то понятно (хотя опять таки — тут самое интересное, это алгоритм измерения и передискретизации), но зачем цифровать именно от пересечения нуля?
Вопрос энергопотребления вообще наиважнейший. Если датчик один, то не очень важно, если сотня, то уже существенно.
Мне Очень понравилась Ваша первая ссылка :) Они хорошую траву курили.
Что касается потребления, про 120мА просто без комментариев, не знаю откуда взялось. Очень сомневаюсь что там можно столько получить, даже включив весь фарш на полную. Разве что закоротив пару ножек :)).
А вот с PIC интересно. Потребление контроллера складывается из статического и динамического: I = Is + Id*F, где F рабочая частота камня. Это, разумеется, очень грубая прикидка, не учитываюжая многих особенностей. Так вот, у ПИКа этого Is = 100мкА, Id = 30мкА/МГц. То есть на частоте 32МГц можно ожидать потребление порядка 1мА. Очень неплохой результат.
В качестве 32бит альтернативы я бы рекомендовал смотреть на EFM32ZG и STM32L0.
Насчет цен — так на efind эти процессоры и по 46 рублей есть. Минимум так вообще — 60 центов.
А вам не кажется, что цена и ток связаны? То есть это просто выбраковка с пониженной частотой? Потому и корпус TSOP20.
Так это Абсолют Максимум Райтинг — то есть именно что ток, при котором оно ещё не сгорит, если нагрузить ножки.
А то, что нас интересует находится на 47й странице. Там 12мА на 24 МГц, то есть 500икА/МГц. Вполне нормальный показатель для не-low-power контроллеров.
Что до отбраковки — вполне возможно, st таким славится.
Бывает. Просто "до 120ма супротив 30мка у PIC" смотрится впечатляюще — в 4000 раз :)
А на деле, если сравнивать сопоставимые характеристики (потребление на мегагерц на частоте 20-30МГц), получается разница "всего" раз в 5-6. То есть промахнулись на три порядка :)).
Стоимость вашего ПИКа, если я правильно понял, рублей 60?
Да, кстати, как раз на тему ремарки про встроенные в контроллер опампы. Я как-то хотел использовать, но пришёл к выводу, что они мало что слабенькие, так ещё и потребление потребление системы увеличивали микроампер на 12. В нашем случае это категорически перевесило потенциальное сокращение количества корпусов и стоимости.
Оцифровка идёт по широковещательному запросу с головного контроллера. График оцифровки — штука переменная. Так что можно говорить только про ток в момент оцифровки.
Съём идёт за период, т.е. за 20 мс. Обсчёт идёт практически за 1 мс. При этом АЦП вырубаются сразу, как только сняты данные, и компаратор и периферия также.
Главный вклад в ток вносит, как ни странно, обмен по шине данных. Поскольку все датчики сидят на одной шине, то имеет место разделение по времени между ответами. Ожидание пропорционально кол-ву датчиков. Разумеется, можно и нужно вставлять в систему концентраторы. Но всё равно, если собирать, скажем с 9 датчиков, то последний будет сидеть в режиме задержки ответа в активном режиме 0.1(N-1)= 0.8 c.
Контроллер работает в данном случае на частоте 32 МГц. Ток потребления в активном режиме контроллера прядка 4 мА. Думаю, отсюда понятно, какое потребление получается.
График оцифровки — штука переменная. Так что можно говорить только про ток в момент оцифровки.
Ну работа контроллера в низкопотребляющем девайсе всегда штука переменная, по-этому имеет смысл говорить только об усреднённом (проинтегрированном) потреблении в каком-то режиме.
Ну например у меня девайс с непрерывной оцифровкой 4 точки на период двух каналов и выдачей в реалтайме в юарт на 9600 бод ел что-то прядка 24мкА. При этом в момент оцифровки, разумеется, потребление микроампер 400. Сейчас прикидывали потребление для нового устройства — уже 48 точек на период, но на другом камне, получается порядка 15-20мкА без математики и связи. При том, что сам АЦП там ест столько же, сколько в предыдущем камне.
А связь — rs485? Там основное потребление на сам драйвер уходит. Я бы предложил i2c — для физики много питания не нужно, а шину можно во сне слушать. Или просто на основе адреса вычислять таймслот и врубать драйвер незадолго до того, как тебя должен опросить мастер.
Ну тогда да, таймслоты и гасить драйвер. Ну или посмотрите в сторону беспроводки, может получиться экономичнее. Но дороже.
Это сложно, найти баланс между потреблением и удобством использования и монтажа…
Если только так.
Физика разности потенциалов при сравнении с нулём такова, что ток может течь как в одну сторону, так и в противоположную. Отсюда появляются полуволны разной полярности.
В школе, насколько помню, синусоида была из-за того, что в генераторе постоянно менялась «полярность», т.е. фаза и ноль менялись местами (типа у генератора было 2 щетки).
То есть вы зря думаете, что ноль — это нет электронов. Это просто электронов столько же, сколько протонов.
А то тогда и при постоянном токе тоже был бы обратный ток при прекращении его подачи.
что-то типа того.
Ноль — это отсутствие свободных электронов
Коллега, я предлагаю вам доказать этот тезис. И за одно — придумать альтернативные теории электропроводности и теплопроводности металлов, которые хорошо объясняются моделью свободных электронов.
Так что совершенно непонятно, откуда они потом возьмутся в нулевом проводе, чтобы бежать обратно.
Я всегда подозревал, что это мировой заговор и никакого переменного тока не бывает, но только теперь окончательно в этом убедился.
Если Ваш вопрос был тролллингом, то для меня слишком тонко.
P.S. Ошибся веткой. Данный ответ — дополнение к ответу Jef239.
Если устремлять период измерения к 0, то в пределе получим мгновенное значение в конкретной точке. И наоборот, устремляя T в бесконечность, получим усреднённейшее значение.
Да, безусловно, знание частоты упрощает задачу. А если она неизвестна вообще, или сигнал шумоподобный? Как тогда быть? Единственный выход — поднять тактовую частоту и увеличить выборку. И чем длиннее период измерения, тем ближе результат будет к среднеквадратичному.
Но вообще-то полосу сигнала нужно бы знать, и обрезать от посторонних сигналов вне пределов полезного сигнала.
Полоса сигнала ничего Вам не даст. Вам нужна точная частота сигнала. Из которой Вы получите точный период сигнала T. За который будете суммировать значения и возводить их в квадрат.
Сильно не вникал, но, думаю, не ошибаюсь.
В принципе, исходя из формы синусоиды, можно обойтись четвертью периода синусоиды при измерении, т.к. остальные три четверти дадут тот же самый результат. Главное — начать измерения в нуле и закончить в максимуме. Также подойдёт половина периода, тут уже все равно, когда начинать и когда заканчивать. Но вообще-то, если источник нагружен импульсным потребителем, то он может искажать, скажем, верхнюю или нижнюю полуволну синусоиды. Это плохой приемник, да. Но кто сказал, что Вы должны мерить только хорошие напряжения? В идеале нужно интегрировать период сигнала, т.е. верхнюю и нижнюю полуволны синусоиды.
Что касается «стремления интервала времени к нулю» — представьте, что Вы интегрируете малый промежуток времени в окрестности перехода напряжения через нулевой уровень. Получится, что напряжение равно нулю. А это неправильно.
Если говорить про «увеличение интервала времени», то здесь определение напряжения будет либо очень грубым, либо очень долгим, даже по человеческим меркам, а не по меркам вычислительной техники. Кому нужен прибор с задержкой отклика порядка нескольких секунд?
Отсюда следствие: нужен алгоритм определения частоты сигнала. И уже после того, как частота определена, нужно вычислять действующее значение напряжения/тока.
Наблюдается терминологическая неразбериха.
Имеются 2 понятия: среднеквадратичное значение и действующее значение.
Действительно, действующее значение, по определению, измеряется за период. Оно является частным случаем среднеквадратичного значения.
Что касается среднеквадратичного значения, то оно может быть за любой промежуток времени.
Именно это я и имел ввиду. Потому что может понадобится всё, что угодно. Например, при вычислении гармоник.
Что касается полного или неполного периода, то при измерении токов в цепях, в которых работают различные симисторные устройства или что-нибудь подобное крайне не рекомендую всякие «обрезания», потому что из-за работы переключателей ток может быть несимметричным в принципе. Хотя производители регуляторов борются за симметрию, но вот у меня имеется своё устройство, в котором от экз. к экз. симметричность регулировки меняется до 10% от полуволны к полуволне. Это из-за разброса параметров компонентов.
Более того, если проводить измерение произвольным образом, просто за известный период, но обязательно за полный, то привязка к «0» вообще не нужна. Всё вычисляется прекрасно согласно обобщённому понятию среднеквадратичного значения.
Пример действующего прибора:
twitter.com/Y1Bosco/status/1119226973295992832.
Бюджетный вариант измерения TrueRMS