Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование микроконтроллеров AVR. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
ВОЗВРАТ
Чтение Um
из
ADCH
Накопление
текущих значений
ΣUm за 1 с
Обнуление
Um
= 0
Обнуление
Um=0; Us=0;
Вычисление средних
значений напряжения
за 1
с
Us =ΣUm
/10
Вывод
на ЖКИ
средних значений
напряжения Us
Наращивание
числа измерений
Да
Нет
Кол-
во
измерений
10
НАЧАЛО
Фрагменты дополнительных кодов программы для измерения посто-
п/программы обработки прерывания АЦП
Рис. 4.4. Блок-схема алгоритма
при измерении постоянного напряжения
янного напряжения представлены ниже: фрагмент с определениями гло­бальных и локальных переменных (листинг 4.1.1), фрагмент п/программы обработки прерывания АЦП (листинг 4.1.2).
61
Листинг 4.1.1
#define c_u 2.97 // калибровочный коэффициент по напряже­нию unsigned char str1[16]; // строка для вывода результата на ЖК-дисплей
unsigned float Um=0, Us=0; // Um - мгн. знач. напряжения // Us - среднее значение напряжения
unsigned int ismeren=0; // количество измерений АЦП за 1
с // подпрограмма вывода данных на ЖК-дисплей
void lcd_output(void) { sprintf(str1,"U:%.1f V", Us); // составление 1-й строки
lcd_clear(); // очистка ЖК-дисплея lcd_gotoxy(0,0); // опред. позиции для вывода 1-го символа 1й строки ЖКИ lcd_puts(str1); // вывод 1-й строки
}
Листинг 4.1.2
Um+=(adc_data)*5/256; // результат при вводе с 0-го канала АЦП
ismeren++; // наращиваем счетчик количества измерений АЦП
за 1 сек if (ismeren == 10) // если количество измерений АЦП = 10,то
{
Us=Um*c_u/10; // вычисляем среднеарифметическое значение
напряжения ismeren = 0; // сброс количества измерений АЦП lcd_output(); // вывод информации на ЖК-дисплей Um=0, Us=0; // обнуление результатов измерений
} }
62
После успешного завершения трансляции отлаженной программы в среде Code Vision AVR можно перейти к симуляции ее работы в про­граммной среде PROTEUS. Для этого требуется сначала подготовить файл Design-схемы, скриншот которого представлен на рис. 4.5, а затем загру­зить в микроконтроллер симулятора сгенерированный при компиляции файл с расширением .cof.
Рис. 4.5. Скриншот файла Design-схемы для измерения постоянного напряжения
При правильной настройке программы показания напряжения на ЖКИ должны совпадать с показаниями вольтметра.
4.2. ПОДГОТОВКА ПРОГРАММЫ
ДЛЯ ИЗМЕРЕНИЯ ПОСТОЯННОГО ТОКА
При измерении постоянного тока с помощью микроконтроллера AVR следует соблюдать те же ограничения по отношению к максимальному напряжению на входе АЦП, что и в п. 4.1. В этой разработке требуется со-
63
ставить и рассчитать схему токоизмерительного шунта с усилителем
АБ max
I
R
2
∞
R
1
U
ВЫХ
R
4
R
3
R
Ш
ИСТОЧНИК
ПИТАНИЯ
DA1
-
+
ЗАР
I
Ш
Ш
max
Δ
0,2
0,0125 Ом.
16
U
RI= = =
напряжения для ввода аналоговой информации в АЦП.
В качестве примера рассмотрим схему измерения тока заряда стартерной
аккумуляторной батареи при максимальном токе
= 16 А (рис. 4.6).
Токовый шунт всегда включается в разрыв цепи нагрузки, в данном
примере между источником питания и аккумуляторной батареей GB1. Па- дение напряжения с шунта RШ подается на вход усилителя напряжения DA1, с выхода которого сигнал будет поступать на вход АЦП по одному из каналов мультиплексора (ADC0).
Рис. 4.6. Схема для расчета токоизмерительного шунта и усилителя
Сопротивление шунта должно быть по возможности меньшим, чтобы
не создавать большое падение напряжения при значительных токах нагрузки. В данной работе оно ограничивается значением величины паде­ния напряжения, не превышающим 0,2 В при максимальном токе заряда.
Рассмотрим пример расчета при максимальном токе заряда I
= 16 А.
max
Согласно закону Ома сопротивление шунта RШ рассчитывается по формуле
Из справочных данных [5] выбираем токоизмерительный резистор
фирмы Bourns CRA2512 сопротивлением RШ = 0,01 Ом, внешний вид ко­торого показан на рис. 4.7.
64
2
Ш ШШ
256 0,01 2,56 Вт.Р IR= =⋅=⋅
Ш ШШ
16 0, 01 0,16 ВU IR∆= =⋅ =⋅
АЦП
Ш
5
31,25,
0,16
U
U
K
U
= = =
∆
U
K
2
1
30 кОм
30
1 кОм
u
R
KR= = =
Рис. 4.7. Внешний вид токоизмерительного резистора CRA2512
Расчетная мощность, выделяемая на таком шунте, при максимальном токе равна
Выбранная мощность шунта должна быть РШ ≥ Р
, 3 Вт > 2,56 Вт.
Шрасч
Выбран токоизмерительный резистор типа CRA2512-FZ-R010 сопро­тивлением 0,01 Ом, мощностью 3 Вт.
Падение напряжения на выбранном шунте при максимальном токе должно быть меньше 0,2 В. Проверяем параметр ∆UШ.
< 0,2 В.
Рассчитываем коэффициент усиления операционного усилителя (ОУ) [6]:
значит,
≤ 31,25.
Из стандартного ряда Е24 выбираем сопротивления для усилителя:
R1 = R3 = 1 кОм – сопротивления резисторов R1 и R3;
R2 = R4 = 30 кОм – сопротивления резисторов R2 и R4.
тогда реальное напряжение на выходе ОУ и входе АЦП
U
АЦПвх
Калибровочный коэффициент по току c_i для записи в программу:
c_i = I
max/UАЦП
, принимаем КU = 30,
= 0,16×30 = 4,8 В.
= 16/4.8 = 3.33.
65
Описание работы программы. Блок-схемы алгоритмов
ВОЗВРАТ
Чтение Im
из
ADCH
Накопление
текущих значений
тока Σ
Im
за
1
с
Обнуление
Im =
0
Обнуление
Im
=0;
Is=0
;
Вычисление
среднего значения
тока за 1 с
Is
=
ΣIm
/
10
Вывод
на ЖКИ
среднего значения
тока
Is за
1 с
Наращивание
числа измерений
Да
Нет
Кол-
во
измерений
10
НАЧАЛО
Структура программы, в которой необходимо проводить непрерывные измерения, должна быть построена по принципу бесконечного цикла с ис­пользованием прерываний, инициируемых таймером и АЦП, как и в п. 4.1. Блок-схемы алгоритма основной программы и алгоритма п/программы об­работки прерывания таймера/счетчика ТС1 такие же, как и на рис. 4.2 и 4.3.
Блок-схема алгоритма п/программы обработки прерывания АЦП при измерении тока заряда аккумуляторной батареи представлена на рис. 4.8.
Рис. 4.8. Блок-схема алгоритма п/программы обработки прерывания АЦП
при измерении постоянного тока
66
В приведенном примере АЦП используется в 8-разрядном режиме
с выравниванием результата по левому краю, вследствие чего он считыва­ется из старшего байта ADCH в переменную adc_data. После этого итого­вый результат накапливается в течение 10 периодов в переменной Im, а затем вычисляется среднее арифметическое значение тока, которое за­писывается в переменную Is. Полученные после вычислений данные через 1 с выводятся на ЖКИ. Содержимое переменной Is, участвующей в про­цессе, в конце каждого цикла (через 1 с) должно обнуляться.
После создания шаблона программы его требуется дополнить кодами,
содержащими вычислительные и логические процедуры, необходимые для получения результата.
В этих кодах обычно назначаются имена как глобальных, так и ло-
кальных переменных и их определения, а также присутствует фрагмент п/программы обработки прерывания АЦП.
Фрагменты дополнительных кодов программы для измерения посто-
янного напряжения представлены ниже: фрагмент с определениями гло­бальных и локальных переменных (листинг 4.2.1), фрагмент п/программы обработки прерывания АЦП (листинг 4.2.2).
Листинг 4.2.1
#include <stdio.h> //библиотека стандартных функций вывода(sprintf)
// Alphanumeric LCD functions
#asm .equ __lcd_port=0x16 ; PORTD #endasm
#include <alcd.h>
#define c_i 3.33 // калибровочный коэффициент по току unsigned char str1[16]; // строка для вывода результата на ЖК-дисплей
67
float Im=0,Is=0; // Im - мгн. знач. тока unsigned int ismeren=0; // количество измерений АЦП за
1 с // подпрограмма вывода данных на ЖК-дисплей
void lcd_output(void)
{
sprintf(str1,"I=%.2fA", Is); // составление 1-й строки lcd_clear(); // очистка ЖК- дисплея lcd_gotoxy(0,0); // опред. позиции для вывода 1-го символа 1-й строки ЖКИ lcd_puts(str1); // вывод 1-й строки
}
Листинг 4.2.2
{
float adc_data; // Read the 8 most significant bits // of the AD conversion result adc_data=ADCH; Im+=(adc_data)*5/256; // результат при вводе с 1-го канала АЦП
// Select next ADC input ADMUX=(ADC_VREF_TYPE);
ismeren++; // наращиваем счетчик количества измерений АЦП за 1 с if (ismeren == 10) // если количество измерений АЦП = 10,то { Is=Im*c_i/10; // среднее арифметическое значение тока
68
ismeren = 0; // сброс количества измерений АЦП lcd_output(); // вывод информации на ЖК-дисплей Im=0,Is=0; // обнуление результатов измерений }
После успешного завершения трансляции отлаженной программы в среде Code Vision AVR можно перейти к симуляции ее работы в про­граммной среде PROTEUS. Для этого требуется сначала подготовить файл Design-схемы, скриншот которого представлен на рис. 4.9, а затем загру­зить в микроконтроллер симулятора сгенерированный при компиляции файл с расширением .cof.
Рис. 4.9. Скриншот файла Design-схемы для измерения
постоянного тока
При правильной настройке программы показания тока на ЖКИ долж­ны совпадать с показаниями амперметра.
69
4.3. ПОДГОТОВКА ПРОГРАММЫ ДЛЯ ИЗМЕРЕНИЯ МОЩНОСТИ
U
ВЫХ
U
ВЫХ
R
2
R
1
R
4
R
3
R
Ш
GB1
DA1
+
R
1
R
2
I
РАЗР
R
Н
+
-
-
∞
ПРИ ПОСТОЯННОМ ТОКЕ
При измерении мощности во время разряда аккумуляторной батареи
следует соблюдать те же ограничения по отношению к максимальному напряжению на входе АЦП, что и в п. 4.1, а также условия, ограничиваю­щие падение напряжения на шунте, которое не должно превышать 0,2 В при максимальном токе разряда, как в п. 4.2.
В этой разработке требуется составить и рассчитать схему делите­ля напряжения и схему токоизмерительного шунта с усилителем напря­жения.
Токовый шунт всегда включается в разрыв цепи нагрузки, в данном примере между аккумуляторной батареей GB1 и нагрузкой (рис. 4.10). Па­дение напряжения с шунта RШ подается во входную цепь усилителя нап­ряжения DA1, с выхода которого сигнал будет поступать на вход АЦП.
Рис. 4.10. Схема для расчета токоизмерительного шунта
и усилителя
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]