Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование микроконтроллеров AVR. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Сопротивление шунта должно быть по возможности малым, чтобы не
создавать большое падение напряжения при значительных токах нагрузки. В данной работе оно ограничивается значением напряжения, не превы­шающим 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]