Материал: КР2

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Принцип работы:

Входной аналоговый сигнал поступает на УВХ (устройство выборки-хранения), чтобы зафиксировать данные, так как преобразование занимает время и на выходе могут измениться значения.

Далее сигнал поступает на компаратор, второй вход которого подключен к ЦАП. Компаратор управляет регистром ПП (регистр последовательного приближения), который составляет основу этого АЦП. Код с регистра ПП поступает на N-битный ЦАП и напряжение ЦАПа сравнивается с входным.

Как происходит преобразование?

В начальным момент времени регистр ПП сброшен в ноль. Далее устаналивается «1» в самом старшем разряде при первом такте, это как раз приходится на половину опорного напряжения. Компаратор на выходе указывает больше или меньше напряжение входного сигнала, чем выход ЦАП (на первом такте это половина опорного напряжения).

Выход ЦАП > входного сигнала => выход компаратора LOW => сброс бита в регистре

Выход ЦАП < входного сигнала => выход компаратора HIGH => 1бит сохраняется в регистре

Так перебираются все разряды.

Это из лекции Тимохова (тут объяснено лучше, что происходит)

ЦАП:

VOUT = 8 В для 23 бит (СЗР)

VOUT = 4 В для 22 бит

VOUT = 2 В для 21 бит

VOUT = 1 В для 20 бит (МЗР)

СЗР = 1: выходной сигнал ЦАП равен 8 В > входного сигнала 5,1 В => выходной сигнал компаратора LOW => СЗР в SAR сброшен до 0

22 бит = 1: выходной сигнал ЦАП равен 4 В < входного сигнала 5,1 В => выходной сигнал компаратора HIGH => 22 бит сохраняется в SAR

21 бит = 1: выходной сигнал ЦАП 4+2=6 В > входного сигнала 5,1 В => выходной сигнал компаратора LOW => 21 бит в SAR сброшен до 0

20 бит = 1: выходной сигнал ЦАП 4+1=5 В < входного сигнала 5,1 В => выходной сигнал компаратора HIGH => 20 бит сохраняется в SAR

Двоичный код в регистре 0101~ значению 5,1В.

Алгоритм работы может быть объяснен на примере весов.

+ Простая архитектура при высоком разрешении

Требует N сравнений для достижения N-разрядного разрешения (снижает fD и вызывает ограничение по скорости преобразования)

# Применяются во всех микроконтроллерах

Устройство выборки-хранения (это было в лекции, может попадется и в контрольной)

Через ключ (полевой транзистор) и блок управления заряжаем С.

Пока ключ замнут, СХР заряжается до текущего входного значения. Далее ключ размыкаем, и значение фиксируется до тех пор, пока не завершится АЦП. Чтобы СХР не разряжался, подключаем через буфер на ОУ (мешает разряжаться из-за высокого сопротивления)

Интегрирующие АЦП (схема и принцип работы, основные преимущества и недостатки)

Схема:

Принцип работы:

На интегратор через ключ подаем входной сигнал.

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

После интегратора идет компаратор для того, чтобы узнать когда С разрядится до нуля. Счетчик считает время за которое разрядится С. Результат будет преобразован в выходной код АЦП (сколько импульсов укладывается во время разрядки).

ГТИ задает работу всей схемы

  • Время разрядки С будет зависеть от того, до какого уровня мы его заряжали.

  • Выходной код ~ сколько импульсов укладывается во время разрядки С

+ подавление высокочастотного шума и фиксированных низких частот

(50/60 Гц) – из-за интегрирования

низкая входная пропускная способность

ограничение fD

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

Сигма-дельта АЦП (схема и принцип работы, основные преимущества и недостатки)

Схема:

Принцип работы:

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

Компаратор выдает «1» если выход интегратора больше нуля и «0» в противном случае.

1-битный ЦАП подает +VREF, если на выходе компаратора «1» и – VREF, если на выходе компаратора «0».

Работа зацикливается.

+ наибольшее разрешение

медленные

Отношение «сигнал/шум» (SNR)

SNRотношение среднеквадратического значения величины входного сигнала к среднеквадратическому значению величины шума.

SNR(dB) = 20lg VSIGNAL(RMS) / VNOISE(RMS)

Оверсэплинг – значительное повышение частоты дискретизации.

КПД – коэффициент передискретизация

  1. Передача данных с использованием асинхронного последовательного интерфейса UART. Общая структура асинхронного приёмопередатчика. Протокол передачи данных RS-232. Настройка и программирование интерфейса UART. Скорость передачи данных.

Общая структура асинхронного приёмопередатчика. Протокол передачи данных RS-232.

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

Рис. 1. Последовательные и параллельные интерфейсы

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

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

На сегодняшний день последовательные интерфейсы полностью вытеснили параллельные, во всяком случае для бытового применения. Для персональных компьютеров общим стандартом для обмена данными с периферией стал 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 идет по времени – мы заранее задаем скорость передачи данных как на стороне передатчика информации, так и на стороне приемника (именно поэтому передача асинхронная – отдельная линия для передачи тактовых синхронизирующих импульсов отсутствует). Это весьма важное замечание, так как расхождение в скоростях передачи может привести к ошибкам в распознавании информации, при этом ошибки будут накапливаться с увеличением скорости передачи данных. Поэтому перед началом передачи данных мы обязаны сделать множество настроек, которые должны совпадать как на стороне нашего микроконтроллера, так и компьютера, иначе передача будет невозможна.

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

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

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

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

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

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

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

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

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

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

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

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

Вначале рассмотрим регистры, имеющие отношение к нашему приёмопередатчику. У каждого микроконтроллера, поддерживающего UART, есть регистр UDRx – UART Data Register (в микроконтроллерах из серии Mega есть два блока UART, поэтому и регистров тоже два – UDR0 и UDR1). На физическом уровне UDR представляет собой два разных регистра, имеющих одинаковый адрес. При записи данных информация поступает в первый регистр (регистр передатчика), а при чтении берется из другого (регистр приемника). Таким образом, и при чтении, и при записи данных мы используем один регистр, что значительно облегчает процесс программирования.

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

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

Все настройки приемопередатчика хранятся в регистрах конфигурации, которые известны как UCSRAUCSRB и 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

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

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

0

Асинхронный

1

Синхронный