Микроконтроллер в схеме регулятора скорости вращения – для новичков в радиоделе

April 19, 2014 by admin Комментировать »

Две переменные, которые были созданы, high_level и low_level, предназначены хранить длительности импульсов в миллисекундах

Конечно, до входа в цикл следует задать значение этих импульсов

Теперь, можно проверить в программе, скажем, ISIS, что мы получим меандр, который в точности (кроме амплитуды напряжения) повторит предыдущую схему

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

Рис336 Создание схемы образования меандра в программе

Чтобы следить за током, который меняется при изменении нагрузки, будем следить за напряжением на двигателе Можно следить за средним напряжением, но я хочу использовать измерение напряжения при задании высокого уровня на выходе RA0 Для программного измерения создадим макрос control_car

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

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

Я использую микроконтроллер PIC16F628A, следовательно, все полученные мною результаты будут относиться к нему Если вы используете другой контроллер, то проверьте полученные результаты, они могут отличаться от тех, о которых пойдёт речь ниже

Рис 337 Программа с дополнением вызова макроса

Следить за напряжением на двигателе поможет встроенный в микроконтроллер компаратор

Для работы компаратора следует провести настройку регистров Эти настройки выполняются во вставке на языке Си до входа в цикл

cmcon = 0xC6

trisa = 0x77 trisb = 0xFF

Рис 338 Подпрограмма и основная программа

В основной программе формируется импульсное напряжение, которое подаётся на двигатель При каждом положительном импульсе осуществляется выполнение подпрограммы В подпрограмме проверяется состояние входа RB0, к которому подключён выход компаратора На один из входов компаратора подано опорное напряжение, на другой вход подаётся измеряемое напряжение По результатам проверки длительность импульсов увеличивается или уменьшается Для этого мы изменяем величину  переменных high_level и  low_level, образующих время нахождения выхода в высоком и низком состоянии

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

Проверить программу на этой стадии (логику работы программы) можно с помощью программы ISIS

Рис 339 Проверка программы при одной величине измеряемого напряжения

Рис 3310 Проверка программы при другой величине измеряемого напряжения

Прежде, чем продолжить разработку программы, следует провести измерения с реальным коллекторным двигателем Чем я и намерен заняться У меня много лет лежит купленная на радиорынке микро дрель – двигатель 12DMG-103-02 с цанговым зажимом для сверла Очень удобно сверлить отверстия в плате

Подключив двигатель последовательно с резистором 10 Ом к источнику постоянного напряжения 5В, я провожу несколько измерений, которые заношу в таблицу

Сопротивление (Ом)

Напряжение (В)

Ток (мА)

Двигатель выключен

8

0

0

Холостой ход

4

84

Под нагрузкой

3

140

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

Рис 3311 Осциллограмма напряжения на двигателе на холостом ходу

На двигателе явно видны колебания напряжения, вызванные особенностями работы самого двигателя Поскольку предстоит наблюдать (измерять напряжение на двигателе) за двигателем в процессе его работы, эти колебания напряжения следует принимать во внимание Так при выборе опорного напряжения 4В, мы можем получить постоянные срабатывания компаратора и непрерывное изменение режима работы двигателя, только за счёт того, что напряжение постоянно колеблется  в пределах ±  100 мВ В этом случае  можно выбрать напряжение стабилитрона (или источника внутреннего опорного напряжения), скажем, 39В

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

Возможно, это не будет столь существенно, если напряжение на двигателе под нагрузкой уменьшается до 3В Но мы при этом намерены поднять напряжение до 4В И тогда колебания напряжения станут важны для определения правильных настроек схемы

Рис 3312 Осциллограмма напряжения на двигателе при нагрузке на валу

Без претензий на особенную точность, можно сказать, что колебания напряжения остались на прежнем уровне

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

Рис 3313 Добавление настройки регистров для использования опорного напряжения

Величина опорного напряжения определяется значением, записанным в регистр VRCON Сейчас напряжение будет меняться при изменении записанного числа от E0 до EF

Рис 3314 Проверка программы со встроенным опорным напряжением

Опорное напряжение можно несколько увеличить, если в регистре VRCON использовать число от D0 до DF

Рис 3315 Изменение максимального опорного напряжения

Применение микроконтроллера вместо операционного усилителя, особенно, если учесть те сложности, которые возникают при этом, было бы ничем не оправдано Если бы не тот факт, что микроконтроллер позволяет менять скорость вращения двигателя, меняя скважность импульсов

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

Если вам нужно избавиться от проводов между пультом управления и объектом, где установлен двигатель, скажем, на самоходной игрушке, вы можете использовать радиоканал

Теперь использование микроконтроллера будет не только оправдано, но и в полной мере удобно Достаточно легко реализовать программу подобного управления А можно и использовать встроенный модуль PWM (ШИМ) (если частота будет подходящей)

Рассмотрим в качестве примера управление скоростью вращения с помощью двух кнопок

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

Рис 3316 Изменения в основной программе

