Создание измерительного аппаратно-программного комплекса термометра на основе микроконтроллеров семь...
Міністерство освіти і науки
України
Черкаський національній
університет імені Богдана Хмельницького
Кафедра програмного
забезпечення автоматизованих систем
Курсова робота на тему:
"Створення
вимірювального апаратно – програмного комплексу термометра на основі мікро
контролерів сім'ї ATMEGA"
Виконав: Перевірив:
Студент групи КС-061
Доцент к. н. т.
Голубченко Юрій Сергійович
Хамід
Черкаси 2008р.
Задание:
Создать
измерительный аппаратно – программный комплекс термометра на основе
микроконтроллеров семейства ATMEGA.
1)Схемотехническое
решение поставленной задачи:
Схема включает в
себя:
1)
Микроконтроллер ATTINY2313;
2) 2 датчика
температуры DS18S20;
3) Индикатором
служит 3-хзначный, общий анод, динамическая индикация, зеленый;
4) Два дискретных
вывода переведены на вход для кнопок для управления индикацией;
5) Определение до
двух датчиков на одной шине 1-Wire;
6) Вывод значение
первого, второго, разности первого из второго, разности второго из первого на
дисплей с помощью двух кнопок. Так же возможно подключение одного датчика;
Применение
термометра для регулировки температуры внутри корпуса компьютера:
В корпусе современного
компьютера сконцентрировано большое количество элементов, выделяющих тепло. По
большому счету, тепло выделяет практически всё, так как любая работающая
электронная схема рассеивает некоторую мощность. Однако есть элементы, которые
являются весьма интенсивными источниками тепла. Это процессор, чипы на
материнской плате и на видеокарте, элементы на плате жесткого диска, элементы
блока питания и т.д. Давно прошли те времена, когда процессор мог работать без
принудительного охлаждения. Уже стал привычным кулер на видеокарте, иногда он
устанавливается также на северный мост чипсета и на жесткий диск. Современный
корпус обычно имеет места для установки дополнительных вентиляторов, которые
призваны продувать весь внутренний объем корпуса компьютера. Особенно остро
проблема охлаждения стоит для компьютеров, насыщенных платами расширения, а
также для компьютеров с «разогнанными» процессорами.
Надежность
полупроводниковых приборов при повышении рабочей температуры падает, не говоря
уже о надежности и долговечности жесткого диска. Однако повышенная температура
внутри корпуса компьютера ведет не только к сокращению срока службы
компонентов, но и к неустойчивой работе, если какой-то компонент перегревается.
В свете
сказанного очень важно обеспечить должное охлаждение компонентов и правильную
вентиляцию корпуса. Правильно выбрать количество и тип вентиляторов, а также
правильно организовать воздушные потоки является весьма сложным делом, так как
свободный объем внутри корпуса имеет сложную конфигурацию, и потокам воздуха
мешают различные предметы, в том числе провода. Иногда применение более мощного
вентилятора даёт худший эффект, чем правильное распределение воздушных потоков
от маломощного вентилятора. К тому же мощный вентилятор обычно имеет высокий
уровень шума. Теоретически рассчитать потоки не представляется возможным,
поэтому действовать приходится интуитивно, методом проб и ошибок. Основная
трудность заключается в том, что очень трудно оценить эффективность той или
иной принятой меры ввиду отсутствия средств контроля температуры. Имеющиеся на
некоторых материнских платах и жестких дисках термодатчики позволяют судить
лишь о температуре в нескольких точках. Поэтому приходится замерять температуру
компонентов «на ощупь», что нельзя назвать точным и повторяемым методом.
При экспериментах
с охлаждением компонентов компьютера неоценимую помощь может оказать
независимый термометр. Такой термометр должен иметь небольшой по размерам
датчик для его легкого размещения на различных компонентах, датчик должен иметь
маленькую инерционность для возможности быстрого проведения измерений, ну и,
конечно, достаточно высокую точность измерений. К тому же, термометр должен
быть не дорогим. Всем этим требованиям удовлетворяют цифровые датчики
температуры, выпускаемые фирмой DALLAS Semiconductor (теперь это уже MAXIM),
которые могут быть подключены к последовательному порту компьютера.
С помощью
дополнительных вычислений дискретность представления температуры можно
уменьшить, в нашем случае она равна 0.1°C. Самым привлекательным является то, что такой термометр уже откалиброван
на заводе, гарантированная точность составляет ±0.5°C в диапазоне –10..+85°C и ±2°C во всем диапазоне рабочих температур. Типичная кривая ошибки
измерения температуры приведена на рис
Несмотря на
ограниченную абсолютную точность, малая дискретность представления температуры
является весьма желательной, так как очень часто на практике требуются
относительные измерения.
DS18S20 допускает напряжение питания от +3 до +5.5В. В режиме ожидания
потребляемый ток близок к нулю (менее 1мкА), а во время преобразования
температуры он равен примерно 1мА. Процесс преобразования длится максимум
750мс.
Принцип действия
цифровых датчиков температуры фирмы DALLAS основан на подсчете количества импульсов, вырабатываемых
генератором с низким температурным коэффициентом во временном интервале,
который формируется генератором с большим температурным коэффициентом. Счетчик
инициализируется значением, соответствующим -55°C (минимальной измеряемой температуре). Если счетчик достигает
нуля перед тем, как заканчивается временной интервал (это означает, что
температура больше -55°C), то регистр температуры,
который также инициализирован значением -55°C, инкрементируется. Одновременно счетчик предустанавливается новым
значением, которое задается схемой формирования наклона характеристики. Эта
схема нужна для компенсации параболической зависимости частот генераторов от
температуры. Счетчик снова начинает работать, и если он опять достигает нуля,
когда интервал еще не закончен, процесс повторяется снова. Схема формирования
наклона загружает счетчик значениями, которые соответствуют количеству
импульсов генератора на один градус Цельсия для каждого конкретного значения
температуры. По окончанию процесса преобразования регистр температуры будет
содержать значение температуры.
Для DS18S20 температура представляется в виде 9-битного значения в дополнительном
коде. Поскольку это значение занимает 2 байта, все разряды старшего байта равны
знаковому разряду. Дискретность представления температуры составляет 0.5°C. Зависимость выходного кода от
температуры приведена в таблице:
Температура
|
Выходной код (Binary)
|
Выходной код (Hex)
|
Ст. байт
|
Мл. байт
|
+125°C
|
0000 0000
|
1111 1010
|
00FAh
|
+25°C
|
0000 0000
|
0011 0010
|
0032h
|
+0.5°C
|
0000 0000
|
0000 0001
|
0001h
|
0°C
|
0000 0000
|
0000 0000
|
0000h
|
-0.5°C
|
1111 1111
|
1111 1111
|
FFFFh
|
-25°C
|
1111 1111
|
1100 1110
|
FFCEh
|
-55°C
|
1111 1111
|
1001 0010
|
FF92h
|
Более высокая
разрешающая способность может быть получена, если произвести дополнительные вычисления
на основе значений COUNT_REMAIN (значение, оставшееся в счетчике в
конце измерения) и COUNT_PER_C (количество импульсов на один градус для данной температуры), которые
доступны. Для вычислений требуется взять считанное значение температуры и отбросить
младший бит. Полученное значение назовём TEMP_READ. Теперь действительное
значение температуры может быть вычислено по формуле:
TEMPERATURE=TEMP_READ-0.25+(COUNT_PER_C
- COUNT_REMAIN)/COUNT_PER_C
В нашем случае
такой расчет позволяет получить дискретность представления температуры 0.1°C.
Каждый экземпляр DS18S20 имеет уникальный 48-битный номер, записанный с помощью лазера в ПЗУ в
процессе производства. Этот номер используется для адресации устройств. Кроме
серийного номера в ПЗУ содержится код семейства (для DS18S20 это 10h) и контрольная сумма.
Кроме ПЗУ DS18S20 имеет промежуточное ОЗУ объемом 8 байт, плюс два байта
энергонезависимой памяти. Карта памяти DS18S20 показана на рисунке:
Байты TH и TL представляют собой температурные пороги, с которыми
сравниваются 8 бит каждого измеренного значения температуры (младший бит
отбрасывается). С помощью специальной команды можно организовать сигнализацию
выхода температуры за пределы этих порогов. Если такая функция не нужна, байты TH и TL можно использовать для хранения любых данных пользователя.
Считывание
значения измеренной температуры, а также передача команды начала преобразования
и других команд производится с помощью 1-проводного интерфейса (1-WireTM) фирмы DALLAS. На основе этого интерфейса фирма DALLAS даже создала сеть, называемую microLAN (или µLAN). Для работы в этой сети выпускается целый ряд устройств,
таких как адресуемые ключи, АЦП, термометры, часы реального времени, цифровые
потенциометры. Кстати, такой же протокол обмена имеют и цифровые ключи IButton (или Touch Memory), которые сейчас широко
используются в системах ограничения доступа.
Протокол, который
используется 1-проводным интерфейсом, достаточно прост. В любой момент времени
на 1-проводной шине можно выделить устройство-мастер, которым может быть
микропроцессор или компьютер, и подчиненное устройство, в нашем случае это
микросхема термометра. Так как у нас на шине присутствуют только мастер и всего
одно подчиненное устройство, можно опустить всё то, что связано с адресацией
устройств. В результате требуется знать лишь протокол передачи байтов, которые
могут являться командами или данными.
Вначале
рассмотрим аппаратную конфигурацию. 1-проводная шина является двунаправленной.
На рис. 4 показана аппаратная конфигурация интерфейсной части DS18S20 и мастера шины. У каждого 1-проводного устройства к шине подключен
вход приемника и выход передатчика с открытым стоком. Открытый сток позволяет
подключать к шине множество устройств, обеспечивая логику «монтажное или».
Генератор тока 5мкА обеспечивает на входе 1-проводного устройства низкий
логический уровень, когда шина не подключена. Так как линия тактового сигнала
отсутствует, обмен является синхронным. Это означает, что в процессе обмена
нужно достаточно точно выдерживать требуемые временные соотношения.
1-проводная шина
оперирует с TTL-уровнями, т.е. логическая
единица представлена уровнем напряжения около 5В, а логический ноль –
напряжением вблизи 0В. В исходном состоянии на линии присутствует уровень
логической единицы, который обеспечивается подтягивающим резистором номиналом
около 5Ком.
Инициатором
обмена по 1-проводной шине всегда выступает мастер. Все пересылки начинаются с
процесса инициализации. Инициализация
производится в следующей последовательности
Мастер посылает
импульс сброса (reset pulse) - сигнал низкого уровня длительностью не менее 480 мкс.
За импульсом
сброса следует ответ подчиненного устройства (presence pulse) - сигнал низкого уровня
длительностью 60 - 240 мкс, который генерируется через 15 - 60 мкс после
завершения импульса сброса.
Ответ
подчиненного устройства даёт мастеру понять, что на шине присутствует термометр
и он готов к обмену. После того, как мастер обнаружил ответ, он может передать
термометру одну из команд. Передача ведётся путём формирования мастером
специальных временных интервалов (time slots). Каждый временной интервал служит
для передачи одного бита. Первым передаётся младший бит. Интервал начинается
импульсом низкого уровня, длительность которого лежит в пределах 1 - 15 мкс.
Поскольку переход из единицы в ноль менее чувствителен к ёмкости шины (он
формируется открытым транзистором, в то время как переход из ноля в единицу
формируется подтягивающим резистором), именно этот переход используют
1-проводные устройства для синхронизации с мастером. В подчиненном устройстве
запускается схема временной задержки, которая определяет момент считывания
данных. Номинальное значение задержки равно 30 мкс, однако, оно может
колебаться в пределах 15 - 60 мкс. За импульсом низкого уровня следует
передаваемый бит. Он должен удерживаться мастером на шине в течение 60 - 120
мкс от начала интервала. Временной интервал завершается переводом шины в
состояние высокого уровня на время не менее 1 мкс. Нужно отметить, что
ограничение на это время сверху не накладывается. Аналогичным образом формируются
временные интервалы для всех передаваемых битов
Первой командой,
которую должен передать мастер для DS18S20 после инициализации,
является одна из команд функций ПЗУ. Всего DS18S20 имеет 5 команд функций
ПЗУ:
Read ROM [33h]. Эта команда позволяет
прочитать содержимое ПЗУ. В ответ на эту команду DS18S20 передает 8-битный код
семейства (10h), затем 48-битный серийный
номер, а затем 8-битную CRC для проверки правильности
принятой информации.
Match ROM [55h]. Эта команда позволяет
адресовать на шине конкретный термометр. После этой команды мастер должен
передать нужный 64-битный код, и только тот термометр, который имеет такой код,
будет «откликаться» до следующего импульса сброса.
Skip ROM [CCh]. Эта команда позволяет
пропустить процедуру сравнения серийного номера и тем самым сэкономить время в
системах, где на шине имеется всего одно устройство.
Search ROM [F0h]. Эта довольно сложная в
использовании команда позволяет определить серийные номера всех термометров,
присутствующих на шине.
Alarm Search [ECh]. Эта команда аналогична
предыдущей, но «откликаться» будут только те термометры, у которых результат
последнего измерения температуры выходит за предустановленные пределы TH и TL.
Поскольку у нас
всего одно устройство, наиболее подходящей для нас функцией является функция Skip ROM. Кроме
неё ещё может быть полезной функция Read ROM, которая позволяет идентифицировать
подключенное на шину устройство по его коду семейства и серийному номеру.
Приняв команду Read ROM, DS18S20 будет готов передать 64-битный код, который мастер должен принять.
При приеме данных
от подчиненного устройства временные интервалы для принимаемых битов тоже
формирует мастер. Интервал начинается импульсом низкого уровня длительностью 1
- 15 мкс. Затем мастер должен освободить шину, чтобы дать возможность
термометру вывести бит данных. По переходу из единицы в ноль DS18S20 выводит на шину бит данных и запускает схему временной задержки,
которая определяет, как долго бит данных будет присутствовать на шине. Это
время лежит в пределах 15 - 60 мкс. Для того чтобы данные на шине, которая
всегда обладает некоторой ёмкостью, гарантированно установились, требуется
некоторое время. Поэтому момент считывания данных мастером должен отстоять как
можно дальше, но не более чем на 15 мкс от начала временного интервала
Прием байта
начинается с младшего бита. Вначале идет байт кода семейства. За кодом
семейства идет 6 байт серийного номера, начиная с младшего. Затем идет байт
контрольной суммы (CRC). В вычислении байта
контрольной суммы принимают участие первые 7 байт, или 56 передаваемых бит. Для
вычисления используется следующий полином:
CRC = X8+X5+X4+1
После приема
данных мастер должен вычислить контрольную сумму и сравнить получившееся
значение с переданной CRC. Если эти значения
совпадают, значит, прием данных прошел без ошибок. Можно также вычислить контрольную
сумму для всех 64 принятых бит, которая в этом случае должна быть равна нулю.
Блок-схема алгоритма вычисления контрольной суммы показана на рис. 8. Алгоритм
использует операции сдвига и «исключающего или». Квадратиками показаны биты
переменной, которая используется для вычисления CRC. Перед вычислением её необходимо обнулить, а затем на вход
алгоритма нужно последовательно подать 56 принятых бит в том порядке, в котором
они были приняты. В
результате переменная будет содержать значение CRC.
Страницы: 1, 2
|