Применяем калькулятор в качестве счетчика импульсов для разных устройств. Простой счётчик числа оборотов - Конструкции простой сложности - Схемы для начинающих Расчет констант для измерителя ESP430CE1

-20 dB писал:
А почему не подойти к делу малой кровью? Если есть что-то вроде уже упомянутого выше ИЖЦ5-4/8, с раздельными выводами сегментов?

В заначках с советских времён неиспользуемых К176ИЕ4 осталось море (счетчик/делитель на 10 с семисегментным дешифратором и выходом переноса, использовался для формирования единиц минут и часов в электронных часах, неполный аналог - CD4026 - в чём неполнота, не смотрел... пока) в классическом включении для управления ЖК. 4 шт - по 2 на канал, + 2 шт. 176(561)ЛЕ5 или ЛА7 - одна для формирователей одиночных импульсов (подавителей дребезга контактов), вторая - для формирования меандра для "засветки" ЖК индикатора?

Конечно, на МП решение красивее, но на мусоре - дешевле, и решается исключительно на коленке... С программированием МП, например, у меня туго (если только готовый дамп кто-то подсуетит) - мне с железяками проще.


Ну вот тут я готов поспорить. Давайте посчитаем. Для начала стоимость:
1. PIC12LF629 (SOIC-8) - 40руб. (~1,15$)
2. Дисплей от Моторола С200/С205/Т190/Т191 - около 90руб (~2.57$) Кроме того разрешение 98х64 - рисуй и пиши чо хочешь.
3. Рассыпуха (SMD-резюки, кнопочки, SMD-конденсаторы и прочее) на вскидку - около 50руб. (~1,42$)

Итого: ~180руб (~5$)

Корпус, аккум (я бы выбрал Lo-Pol акк от той же моторолки С200 - компактно, ёмко, недорого (сравнительно)) - не считаем, так как и то и другое нужно в обоих вариантах.

Теперь Ваш вариант:

1. ИЖЦ5-4/8 - около 50руб (~1.42$)
2. К176ИЕ4 (CD4026) - 15руб (~0,42$)x4=60руб(~1.68$)
3. К176ЛА7 - 5руб (~0,14$)x4=20руб(~0.56$)
4. Рассыпуха (SMD-резюки, кнопочки, SMD-конденсаторы и прочее) на вскидку - около 50руб. (~1,42$)

Итого: ~180руб(~5$)

В чём выгода?

Теперь прикинем ТТХ и функционал:

У варианта с МК поторебление будет максимум 20мА, в то время как в Вашем варианте, я думаю раза в 1,5...2 больше. Кроме того в Вашем варианте - сложность (относительная) печатной платы на 7 корпусах+многогогая ИЖЦ5-4/8 (наверняк - двусторонняя), невозможность модернизировать устройство (добавить или изменить функционал) не влезая в схему (только на программном уровне), отсутствие возможности организовать память на измерения (счёт), питание не менее 5В (с меньшего Вы не раскачаете ИЖЦ), вес и габариты. Можно много ещё привести доводов. Теперь вариант с МК. Про ток потребления уже написал - 20мА макс. + возможность спящего режима (потребление - 1...5 мА (в основном - LCD)), сложность платы для одной 8-ногой микросхемы и 5 выводного разъёмчика для мотороловского LCD - смешно даже говорить. Гибкость (можно программно, без изменения схемы и платы наворотить такого - волосы дыбом встанут), информативность графического 98х64 дисплея - ни в какое сравнение с 4,5 разрядами 7-сегментного ИЖЦ. питание - 3...3,5В (можно даже таблеточку CR2032, но лучше всё таки Li-Pol от мабылы). Возможность организации многоячейной памяти на результаты измерений (счёта) прибора - опять таки только на программном уровне без вмешательства в схему и плату. Ну и наконец - габариты и вес ни в какое сравнение с Вашим вариантом. Аргумент - "я не умею программировать" не принимется - кто хочет, тот найдёт выход. Я до вчерашнего дня не умел работать с дисплеем от мобильника Моторола С205. Теперь умею. Прошли сутки. Потому что мне это НАДО. В конце концов Вы правы - можно кого нибудь и попросить.)) Вот примерно так. И не в красоте дело, а в том, что дискретная логика безнадёжно устарела как морально так и технически в качестве основного элемента схемотехники. То, для чего требовались десятки корпусов с диким общим потреблением, сложностью ПП и огромными габаритами, теперь можно собрать а 28-40 ногом МК легко и непринуждённо - поверьте мне. Сейчас даже инфы по МК гораздо больше чем по дискретной логике - и это вполне объяснимо.

В данном примере применения описывается, как реализовать электронный счетчик электроэнергии на микроконтроллере серии MSP430FE42x. Документ содержит описание некоторых основополагающих принципов и рекомендации по использованию микроконтроллеров серии MSP430FE42x, а также рисунки печатных плат и демонстрационные версии программ.

1 Введение

В данном примере применения описаны схема электрическая принципиальная и программное обеспечение электронного счетчика электроэнергии на микроконтроллере семейства MSP430FE42x. В качестве дополнения предполагается использовать руководство пользователя модуля ESP430CE1.

Микроконтроллеры семейства MSP430FE42x со встроенным сигнальным процессором ESP430CE1 для однофазного счетчика электроэнергии со встроенным аналоговым входным терминалом и температурным датчиком были разработаны специально для использования в устройствах измерения потребляемой мощности. ESP430CE1 выполняет большинство действий по измерению потребления электроэнергии автоматически, не используя ресурсы вычислительного ядра. Это позволяет сохранить ресурсы вычислительного ядра для использования их в других задачах, например для осуществления связи с другими устройствами. ESP430CE1 может работать с различными токовыми датчиками. В качестве токового датчика он может использовать Роговского без дополнительных внешних компонентов шунт, токовые трансформаторы (СТ), включая трансформаторы со связью по постоянному току и большим фазовым сдвигом, или катушки индуктивности. Все параметры могут быть настроены программно, а калибровочные константы могут быть сохранены во Flash памяти микроконтроллера MSP430 и переданы ESP430CE1 при инициации системы.

