Добавил:
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 ПРИ РАЗРАБОТКЕ ИЗМЕРИТЕЛЬНЫХ СИСТЕМ
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Сопротивление шунта должно быть по возможности малым, чтобы не
создавать большое падение напряжения при значительных токах нагрузки.
В данной работе оно ограничивается значением напряжения, не превышающим 0,2 В при максимальном токе разряда.
Последовательность расчета делителя напряжения и схемы токоизмерительного шунта с усилителем напряжения рассмотрены в п. 4.1 и п. 4.2.
Отличие этой разработки от двух предыдущих заключается в изменении
схемы подключения усилителя напряжения DA1 к АЦП. Выходной сигнал
с делителя напряжения будет подаваться на вход АЦП по первому каналу
мультиплексора (ADC0), а сигнал с выхода усилителя напряжения будет
поступать по второму каналу мультиплексора (ADC1). Изменена также
и блок-схема алгоритма п/программы обработки прерывания АЦП.
Описание работы программы. Блок-схемы алгоритмов
Блок-схемы алгоритмов основной программы и п/программы обработки прерывания таймера/счетчика ТС1 такие же, как и в п. 4.1. Блоксхема алгоритма п/программы обработки прерывания АЦП при измерении
мощности разряда аккумуляторной батареи представлена на рис. 4.11.
Рассмотрим последовательность процедур, выполняемых после получения результата аналого-цифрового преобразования входного сигнала.
В данной работе АЦП используется в 8-разрядном режиме с выравниванием результата по левому краю, поэтому он считывается из старшего
байта ADCH. Запуск АЦП и вывод каждого результата производятся через
100 мс. Сначала происходит считывание входного сигнала в АЦП по каналу напряжения (ADC0), а затем по каналу тока (ADC1). После преобразования результаты, соответствующие напряжению, заносятся в переменную Um, а соответствующие току, – в переменную Im, затем перемножаются и суммируются. Проводится не менее 5 измерений по каналу
тока и каналу напряжения в течение контрольного времени 1 с, после
чего определяется среднее арифметическое значение мощности Ps, а по-
71

лученные после вычислений данные выводятся на ЖК-дисплей. Содер-
НАЧАЛО
Чтение Um
из
ADCH
Номер
канала
i
ВОЗВРАТ
Чтение Im
из
ADCH
Вычисление
и
накопление
мощности ΣPm
Обнуление
Um и Im
Изменение
номера канала
ввода
i
Обнуление
Um=0
; Im=
0
Pm
=0
;
Ps=0
Вычисление
среднего значения
мощности за
1
с
Ps
=
ΣPm
/5
Вывод
среднего
значения
мощности
Ps
на ЖКИ
Наращивание
числа измерений
0
1
Да
Нет
Кол-
во
измерений
10
жимое переменных, участвующих в процессе, в конце каждого цикла (через 1 с) должно обнуляться.
Рис. 4.11. Блок-схема алгоритма п/программы обработки
прерывания АЦП
72

Фрагменты дополнительных кодов программы для измерения мощности во время разряда аккумуляторной батареи представлены ниже: фрагмент с определениями глобальных и локальных переменных (листинг
4.3.1), фрагмент п/программы обработки прерывания АЦП (листинг 4.3.2).
Листинг 4.3.1
// #define c_u 1 // калибровочный коэффициент по
напряжению
// #define c_i 1 // калибровочный коэффициент по току
unsigned char str1[16], str2[16]; // строка для вывода
результата на ЖК-дисплей
float Um=0,Im=0,Pm=0; // Um - мгн. знач. напряжения ,Im мгн. знач. тока , Pm, Pd - действ.знач. активной мощности
float Us,Is,Ps; // Ps - среднее значение мощности
unsigned int ismeren=0; // количество измерений АЦП за 1
сек
// подпрограмма вывода данных на ЖК-дисплей
void lcd_output(void)
{
sprintf(str1,"U:%.1f V I:%.1f A", Us, Is); // составление
1-й строки
sprintf(str2,"P:%.2f Wt", Ps); // составление 2-й строки
lcd_clear(); // очистка ЖК-дисплея
lcd_gotoxy(0,0); // опред. позиции для вывода 1-го
символа 1-й строки ЖКИ
lcd_puts(str1); // вывод 1-й строки
lcd_gotoxy(0,1); // опред. позиции для вывода (1-й символ
2-й строки ЖКИ
lcd_puts(str2); // вывод 2-й строки
}
73

