Подключение внешнего АЦП по SPI к микроконтроллеру AVR

Просмотров: 29115Комментарии: 3
Электроника. СхемотехникаМикроконтроллеры 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-и битного. Нужно это напряжение подать на вход опорного напряжения.

Комментариев: 3 RSS

1 Danik 28-05-2011 01:13

Здравствуйте Dmitry! Хочу выразить вам благодарность, за эту статью, она мне очень помогла по учёбе. Если вам не трудно, я бы хотел с вами по поводу неё немного поговорить, пришлите мне письмо на armakon@bk.ru

2 Irin Borisova 09-01-2013 21:15

Спасибо за статью, очень помогла в подготовке к экзамену! Так как информации в сети по этому вопросу крайне мало, а в литературе основной объем занимают методы обмена данными, но сама не процедура подключения.

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)