Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование микроконтроллеров AVR. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
напряжения, тока и активной мощности. Полученные результаты подго­тавливаются к выводу на ЖК-дисплей в конце каждой секунды после начала измерений.
Содержимое переменных, участвующих в процессе, в конце каждого
цикла (через 1 с) должно обнуляться.
Фрагменты дополнительных кодов программы для измерения пере-
менного напряжения представлены ниже: фрагмент с определениями гло­бальных и локальных переменных (листинг 4.4.1), фрагмент п/программы обработки прерывания АЦП (листинг 4.4.2).
Листинг 4.4.1
#define c_u 139.32 // калибровочный коэффициент по напряжению
unsigned char str1[16]; // строка для вывода результата
на ЖКИ
signed long int Um=0; float Ud=0; float Uds=0; // Uds - действ. средн. знач. напряжения
unsigned int otschet=0, // количество отсчетов АЦП за 1 период сети period=0; // количество периодов за время накопления результата (1 сек)
// подпрограмма (функция) вывода данных на ЖК-дисплей void lcd_output(void) { sprintf(str1,"U:%.1f B", Uds); // формат 1-й строки lcd_clear(); // очистка ЖК- дисплея lcd_gotoxy(0,0); // определение позиции для вывода 1-го символа 1й строки ЖКИ lcd_puts(str1); // вывод 1-й строки }
81
вывод 1-й строки }
Листинг 4.4.2
otschet++; // наращиваем счетчик отсчетов АЦП за 1 период
Um+= (long)(adc_data -128)*(adc_data -128); //
накапливаем квадраты напряжения за 1 период с вычетом 128 бит, соотв. +2.5 В
if (otschet == 80) // если количество отсчетов АЦП =
80,то
{ Ud+=sqrt(Um/80)*5/256; // вычисление среднеквадратичного значения напряжения otschet=0; Um=0; // сброс переменных period++; // наращиваем счетчик количества периодов } if (period==50) // если количество периодов = 50,то { Uds=(Ud/50)*c_u; // действ. среднее знач. напряжения Ud=0; // обнуление промежуточных результатов измерений period=0; lcd_output(); // вывод информации на ЖК-дисплей }
После успешного завершения трансляции отлаженной программы в среде Code Vision AVR можно перейти к симуляции ее работы в про­граммной среде PROTEUS. Для этого требуется сначала подготовить файл Design-схемы для симуляции программы измерения переменного напря­жения, скриншот которого представлен на рис. 4.16, а затем загрузить в микроконтроллер симулятора сгенерированный при компиляции файл с расширением .cof.
82
Рис. 4.16. Скриншот файла Design-схемы для измерения
переменного напряжения
При правильной настройке программы показания напряжения на ЖКИ
должны совпадать с показаниями вольтметра.
4.5. ПОДГОТОВКА ПРОГРАММЫ
ДЛЯ ИЗМЕРЕНИЯ ПЕРЕМЕННОГО ТОКА
При измерении переменного тока с помощью микроконтроллера AVR
следует соблюдать те же ограничения по отношению к максимальному напряжению на входе АЦП, что и в п. 4.1. Из справочника [7] выбираем измерительный трансформатор тока типа ТК-20-20/5 и рассчитываем схе­му делителя напряжения для ввода аналоговой информации в АЦП.
На вход АЦП микроконтроллера необходимо подавать уровни изме­ряемых напряжений только положительной полярности, не превышающих значения опорного напряжения АЦП, которое обычно устанавливается
83
равным +5 В. Кривые входного напряжения имеют постоянную и пере-
R
Ш
R
4
R
3
+5 B
к АЦП
Ш3
~=
4
1,77 B ; 10 mA .
R RR
U II∆=≤≈
менную составляющие, поэтому амплитудные значения двухполярных сигналов переменного напряжения не должны превышать 2,5 В. Вслед­ствие этого на входе АЦП нужно установить положительное напряжение смещения, равное +2,5 В.
Для разработки схемы измерительной цепи с трансформатором тока,
показанной на рис. 4.17, произвести выбор токового шунта RШ и расчет делителя напряжения R3, R4.
Рис. 4.17. Схема измерительной цепи
тока нагрузки
Расчёт измерительной цепи тока нагрузки с трансформатором тока производится с условием, что токи делителей напряжения должны быть в пределах 10 мА:
Проводим расчет токового шунта, соблюдая следующие условия: максимальное падение напряжения при I
Напряжение ∆URШ = U
АЦПвх
Шmax
→∆U
≤ 1,77 B.
RШ
= 1,77 В соответствует U
АЦПвых
= 5 В.
84
Максимальный ток, протекающий через шунт при I
Ш max
18 5
4,5 А.
20
I
⋅
= =
Ш
Шmax
R
Ш
1, 77
0,393 Ом.
4,5
U
R
I
∆
= = =
Шрас Ш Ш
2
20,25 0,39 7,89 Вт.P IR
= = ⋅=⋅
= 18 A:
1max
Расчет сопротивления шунта RШ:
В качестве шунта выбираем токоизмерительный резистор сопротив-
лением RШ = 0,39 Ом из стандартного ряда Е24.
Расчетная мощность, выделяемая на таком шунте, при максимальном
токе
Выбранная мощность шунта RШ должна быть ≥ Р
, РШ = 10 Вт.
Шрас
Выбираем токовый шунт AH (Rх24)10W0.39, внешний вид которого
показан на рис. 4.18.
Рис. 4.18. Токовый шунт AH (Rх24)10W0.39
85
Падение напряжения на выбранном шунте при максимальном токе
Ш
ШШ
4,5 0,39 1,755
В
R
U IR
∆= =×=
⋅
вых
3,4
3
5
500 Ом.
10 10
дел
U
R
I
−
= = =
∑
⋅
меньше предельно допустимого:
< 1,77 В.
Расчет величин сопротивлений R3, R4 с учетом рекомендаций:
Из расчета следует, что сопротивления равны R3 = 250 Ом и R4 = = 250 Ом, но из стандартного ряда Е24 должны быть выбраны величины стандартных сопротивлений R3 = R4 = 240 Ом или R3 = R4 = 270 Ом.
Описание работы программы. Блок-схемы алгоритмов
В данной работе АЦП используется в 8-разрядном режиме с выравни­ванием по левому краю, поэтому результат считывается из старшего байта ADCH. Запуск АЦП и вывод каждого результата производятся через 250 мкс. Блок-схема алгоритма основной программы остается неизменной, такой же, как на рис. 4.2. Блок-схема алгоритма п/программы обработки прерывания таймера/счетчика ТС0 такая же, как на рис. 4.14. Блок-схема алгоритма п/программы обработки прерывания АЦП при измерении пе­ременного тока представлена на рис. 4.19.
Формулы и алгоритмы, по которым производится вычисление дей­ствующего значения переменного тока, аналогичны тем формулам и алго­ритмам, по которым рассчитывались действующие значения переменного напряжения в п. 4.4. После занесения результата преобразования из ADCH в переменную Im с вычетом постоянной составляющей (2,5 В) содержи­мое переменной Im возводится в квадрат и происходит накопление сумм квадратов тока в переменной Im в течение периода tC = 20 мс. В конце каждого периода происходит перенос содержимого Im в переменную Id и переменная Im обнуляется.
86
НАЧАЛО
Кол-во
периодов
50
ВОЗВРАТ
Чтение Im
из ADCH
Вычитание
пост. сост из Im
Вычисление
квадрата тока
I
2
m
Накопление
ΣI
2
m
за период
Обнуление
Im
Вычисление
Наращивание
числа периодов
Обнуление
числа периодов
Id=0; Ids=0
Обнуление
числа измерений
Вычисление
Ids =ΣId/50
Вывод
Ids на ЖКИ
Наращивание
числа измерений
Нет
Да
Да
Нет
Кол-во
измерений
80
Накопление
ΣId за 1 с
2
Id I m= Σ
Рис. 4.19. Блок-схема алгоритма п/программы обработки
прерывания АЦП при измерении переменного тока
Таким образом, за время T = 1 с производится накопление средне-
квадратических значений тока в течение 50 периодов сети. Затем с целью
87
усреднения полученного значения эта сумма делится на 50. По таким ал­горитмам, согласно приведенным формулам (4.2) вычисляются действу­ющие значения напряжения, тока и активной мощности. Полученные ре­зультаты подготавливаются к выводу на ЖК-дисплей в конце каждой се­кунды после начала измерений.
Содержимое переменных, участвующих в процессе, в конце каждого цикла (через 1 с) должно обнуляться.
Фрагменты дополнительных кодов программы для измерения пере­менного тока представлены ниже: фрагмент с определениями глобальных и локальных переменных (листинг 4.5.1), фрагмент п/программы обработ­ки прерывания АЦП (листинг 4.5.2).
Листинг 4.5.1
#define koef_i 2.56 // калибровочный коэффициент по току
unsigned char str1[16]; // строка для вывода результата на ЖКИ signed long int Im=0; // Im - мгновенное значение тока float Id=0; // Id - действующее значение тока float Ids=0; // Ids - действующее среднее значение тока unsigned int otschet=0; // количество отсчетов АЦП за 1 период сети // подпрограмма (функция) вывода данных на ЖК-дисплей void lcd_output(void) { sprintf(str1,"I:%.1f A", Ids); // формат 1-й строки lcd_clear(); // очистка ЖК-дисплея lcd_gotoxy(0,0); // определение позиции для вывода 1-го символа 1-й строки ЖКИ lcd_puts(str1); // вывод 1-й строки }
88
Листинг 4.5.2
otschet++; // наращиваем счетчик количества отсчетов АЦП за 1 период
Im+= (long)(adc_data -128)*(adc_data -128); //
накапливаем квадраты тока за 1 период с вычетом 128 бит,
соответствующих напряжению +2.5 В if (otschet == 80) // если количество отсчетов АЦП = 80,то
{ Id+=sqrt(Im/80)*5/256; // вычисление среднеквадратичного значения тока otschet=0; Im=0; // сброс переменных period++; // наращиваем счетчик количества периодов } if (period==50) // если количество периодов = 50,то { Ids=(Id/50)*koef_i; // действ. среднее знач. тока Id=0; // обнуление промежуточных результатов измерений period=0; lcd_output(); // вывод информации на ЖК-дисплей
}
После успешного завершения трансляции отлаженной программы в среде Code Vision AVR можно перейти к симуляции ее работы в про­граммной среде PROTEUS. Для этого требуется сначала подготовить файл Design-схемы для симуляции программы измерения переменного напря­жения, скриншот которого представлен на рис. 4.20, а затем загрузить в микроконтроллер симулятора сгенерированный при компиляции файл с расширением .cof.
89
Рис. 4.20. Скриншот файла Design-схемы для измерения
переменного тока
При правильной настройке программы показания тока на ЖКИ долж-
ны совпадать с показаниями амперметра.
4.6. ПОДГОТОВКА ПРОГРАММЫ
ДЛЯ ИЗМЕРЕНИЯ АКТИВНОЙ МОЩНОСТИ
При измерении переменного напряжения и тока с помощью микро-
контроллера AVR следует соблюдать те же ограничения по отношению к максимальному напряжению на входе АЦП, что и в п. 4.1. В этой раз­работке требуется выбрать из справочника [7] измерительный трансфор­матор напряжения на входное напряжение 220 В +10 %, измерительный трансформатор тока при токе нагрузки 43 А и рассчитать схему делите­ля напряжения R1, R2 и R3, R4 (рис. 4.13), а также выбрать измеритель­ный трансформатор тока и рассчитать схему делителя напряжения R1, R2 и R3, R4 (рис. 4.17) для ввода аналоговой информации в АЦП.
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]