2 Аппаратная часть

Схема монтажной платы и блок-схема устройства приведены в приложении А и описываются в нижеследующих разделах данного примера применения. Монтажная плата может использоваться с токовыми трансформаторами или шунтами и может быть перестроена. Такая монтажная плата выпускается компанией Softbaugh и имеет серийный номер для заказа DE427. Заказать ее можно на сайте компании Softbaugh, адрес которого в интерненте www.softbaugh.com .

Подключение каналов V1, I1 и I2 показаны на схеме, приведенной в приложении А.

2.1 Использование шунта в качестве преобразователя тока

Рисунок 1. Блок-схема подключения шунта к двухпроводной однофазной сети

2.2 Использование CT в качестве преобразователя тока


Рисунок 2. Блок-схема подключения CT к двухпроводной однофазной сети

2.3 Подключение CT и шунта в качестве преобразователя тока, позволяющее обнаруживать несанкционированного подключения


Рисунок 3. Блок-схема подключения шунта и CT к двухпроводной однофазной сети, позволяющее обнаруживать несанкционированное подключение

2.4 Подключение CT для подключения к трехпроводным однофазным сетям, применяемым в США


Рисунок 4. Блок-схема ANSI электросчетчика, использующегося в трехпроводных однофазных сетях

2.5 Подключение входов датчиков напряжения

Печатная плата оснащена делителем напряжения, рассчитанным на работу в сетях со среднеквадратическим значением напряжения 230 В. Также она содержит схему защиты, рассчитанную на это напряжение.

Емкостной источник питания способен обеспечивать ток потребления до 4 мА. Необходимо обеспечить, чтобы ток потребления не превысил это допустимое значение. Для этого в демонстрационной схеме был использован светодиод с низким током свечения.

2.6 Подключение входов датчиков тока

На печатной плате имеется место для монтажа SMD резистора, используемого в качестве нагрузки для токового трансформатора, но этот резистор не установлен в поставляемой плате. Замечание: нагрузочный резистор для СТ не установлен, но при подключении СТ его необходимо установить, иначе MSP430 будет поврежден.

2.7 Сглаживающий фильтр

В качестве сглаживающего фильтра рекомендуется использовать резистор номиналом 1 кОм, подключенный последовательно ко входу АЦП, и конденсатор номиналом 33 нФ, подключенный между входом преобразователя и землей. Для исключения влияния синфазных помех рекомендуется использовать сглаживающие фильтры в обоих каналах токового преобразователя.

2.8 Неиспользуемые каналы АЦП

Неиспользуемые каналы АЦП не должны быть ни к чему подключены.

3 Расчет констант для измерителя ESP430CE1

Измерителю необходимы константы, соответствующие примененным трансформаторам и/или шунтам. В данном разделе показан расчет констант для измерителя ESP430CE1.

3.1 Коэффициент преобразования по напряжению

Коэффициент преобразования по напряжению, в соответствии с которым пересчитывается реальное входное напряжение во входное напряжение модуля ESP430CE1 рассчитывается по приведенным ниже формулам:

    V(inp.max) = VoltageGain x V (Line, Nom.) x sqrt(2) x R2 /(R1 + R2)
    kV1 = Voltage (Line, nominal) x 2 x sqrt(2) / (2 15 x (1- (Vref – V(inp.max) x 2)/Vref))

3.2 Коэффициент преобразования по току для шунта

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

    V(I, inp.max) = CurrentGain x Imax x R(Shunt) x sqrt(2)

3.3 Коэффициент преобразования по току для трансформатора тока

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

    V(I, inp.max) = CurrentGain x Imax / CTRatio x R(Burden) x sqrt(2)
    kI1 = Current (Line, nominal) x 2 x sqrt(2) / (2 15 x (1- (Vref – V(I, inp.max) x 2)/Vref))

3.4 Уровень прерывания по мощности

Уровень прерывания по мощности ESP430CE1 рассчитывается по следующей формуле:

    InterruptLevel = Pulses/kWh x (1000 / 3600) x fADC / (kV1 x kI1 x 4096)

Pulses/kWh определяет сколько прерываний на каждый кВт*ч будет сформировано.

4 Калибровка измерителя

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

Основная калибровка может быть инициализирована при помощи команды с0, переданной через UART. Для выполнения этой команды необходимо в файле parameter.h определить входные значения следующих параметров:

    - calVoltage
    - calCurrent
    - calPhi
    - calCosPhi
    - calFreq

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

Для калибровки счетчика электроэнергии необходимо разделить тракты измерения тока и напряжения. Это позволяет выполнить калибровку с малыми потерями энергии и определить величины напряжения, тока и фазового сдвига. На рисунке 5 показана схема включения электросчетчика при калибровке.


Рисунок 5. Электронный счетчик электроэнергии на MSP430 с внешними терминалами

4.1 Калибровка при непрерывном измерении

Нормальный рабочий режим ESP430CE1 устанавливается путем посылки вычислительным ядром команды SetMode. Величина измеренной мощности, записанная после каждого измерения в регистр ActEnSPer1 (и в регистр ActEnSPer2 для систем с двумя датчиками), преобразуется вычислительным ядром в сигнал с постоянной частотой, пропорциональный измеренной мощности. Для формирования сигнала с постоянной частотой может быть использован модуль таймера Timer_A.

