Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование микроконтроллеров AVR. Учебное пособие.pdf
X
- •ПРЕДИСЛОВИЕ
- •1. АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРОВ AVR СЕМЕЙСТВА MEGA
- •1.1. Регистры микроконтроллера
- •1.2. Порты ввода/вывода
- •1.3. Периферийные устройства
- •1.3.1. Таймеры/счетчики
- •1.3.2. Аналого-цифровой преобразователь
- •2. ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ С
- •2.1. Вводные понятия в языке С
- •2.2. Правила приведения типов компилятора Code Vision AVR
- •2.3. Структура программы на языке С
- •3. СОЗДАНИЕ ПРОЕКТА С ИСПОЛЬЗОВАНИЕМ МАСТЕРА-ПОСТРОИТЕЛЯ
- •3.1. Выбор общих параметров проекта
- •3.1.1. Настройка портов
- •3.1.2. Настройка таймеров
- •3.1.3. Настройка параметров АЦП
- •3.1.4. Настройка параметров ЖКИ
- •3.2. Генерации программы
- •4. ПРИМЕНЕНИЕ МИКРОКОНТРОЛЛЕРОВ AVR ПРИ РАЗРАБОТКЕ ИЗМЕРИТЕЛЬНЫХ СИСТЕМ
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

На вход АЦП микроконтроллера необходимо подавать уровни изме-
~ 220 В
TV
R
2
R
4
R
1
R
3
+5 B
к АЦП
12 34
~=
10 mA ; 10 mA .
RR RR
II II≈= ≈ =
ряемых напряжений только положительной полярности, не превышающих
значения опорного напряжения АЦП, которое обычно устанавливается
равным +5 В. Кривые входного напряжения имеют постоянную и переменную составляющие, поэтому амплитудные значения двухполярных
сигналов переменного напряжения не должны превышать значений 2,5 В.
Вследствие этого на входе АЦП нужно установить положительное напряжение смещения, равное +2,5 В.
В этом случае для измерения напряжения на нагрузке необходимо использовать следующую схему измерительной цепи (рис. 4.21):
Рис. 4.21. Схема измерительной цепи напряжения
на нагрузке
Расчёт измерительной цепи напряжения на нагрузке с трансформатором напряжения производится с условием, что токи делителей должны
быть в пределах 10 мА:
Последовательность действий при расчете такая же, как в п. 4.4.
Для разработки схемы измерительной цепи с трансформатором тока,
показанной на рис. 4.22, произвести выбор токового шунта RШ и расчет
делителя напряжения R3, R4.
91

R
Ш
R
4
R
3
+5 B
к АЦП
Рис. 4.22. Схема измерительной цепи
тока нагрузки
Последовательность действий при расчете такая же, как в п. 4.5.
Описание работы программы. Блок-схемы алгоритмов
В данной работе АЦП используется в 10-разрядном режиме с вырав-
ниванием по правому краю, поэтому результат считывается из двух байтов регистра ADCW. Запуск АЦП и вывод каждого результата производятся через 250 мкс. Блок-схема алгоритма основной программы остается
неизменной, такой же, как и в п. 4.1 (рис. 4.2). Блок-схема алгоритма
п/программы обработки прерывания таймера-счетчика ТС0 такая же, как
в п. 4.4 (рис. 4.14). Блок-схема алгоритма п/программы обработки прерывания АЦП при измерении активной мощности представлена на рис. 4.23.
Формулы и алгоритмы, по которым производится вычисление действующего значения переменного тока, аналогичны тем формулам и алгоритмам, по которым рассчитывались действующие значения переменного
напряжения в п. 4.4 и переменного тока в п. 4.5.
Потребность в перемножении двух операндов при измерении мощности вынуждает производить смену каналов мультиплексора АЦП.
92

НАЧАЛО
Чтение Um
из ADCH
Вычитание
пост. сост Um
Номер
канала
i
Кол-во
отсчетов
80
Кол-во
периодов
50
ВОЗВРАТ
Чтение Im
из ADCH
Вычитание
пост. сост Im
Вычисление
мгн. мощн. Pm
Накопление
ΣPm за период
Обнуление
Um и Im
Накопление
ΣPd за 1 с
Наращивание
числа периодов
Изменение
номера канала
ввода i
Обнуление
числа периодов
Pd=0; Pds=0
Обнуление
числа отсчетов
Вычисление
Pds =ΣPd/50
Вывод
Pds на ЖКИ
Наращивание
числа отсчетов
Нет
Да
0
1
Да
Нет
Рис. 4.23. Блок-схема алгоритма п/программы обработки
прерывания АЦП при измерении мощности
93

