Реанимация старых лабораторных стендов при помощи микроконтроллеров

imageВ НГТУ, где я учусь на факультете энергетики, основная масса лабораторных работ проходит на очень старых стендах. Неверные показания измерительных приборов, постоянные сбои и поломки, да и просто неудобное управление вызывает массу неудобств и мешает изучению исследуемых физических процессов. В связи с этим у меня и моего преподавателя возникла идея усовершенствования таких стендов при помощи микроконтроллеров.

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

За основу был взят микроконтроллер Atmega32. Был найден рефлективный датчик ZX-03 при помощи которого можно было отслеживать частоту появления белой метки на валу ротора, и небольшой LСD дисплей для вывода информации. Микроконтроллер программировался при помощи самодельного программатора, работающий через MAX-232, и AVRprog. Программа была написана на языке Си при помощи AVRStudio.

Алгоритм работы устройства довольно прост. Датчик генерирует определённый сигнал в зависимости от отражающей способности поверхности на которую он направлен. Микроконтроллер условно делит получаемые сигналы по уровню излучения на тёмные и светлые. Белая метка, наносимая на вал ротора, воспринимается как светлая полоса, остальная же его поверхность – как тёмная. Засекая при помощи внутреннего таймера время прохождения чёрной и белой полос, микроконтроллер получает время одного оборота ротора машины, а затем вычисляет частоту и выводит результат на дисплей. Для повышения точности измерений, время оборота сначала суммируется несколько раз, чтобы при вычислении частоты использовать среднее его значение. Далее приведён код, непосредственно осуществляющий измерения:


TIM16_WriteTCNT1(0); // обнуляем таймер  
while (1) // Ждем конца черной полосы
{ 
	adc = Read_ADC(); //считываем показания датчика
	if(adc>0x280) // проверяем, не началась ли белая полоса
		break;
}
while (1) // Ждем конца белой полосы
{ 
	adc = Read_ADC(); //считываем показания датчика
	if(adc<0x280) // проверяем, не началась ли чёрная полоса
		break;
}
// Тут уже считаем значение счетчика, которое отражает время одного оборота, измеренное в тактах 
counter=TIM16_ReadTCNT1();



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

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

Использовать EEPROM для запоминания произведённых измерений не составило большого труда. В стандартную библиотеку AVRStudio входят простые и понятные функции для управления этим видом памяти.
Реализовать управление коротким замыканием оказалось немного сложнее. Для этого пришлось создать каскад из двух реле разной мощности, одно из которых находится внутри тахометра и осуществляет управление другим более мощным реле, непосредственно коммутирующим короткое замыкание. Кроме того, для осуществления замыканий были применены прерывания, что позволило осуществлять коммутации не мешая работе самого тахометра.

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

image
Датчик ZX-03 Reflector

image
Тахометр, собранный на макетной плате

image
Работающий тахометр

image
Устройство, размещённое в коробке от обувной щётки

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

Комментарии 28

    +9
    Вам уважение и похвалы.
    Хорошо бы, министерству образования тоже что-нибудь в голову пришло. С разбегу так.
      +9
      Сейчас проблем с выбором корпуса быть не должно. А устройство будет выглядеть как прибор.
        +5
        Нечасто встретишь проект, который начинается с реальной необходимости, а не просто с красивой идеи. Молодцы!
          0
          НГТУ это Новосибирский Государственный Технический Университет?
            +1
            Возможно так же Нижегородский
              0
              Судя по статье скорее всего все же наш родной Новосибирский :)
              0
              Да
              0
              Похожая проблема в лабе :) Есть старый комплекс (80-х годов) для обработки сигнала с лазерного интерферометра и вывода временной зависимости сигнала вместе с первой и второй производной на экран старого-престарого компьютера. Софт на компьютере специфичный настолько, что завести его на каком-то другом железе не удалось :)

              Пока что рассматривается два пути — АЦП на базе микроконтроллера или звуковая карта в качестве такавого. Как только что-нибудь решим, сваяю топик :)
                0
                Отдельный прибор на базе МК определённо лучше.
                  0
                  Согласен: со звуковой картой все равно нужно будет амлитудно модулировать сигнал, чтобы обойти возможные нелинейности полосы пропускания.
                    0
                    Конечно. Всё-таки её аналоговый тракт рассчитан на работу со звуковыми частотами. Да и проще на МК, уж поверьте, при их стоимости/доступности/куче наработок.
                    Ну и интереснее :)
                +2
                А я бы рекомендовал добавить хотя бы примитивную фильтрацию для работы с аналоговыми сигналами и вместо этого:
                if(adc>0x280) // проверяем, не началась ли белая полоса
                ...
                if(adc<0x280) // проверяем, не началась ли чёрная полоса

                делал бы так:

                #define EPS 10
                
                if(adc > (0x280 + EPS) ) // проверяем, не началась ли белая полоса
                ...
                if(adc < (0x280 - EPS) ) // проверяем, не началась ли чёрная полоса
                  0
                  А ещё лучше — марять среднее значение, и уже от него отталкиваться, тогда не будет проблем с заменой датчика или изменением освещения.
                    0
                    s/марять/мерять
                      0
                      согласен. работая с аналоговым сигналом лучше брать во внимание его среднее значение.
                      0
                      Ну, датчик сам является источником своего освещения, поэтому может мерить даже в темноте.
                      А за показания прибора и так берётся среднее значение, вычисленное после нескольких измерений.
                      0
                      Можно пожалуйста поподробнее?
                        +1
                        Измеренные аналоговые сигналы зачастую подвержены шумам и как бы «дребезжат» вокруг своего значения. Поэтому если аналоговый сигнал будет в окрестностях 0x280 то проверки вида:
                        if(adc>0x280) // проверяем, не началась ли белая полоса
                        ...
                        if(adc<0x280) // проверяем, не началась ли чёрная полоса

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

                        Нечто подобное происходит и с обыкновенными вещественными числами в ПК. Хоть там и дело в представление чисел с плавающей запятой на машинном уровне, но погрешность точно так же существует.
                          0
                          Спасибо, всё понял.
                          Это как ток возврата в реле или петля гестерезиса)
                            0
                            Это и есть ни что иное, как гистерезис. Только программный.
                      +1
                      За такую деятельность только положительные и уважительные отзывы!
                      Такие примеры вдохновляют :)
                        0
                        А еще лучше — нарисовать свою этикетку :) Прибор с маркировкой выглядит солиднее, да и работать с им проще :)
                          0
                          Sorry, это к комментарию про этикетку этажом ниже :)
                          +1
                          Предлагаю оторвать (счистить, рамочить, срезать) бумажку с коробки из-под обуви. Уж точно будет выглядеть лучше.
                            0
                            Уже сделано)
                            0
                            а поясните в статье вот этот момент
                            «программатора, основанного на микросхеме MAX-232, и AVRprog»

                            я конечно знаю что такое АВР-прог, да в нем есть микросхема мах232, но там еще много разных микросхем, и этому программатору надо еще и внешнее питание.

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

                            хотя да, нэти привет %)
                              0
                              Там говорится про самодельный программатор, работающий через max232, а под AVRprog подразумевается программа для прошивки микроконтроллера.
                                0
                                да я забыл поставить тег «зануда» )
                                так то я все понимаю, но надо бы обозначить что работает программатор через мах232, а то могут подумать, что оно программируется через рс-порт. и побегут пробовать.

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

                            Самое читаемое