В прошлой статье мы рассмотрели теоретически основы измерения веса руды в сосуде ШПУ по измерению силы, развиваемым двигателем при подъеме. Схемотехнически подготовили сигналы тока и напряжения статора двигателя для обработки их в МК. В этой статье мы рассмотрим программную реализацию вычисления массы поднимаемого груза на МК. Для того что бы приступить к написанию программы для МК, необходимо разобраться, как правильно нужно данные сигналы в МК обрабатывать. Итак приступим.

Сигналы тока и напряжения представляют собой синусоидальный сигнал, в основе своей содержащий основную частоту питающей сети (для наших реалий 50 Гц). Про гармоники и прочие составляющие в сетевом напряжении говорить не будем, они есть и оказывают влияние на качество сети и динамические свойства электродвигателей. На любом производстве с ними борются по мере сил, так что их влияние, пусть и не ничтожно, но все-таки мало. Останавливаться на этом не станем.


И опять формулы и немного теории


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



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

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

Вычисление кода АЦПo можно реализовать несколькими способами.

  • Завести напряжение с формирователя средней точки на аналоговый вход МК и при начале измерения напряжения считывать код АЦПo и его использовать при расчетах.
  • Для таких измерений требуется использовать источники опорного напряжения высокой точности, а также хорошо стабилизированные источники питания аналоговых цепей, поэтому значение АЦПo можно вычислить один раз, после настройки схемы и использовать это значение в дальнейшем.
  • Что то еще можно придумать интересного…


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

Чем больше будет замеров за период сетевого напряжения (то есть частота дискретизации), тем выше точность наших расчетов. Обработка полученных результатов после сканирования канала перед началом нового измерения наложит свои ограничения на эту частоту. Тут нужно подходить со здравым смыслом и аппаратных возможностей того МК, на который будет возложена данная задача. Точность можно повысить, если замеры производить не за один период, а за несколько. Главное условие чтоб в количество замеров укладывалось кратное число периодов исследуемого сигнала.

Для сигнала тока все с точностью также как и для напряжения.

Для расчета активной мощности используется данная формула:

Перепишем, с учетом наших реалий:

Значит в один и тот же момент времени, нам необходимо снять показания с двух каналов АЦП (напряжения и тока), затем провести необходимые вычисления, и перейти к следующему замеру и т.д. Отсюда рождается примерно такой алгоритм.

Алгоритм, для измерения величин на МК.


  1. По сигналу с детектора начала измерений, который заведен на ножку МК обладающему аппаратным обработчиком прерывания по изменению уровня сигнала, запускаем таймер для отсчета равных временных интервалов при измерении сигналов тока и напряжения. Устанавливаем счетчик измерений в 0.
  2. По прерыванию от таймера, производим считывания кода АЦП с двух аналоговых каналов. Производим необходимые вычисления, по предварительной обработке сигналов. Увеличиваем счетчик измерений на 1. Если значение счетчика не достигло нужной величины N замеров, то переходим к началу пункта 2.
  3. Если количество замеров равно N, останавливаем таймер. Устанавливаем флаг окончания измерений.
  4. В основном цикле по флагу окончания измерений производим окончательные расчеты по измеренным данным.
  5. После всех расчетов, запускаем прерывание от детектора начала измерений и все итерации повторяются снова.


Программа МК на этом не ограничится. Результаты измерений и вычислений должны будут взаимодействовать с человеком, в виде отображения на дисплее, или отправки по интерфейсу на ПК, или организовывать связь с другим отображающим прибором или устройством. В данной реализации, МК будем взаимодействовать с ПК по интерфейсу RS-232 по протоколу ModBus RTU. Реализация данного протокола на МК не сложна и не требовательна к аппаратным ресурсам МК.

Выбор аппаратной платформы и расчет частоты дискретизации обработки сигналов


Требований к аппаратной платформе МК для данной задачи не заоблачные. 8-ми битные микроконтроллеры вполне справятся с этой задачей. Для визуализации работы программы на МК и полученных результатов воспользуемся симулятором Proteus. Для понимания принципов решения данной задачи этого хватит. Этот симулятор поддерживает множество разнообразных МК, но все же не все. В этой реализации я покажу пример на МК от фирмы Microchip семейства PIC18F. Модель данного МК есть в протеусе.

МК PIC18F2580. Рассмотрим его основные характеристики. Идем на сайт производителя и скачиваем даташит на данное семейство. Вот таблица «возможностей» данного МК.


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