Название макроса я оставлю, а сам макрос перепишу Прежнюю переменную я переименую, чтобы переделок было меньше Для этого достаточно войти в основном меню в раздел Переменные пункта Правка, где выбрать переменную test и нажать кнопку Переименовать Я записываю новое имя: more И, чтобы не возвращаться к этому, создаю с помощью кнопки Добавить новую… переменную less Первая кнопка будет увеличивать скорость, вторая уменьшать, но, конечно, обе кнопки влияют на скважность импульсов И обе кнопки замыкаются на землю (устанавливают низкий уровень на входе)

Переделанный макрос, название которого теперь получается осмысленным, что-то вроде управления автомобилем, пока выглядит следующим образом:

Рис 3317 Переделанный макрос

Осталось решить одну проблему, которая часто возникает при использовании кнопок – дребезг контактов Программа при тактовой частоте 4 МГц (я использую внутренний тактовый генератор, чтобы не добавлять кварцевый резонатор) будет так быстро пробегать и основную ветвь и макрос, что дребезг будет воспринят ею, как многократное нажатие на кнопку Следовательно, скорость будет меняться, практически, неуправляемо Чтобы этого избежать, я добавлю две небольшие задержки в макросе car_control

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

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

Вы, бесспорно, понимаете, что простые изменения скважности, которые я привёл в примерах, призваны только продемонстрировать, как  это  делается  В  реальных  программах  изменения  должны  быть

«плавными», и они должны определяться результатами опытного определения необходимого шага при изменении скважности

Рис 3318 Антидребезговые меры

Осталось только проверить работу программы в ISIS

Рис 3319 Проверка управления двигателя с помощью кнопок

Остался ещё один момент в наших предварительных рассуждениях: выбранные основные времена соизмеримы с задержками, использованными в качестве антидребезговых мер Да и нажимать кнопки вы будете пусть 100 мс, а, скорее, больше Что обязательно скажется на работе устройства Что делать

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

Встроенный модуль ШИМ будет работать, пока вы нажимаете кнопки, а перепись его параметров займёт микросекунды

С использованием PWM в программе Flowcode в сегодняшних версиях есть небольшая проблема Проверяя работу ШИМ, например, в Proteus, можно обнаружить отсутствие импульсов на выходе PWM Решение этой проблемы можно найти на форуме http://wwwflowcodeinfo

Решение заключается в замене файла PIC_PWM в папке Components, расположенной там, где расположены все программы: то есть, в разделе Program Files, в папке Matrix Multimedia, где находится программа Flowcode 4, – на исправленный файл с тем же именем, который можно найти на сайте

Программа начинается с настроек: задания начального значения переменной, используемой для времени установки высокого уровня на выходе, задания параметров ШИМ и включения модуля

Переменная, которую мы будем менять, pulse_high, может принять в начале программы любое значение, для эксперимента выбрано значение 100

Мы предполагаем использование двух кнопок, которые будут соединять входы с землёй, поэтому сделана вставка на языке Си, включающая подтягивающие резисторы к входам: option_reg = 0x7F

Далее следует настройка модуля PWM

Рис 3320 Начальный участок программы, инициализация

Задаём период колебаний с учётом коэффициента предварительного деления О том, что это, как это выглядит, зачем оно нужно – обо всём этом лучше прочитать в справке по конкретной модели микроконтроллера Однако период, это ясно, а предварительное деление тактирования модуля PWM позволяет уменьшить частоту производимых им импульсов

Рис 3321 Задание периода колебаний на выходе PWM

Задав период, мы задаём длительность импульса, используя переменную, которую будем менять по командам, получаемым с пульта (от кнопок)

Рис 3322 Задание длительности импульса

Первый параметр, напомню, это номер канала Осталось включить модуль:

Рис 3323 Включение модуля

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

Включением модуля заканчивается настройка и инициализация Далее программа работает в бесконечном цикле, ожидая ввода команд: опрашиваем входы RB0 и RB1

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

Задержка в 10 мс призвана устранить влияние дребезга контактов при нажимании кнопки Если дребезг возникает и при отпускании кнопки, то такую же задержку можно вставить после цикла Длительность этой задержки определяется конкретными свойствами контактов кнопки

Цикл while more = 0 опрашивает кнопку, но ничего более не делает Это и есть блокирование программы на время, когда кнопка нажата

Затем следует изменение переменной pulse_high = pulse_high + 100 Это и есть команда

И, наконец, новое значение переменной передаётся в модуль PWM

Рис 3324 Обслуживание кнопки

Блок программы, обслуживающий вторую кнопку, повторяет всё написанное выше, только значение 100 вычитается из переменной

При желании можно выделить блоки программы по обслуживанию кнопок в подпрограмму Осталось проверить работу устройства в программе ISIS (Proteus)

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

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

Рис 3325 Проверка работы устройства в Proteus

Мы познакомились с работой аналогового автоматического регулятора скорости вращения вала двигателя постоянного тока

Мы постарались создать такое же цифровое устройство, что позволило нам лучше увидеть все

«подводные камни», которые могут встретиться на пути разработки устройства Мы придумали, как применить полученные знания для других целей

И,   главное,   мы   получили   практику   в   работе   с   программами   и   «живыми»   элементами электрических схем

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты