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

КР2 / КР2

.pdf
Скачиваний:
35
Добавлен:
08.04.2022
Размер:
1.99 Mб
Скачать

Параллельные интерфейсы, безусловно, имеют свои преимущества. Они крайне просты в реализации с точки зрения аппаратного и программного обеспечения. Но они требуют слишком много проводов и, как ни парадоксально, из-за этого работают слишком медленно.

Все сигналы от передатчика к приёмнику должны поступать одновременно. Но гарантировать время прохождения сигнала для всех линий параллельного интерфейса на больших частотах очень тяжело, при этом неизбежно искажается форма передаваемого сигнала. Таким образом, даже если вы передаете меньше данных за один такт при помощи последовательного интерфейса, становится возможным использовать гораздо более высокие частоты, что и приводит к более высокой скорости передачи данных.

На сегодняшний день последовательные интерфейсы полностью вытеснили параллельные, во всяком случае для бытового применения. Для персональных компьютеров общим стандартом для обмена данными с периферией стал USB интерфейс, практически полностью заменив собой RS-

232 (рис.2). Связь через последовательный порт с использованием интерфейса RS-232 когда-то была популярным методом передачи данных. На задней панели некоторых компьютеров, особенно старых, среди разъёмов можно заметить D-образный штекер с 9 контактами, также известный как COM-порт (от слова communication).

Рис.2 – Внешний вид кабеля USB – COM-порт (RS-232)

COM-порт был неотъемлемой частью большинства компьютеров на протяжении последних 30 лет. Хотя многие новые системы полностью отказались от стандарта RS-232 в пользу USB интерфейса, он до сих пор используется в системах промышленной автоматики, различных исследовательских и измерительных приборах. COM-порты все еще используются в этих областях, поскольку они крайне просты, надёжны, поддерживаются любой операционной системой, а их функционал очень хорошо стандартизирован. Последовательный порт не требует дополнительных драйверов или специализированного программного обеспечения, и

пользователи могут легко взаимодействовать с COM-портом при помощи распространённых программ, таких как Матлаб и Labview.

Все микроконтроллеры семейства Mega, на которых работают платы Arduino, имеют в своем составе аппаратный блок универсального последовательного интерфейса – UART. По структуре это обычный асинхронный последовательный протокол как и RS-232, только с другими логическими уровнями, т.е. передающая сторона по очереди выдает в линию нули и единицы, а принимающая отслеживает и запоминает их. Синхронизация в UART идет по времени – мы заранее задаем

скорость передачи данных как на стороне передатчика информации, так и на стороне приемника (именно поэтому передача асинхронная – отдельная линия для передачи

21

тактовых синхронизирующих импульсов отсутствует). Это весьма важное замечание, так как расхождение в скоростях передачи может привести к ошибкам в распознавании информации, при этом ошибки будут накапливаться с увеличением скорости передачи данных. Поэтому перед началом передачи данных мы обязаны сделать множество настроек, которые должны совпадать как на стороне нашего микроконтроллера, так и компьютера, иначе передача будет невозможна.

Помимо информационных бит, UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приёме эти лишние биты удаляются из потока. Также существует возможность автоматически контролировать целостность данных методом контроля битовой чётности, в нашем случае особой пользы от этой проверки нет. Все эти параметры задаются строго перед началом передачи данных и не могут быть изменены в процессе.

На физическом уровне интерфейс UART крайне прост. Для его аппаратной реализации

достаточно всего двух проводов, не считая общего провода, подключаемого обычно к напряжению земли (рис. 3). Эти линии имеют разное назначение – линия RXD используется для приема сообщений (Receiver), а TXD – для передачи сообщений (Transmitter). UART является полнодуплексным интерфейсом. Это значит, что приемник и передатчик работают независимо друг от друга, позволяя одновременно как передавать, так и принимать данные (так называемая полнодуплексная передача данных).

Рис. 3. Аппаратное обеспечение UART

Протокол передачи данных

Самый распространенный формат передачи данных для микроконтроллеров – 8 бит данных, 1 стартовый бит, 1 стоповый бит, без проверки на четность. Передача и прием сообщений осуществляется фиксированными пакетами бит, такой пакет называют кадром (рис. 2). Кадр состоит из стартового бита (с него начинается каждый кадр), битов данных (их количество можно изменяться от 5 до 9), бита проверки четности (проверка правильности передачи данных) и одного или двух стоп-битов (обязательный сигнал окончания кадра).

Рис. 4. Пакеты данных

Вначале передатчик переводит линию в уровень логического нуля – это стартовый бит. Всё время в промежутках между пакетами данных линия передатчика находится в состоянии логической единицы, поэтому зафиксировав появление ноля (тот самый стартовый бит), приемник

22

отсчитывает интервал Т1 и считывает первый бит данных, потом через интервалы Т2 считывает все оставшиеся биты. Последний бит (или два бита) является стоповым. Он сообщает принимающей стороне, что передача данных закончена.

В конце байта, перед стоповым битом, может находиться бит проверки четности. Стоповый