Для промежуточных вычислений, необходимо измеренные величины возводить в квадрат и суммировать, а после производить деление на количество замеров и извлечение квадратного корня. Деление даже целого числа, довольно затратная операция для МК, в плане быстродействия, так что лучше её заменять битовым сдвигом, то есть количество измерений стоит брать кратное степени 2.

Все остальные преобразования будут происходить после остановки таймера, то есть вне прерывания в основном цикле программы.
Результат преобразования с АЦП в данном МК представляет собой 10-ти битное значение, после возведения в квадрат, получим 20 битное значение. Зададимся 4-х байтным регистром хранения суммы квадратов измерений АЦП, то есть 32 бита, следовательно, максимальное количество замеров, до наступления переполнения нашего 32-х битного регистра, составляет 2^12. Приличное значение. Для вычисления активной мощности, где есть значение знака, один бит нам становится недоступен. Так что количество замеров уменьшается до 2^11. Добавим здравого смысла и ограничимся количеством замеров N = 2^9 = 512.

Теперь определим количество полных периодов, которые будут укладываться в наше количество замеров. Возьмем для начала 5 полных периодов, т.е. 100 мс во временной шкале. Следовательно, время переполнение аппаратного таймера составляет Т = 100мс/512 = 195,3125 мкс. Отсюда частота дискретизации f = 1/Т = 1/195,3125*10-6 = 5120 Гц. Вполне вменяемая величина, как для точности, так и необходимого быстродействия нашего МК.

Время выполнения одной инструкции для данного МК максимально составляет 0,1 мкс. Так что за время «тиканья» аппаратного таймера до следующего прерывания, мы сможем обработать 1953,125 инструкций что, несомненно, должно хватить нам с «головой». Но полученное число не целое. А тактирование аппаратных таймеров, которые являются 8-ми или 16-ти битными происходит от тактового генератора, равного частоте после PLL деленной на 4. То есть мы не сможем настроить таймер таким образом, что бы он за 512 равных промежутков измерений отсчитал ровно 100 мс. Выхода как всегда несколько.

  • Найти кварц, не целочисленной кратности. Например, на 6,4 МГц
  • Ограничатся 500 замерами, то есть не степенью 2, и производить в основном цикле деление, а не битовый сдвиг.


Для МК других производителей и архитектур, такой проблемы может не возникнуть.

В данном примере, «экзотический» кварцевый резонатор искать не будем. Так что нагрузим немного процессор МК математическими операциями.

Промежуточный итог

Количество измерений за 5 полных периодов сетевого напряжения будет 500. Значит, временной интервал аппаратного таймера составит 200 мкс. Частота дискретизации в таком случае получится 5000 Гц.

Настройка АЦП и таймера МК


Обратимся к даташит на семейство PIC18F2580 в частности всего, что касается АЦП. Для проведения измерений с помощью АЦП необходимо руководствоваться некоторыми аспектами:

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


Согласно даташиту, время на 10-ти битное преобразование необходимо 11 Tad. Где, Tad должно быть >= 2 мкс. Этим гарантируется наибольшая точность, при преобразовании.

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

Время, необходимое для зарядки конденсатора модуля АЦП, возьмем из примера, которое равно 12,86 мкс. Время для преобразования, вычислим исходя из неравенства Tad>=2 мкс. Тактирование преобразования настраивается в регистре ADCON2. И может иметь следующие значения:

  • 2 Tosc
  • 4 Tosc
  • 8 Tosc
  • 16 Tosc
  • 32 Tosc
  • 64 Tosc
  • Internal RC Oscillator


В нашем случае, при тактировании МК от 40 МГц после PLL, Tosc = 0,1 мкс, следовательно, Tad = 3,2 мкс, то есть 32 Tosc.

Итого, для одного преобразования АЦП, понадобится время Tацп = 12,86+11*3,2 = 48,06 мкс. Для двух каналов 96,12 мкс. Переполнения аппаратного таймера у нас составляет 200 мкс. Следовательно, на все вычисления остается: 200 — 96,12 = 103,88 мкс. Должно хватить.
Настроим таймер для обработки значений с АЦП.

Будем использовать модуль TMR0. Он может работать как в 8-ми битном режиме, так и в 16-ти битном. У него есть предделитель. Тактируется как от внешнего источника, так и от внутреннего.

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

Отображение результатов


Для связи с внешним миром, будем использовать обычный периферийный модуль USART, с реализацией протокола ModBus RTU. Программная реализация для МК семейства PIC16F рассказана в данной статье. Таблицу регистров заполним по мере написания программы.