При калибровке выполняются следующие действия:

  • Вычислительное ядро устанавливает в нулевом контрольном регистре ESP430CE1 флаги Curr_I1, Curr_I2, соответствующие режиму измерения.
  • Регистры параметров инициализируются для измерения мощности в нагрузке. Выполняется это при помощи команды SET_PARAM.
  • После получения команды mSet_Mode ESP430CE1 переходит в режим измерения электроэнергии.
  • Первый результат измерения, находящийся ActEnSPer1 (и ActEnSPer2 в системах с двумя датчиками), не используется, так как неизвестна точка начала.
  • Следующие результаты измерений, находящиеся в ActEnSPer1 (и ActEnSPer2 в системах с двумя датчиками) являются правильными и используются для вычислений.
  • Флаг St_ZCld в нулевом регистре состояния указывает, что при следующей доступной выборке (флаг St_NEVal установлен), новые результаты измерения за прошлый период доступны в регистрах ActEnSPer1 и ActEnSPer2.
  • Вычислительное ядро сбрасывает флаг St_NEVal при помощи команды mCLR_EVENT и выполняет считывание данных (см. описание алгоритма считывания ниже).
  • Если необходимо, например, для вычисления результата за больший период, последние четыре пункта повторяются.

Вышеупомянутые шаги повторяются и во второй калибровочной точке.

Калибровка обоих датчиков должна быть выполнена независимо. При калибровке одного датчика измерителя ток через второй датчик должен быть нулевым. И наоборот.

4.1.1 Формулы

Калибровка производится за один основной период (или за nper основных периодов) при двух токах нагрузки I1HI и I1LO. Номинальная вычисленная мощность для двух точек калибровки:

    nHIcalc = Cz1 x I1HI x V1 x cos?1 x (nper / fmains) x (fADC / 4096) [шаги 2 ]
    nLOcalc = Cz1 x I1LO x V1 x cos?1 x (nper / fmains) x (fADC / 4096) [шаги 2 ]

Результирующие значения для наклона и смещения:

    Наклон: GainCorr1 = ((nHIcalc – nLOcalc) / (nHImeas – nLOmeas)) x 2 14
    Смещение: Poffset = (((nHImeas x nLOcalc) – (nLOmes – nHIcalc)) / (nHImeas – nLOmeas)) x (fmains / nper) x (4096 / fADC),

где fmains – основная частота в Гц;

    fADC – частота дискретизации АЦП в Гц (обычно 4096 Гц);
    nper – количество основных периодов, использованных при калибровке;
    nHIclac – вычисленная мощность в точке калибровки с высоким током в шагах в квадрате;
    nHImaes – измеренная мощность в точке калибровки с высоким током в шагах в квадрате;
    nLOclac – вычисленная мощность в точке калибровки с низким током в шагах в квадрате;
    nLOmaes – измеренная мощность в точке калибровки с низким током в шагах в квадрате;

4.1.2 Пример калибровки

Для схемы, показанной на рисунке 1, калибровка производится при следующих условиях:

    V1 = 230 В, I1HI= 20 A, I1LO = 1 A, cos?1 = 1, nper = 1, fADC = 2048 Гц, fmains = 50 Гц.
    nHIcalc = Cz1 x I1HI x V1 x cos?1 x (nper / fmains) x (fADC / 4096) = 29,322.80806 x 20 х 230 х 1 х (1 / 50) х (2048 / 4096) = 1,348,849.171 = 14,94F1h [шагов 2 ]
    nLOcalc = Cz1 x I1LO x V1 x cos?1 x (nper / fmains) x (fADC / 4096) = 29,322.80806 x 1 х 230 х 1 х (1 / 50) х (2048 / 4096) = 67,422.458 = 1,0772h [шагов 2 ]

Результат измерения в обеих точках:

    n1Himeas = 14,6040h (ошибка -1 % по сравнению с n1Hicalc = 14,94F1h)
    n1Lomeas = 1,0CB7h (ошибка +2 % по сравнению с n1Localc = 1,0772h)
    GainCorr1 = ((nHIcalc – nLOcalc) / (nHImeas – nLOmeas)) x 2 14 = ((14,94F1h – 1,0772h) / (14,6040h – 1,0CB7h)) x 2 14 = 40С0h

    Poffset = (((nHImeas x nLOcalc) – (nLOmes – nHIcalc)) / (nHImeas – nLOmeas)) x (fmeins / nper) x (4096 / fADC) = (((14,6040h x 1,0772h) – (1,0CB7h – 14,94F1h)) / (14,6040h – 1,0CB7h)) x (50 / 1) x (4096 / 2048) = -215,489 = FFFC,B63Fh

Если точки калибровки исправить с учетом наклона и смещения, тогда:

    ncorr = (nmeas x GainCorr1)) x 2-14 + (Poffset1) x (nper / fmains) x (fADC / 4096) nHIcorr = 14,6040h x 40C0h x 2-14 +FFFC,B63Fh x ((1 x 2048) / (50 x 4096)) = 1,348,890 = 14,951Ah nLOcorr = 1,0CB7h x 40C0h x 2-14 +FFFC,B63Fh x ((1 x 2048) / (50 x 4096)) = 67,441 = 1,0771h

Результирующая ошибка при обеих коррекциях равняется +3.1 Е-5, т.е. 31 ppm.

4.2 Калибровка при помощи ПК

На рисунке 6 показан один из возможных вариантов установки для калибровки электронных счетчиков электроэнергии. Электросчетчики подключены к последовательному порту ПК через последовательный порт USART0, работающий в режиме UART или SPI. Все необходимые для калибровки вычисления выполняются ПК, а MSP430 каждого электросчетчика только запоминает полученные корректировочные величины во встроенной памяти данных или внешней EEPROM памяти.

