Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 4 / LAB_4_MPS

.docx
Скачиваний:
3
Добавлен:
08.04.2022
Размер:
709.85 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

Отчет

по Лабораторной работе №4

Тема: Программирование АЦП

Студент гр. 7503 _____________________ Марсаль Г. О.

Преподаватель _____________________ Анисимов А. А.

Санкт-Петербург

2020

Цель работы: Исследование принципов работы АЦП микроконтроллера ATtiny15. Получение навыков программирования АЦП на языке Assembler, пользования средами разработки AVR Atmel Studio 7 и Proteus 8.

Используемые инструменты: Интегрированная среда разработки AVR Atmel Studio 7, САПР Proteus 8; методические указания к выполнению работы.

Теоретическое обоснование темы работы

Все микроконтроллеры семейства AtMega и некоторые из семейства Tiny (как, например, микроконтроллер AtTiny15) имеют встроенный блок аналого-цифрового преобразования (далее в тексте – АЦП). Он может использоваться для замены простого, но значительно менее функционального компаратора. Этот АЦП десятиразрядный и многоканальный (количество каналов может варьироваться от 4 до 16 в зависимости от модели микроконтроллера). Модуль АЦП всего один, на его входе стоит аналоговый мультиплексор, подключающий этот вход к различным выводам МК, что позволяет проводить разделенные во времени измерения сразу нескольких независимых аналоговых величин. Входы мультиплексора могут работать как по отдельности (в несимметричном режиме, измеряя напряжение относительно земли), так и объединяться в пары (только для некоторых моделей микроконтроллеров), измеряя дифференциальное напряжение. Также опционально возможно усиление входного сигнала с фиксированным коэффициентом 10 или 100.

Встроенный АЦП представляет собой преобразователь последовательного приближения с устройством выборки-хранения и фиксированным числом тактов преобразования, равным 13 (14 для дифференциального измерения). Данный класс АЦП занимает промежуточное положение по быстродействию, стоимости и разрешающей способности между последовательно-параллельными и сигма-дельта АЦП и находит широкое применение в системах управления, контроля и цифровой обработки сигналов.

Для выполнения первого преобразования (при первоначальной настройке АЦП) требуется 25 тактов. Тактовая частота преобразования формируется с помощью делителя от опорной частоты микроконтроллера при помощи соответствующего управляющего регистра, рекомендованная частота преобразования – от 50 до 200кГц, в этом диапазоне наиболее вероятно получение наиболее достоверного результата измерения. Модуль АЦП имеет разрешение в 10 бит, и, по заявлениям разработчиков, абсолютная погрешность не превышает двух младших значащих разрядов (погрешность не более 0,25 % шкалы измерения). Для достижения подобных результатов необходимо применение как аппаратных, так и программных способов повышения точности измерений, с которыми можно дополнительно ознакомиться в фирменной документации.

Также возможно два режима преобразования: непрерывный (free-running mode), когда по завершении одного цикла преобразования сразу же следует другой, и одиночный (single), когда последовательность циклов регулируется вручную. Первый способ не отличается высокой точностью измерений и целесообразен только при необходимости максимальной скорости преобразований.

Настройка АЦП. Ознакомимся с регистрами, задающими режим работы аналого-цифрового преобразователя.

ADMUX (ADC Multiplexer Selection Register) – регистр, определяющий текущий канал АЦП, источник опорного напряжения и режим хранения данных. В этом регистре нас больше всего интересуют биты, описанные далее.

REFS1:0 (Reference Selection Bits) – определяют источник опорного напряжения, относительно которого будет происходить преобразование. Опорное напряжение должно быть как можно более стабильным, без помех и колебаний по напряжению – от этого во многом зависит точность работы АЦП. Все возможные варианты приведены в табл.7.1

Таблица 7.1Выбор источника опорного напряжения АЦП

REFS[1:0]

Источник опорного напряжения

00

Напряжение питания

01

Внутренний ИОН на 1.1В

10

Внутренний ИОН на 2.2В

11

Внутренний ИОН на 4.3В

Внутренний источник опорного напряжения не очень точный и подходит только для нетребовательных приложений.

MUX4:0 (Analog Channel and Gain Selection Bits) – данные биты определяют текущий вход, с которого мы будем считывать аналоговый сигнал. Также с помощью этих битов выставляется коэффициент усиления при измерении в дифференциальном режиме. Возможные конфигурации для выбора текущего источника входного сигнала представлены в табл. 7.2.

Таблица 7.1Выбор каналов мультиплексора

Данные с АЦП записываются в регистровую пару ADCH:ADCL, откуда их можно считать для дальнейшей обработки. Причем здесь есть один важный момент. Регистровая пара 16 разрядная, а АЦП имеет разрядность 10 бит. В итоге лишь один регистр занят полностью, а второй занимают лишь оставшиеся два бита. Исходя из этого факта, выравнивание может производиться как по правому краю – старшие два бита в ADCH, а младшие в ADCL, так и по по левому – старшие биты в ADCH, а два младших бита в ADCL:

[9][8][7][6][5][4][3][2]:[1][0][x][x][x][x][x][x]