Симулятор протеус, позволяет использовать компонент, работающий с COM портом системы, как виртуальным, так и физическим. В качестве конечного потребителя данных по протоколу ModBus RTU будем использовать OPC сервер, в принципе любой фирмы. OPC сервер обеспечивает опрос, отображение результатов опроса своими инструментами, что в данном случае является полным набором. Данные по стандарту OPC он может передать множеству сторонних приложений. SCADA пакетам, например.

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

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


Автоматизация процесса вычисления средней точки


Вначале статьи, было объявлено, что вычисление кода АЦП средней точки для каждого канала будет автоматизировано:
«немного автоматизируем данную процедуру определения значения АПЦ0 для каждого используемого канала»

Давайте рассмотрим алгоритм такого автоматического вычисления.

Измерение сигналов у нас происходит по вычислению среднеквадратичного значения. В начальный момент времени, когда мы включили устройство, в энергонезависимой памяти у нас для кода АПЦo обоих каналов записаны нули. Отключим источники наших сигналов, трансформаторы тока и напряжения, желательно у источников. Значит на вход АЦП, у нас будет приходить постоянное напряжение средней точки возможно с какой-нибудь помехой от длинной кабельной линии. Производим вычисление среднеквадратичного значения постоянного напряжения по заложенному алгоритму измерения сигналов. По команде, например по сети по протоколу ModBus RTU, мы эти вычисленные значения заносим в АПЦo для соответствующего канала, также обновляем данные в энергонезависимой памяти. Эти значения при хорошо стабилизированном питании аналоговых цепей и использовании точного источника опорного напряжения практически никак не будут меняться во времени.

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

Заключение


Рассмотрели алгоритм измерения сигналов, поступающих с трансформаторов тока и напряжения. Провели анализ необходимых настроек аппаратных модулей МК. Теперь приступим к написанию собственно программы для МК.

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

Комментарии (23)


  1. Daffodil
    19.01.2016 08:40

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


    1. Helixa
      19.01.2016 08:51
      +4

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


      1. olloy
        19.01.2016 12:07
        -1

        Вы прям с языка сняли) Почему не использовать весы? Ну кроме неагрументированного «громоздкие и дорогостоящие»


        1. Helixa
          19.01.2016 12:17
          +1

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


          1. olloy
            19.01.2016 12:24
            -1

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


            1. Helixa
              19.01.2016 12:29
              +1

              На счет простоты, очень спорный вопрос. К тому же устойчивая и бесперебойная работа в агрессивной среде — тоже, как показывает практика, очень проблематично добиться малой кровью и редким вмешательством (постоянной настройкой, наладкой).


              1. olloy
                19.01.2016 12:48
                -1

                Я об этом и пишу. Вы утверждаете, что поделие на коленке, выполненное на PIC'е, проще и надежнее, чем сертифицированная система на гарантии, используемая по всему миру?)


                1. Helixa
                  19.01.2016 12:55
                  +1

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


                1. Helixa
                  19.01.2016 12:59
                  +1

                  На счет гарантии, она же не вечна, и заказчик остается один на один с системой или вынужден платить лишние деньги на доп. обслуживание. К тому же, руда, поднятая ШПМ, складируется, затем при транспортировки в места обогащения, она взвешивается, или взвешивается отдельно — то есть дополнительные накладные расходы при технологическом учете. А данное устройство в эксплуатации по требует 150 кВт*ч в месяц электроэнергии.


                  1. olloy
                    19.01.2016 13:09
                    -1

                    Мне кажется вы все равно меня не слышите)
                    Все эти замечательные микроконтроллеры хороши на даче, вместе с ардуинами-малинами, итп, но на заводе, я бы предпочел устройство, которое прошло через правильный проектный институт, которое выпускается уже черт знает сколько лет, у которого есть мануал, поддержка, гарантийное и пост-гарантийное обслуживание (пусть за деньги) и прочие подобные преимущества.
                    А преимуществ этого устройства я не вижу, кроме конечно голословного утверждения «да» про надежность и отказоустойчивость, из вашего комментария. Вы парой постов ранее и аварийную кнопку на NO контакты посадили, утверждая, что это правильно.
                    Извините, нет, не убедили.


                    1. Helixa
                      19.01.2016 13:24
                      +1

                      Так никто не запрещает, разработать полноценное устройство, работающее по такому принципу. Пройти все испытания, сертификацию и т.д. Обзавестись мануалом и все такое. Эти статьи описывают сам принцип измерения веса по току статора.
                      На счет аварийной кнопки и использование её НО контакта, можно продолжить дискуссию на этот счет, что бы достичь истины. Такое применение имеет место быть и это не считается ошибкой. И что за аксиома по умолчанию, что все аварийные кнопки только НЗ?


                      1. olloy
                        19.01.2016 13:35

                        ))) Это не аксиома, это стандарт (набор стандартов), который неплохо было бы прочесть перед проектированием.


                        1. Helixa
                          19.01.2016 13:43
                          +1

                          Ткните пожалуйста носов в описание данного стандарта. По мне так это тянется еще из релейной логики, которая повсеместно замещается ПЛК. К тому же второй контакт НЗ кнопки аварийного стопа «обязательно» заводим на вход ПЛК, и по срабатыванию дублируем отключение. Один только НО контакт использовать нельзя, против этого ничего не имею против.


                          1. olloy
                            19.01.2016 13:51

                            Вы не писали о втором контакте.
                            Набор стандартов большой.
                            Начать лучше с ISO 13850:2015 — Safety of machinery — Emergency stop function — Principles for design
                            Потом IEC 60204 — Electrical equipment of machines
                            Затем EN/IEC 62061

                            Данные лучше перепроверить конечно, их часто обновляют. Вообще все то, что связано с безопасностью, лучше перепроверять.


                            1. Helixa
                              19.01.2016 13:57
                              +1

                              А что нить местного разлива из российских стандартов, типа ГОСТ есть? Я понимаю что все эти ISO и т.д. прочно входят уже залезли в нашу жизнь. Единственно, о чем хотелось спросить: не уж то для обеспечения аварийной остановки такого оборудования, как мельница измельчения на обогатительной фабрике, необходимо в АСУ использовать ПЛК с характеристикой F?

                              Кроме того, поменяем контроллер, и возьмем не 314, а например 315F. Буква F означает Failsafe.


                              1. olloy
                                19.01.2016 14:06

                                Есть отдельные документы, которые регламентируют и обосновывают математически решение «нужен F или не нужен». Стандарты SIL и PL определяют оценки характеристик безопасности, с учетом вероятностей опасных сбоев в час.
                                Для ПЛК есть стандарт IEC 61508. В России, полагаю это МЭК. Просто вместо IEC напишите МЭК и посмотрите. Справедливо и для других.

                                «Типа ГОСТ» — не скажу. Уверен, что есть, но я занимался проектированием не в России.
                                Уверен, что в техзадании должен быть перечень стандартов, как обязательных, так и отраслевых.


                                1. Helixa
                                  19.01.2016 14:14
                                  +1

                                  Спасибо за разъяснения. Качество ТЗ, по своему опыту, скажу, что оставляет желать лучшего. Хорошо если в нем расписаны все необходимые параметры и функции системы. Часто приходится доказывать заказчику о необходимости в дополнительных элементах для безопасной работы оборудования.


                    1. siv237
                      23.01.2016 04:40

                      У вас похоже слишком радужный взгляд через розовые очки на так называемые «сертифицированные решения». Я постоянно сталкиваюсь с ними по роду деятелности и хочу вас уверить, что зачастую наколенные решения оказываются на голову надежнее, проще и дешевле так как в период после развала СССР получали сертификаты в технологических областях очень сырые продукты и мутные компании.
                      Наличие сертификата в отрасли на тех. решение ничего не гарантирует в плане качества во всяком случае в России.


                      1. olloy
                        24.01.2016 00:39

                        ох, как увлекательно.
                        попробую ответить. во-первых, я никогда не использовал и не планирую использовать никакого оборудования производства бывшего ссср в цепях аварийного отключения. именно по названным причинам.
                        во-вторых, аргумент «хочу вас уверить» — совсем не аргумент, уж простите)
                        я никогда не поверю, что «наколенные решения на голову надежнее», хотя бы потому, что никогда не ставил наколенных поделок на потенциально опасных объектах.


  1. kelegorm
    19.01.2016 11:26
    +1

    А ток статора — это надежный источник информации? А если колебания напряжения в сети будут?

    P.S. У меня отец занимался математическими моделями усреднения руды, всякие бункера придумывал.


    1. Helixa
      19.01.2016 11:34
      +2

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


  1. ipswitch
    19.01.2016 11:31

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


  1. RiddleRus
    20.01.2016 05:34
    +1

    Отличная статья! Спасибо! Больше АСУ ТП и PLC в массы =))