Сначала происходит считывание входного сигнала в АЦП по каналу
напряжения (ADC0), а затем по каналу тока (ADC1).
После переноса результата преобразования из ADCH в переменную
Um с вычетом постоянной составляющей (2,5 В) осуществляется смена
канала ввода и результат преобразования из ADCW заносится в переменную Im с вычетом постоянной составляющей (2,5 В). Далее происходит
перемножение содержимого обеих переменных с занесением результата
в переменную Pm с последующим накоплением ее содержимого в течение
периода tC = 20 мс.
По окончании периода содержимое переменной Pm переносится в переменную Pd, в которой оно продолжает накапливаться в течение 50 периодов, т. е. 1 с. В конце каждой секунды происходит вычисление средней
арифметической мощности, конечный результат которой заносится в переменную Pds и подготавливается к выводу на ЖКИ.
По таким же алгоритмам, согласно приведенным формулам (4.2),
вычисляются действующие значения напряжения, тока и активной
мощности.
Содержимое переменных, участвующих в процессе, в конце каждого
цикла (через 1 с) должно обнуляться.
Фрагменты дополнительных кодов программы для измерения переменного тока представлены ниже: фрагмент с определениями глобальных
и локальных переменных (листинг 4.6.1), фрагмент п/программы обработки прерывания АЦП (листинг 4.6.2).
Листинг 4.6.1
static unsigned char input_index=0;
#define koef_u 139.88 // калибровочный коэффициент по
напряжению
#define koef_i 25.64 // калибровочный коэффициент по
току
unsigned char str1[16]; // строка для вывода результата
на ЖК-дисплей
94

signed long int Um=0,Im=0,Pm=0; // Um - мгн. знач.
напряжения, Im - мгн. знач. тока , Pm, Pd - действ. знач.
активной мощности
float Pds=0,Pd=0; // Pds - действ. средн. знач. активной
мощности
unsigned int otschet=0, // количество отсчетов АЦП за 1
период сети
period=0; // количество периодов за время накопления
результата (1 с)
// подпрограмма вывода данных на ЖК-дисплей
void lcd_output(void)
{
sprintf(str1,"P:%.2f Wt", Pds); // формат 1-й
строки
lcd_clear(); // очистка ЖК-дисплея
lcd_gotoxy(0,0); // определение позиции для вывода
1-го символа 1-й строки ЖКИ
lcd_puts(str1); // вывод 1-й строки
}
Листинг 4.6.2
// Read the AD conversion result
adc_data[input_index]=ADCW;
otschet++; // наращиваем счетчик количества отсчетов АЦП
за 1 период
if (input_index==0)
{Um=(adc_data[0]-512);} // результат при вводе с 0-го
канала АЦП за вычетом 512 бит, соответствующих напряжению
смещения +2.5 В
if (input_index==1)
{Im=(adc_data[1]-512); // результат при вводе с 1-го
канала АЦП за вычетом 512 бит, соответствующих напряжению
смещения +2.5 В
95

Pm+=(adc_data[0]-512)*(adc_data[1]-512); // накапливаем
мгновенную мощность
Um=0; Im=0; // обнуление результатов измерений
}
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) //
определение номера канала
input_index=0;
ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index; //
установка адреса канала
if (otschet==80) // если количество отсчетов АЦП =
80,то
{
Pd+=Pm*25/1048576; // сохранение количества выборок за
период
otschet=0;
Pm=0; // сброс переменных
period++; // наращиваем счетчик количества периодов
}
if (period==50) // если количество периодов = 50,то
{Pds=(Pd/50)*koef_u*koef_i; // действ. средн. знач.
активной мощности
Um=0; Im=0; Pm=0; Pd=0; // обнуление результатов
измерений
period=0;
lcd_output(); // вывод информации на ЖК-дисплей
}
96

