Пятница, 26.04.2024, 08:30
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Реклама Google
Форма входа
Категории раздела
Это нужно знать! [17]
Изучаем AVR [30]
Программаторы [12]
Необходимое ПО [8]
Готовые устройства [73]
Справочная [38]
Инструмент [0]
Технология [8]
Литература [0]
Arduino скетчи [18]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Микроконтроллеры - это просто!
Главная » Статьи » Изучаем AVR

Подключение внешнего АЦП по SPI к микроконтроллеру AVR
Понадобилось мне тут недавно подключить к МК внешнее АЦП на 12 бит по SPI. И в этой статье решил рассказать, что из этого получилось. В первую очередь, хотелось чтобы это АЦП можно было подключить к МК в Протеусе и получить результат там. Покапавшись по интернету и посмотрев цены, остановился на 12-и битном одноканальном АЦП фирмы Microchip MCP3201. Самого MCP3201 в Протеусе нет, но есть 10-и битный MCP3001. Отличается он от MCP3201 лишь тем, что он 10-ти битный и поэтому есть небольшое отличие в обработке уже полученных данных, а получать с него данные также как с 12-и битного. Но обо всем по порядку.
Основные характеристики MCP3201
  • 12 бит
  • Интерфейс SPI
  • Диапазон напряжения питания: 2.7-5.5 В
  • Низкое энергопотребление
  • 100ksps при питании 5В
  • 50ksps при питании 2.7В
Цоколевка микросхемы показана на рисунке ниже



Назначение ножек:
  1. Vref - опорное напряжение
  2. IN+ - положительный аналоговый вход
  3. IN- - отрицательный аналоговый вход
  4. Vss - земля
  5. CS - выбор чипа
  6. Dout - выход данных
  7. CLK - синхроимпульсы
  8. VDD - питание
Для работы с АЦП по SPI нужно знать, что обмен данными в SPI представляет из себя обмен между двумя регистрами. Это значит, что если мы отсылаем байт на АЦП, то после передачи в регистре SPDR будет байт, который находился в АЦП. Зная это, открываем даташит на MCP3201 и находим раздел в котором описывается подключение к МК и видим там рисунок, показывающий что нужно выставить на ножках SPI, чтобы забрать данные с АЦП.



А делается это очень просто. Подаем с МК на CLK синхронизирующие импульсы и по нужному фронту (в зависимости от режима SPI) забираем данные с ножки DO. Как видно из рисунка, нужно получить два байта с АЦП, а потом из этих байтов собрать с использованием битовых операций (см. Битовые операции) 12 бит данных.
Теперь после того как мы разобрали, на примере MCP3201, характеристики и принцип работы АЦП хотелось бы вернуться к 10-ти битному MCP3001, так как именно его мы будем моделировать в Протеусе. Отличие заключается в том, что биты в полученных данных находятся в других позициях.



В конце статьи можно скачать проект в WinAVR и проект в Протеусе для MCP3001. Сделал отдельным заголовочным файлом, чтобы было удобно подключать. Здесь не буду приводить эту программу, только напишу строки, которые отличаются для двух АЦП.

unsigned char adcLSB, adcMSB;
unsigned int adc;
    MCP3001                                    MCP3201
adc = adcMSB;                           adc = adcMSB;
adc<<=5;                                  adc<<=7;
adcLSB>>=3;                             adcLSB>>=1;
adc |= adcLSB;                          adc |= adcLSB;

Т.е. заменив эти строки вы можете переделать программу для 12-битного АЦП.
Удобно, чтобы как можно точнее измерять напряжение воспользоваться преобразователем напряжения, у которого на выходе 4.096В, например MCP1541. Тогда на 1мВ напряжения будет приходится 1 единица в цифровом коде для 12-и битного АЦП и 4мВ для 10-и битного. Нужно это напряжение подать на вход опорного напряжения.

Категория: Изучаем AVR | Добавил: Alex (10.02.2014)
Просмотров: 7772 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024