ПК управляет калибровочной установкой, состоящим из генератора напряжения, генератора тока и фазовращателя, через коммуникационный интерфейс. ПК считывает результаты умножения напряжения и тока, вычисленные встроенными АЦП (или количество импульсов Ws на выходе каждого электросчетчика) и сравнивает это значение со значением, полученным эталонным электросчетчиком, который является частью калибровочной аппаратуры. ПК вычисляет ошибку электросчетчика в одной (например, при номинальном токе) или двух (например, при максимальном и номинальном токе потребления) точках калибровки. По результатам этих ошибок вычисляются индивидуальные корректировочные коэффициенты для наклона и угла смещения и передаются в конкретный электросчетчик, в котором микроконтроллер MSP430 сохраняет эти значения.


Рисунок 6. Калибровка электронных электросчетчиков при помощи ПК

Формулы для вычисления значений калибровочных констант приведены в руководстве пользователя модуля ESP430CE1.

4.3 Самокалибровка

Другой метод калибровки использует способность MSP430 выполнять сложные вычисления. Основное преимущество этого метода калибровки - это простота: Для передачи данных при этом методе не требуется никаких проводных соединений (см. рисунок 7). Уравнения исправления ошибок, используемые измерителем во время теста, такие же, как и приведенные в приведенном выше разделе "Калибровка при непрерывном измерении".

  • Измеритеи, которые будут калиброваться, переводятся в режим калибровки при помощи скрытого переключателя, UART, ключа, входного импульса и т.д.
  • ПК включает калибровочную аппаратуру, которая отдает определенное количество энергии, измеряемое при помощи эталонного измерителя, калибруемым электросчетчикам..
  • Электросчетчики измеряют выданное количество энергии и вычисляют значение электропотребления WEM1 для 100 % номинального тока Inom.
  • После этого калибровочная аппаратура отключается (I = 0, U = 0). Это позволяет при необходимости вычислить и измерить смещение самого АЦП.
  • ПК включает калибровочную аппаратуру, которая снова отдает электросчетчикам определенное количество электроэнергии (например 5 % Inom, 100 % Vnom, cos?=1). После этого аппаратура снова отключается (i = 0, U = 0).
  • Счетчики снова измеряют электроэнергию и вычисляют значение WEM0 для 5 % номинального тока Inom.
  • По двум значениям WEM1 и WEM0, найденным для 100 % и 5 % номинального тока Inom, электросчетчики вычисляют индивидуальные величины смещения и наклона.
  • После калибровки можно провести простой визуальный тест:
    - для обнуления индикаторов электросчетчики сбрасываются - калибровочная аппаратура выдает точно определенное количество энергии (при различных значениях тока, напряжения и cos?) - Визуально проверяется, чтобы на всех электросчетчиках отображалось одинаковая величина измеренного значения потребленной энергии - По показаниям ЖКИ можно определить, что рассчитанные коэффициент наклона и смещения выходят за допустимые пределы.

Пример: если провести калибровку при следующих параметра:

  • 10 000 Ws (100 % Inom, 100 % Vnom, cos? = 1)
  • 5 000 Ws (100 % Inom, 100 % Vnom, cos? = 0.5)

калибруемые электросчетчики должны показать значение Ws, равное 15 900 ± допустимая точность. Если вычисленное значение выходит за допустимые пределы, то электросчетчик признается не прошедшим калибровку.


Рисунок 7. Самокалибровка электросчетчиков

5 Емкостной источник питания

На рисунке 8 показан емкостной источник питания, формирующий одно напряжение Vcc = +3 В. Если его выходного тока недостаточно, то можно использовать выходной буфер на базе NPN транзистора.

Уравнения для разработки приведенных ниже источников питания приводятся в разделе 3.8.3.2 "Емкостной источник питания" примера применения SLAA024. В данной главе описываются другие источники питания и уравнения для их расчета.


Рисунок 8. Емкостной источник питания

5.1 Детектор обнаружения отключения/включения линейного напряжения

Так как детектор падения напряжения ESP430CE1 объединен со счетчиком циклов линейного напряжения, то при пропадании линейного напряжения он не работает. Для обнаружения этого можно отслеживать нахождение VRMS в течение определенного интервала времени ниже заданного порога или использовать внешнюю цепь для детектирования отключения линейного питания. При использовании внешней цепи для снижения потребления можно отключать модуль ESP430CE1.


Рисунок 9. Детектирование наличия линейного напряжения

6.1 Заземление

Правильная трассировка печатной платы очень важна для систем, использующих АЦП с высоким разрешением. Ниже приведены основные рекомендации по трассировке плат.

1. Использование, по возможности, отдельных шин аналоговой и цифровой "земли".

2. Максимально толстые дорожки от источника питания до выводов DVSS, AVSS, DVCC, и AVCC.

3. Установка конденсатора в точке схождения всех линий аналоговой "земли". Установка конденсатора в точке схождения всех цифровых "земель".

4. Конденсатор Cb следует расположить в точке схождения всех шин питания. Это необходимо для обеспечения низкого полного сопротивлению этого конденсатора.

5. AVSS и DVSS терминалы должны быть внешне соединены вместе.

6. AVCC и DVCC терминалы должны быть внешне соединены вместе.

7. Источник питания и накопительный конденсатор Cb должны быть расположен максимально близко друг к другу. Между выводами, подключенным к шинам аналогового и цифрового питания, должны быть установлены конденсаторы Ca и Cb.

8. Для развязки шин аналогового и цифрового питания необходимо использовать катушку индуктивности L. Также можно использовать и резистор, но при использовании катушки индуктивности обеспечивается лучшая фильтрация высоких частот.

9. Если по периметру печатной платы проходит дорожка, то она должна быть подключена к заземляющей шине платы.