[x][x][x][x][x][x][9][8]:[7][6][5][4][3][2][1][0]

Для чего же хранение данных АЦП-преобразования организовано именно таким образом? Так как в двух младших битах чаще всего достаточно сложно получить значимые данные (скорее всего, мы получим там всякий мусор и помехи), мы можем использовать выравнивание по правому краю и считывать данные преобразования только из одного регистра ADCH, экономя время и программный код. За выравнивание отвечает бит ADLAR. Записывая в него логический ноль, получаем выравнивание по правой границе, записываем единицу – по левой.

Рассмотрим подробнее управляющий регистр ADCSR (ADC Control and Status Register), отвечающий за работу АЦП:

ADEN (ADC Enable) – записывая единицу в этот бит, разрешаем использование АЦП.

ADIE (ADC Interrupt Enable) – разрешение прерывания по завершению цикла преобразования.

ADPS2:0 (ADC Prescaler Select Bits) – позволяет выбрать коэффициент делителя тактовых импульсов для установки частоты преобразований (в непрерывном режиме). Значение коэффициента делителя определяется в соответствии с табл. 7.3.

Таблица 7.3. Выбор коэффициента деления

ADPS2

ADPS1

ADPS0

Коэффициент деления

0

0

0

2

0

0

1

2

0

1

0

4

0

1

1

8

1

0

0

16

1

0

1

32

1

1

0

64

1

1

1

128

ADFR (ADC Free Running Select) – записывая единицу в этот бит, выбираем непрерывный режим преобразования.

ADSC (ADC Start Conversion) – записывая единицу в этот бит, мы начинаем очередной цикл преобразования в одиночном режиме работы (или первый цикл при непрерывном), который занимает 13 тактов (первый цикл – 25 тактов, здесь осуществляется первоначальная инициализация АЦП), при условии, что с помощью бита ADEN разрешено использование АЦП.

ОБРАБОТКА РЕЗУЛЬТАТОВ РАБОТЫ

Код написанной программы для МК AtTiny15 на языке Assembler:

; ----- Начало таблицы прерываний -----

.ORG 0x0000

RJMP RESET

.ORG 0x0005 ; Адрес прерывания по переполнению

RJMP TIM0_OVF

.ORG 0x0008 ; Адрес прерывания по выполнению АЦП

RJMP ADC_CMPLT

.ORG INT_VECTORS_SIZE

RESET:

; ----- Инициализация периферии -----

LDI R16,0b01000010

OUT TIMSK,R16 ; Разрешаем прерывания

LDI r16, (1 << PB1) ; Настройка PB1 как выхода

OUT DDRB, r16

LDI R16, 0b00000010

OUT PORTB, R16

LDI R16, 0b00000000 ; Начальное значение таймера

OUT TCNT1,R16

LDI R16, 0b00000001 ; Задаем режим работы генератора

OUT TCCR0, R16

LDI R16, 0b11110101 ; Задаем режим работы ШИМ

OUT TCCR1, R16

LDI R16, 0b00100000 ; Выбираем канал АЦП и настраиваем сдвиг данных в регистре данных АЦП

OUT ADMUX, R16

CLR R16

SEI ; Глобальное разрешение прерываний

MAIN: RJMP MAIN ; Бесконечный пустой цикл

TIM0_OVF: ; Прерывание по переполнению таймера T0

LDI R16, 0b11001000 ; Запускаем АЦП

OUT ADCSR, R16

RETI

ADC_CMPLT:

LDI R19, 45

IN R17, ADCH ; Cчитываем данные из старшего регистра АЦП

OUT OCR1A, R19

OUT OCR1B, R17

RETI

Схема, смоделированная в Proteus 8 приведена на рис. 1.

Рисунок 1 – Вид схемы

Уровень аналогового сигнала задается путём перемещения движка потенциометра и изменяет уровень от 0 до 5 В. Параллельно выходу потенциометра включен вольтметр, регистрирующий уровень сигнала на входе МК.

ШИМ сигнал снимается с выхода PB1 и идёт на цепочку интегрирования и осциллограф. Соответственно, яркость светодиода изменяется в зависимости от скважности импульсов, задаваемой при помощи считанного из АЦП значения.

Результат работы схемы приведен на рис. 2, 3, 4, 5.

Рисунок 2 – Уровень напряжения на входе 0 В (положение потенциометра – 100%)

Рисунок 3 – Уровень напряжения на входе 2.11 В (положение потенциометра – 70%)

Рисунок 4 – Уровень напряжения на входе 3,0 В (положение потенциометра – 50%)

Рисунок 4 – Уровень напряжения на входе 3,95 В (положение потенциометра – 25%)

Как видно из рисунков, результат работы схемы соответствует ожиданиям, следовательно, работа была выполнена верно.

Выводы: В данной работе было произведено моделирование аналого-цифрового преобразования на базе МК AtTiny15, с использованием прерываний по переполнению таймера. Использование АЦП является важным навыком при разработке медицинской техники, предназначенной для измерения и регистрации биологических сигналов.

Соседние файлы в папке Лаба 4