бит – контрольный бит, служащий для проверки общей чётности двоичного числа (чётности количества единичных битов в числе). Он формируется при выполнении операции «Исключающее-ИЛИ» со всеми передаваемыми битами. Стоповых битовых может быть два, для повышения надежности передачи.

Рис. 5. Пакет данных для передачи по интерфейсу UART

В настоящее время физические интерфейсы на основе RS-232 практически исчезли из современных персональных компьютеров. Однако удобство пользования и обилие программного обеспечения, имеющего доступ к внешним устройствам через COM-порт, вынудило разработчиков создать драйвера виртуальных COM-портов. Виртуальный COM-порт является полной эмуляцией реального последовательного порта. На одном компьютере можно создать большое количество виртуальных COM-портов, единственным ограничением являются доступные ресурсы, такие как оперативная память и вычислительная мощность.

Виртуальные COM-порты работают так же, как и реальные, и любое приложение может работать с ними, как с реальными физическими портами на материнской плате компьютера. Виртуальные COM-порты эмулируют все функциональные возможности аппаратных, включая скорость передачи данных, проверку на чётность, количество стоп-бит и все остальные параметры.

Настройка и программирование интерфейса UART

Вначале рассмотрим регистры, имеющие отношение к нашему приёмопередатчику. У каждого микроконтроллера, поддерживающего UART, есть регистр UDRx UART Data Register (в микроконтроллерах из серии Mega есть два блока UART, поэтому и регистров тоже два

UDR0 и UDR1). На физическом уровне UDR представляет собой два разных регистра,

имеющих одинаковый адрес. При записи данных информация поступает в первый регистр (регистр передатчика), а при чтении берется из другого (регистр приемника). Таким образом,

и при чтении, и при записи данных мы используем один регистр, что значительно облегчает процесс программирования.

О том, что байт полностью пришел в регистр UDR, нам указывает прерывание по завершении приема, которое вызывается сразу же после того, как приемник обработает все поступившие в него биты.

23

Поскольку передача идет довольно медленно, то бездумно посылать всё новые и новые данные в регистр UDR нельзя – необходимо дождаться окончания передачи предыдущего байта. О том, что UDR пуст и готов к приему нового байта сигнализирует бит UDRE, он же вызывает аппаратное прерывание по опустошению буфера (USART Data Register Empty Interrupt Enable).

Все настройки приемопередатчика хранятся в регистрах конфигурации, которые известны как UCSRA, UCSRB и UCSRC, скорость передачи данных задается регистровой парой UBBRH:UBBRL. Рассмотрим подробнее наиболее важные регистры.

Регистр UCSRxA (UART Control and Status Register). Здесь наибольший интерес вызывают биты RXCn (Receive Complete) и TXCn (Transmit Complete) – это флаги завершения приема и передачи данных, соответственно. RXC устанавливается в единицу, когда принимаемый байт запишется в регистр UDR для последующего чтения, а TXC – после прохождения последнего стопбита и отсутствия новых данных в регистре UDR, т. е. после окончания передачи всех битов. Также одновременно с этими флагами вызывается прерывание (если оно было разрешено). Сбрасываются эти флаги на аппаратном уровне – принимающий после чтения данных из регистра UDR, передающий при переходе на соответствующее прерывание, либо программным образом (чтобы сбросить флаг программно, в него надо записать логическую единицу).

Биты UDREn (USART Data Register Empty) сигнализирует о том, что регистр UDR приемника пуст, и в него можно записывать новый байт. Сбрасывается он аппаратно после записи новой порции данных в UDR, при этом генерируется соответствующее прерывание.

Бит U2Xn (Double the USART Transmission Speed) – бит удвоения скорости передачи данных при работе в асинхронном режиме. Его надо учитывать при расчете значения в регистровой паре UBBRH:UBBRL.

Регистр UCSRxB. В этом регистре основную роль играют биты RXEN (Receiver Enable) и TXEN (Transmitter Enable) – при записи в них логической единицы осуществляется разрешение приема и передачи, соответственно.

RXCIEn (RX Complete Interrupt Enable)

осуществляет

разрешение прерывания по

завершению приема данных.

 

 

 

 

 

TXCIE (TX Complete Interrupt Enable)

 

осуществляет

разрешение прерывания по

завершению передачи данных.

 

 

 

 

 

UDRIEn (UART Data Register

Empty Interrupt Enable)

осуществляет

разрешение прерывания по опустошению регистра передачи данных UDR.

Регистр UCSRxC. В этом регистре мы можем выбрать необходимый протокол передачи данных.

UMSELn (UART Mode Select) – здесь мы задаем формат передачи – синхронный либо асинхронный, в зависимости от значения бита, как показано в табл. 1.

Таблица 1. Выбор режима передачи данных по UART

24

UMSELn (значение бита)

 

Режим передачи

 

 

 

0

 

Асинхронный

 

 

 

1

 

Синхронный

 

 

 

UPMn1:0 (UART Parity Mode) – установка

проверки на четность, в наших практических

работах данная опция не используется, по умолчанию в оба бита записаны логические нули, передача данных ведется без проверки на четность.

USBSn (UART Stop Bit Select) – определяет количество стоповых битов, здесь возможно всего два варианта (табл. 2).

Таблица 2. Выбор количества стоп-бит

USBSn Stop Bit (значение бита)

Количество стоп-бит

 

 

 

0

1

стоповый бит

 

 

 

1

2

стоповых бита

 

 

 

UCSZn1:0 (UART Character Size) – определяет количество передаваемых битов данных – от 5 до 9, в соответствии с таблицей 3.

Таблица 3. Выбор количества передаваемых бит данных

UCSZn2

UCSZn1

UCSZn0

Количество бит

 

 

 

 

0

0

0

5 бит

 

 

 

 

0

0

1

6 бит

 

 

 

 

0

1

0

7 бит

 

 

 

 

0

1

1

8 бит

 

 

 

 

1

1

0

Зарезервировано

 

 

 

 

1

1

1

9 бит

 

 

 

 

Скорость передачи данных

Здесь всё зависит от значения, записанного в регистровую пару UBBRH:UBBRL. Вычисляется требуемое значение по следующей формуле:

для U2X=0 (обычная скорость передачи);

для U2X=1 (удвоенная скорость передачи),

где XTAL – рабочая тактовая частота контроллера; baudrate – требуемая скорость. Чем выше скорость, тем больше ошибка рассинхронизации, поэтому на высоких скоростях целесообразно использовать специализированные кварцы (те самые, с неровным значением вроде 11.0592 МГц).

Теперь можно приступить к процедуре непосредственной инициализации, используется стандартный протокол передачи и единственный канал UART, доступный для нашего микроконтроллера.

25

5. Структурная схема встроенного аналого-цифрового преобразователя, его основные параметры. Настройка АЦП, управляющие регистры. Прерывания по завершению цикла преобразования.

В большинстве (возможно, во всех) встроенных в микроконтроллеры АЦП используются АЦП последовательного приближения. Его схема представлена ниже.

О АЦП последовательного приближения написано в вопросе № 4

Параметры АЦП бывают статические и динамические.

Статические:

Максимальный (Vref) и минимальный (обычно 0) уровни входного сигнала — устанавливают диапазон шкалы преобразования, относительно которой будет оцениваться входной сигнал (рис. 1). Также этот параметр может обозначаться как FS — full scale. Для дифференциального АЦП шкала определяется от -Vref до +Vref, однако для упрощения далее будем рассматривать только single-ended шкалы.

Разрядность (N) — разрядность выходного кода, характеризующая количество дискретных значений (2N), которые преобразователь может выдать на выходе (рис. 1).

Ток потребления (Idd) — сильно зависит от частоты преобразования, поэтому информацию об этом параметре лучше искать на соответствующем графике.

МЗР (LSB) – младший значащий разряд (Least Significant Bit) — минимальное входное напряжение, разрешаемое АЦП (по сути, единичный шаг в шкале преобразования). Определяется формулой: LSB = Vref/2N(рис. 1).

Ошибка смещения (offset error) – определяется как отклонение фактической передаточной характеристики АЦП от передаточной характеристики идеального АЦП в начальной точке шкалы. Измеряется в долях LSB. При ошибке смещения переход выходного кода от 0 в 1 происходит при входном напряжении отличном от 0.5LSB (рис. 2).

26

Рисунок 7

Рисунок 8

Динамические:

• Частота дискретизации (fs — sampling frequency) — частота, при которой происходит преобразование в АЦП (ну или 1/Ts, где Ts — период выборки). Измеряется числом выборок в секунду. Обычно под данным обозначением подразумевают максимальную частоту дискретизации, при которой специфицированы параметры преобразователя (рис. 3).

27

Рисунок 9

• Отношение сигнал/шум (SNR — Signal-to-Noise Ratio) — определяется как отношение мощности обрабатываемого сигнала к мощности шума, добавляемого в процессе преобразования. SNR обычно выражается в децибелах (дБ) и рассчитывается по следующей формуле:

• время кодирования – время, в течение которого осуществляется непосредственное преобразование установившегося значения входного сигнала (время от начала импульса запуска до появления выходного кода).

Из лекции (Attiny 104)

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

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

28

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

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

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

ADMUX (ADC Multiplexer Selection Register) – регистр, определяющий текущий канал АЦП,

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

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

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

29

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

MUX4:0 (Analog Channel and Gain Selection Bits) – данные биты определяют текущий вход, с

которого мы будем считывать аналоговый сигнал. Также с помощью этих битов выставляется коэффициент усиления при измерении в дифференциальном режиме. Возможные конфигурации для выбора текущего источника входного сигнала представлены в табл. 7.2.

Таблица 7.2. Выбор текущего канала АЦП

Данные с АЦП записываются в регистровую пару 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. Записывая в него логический ноль, получаем выравнивание по правой границе, записываем единицу – по левой.

30

Соседние файлы в папке КР2