Рисунок 10. Заземление аналого-цифрового преобразователя

6.2 Чувствительность к ЭМИ

На рисунке 11 упрощенно показана не оптимальная трассировка: серым выделены участки, способные принимать внешние наводки от внешних источников ЭМИ. Для снижения влияния внешних источников ЭМИ эти участи по площади должны быть минимальными.


Рисунок 11. Трассировка платы, чувствительной к внешним ЭМИ

На рисунке 12 показана печатная плата, имеющая оптимальную трассировку. Участки, являющиеся приемниками ЭМИ, имеют минимальную площадь.


Рисунок 12. Трассировка печатной платы, имеющей минимальную чувствительность к ЭМИ

7 Демонстрационная программа

7.1 Инициализация аналогового терминала

При отключенном модуле ESP430CE1, Вычислительное ядро MSP430 имеет доступ к модулю SD16 модулю. Сначала вычислительное ядро MSP430 должно сделать инициацию входного аналогового терминала. При этом производится установка коэффициента усиления, частоты дискретизации и частоты генератора синхроимпульсов для SD16:

//==================================================================== /** * Подпрограмма инициализации аналогового терминала. * * Настройка модуля сигма-дельта АЦП в качестве аналогового терминала для * резистивного счетчика, определяющего несанкционированное подключение, * использующего токовый трансформатор и шунт в качестве токового датчика * (см. настройку каналов 0 и 1). */ void init_analog_front_end(void) { /** * Сначала проверяется, что встроенный сигнальный процессор отключен, * в противном случае будет невозможно изменить данные в регистре SD16. * */ ESPCTL &= ~ESPEN; /** * После этого выполняются основные настройки аналогового терминала, * которые относятся ко всем каналам: выбор синхроимпульсов (SMCLK), * параметров делителя (в зависимости от частоты SMCLK) и опорного * напряжения. */ SD16CTL= SD16SSEL_1 // Выбор синхроимпульсов: SMCLK // SD16CTL = 0x800 + SD16SSEL_1 // Clock Выбор синхроимпульсов: SMCLK + (Amp:) #if (MCLK_FREQ == 2) | SD16DIV_1 // деление на 2 => Частота синхроимпульсов АЦП: 1.094 МГц #endif #if (MCLK_FREQ == 4) | SD16DIV_2 // деление на 4 => Частота синхроимпульсов АЦП: 1.094 МГц #endif #if (MCLK_FREQ == 8) | SD16DIV_3 // деление на 8 => Частота синхроимпульсов АЦП: 1.094 МГц #endif | SD16REFON; // Использование встроенного ИОН SD16CCTL0 = SD16INCH_0; // I1 SD16CCTL1 = SD16INCH_0; // I2 SD16CCTL2 = SD16INCH_0; // V SD16CONF0 |= 0x70; // SD16CONF1 |= 0x68; // Задержка синхроимпульсов АЦП 40 нс // =================================================================== /** * - Выбор коэффициента усиления АЦП: * - VIN,MAX(GAIN = 1) = 0.5V > VCT(пиковое) * - VIN,MAX(GAIN = 2) = 0.25V < VCT(пиковое) * - VIN,MAX(GAIN = 16) = 0.031V > VShunt(пиковое) * - VIN,MAX(GAIN = 32) = 0.015V < VShunt(пиковое) */ // =================================================================== // Настройка нулевого канала аналогового терминала - Ток 1 SD16INCTL0= I1_Gain; // Установка коэффициента усиления для нулевого канала (I1) SD16CCTL0 |= SD16OSR_256; // Установка коэффициента дискретизации = 256 (по умолчанию) // =================================================================== // Настройка первого канала - Ток 2 SD16INCTL1= I2_Gain; // Установка коэффициента усиления первого канала (I2) SD16CCTL1 |= SD16OSR_256; // Установка коэффициента дискретизации = 256 (по умолчанию) // =================================================================== // Настройка второго канала - Напряжение SD16INCTL2= V_Gain; // Установка коэффициента (V) SD16CCTL2 |= SD16OSR_256; // Установка коэффициента дискретизации = 256 (по умолчанию) /** * \Замечание * Пожалуйста запомните, что коэффициент дискретизации для всех каналов должен * быть идентичным. По умолчанию он равен 256. */ } // Конец init_analog_front_end()

7.2 Инициализация электросчетчика

Перед использованием ESP430CE1 надо настроить. Пример подпрограммы настройки модуля:

//==================================================================== /** * Инициализация ESP430CE1. * */ void init_esp_parameter(unsigned char flashvars) { volatile unsigned int timeout; // /\ Предотвращение "оптимизации" переменных. // Копирование значений инициализации в ОЗУ if (flashvars) s_parameters = s_parameters_flash; /** * Проверяем, что встроенный сигнальный процессор * активизирован, */ ESPCTL |= ESPEN; MBCTL = 0; /** * и не находится в режиме измерения или калибровки, */ if ((RET0 & 0x8000) != 0) { // Перевод встроенного сигнального процессора в режим ”Idle” MBOUT1= modeIDLE; // ESP_IDLE; MBOUT0= mSET_MODE; timeout= 0xffff; while (((RET0 & 0x8000) != 0) && (timeout?? > 0)) ; } /** * и готов принять сообщение, запрашивающее * версию программного обеспечения. */ MBOUT0= mSWVERSION; timeout= 0xffff; do { while (((MBCTL & IN0IFG) == 0) && (timeout?? > 0)) ; if (timeout == 0) { display_error(); return; } } while (MBIN0 != mSWRDY); firmware_version= MBIN1; // Запись версии программы. /** * После этого производится инициализация параметров. * * Control 0: выполняется установка для: * - Канал измерения тока I2 ? детектирования несанкционированного подключения * - Расчет абсолютного значения активной энергии * (отрицательная энергия расценивается как несанкционированное подключение) * - Переключение алгоритма для удаления постоянной составляющей тока I1 * - Переключение алгоритма для удаления постоянной составляющей тока I2 */ set_parameter(mSET_CTRL0, defSET_CTRL0); /** * \установка номера измерения: * т.е. 4096 * 50Hz. => прерывание раз в секунду */ set_parameter(mSET_INTRPTLEVL_LO, s_parameters.pSET_INTRPTLEVL.w); set_parameter(mSET_INTRPTLEVL_HI, s_parameters.pSET_INTRPTLEVL.w); /** * Номинальная основная частота: * т.е. 50 Гц. */ set_parameter(mSET_NOMFREQ, defSET_NOMFREQ); /** * Коррекция фазовой ошибки: * Установка фазовой ошибки для тока 1/2 от номинальной основной частоты для * токового трансформатора по его техническим характеристикам * Фазовая ошибка шунта равна нулю. */ set_parameter(mSET_PHASECORR1, (int)s_parameters.pSET_PHASECORR1); set_parameter(mSET_PHASECORR2, (int)s_parameters.pSET_PHASECORR2); /** Настройка параметров для двух токов: * Токовый трансформатор: * * Имеется две возможности настройки значений двух * токов: */ set_parameter(mSET_ADAPTI1, defSET_ADAPTI1); // = 1 * POW_2_14 = 16384 set_parameter(mSET_ADAPTI2, defSET_ADAPTI2); // = 1 * POW_2_14 = 16384 /** Установка настроенного коэффициента усиления: */ set_parameter(mSET_GAINCORR1, s_parameters.pSET_GAINCORR1); set_parameter(mSET_GAINCORR2, s_parameters.pSET_GAINCORR2); /** Установка настроенного смещения: */ set_parameter(mSET_V1OFFSET, s_parameters.pSET_V1OFFSET); set_parameter(mSET_I1OFFSET, s_parameters.pSET_I1OFFSET); set_parameter(mSET_I2OFFSET, s_parameters.pSET_I2OFFSET); // set_parameter(mSET_POFFSET1_LO, s_parameters.pSET_POFFSET1_LO); // set_parameter(mSET_POFFSET1_HI, s_parameters.pSET_POFFSET1_LO); /** Настроенные параметры становятся текущими: */ #if withStartCurrent == 1 set_parameter(mSET_STARTCURR_INT, s_parameters.pSET_STARTCURR_INT); set_parameter(mSET_STARTCURR_FRAC, s_parameters.pSET_STARTCURR_FRAC); #else set_parameter(mSET_STARTCURR_INT, 0); set_parameter(mSET_STARTCURR_FRAC, 0); #endif /** Параметры регулировки для периода удаления постоянной составляющей: */ set_parameter(mSET_DCREMPER, defSET_DCREMPER); } // End of init_esp_parameter()} // Конец подпрограммы init_esp_parameter()

7.3 Программа Demo 1

Demo 1 – простая демонстрационная программа, которая инициализирует ESP430CE1 для измерения электрической энергии и вывода результата на индикатор. При этом происходит мигание светодиода. Эта программа может работать с отладочным комплектом Kickstart производства компании IAR.

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

Файл Назначение и функции
Main.c Управляет инициализаций системы и вызывает функции для индикации обновленного значения, запрашиваемого подпрограммами обработки прерывания:
  • Init FLL and System Clock
  • Init Basic Timer and Real time Clock
  • Init LCD
  • Init analog front end
  • Init ESP430CE1 Parameters
  • Start Measurement
FET4xx_RTCwLCD.s43 Основная подпрограмма для обслуживания ЖКИ и RTC
Display.c Подпрограмма высокого уровня для ЖКИ
FLL.c Подпрограмма установки ФАПЧ и системы синхронизации
PortFunc.c Подпрограмма обработки прерывания по порту Port1
TimerA.c Подпрограмма инициализации и обслуживания таймера Timer_A. Timer_A используется для формирования импульсов
EMeter.c EMeter.c Содержит подпрограмму инициализации и подпрограмму обслуживания аналогового терминала, ESP430CE1 и прерывания от ESP430CE1
FE427_Measure_v3.ewp
FE427_Measure_v3.eww
Файлы проектов для программы Workbench версии 3 производства компании IAR
FE427_Measure.ewp
FE427_Measure.eww
Файлы проектов для программы Workbench версии 2 производства компании IAR
FE427_Measure.hzp
FE427_Measure.hzs
Файлы проектов для программы CrossStudio производства компании Rowley

Блок – схема демонстрационной программы приведена на рисунке 13.


Рисунок 13. Блок – схема демонстрационной программы

7.4 Генерация импульса электропотребления

Этот импульс может быть использован для индикации определенного уровня потребленной энергии. Для формирования этого выходного сигнала может использоваться три метода.

7.4.1 Непосредственное использование выхода сигнала прерывания по уровню

В первом методе непосредственно используется выход источника прерывания модуля ESP430 по заданному уровню. Реализация этого метода весьма проста и не требует задействования дополнительных аппаратных или программных ресурсов. Но ввиду того, что измеряется энергия синусоидальных колебаний, этот сигнал может иметь некоторые переходные колебания.

Активизируется этого метода:

    // *define TIMERA_PULSE_OUTPUT
    // *define WITH_AVERAGING

7.4.2 Использование выхода модуля таймера Timer_A