После успешного завершения трансляции отлаженной программы
в среде CodeVisionAVR можно перейти к симуляции ее работы в программной среде PROTEUS. Для этого требуется сначала подготовить файл
Design-схемы для симуляции программы измерения активной мощности,
скриншот которого представлен на рис. 4.24, а затем загрузить в микроконтроллер симулятора сгенерированный при компиляции файл с расширением .cof.
Рис. 4.24. Скриншот файла Design-схемы
для измерения мощности
При правильной настройке программы показания мощности на ЖКИ
должны быть равны произведению напряжения и тока.
97

4.7. ПОДГОТОВКА ПРОГРАММЫ
Статор Ротор
1
2
3
e
ДЛЯ ИЗМЕРЕНИЯ СКОРОСТИ ВРАЩЕНИЯ
При измерении скорости вращения вала с помощью микроконтролле-
ра AVR следует сначала выбрать первичный преобразователь (датчик) скорости вращения ротора асинхронного двигателя, обеспечивающий выполнение условий, оговоренных в техническом задании. Для решения подобной задачи наибольшее распространение приобрел способ измерения оборотов, основанный на индукционном датчике, ось которого располагается
перпендикулярно оси ротора с ферромагнитным зубцом (рис. 4.25).
Рис. 4.25. Конструкция индукционного датчика:
1 – магнит; 2 – сигнальная обмотка; 3 – сердечник
В простейшем случае индукционный датчик состоит из катушки с об-
моткой, сердечника из магнитомягкой стали и постоянного магнита. Эти три
компонента составляют статор датчика. С магнитным полем статора взаимодействует ротор в виде диска с одним зубцом или зубчатого диска с количеством зубцов, определяемым условиями применения датчика. При вращении ротора в обмотке статора возникает переменная ЭДС. Когда один из
зубцов ротора приближается к обмотке, ЭДС в ней быстро возрастает и при
совпадении со средней линией обмотки достигает максимума, затем при
удалении зубца быстро меняет знак и увеличивается в противоположном
направлении до другого максимума. На графике рис. 4.26 отчетливо видна
крутизна изменения ЭДС, а момент перехода между двумя максимумами
соответствует соосному состоянию зубца ротора и оси датчика.
98

Зубец ротора
Полюс статора
U
ВЫХ
α,°
0
В
3
к
1
к
1
к
+9
В
0
В
Вых
VD
VT
Рис. 4.26. График зависимости напряжения
на выводах сигнальной обмотки датчика U
от угла поворота
α
вала ротора с зубцом
ВЫХ
Промышленность выпускает целый ряд датчиков такого класса, например датчик LJ12A3-4-Z/BX. Это индукционный, герметичный, пыле-
влагозащищенный, бесконтактный сенсор для определения частоты вращения, а также для подсчета числа оборотов на станках с ЧПУ и производственных линиях промышленного оборудования.
Датчик имеет транзисторный выход NPN полярности и нормально открытое состояние выхода (рис. 4.27, а).
а б
Рис. 4.27. Функциональная (а) и принципиальная (б)
схемы включения индукционного датчика
99

Для осуществления цифрового ввода сигнала в микроконтроллер
t
t
5
0,1
e
B
BU
0
0
необходимо преобразовать форму сигнала в прямоугольный импульс, при
этом достаточно одной полуволны. Любой повторяющийся сигнал можно
преобразовать в прямоугольный, подавая его на усилитель напряжения
таким образом, чтобы транзистор попеременно оказывался в состоянии
отсечки или насыщения.
В течение положительного полупериода входной сигнал удерживает
транзистор в режиме насыщения, а потенциал коллектора транзистора
близок к нулю; в течение отрицательного полупериода транзистор закрыт,
а напряжение на коллекторе равно +9 В. Диод, включенный между базой
и корпусом, ограничивает напряжение в отрицательном полупериоде
и предотвращает пробой при обратном смещении перехода база-эмиттер,
который может произойти при напряжении на входе ниже –6 В. Таким образом, выходной сигнал с делителя напряжения имеет прямоугольную
форму и амплитуду около 5 В. На рис. 4.28 приведены временные диаграммы исходного и преобразованного сигналов.
и преобразованного сигналов с индукционного датчика
Рис. 4.28. Временные диаграммы исходного
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
