Главная » Статьи » Программирование » Программирование в BascomAVR

Тестируем АЦП на контроллере
Немного об АЦП 

   В результате работы АЦП-(аналого-цифровой преобразователь), из физической величины «напряжение» (не пригодной для цифровой обработки) мы получим некое число, которое будет характеризовать наше напряжение. Напряжение, которое подается на АЦП, как правило, лежит в определенном диапазоне (от 0 до положительной величины), например 0-5В. (На этапе разработки схемы, или на этапе программирования этот диапазон устанавливается) Задача АЦП «рассказать» программе о положении нашей величины в этом диапазоне. Для этого весь диапазон разбивается на большое число одинаковых «ступенек». Если АЦП 8-ми разрядное, то таких ступенек будет 256, если 10-ти разрядное, то 1024. Величина напряжения, которое мы измеряем, с некоторой точностью обязательно попадет на какую-нибудь «ступеньку». И номер этой ступеньки АЦП передаст программе для дальнейшей обработки.
 
    Задать диапазон можно, подавая напряжение сравнения (максимальное для диапазона) на один из выводов микроконтроллера (AREF или AVCC), также можно задействовать внутренний источник напряжения сравнения микроконтроллера. На этапе программирования будет необходимо указать, с чем будет сравниваться сигнал (AREF, AVCC или internal).

   Для примера можно подключить подстроечный или переменный резистор. Под рукой у меня оказался только переменный. Подключаем его к ацп. Центральный вывод на PA0, 2 других на плюс 5 вольт и GND. Результаты преобразования будем выводить на текстовый ЖК-модуль. Значения представлены на дисплее в качестве дискретных значений (0 до 1024).Переменный резистор в данной схеме является, по сути, регулируемым резисторным делителем напряжения, собственно то напряжение, которое получится на выходе с данного делителя мы и преобразуем в цифровую форму. Причём за счёт такого делителя, можно следить за разрядом батареи робота. Но об этом расскажу в конце статьи.



   И рассмотрим основные команды:

Code
Config adc = single, Prescaler = auto, Reference = Avcc


ADC = single / ADC = free

PRESCALER – делит внутреннюю частоту МК на 2,4,8,16,32,64 или 128 так как для работы АЦП требуется частота от 50-200 КГц, параметр

AUTO автоматически выберет наиболее подходящий коэффициент деления частоты.

Reference – выбор источника опорного напряжения. AREF – внешний источник, AVCC – напряжение питания схемы, INTERNAL – внутренний источник опорного напряжения на 2,56 в.


Процесс аналого-цифрового преобразования

Code
Start adc
V = GETADC(0)
Print V


START ADC – установка порта в режим аналого-цифрового преобразования.

STOP ADC – остановка режима аналого-цифрового преобразования.

V = GETADC(channel) – получение результата преобразования с конкретного канала (пина порта). Channel – номер канала АЦП.



Пример программы:


Code

$regfile = "m16def.dat"                                     ' используем ATmega16
$crystal = 16000000                                         ' частота установленного кварца 16 mHz
$lib "lcd4.lbx"     'используем 4-х битное подключение дисплея с помощью альтернативной библиотеки

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 20 * 4                                         'используем дисплей на 4 строчки по 20 знакомест в каждой
Config Adc = Single , Prescaler = Auto , Reference = Avcc       'конфигурация АЦП

'объявляем переменные
Dim A As Word
Start Adc                                                   'запускаем аналого-цифровое преобразование
Waitms 250                                                  'задержка 0,25 секунды
Cursor Off                                                  'отключаем отображение курсора на ЖКovanie/p
Cls                                                         'очитка дисплея
Locate 1 , 7 : Lcd "Enore.ru"                               'позиция курсора, выводим надпись
Locate 2 , 7 : Lcd "ADC test" : Waitms 2000                 'позиция курсора, выводим надпись, задержка 2 секунды

Do                                                          'главный цикл программы
 A = Getadc(0)                                              'считываем результат с пина 0 порта А.
  Locate 1 , 6                                              ' позиция курсора
  Lcd "ADC(0):" ; A ; "   "                                 'выводим результат преобразования на ЖК
  Waitms 100                                                ' зедержка 0,1 секунды
Loop
End  





   И так к ацп можно подключать любые датчики с аналоговым сигналом на выходе и путём не больших расчётов дискретных значений (те что выводятся от 0 до 1024) перевести в ясные и понятные для нас. Например, ИК-дальномер Sharp GP2Y0A21, о нём как раз и пойдёт речь в следующей статье.

   На фотке не точно сделал по центру, в программе этот момент поправлен. Скачать по ссылке исходник и прошивку. Удачи! 

   Ах да... Чуть не забыл рассказать о том как следить за разрядом батареи. В принципе ни чего сложно. К примеру нам нужно измерять 12 вольт, разрядность АЦП 1024 делим 12/1024=0,01171875 вольта на 1 разряд АЦП. Далее полученное значение следует умножать на АЦП, которое в зависимости от напряжения будет либо уменьшаться при разряде, либо увеличиваться при заряде. Программно будет выглядеть так:

Code

Config Adc = Single , Prescaler = Auto , Reference = Avcc  


Dim A As Word , B As Single , C As Integer

Do

A = Getadc(0)                                             

B = 12 / 1024

C = B * A

Print C ; " Volt"
                                       
Loop

На модуле универсального контроллера есть подстроечный резистор R9. Подключен он к основному питанию, которое подается на контроллер (Разъём Jmp1). Центральный вывод R9 выведен на разъём Jmp 10. Перед подключением разъёма на Ацп, тестером замеряем напряжение на выводе Jmp10. Напряжение на этом выводе не должно превышать 5,5 вольт(Иначе спалите один из вывод к которому собираетесь подключить подстроечный резистор). Подкручиваем резистор так, чтобы было 5 вольт и после этого подлючаем разъём jmp10 на любой вывод ацп(PA0-PA7).

Ссылка на предыдущую статью.

Ссылка
на следующую статью.


Источник: www.enore.ru
Категория: Программирование в BascomAVR | Добавил: Space (24.01.2011) | Автор: Кирилл E W
Просмотров: 2102 | Теги: делитель напряжение. как работать с, работа с ацп, ADC, ацп, аналого-цифровое преобразование
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]