Отчет программирование датчика температуры DS18B20 на базе контроллера STM32F103C8Tx
Автор: mr.s • Май 27, 2022 • Реферат • 2,216 Слов (9 Страниц) • 221 Просмотры
ОТЧЕТ |
ПРОГРАММИРОВАНИЕ ДАТЧИКА ТЕМПЕРАТУРЫ DS18B20 НА БАЗЕ КОНТРОЛЛЕРА STM32F103C8Tx |
по курсу: Микропроцессорная техника в мехатронике и робототехнике |
В данной работе рассматривается работа с датчиком DS18B20 компании DALLAS является датчиком температуры. Температура измеряет в градусах по Цельсию. Измерения могут быть как 9-битной дискретности, так и 12-битной.
Распределяются данные биты следующим образом.
Я буду измерять температуру в 12-битном виде и самые младшие 4 бита будут хранить показания долей градуса, а остальные старшие 8 – сами градусы.
Подключается данный датчик по однопроводной технологии (1-wire).
Диапазон измерений – от -55 0C до +125 0C, но наивысшая точность показаний достигается в диапазоне от -10 0C до +85 0C/
Погрешность датчика – 0,5 градуса, поэтому нет смысла использовать все младшие биты.
Режим 1-wire у меня не организован аппаратно в контроллере, поэтому я буду весь протокол программировать.
У датчика всего 3 ножки. 2 из них ножки питания и одна – ножка данных. Данный датчик существует в двух видах корпуса – Dip и TO-92. Я буду использовать TO-92. У каждого датчика есть уникальный 64-битный код, записанный в его ROM, записанного посредством лазерных технологий. В связи с этим на 1 провод можно подключить несколько таких датчиков. Но, так как я буду использовать только один датчик, то обращаться к нему буду другим способом, не используя ROM.
Подавая на датчик команду 44h последовательным кодом, тем самым заставляя датчик конвертировать температуру.
Посмотрим регистры, в которых хранится значение температуры после преобразования
[pic 1]
Рисунок 1 - формат регистра температуры
В четырех младших битах младшего регистра хранятся доли градусов, в четырех старших, а также в трех младших битах старшего регистра – целые значения градусов. В остальных битах – знак. Если 0, то плюс, если 1 – то минус. Также в технической документации написано, что нужно обязательно подтянуть резистор на информационную ножку датчика к питанию. Рекомендуемый номинал – 4,7 кОма.
Схема будет следующая. Помещу датчик в плату. Между информационным выводом датчика и выводом питания подключу резистор. Питание на выводы питания подадам 3,3 вольта с отладочной платы, а информационный вывод датчика подключу к ножке PB11 микроконтроллера. Также подключу модуль USART-USB, не подводя к нему плюсовой электрод питания и также подключу программатор ST-Link V2, с него и подам питание на контроллер. Никаких отдельных источников питания использовать не буду, так как датчик почти ничего не потребляет. Получится вот такая сборка
[pic 2]
Рисунок 2 – Схема подключения датчика DS18B20
Создам новый проект в CubeMX, выбрав контроллер STM32F103C8Tx.
Настрою тактирование от кварцевого резонатора
[pic 3]
Рисунок 3 - CubeMX
Включаю отладчик
[pic 4]
Рисунок 4 – включение отладчика
Настрою USART
[pic 5]
Рисунок 5 – Настройка USART
Включу ножку порта PC13, отвечающую за светодиод, на выход
[pic 6]
Рисунок 6 - ножка порта PC13
Также включу на вход ножку PB11, к которой буду подсоединять информационный контакт датчика
[pic 7]
Рисунок 7 - ножка порта PC11
Перейду в раздел Clock Configuration и настрою там частоты и переключатели следующим образом
[pic 8]
Рисунок 8 - раздел Clock Configuration
Теперь перейду в раздел Configuration, USART трогать не будем, оставим настройки по умолчанию (скорость 115200 кбит/с), а вот ножке порта PC13 настроим чуть побыстрее
[pic 9]
Рисунок 9 - раздел Configuration, USART
Зайду в настройки проекта, выберу в качестве среды программирования Keil 5, а также присвою имя проекту по наименованию датчика
[pic 10]
Рисунок 10 – Настройки проекта
...