Во втором методе для удаления переходных колебаний используется модуль таймера Timer_A. Этот метод приемлем для формирования импульсов с частотой до 30 Гц. Перед использованием этого метода в файле parameter.h необходимо сделать следующие установки.

    *define TimerAClock TASSEL_1/* ACLK = 32 кГц
    *define TACLOCK 32768ul
    *define CLOCKSPERPERIOD (TACLOCK/defSET_NOMFREQ)

Активизация метода производится следующим образом:

    *define TIMERA_PULSE_OUTPUT
    // *define WITH_AVERAGING

7.4.3 Использование выхода модуля таймера Timer_A при усреднении

В третьем методе используется только модуль таймера Timer_A для усреднения по времени и формирования импульсов несущей частоты.

Активизация этого метода производится следующим образом:

    *define TIMERA_PULSE_OUTPUT
    *define WITH_AVERAGING

7.5 Управление

Имеется две кнопки, которые используются для выполнения следующих функций:

  • S_A: Выключение модуля ESP430CE1 и перевод MSP430 в режим пониженного потребления. Часы реального времени при этом продолжают работать.
  • S_B: Переключение между режимами индикации.

7.5.1 Файл Parameter.h

Все конфигурационные настройки выполняются в файле parameter.h. К ним относятся:

  • Уровень выходного импульса.
  • Коэффициенты передачи по напряжению и току
  • Конфигурационные параметры для модуля ESP430CE1

#define для withDisplay позволяет масштабировать код для различных функций и размеров. Код использует функции с плавающей точкой для выхода UART и калибровки. Включение одной из этих двух частей увеличит размер кода.

Определение шунта, *define shunt, позволяет выбрать к чему будет подключен вход I1 - к шунту или трансформатору тока.

Для упрощения расчета основных параметров, используемых в файле parameter.h, можно использовать файл для Excel FE427_Settings.xls. После ввода требуемой информации в белые поля все параметры будут рассчитаны и отображены. По нажатию кнопки "Save Parameter to File" все параметры будут сохранены в файл ‘Test_Parameter.h’.

Этот файл с рассчитанными параметрами будет включен в исходный код вместо заданных по умолчанию в файле ‘Parameter.h’ параметров если снять ремаркирование со строки ‘#define Test’ в самом файле ‘Parameter.h’.

7.6 Демонстрационная программа Demo 2

Демонстрационная программа Demo 2 устанавливается как комплексное приложение, включающее в себя UART и некоторые подпрограммы автокалибровки, которые сохраняют параметры во flash память. Для вычисления электропотребления вместо функции формирования потребления по превышению заданного уровня используются возвращаемые модулем ESP430CE1 значения. Программа Demo 1 выполняет инициализацию модуля ESP430CE1, вывод данных на индикатор и осуществляет управление светодиодом индикации включения. Эта демонстрационная программа слишком большая, чтобы использоваться при помощи комплекта Kickstart компании IAR.

Демонстрационная программа Demo 2 включает в себя все файлы, содержащиеся в программе Demo 1, и файлы, приведенные в нижеследующей таблице:

7.6.1 Связь по UART

    Формат передаваемых данных: 57600 / 8 N 1
    Каждая команда должна заканчиваться символом "CR".
    Команда ’h’ выводит в окне терминала приведенный ниже текст помощи:

    Версия программного обеспечения MSP430FE427: 0114
    Команды UART:

      SHxx: Установка часов
      SMxx: Установка минут
      SSxx: Установка секунд
      SDxx: Установка дня
      SOxx: Установка месяца
      SYxx: Установка года
      Dx: Установка режима индикатора
      D1: Отключение
      D2: Время
      D3: Дата
      D4: Напряжение (В)
      D5: Ток (A)
      D6: Пиковое напряжение (В)
      D7: Пиковое значение тока (A)
      D8: Частота (Гц)
      D9: CosPhi
      DA: Температура
      DB: Мощность (кВт)
      DC: Электропотребление (кВт * ч)
      H: показать текст помощи
      Tx: установка тестового режима
      R: сброс системы
      Mx: Выполнение тестовых измерений в течение x*50 циклов
      I: Инициализация
      C0: Автокалибровка U / I / P / фазового сдвига
      C1: Калибровка уровня прерывания
      C2: Калибровка фазовой коррекции 1
      C3: Калибровка фазовой коррекции 2
      C4: Калибровка смещения V1
      C5: Калибровка смещения I1
      C6: Калибровка смещения I2
      C9: Сохранение параметров во flash памяти
      СА: Калибровка коэффициента передачи по напряжению
      СВ: Калибровка коэффициента передачи по току
      СС: Калибровка коэффициента передачи по мощности
      +: Увеличение калибровочного значения
      -: Уменьшение калибровочного значения

7.6.2 Калибровка

Основная часть процесса калибровки может быть выполнена при помощи UART команды "C0".

Для выполнения этой команды в файле parameter.h должны быть определены входные параметры:

  • calVoltage
  • calCurrent
  • calPhi
  • calCosPhi
  • calFreq

По UART команде "C9" рассчитанные значения могут быть сохранены во flash памяти.

7.6.3 Файл Parameter.h

Все конфигурационные настройки выполняются в файле parameter.h:

  • Установка уровня выходного импульса
  • Коэффициенты по напряжению и току
  • Параметры настройки модуля ESP430CE1

#defines для withUARTComm, withCalibration, withDisplay позволяют изменять код для различных функций и размеров. Включение одной из этих двух частей увеличит размер кода.

СЧЁТЧИК НА МИКРОКОНТРОЛЛЕРЕ

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

Электронный счетчик получается слишком сложным, если строить его на микросхемах серий К176, К561. особенно если необходим реверсивный счет. Но можно построить счетчик всего на одной микросхеме — универсальном микроконтроллере PIC16F628A, имеющем в своем составе разнообразные периферийные устройства и способном решать широкий круг задач.

Вот и недавно меня попросил человек сделать счётчик импульсов на много разрядов. Я отказался от светодиодных индикаторов, так как они занимают много места и потребляют немало энергии. Поэтому реализовал схему на LCD. Счётчик на микроконтроллере может замерять входные импульсы до 15 знаков разрядности. Два первых разряда отделены точкой. EEPROM не использовалась, потому что не было необходимости запоминать состояние счётчика. Так-же имеется функция обратного счёта - реверса. Принципиальная схема простого счетчика на микроконтроллере:

Счетчик собран на двух печатных платах из фольгированного стеклотекстолита. Чертёж приведён на рисунке.

На одной из плат установлены индикатор LCD, на другой — 4 кнопки, контроллер и остальные детали счетчика, за исключением блока питания. Скачать платы и схему счётчика в формате Lay, а так-же прошивку микроконтроллера можно на форуме. Материал предоставил Samopalkin.

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

Счетчики импульсов классифицируют

● по модулю счета:
. двоично-десятичные;
. двоичные;
. с произвольным постоянным модулем счета;
. с переменным модулем счета;
. по направлению счета:
. суммирующие;
. вычитающие;
. реверсивные;
● по способу формирования внутренних связей:
. с последовательным переносом;
. с параллельным переносом;
. с комбинированным переносом;
. кольцевые.

Суммирующий счетчик импульсов

Рассмотрим суммирующий счетчик (рис. 3.67, а ). Такой счетчик построен на четырех JK-триггерах, которые при наличии на обоих входах логического сигнала «1» переключаются в моменты появления на входах синхронизации отрицательных перепадов напряжения.

Временные диаграммы, иллюстрирующие работу счетчика, приведены на рис. 3.67, б . Через К си обозначен модуль счета (коэффициент счета импульсов). Состояние левого триггера соответствует младшему разряду двоичного числа, а правого — старшему разряду. В исходном состоянии на всех триггерах установлены логические нули. Каждый триггер меняет свое состояние лишь в тот момент, когда на него действует отрицательный перепад напряжения.

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

Трехразрядный вычитающий счетчик с последовательным переносом

Рассмотрим трехразрядный вычитающий счетчик с последовательным переносом, схема и временные диаграммы работы которого приведены на рис. 3.68.
{xtypo_quote}В счетчике используются три JK-триггера, каждый из которых работает в режиме Т-триггера (триггера со счетным входом).{/xtypo_quote}

На входы J и К каждого триггера поданы логические 1, поэтому по приходу заднего фронта импульса, подаваемого на его вход синхронизации С, каждый триггер изменяет предыдущее состояние. Вначале сигналы на выходах всех триггеров равны 1. Это соответствует хранению в счетчике двоичного числа 111 или десятичного числа 7. После окончания первого импульса F первый триггер изменяет состояние: сигнал Q 1 станет равным 0, a ¯ Q 1 − 1.

Остальные триггеры при этом свое состояние не изменяют. После окончания второго импульса синхронизации первый триггер вновь изменяет свое состояние, переходя в состояние 1, (Q x = 0). Это обеспечивает изменение состояния второго триггера (второй триггер изменяет состояние с некоторой задержкой по отношению к окончанию второго импульса синхронизации, так как для его опрокидывания необходимо время, соответствующее времени срабатывания его самого и первого триггера).

После первого импульса F счетчик хранит состояние 11О. Дальнейшее изменение состояния счетчика происходит аналогично изложенному выше. После состояния 000 счетчик вновь переходит в состояние 111.

Трехразрядный самоостанавливающийся вычитающий счетчик с последовательным переносом

Рассмотрим трехразрядный самоостанавливающийся вычитающий счетчик с последовательным переносом (рис. 3.69).

После перехода счетчика в состояние 000 на выходах всех триггеров возникает сигнал логического 0, который подается через логический элемент ИЛИ на входы J и К первого триггера, после чего этот триггер выходит из режима Т-триггера и перестает реагировать на импульсы F.

Трехразрядный реверсивный счетчик с последовательным переносом

Рассмотрим трехразрядный реверсивный счетчик с последовательным переносом (рис. 3.70).

В режиме вычитания входные сигналы должны подаваться на вход Т в. На вход Т с при этом подается сигнал логического 0. Пусть все триггеры находятся в состоянии 111. Когда первый сигнал поступает на вход Т в, на входе Т первого триггера появляется логическая 1, и он изменяет свое состояние. После этого на его инверсном входе возникает сигнал логической 1. При поступлении второго импульса на вход Т в на входе второго триггера появится логическая 1, поэтому второй триггер изменит свое состояние (первый триггер также изменит свое состояние по приходу второго импульса). Дальнейшее изменение состояния происходит аналогично. В режиме сложения счетчик работает аналогично 4-разрядному суммирующему счетчику. При этом сигнал подается на вход Т с. На вход Т в подается логический 0.
В качестве примера рассмотрим микросхемы реверсивных счетчиков (рис: 3.71) с параллельным переносом серии 155 (ТТЛ):
● ИЕ6 — двоично-десятичный реверсивный счетчик;
● ИЕ7 — двоичный реверсивный счетчик.

Направление счета определяется тем, на какой вывод (5 или 4) подаются импульсы. Входы 1, 9, 10, 15 — информационные, а вход 11 используется для предварительной записи. Эти 5 входов позволяют осуществить предварительную запись в счетчик (предустановку). Для этого нужно подать соответствующие данные на информационные входы, а затем подать импульс записи низкого уровня на вход 11, и счетчик запомнит число. Вход 14 — вход установки О при подаче высокого уровня напряжения. Для построения счетчиков большей разрядности используются выходы прямого и обратного переноса (выводы 12 и 13 соответственно). С вывода 12 сигнал должен подаваться на вход прямого счета следующего каскада, а с 13 — на вход обратного счета.