Листинг 4.3.2
{
static unsigned char input_index=0;
// Read the 8 most significant bits
// of the AD conversion result
adc_data[input_index]=ADCH;
if (input_index==0)
{
Um+=(adc_data[0])/256; // результат при вводе с 0-го
канала АЦП
}
if (input_index==1)
{
Im+=(adc_data[1])/256; // результат при вводе с 1-го
канала АЦП
Pm+=(adc_data[0])*(adc_data[1])*5/65536; // накопление
мгновенной мощности
}
// 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;
ismeren++; // наращиваем счетчик количества измерений АЦП
за 1 сек
if (ismeren == 10) // если количество измерений АЦП =
10,то
{
Us=Um; // вычисляем среднеквадратичное значение
напряжения
Is=Im; // среднеквадратичное значение тока
Ps=Pm; // вычисление средней мощности в течение 1 с
74

ismeren = 0; // сброс количества измерений АЦП
lcd_output(); // вывод информации на ЖК-дисплей
Pm=0; Ps=0; Um=0; Im=0; // обнуление результатов
измерений
}
После успешного завершения трансляции отлаженной программы
в среде Code Vision AVR можно перейти к симуляции ее работы в программной среде PROTEUS. Для этого требуется сначала подготовить файл
Design-схемы, скриншот которого представлен на рис. 4.12, а затем загрузить в микроконтроллер симулятора сгенерированный при компиляции
файл с расширением .cof.
Рис. 4.12. Скриншот файла Design-схемы для измерения мощности
при постоянном токе
При правильной настройке программы показания мощности на ЖКИ
должны быть равны произведению напряжения и тока.
75

4.4. ПОДГОТОВКА ПРОГРАММЫ
~ 220 В
TV
R
2
R
4
R
1
R
3
+5 B
к АЦП
ДЛЯ ИЗМЕРЕНИЯ ПЕРЕМЕННОГО НАПРЯЖЕНИЯ
При измерении переменного напряжения с помощью микроконтроллера
AVR следует соблюдать те же ограничения по отношению к максимальному
напряжению на входе АЦП, что и в п. 4.1. В этой разработке требуется выбрать из справочника [7] измерительный трансформатор напряжения и рассчитать схему делителя напряжения для ввода аналоговой информации
в АЦП.
На вход АЦП микроконтроллера необходимо подавать уровни измеряемых напряжений только положительной полярности, не превышающих
значения опорного напряжения АЦП, которое обычно устанавливается
равным +5 В. Кривые входного напряжения имеют постоянную и переменную составляющие, поэтому амплитудные значения двухполярных
сигналов переменного напряжения не должны превышать 2,5 В. Вследствие этого на входе АЦП нужно установить положительное напряжение
смещения, равное +2,5 В.
В этом случае для измерения напряжения на нагрузке необходимо использовать следующую схему измерительной цепи (рис. 4.13):
Рис. 4.13. Схема измерительной цепи напряжения на нагрузке
Расчёт измерительной цепи напряжения на нагрузке с трансформатором напряжения производится с условием, что токи делителей должны
быть в пределах 1 мА.
76

Из справочника [7] выбираем измерительный трансформатор напря-
5, 5 1, 7
550 Ом
ВВ
х
=
2
R
U
жения ТН30-220-50 с напряжением на вторичной обмотке U
= 5 B. Рас-
2ном
чет проводим при повышенном значении сетевого напряжения 220 + 10 % =
= 242 В, тогда напряжение U
2max
= 1,1U
= 5,5 B.
2ном
Падение напряжения на входе АЦП
UR2 = (5,5 · 180)/570 = 1,737 B < 1,77 В, условие выполняется.
Калибровочный коэффициент по напряжению c_u = 242/1,737 =
= 139,32.
Расчет делителя напряжения R1 и R2:
R1 + R2 = 5,5/10 · 10–3 = 550 Ом.
Из соотношения
определяем R2 = (1,7 · 550)/5,5 = 170 Ом,
тогда R1 = 550 – 170 = 380 Ом.
Из расчета следует, что сопротивления должны быть равны R1 = 380 Ом
и R2 = 170 Ом, но при выборе из стандартного ряда Е24 эти сопротивления
будут равны R1 = 390 Ом и R2 = 180 Ом.
Тогда падение напряжения
= (5,5 · 180)/570 = 1,7368 B < 1,77 В.
Расчет делителя напряжения R3 и R4:
R3 + R4 = 5/10 · 10–3 = 500 Ом.
Из этого следует, что сопротивления должны быть равны R3 = 250 Ом
и R4 = 250 Ом, но при выборе из стандартного ряда Е24 сопротивления будут равны R3 = 270 Ом и R4 = 270 Ом.
Описание работы программы. Блок-схемы алгоритмов
Блок-схема алгоритма основной программы остается неизменной, такой же, как и в п. 4.1. Таймер/счетчик ТС0 в этой структуре должен отрабатывать другой интервал времени, равный 250 мкс. Эта величина получается из расчета работы АЦП с оптимальной частотой преобразования,
равной 125 кГц, с предделителем 32: 4 МГц / 32 = 125 кГц, т. е. время од-
77

ного такта Т = 8 мкс. Если время полного преобразования АЦП составляет
НАЧАЛО
Реинициализация
стартового значения
таймера/счетчика ТС0
Запуск АЦП
через каждые 250 мкс
ВОЗВРАТ
ТС0
25 тактов, то оно соответствует времени 25 × 8 = 200 мкс. Следовательно,
за один период сети (20 мс) можно с надежным запасом в 50 мкс произвести 20 мс / 250 мкс = 80 отсчетов напряжения, или 80 отсчетов тока, или
40 отсчетов (измерений) мощности.
При тактовой частоте процессора, равной 4 МГц, промежутки времени 250 мкс можно отсчитывать с помощью таймера/счетчика ТС0 с предделителем 8: 4 МГц / 8 = 500 кГц; Т = 1/500 кГц = 2 мкс, тогда коэффициент пересчета равен КП = 250 мкс / 2 мкс = 125 импульсов. При таком коэффициенте в режиме OVERFLOW код для реинициализации будет равен
256 – 125 = 131 или 83 в шестнадцатеричной системе счисления.
Блок-схема алгоритма п/программы обработки прерывания таймера/
счетчика ТС0 представлена на рис. 4.14. Блок-схема алгоритма п/программы обработки прерывания АЦП при измерении переменного напряжения
представлена на рис. 4.15.
В данной работе АЦП используется в 8-разрядном режиме с выравниванием по левому краю, поэтому результат считывается из старшего байта
ADCH. Запуск АЦП и вывод каждого результата производятся через
250 мкс.
Рис. 4.14. Блок-схема алгоритма п/программы обработки
прерывания таймера/счетчика ТС0
78

НАЧАЛО
Кол-во
периодов
50
ВОЗВРАТ
Чтение Um
из ADCH
Вычитание
пост. сост из Um
Вычисление
квадрата
напряжения U
2
m
Накопление
ΣU
2
m
за период
Обнуление
Um
Вычисление
Наращивание
числа периодов
Обнуление
числа периодов
Ud=0; Uds=0
Обнуление
числа измерений
Вычисление
Uds =ΣUd/50
Вывод
Uds на ЖКИ
Наращивание
числа измерений
Нет
Да
Да
Нет
Кол-во
измерений
80
Накопление
ΣUd за 1 с
m
UUd
2
Σ=
Рис. 4.15. Блок-схема алгоритма п/программы обработки прерывания АЦП
при измерении переменного напряжения
79

Вычисление действующих значений напряжения, тока или мощности
2
0
1
,
T
U u dt
T
= ⋅
∫
2
0
1
,
T
I i dt
T
= ⋅
∫
ср
0
1
.
T
P u i dt
T
= ⋅⋅
∫
→∑
∫
dt t→∆
2
1
,
n
i
c
t
Uu
t
∆
=
∑
2
1
,
n
i
c
t
Ii
t
∆
=
∑
1
,
n
ii
c
t
P ui
t
∆
= ⋅
∑
в сети непосредственно связано с периодом сетевого напряжения (Т = 20 мс)
и осуществляется по следующим формулам [8]:
(4.1)
Для вычисления этих параметров с помощью микроконтроллеров
(цифровым методом) требуется произвести замену:
и
.
Величина ∆t представляет собой время дискретизации – в данном случае
∆t ≈ 250 мкс.
После перехода от аналоговой формы представления (4.1) к цифровой
формулы для вычисления указанных параметров будут иметь следующий
вид:
(4.2)
где n = tС / ∆t = 20 мc / 250 мкс = 80 отсч; period = Т / tС = 1 c / 20 мс =
= 50 периодов.
В процессе измерения производится непрерывное считывание мгновенных значений напряжения через первый вход АЦП (ADC0) микроконтроллера и занесение результата преобразования из ADCH в переменную Um с вычетом постоянной составляющей (2,5 В).
Содержимое переменной Um возводится в квадрат и происходит
накопление сумм квадратов напряжения в переменной Um в течение периода tC = 20 мс. В конце каждого периода происходит перенос содержимого Um в переменную Ud и переменная Um обнуляется. Таким образом,
за время T = 1 с производится накопление среднеквадратических значений
напряжения в течение 50 периодов сети. Затем, с целью усреднения полученного значения, эта сумма делится на 50. По таким алгоритмам, согласно приведенным формулам (4.2), вычисляются действующие значения
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
