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

ВОЗВРАТ
Чтение 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
