Пять DS18B20 из одного STM8.
Автор: Евгений Геннадьевич Чепкасов (Z_h_e) 1. Назначение. Измеряет пять аналоговых сигналов от термисторов MF58 или других с аналоговым выходом. Преобразует измеренное в формат DS18B20 и передает по одной шине 1-wire как от пяти датчиков DS18B20.
2. Схема электрическая принципиальная. В данной схеме используются термисторы MF58, с сопротивлением 10кОм при 250С и b= 3950. Сопротивление термистора Т1 преобразуется в напряжение с помощью моста R7-R8 и дифференциального усилителя на OP1.1 (LM358). Коэффициент усиления дифф. усилителя задается сопротивлениями R3-R6. Данный преобразователь R в U преобразует сопротивление ( 10...0.2 )кОм в напряжение (0.02 ... 3.3) В, что позволяет измерять температуру от 25 до 150 градусов (приблизительно). Конечно можно подобрать сопротивления под другой нужный диапазон. Для каждого канала может быть свой диапазон. Десятибитное АЦП STM8S103F3 измеряет напряжение пропорциональное сопротивлению и вычисляет температуру согласно коэффициентам сохраненным в EEPROM. Стабилитрон VD1 защищает порт PC6 от перенапряжения. Питание устройства от трехпроводной линии 1-wire 5В.
3. Как это работает. Данное устройствое является подчиненным устройством и может вести какой-то обмен только по требованию мастера. Поддерживает следующие команды:
Так как все пять каналов ведут обмен через одну шину, само собой каждый канал имеет свой ROM и для мастера все эти пять каналов выглядят как пять различных устройств. Для каждого канала формируется восьмибайтный ROM следующим образом.
4. Настройка каналов. Все коэффициенты лежат в EEPROM контроллера. Так как датчик нелинеен, то градуировка разбита на 4 линейных участка. Карта памяти EEPROM.
Так как характеристика разбита на 4 линейных участка, то есть 5 настроечных точек для каждого канала температуры. Т.е. температура и соответствующий ему код 10битного АЦП. Температура хранится в формате DS18B20, но старшим байтом вперед.
5. Как настроить. Есть у меня устройство которое может работать с 8 датчиками по одной шине 1-wire. Я подключил сеё устройство и на эту же шину подключил DS18B20 (как эталон). Вместо MF58 подключил магазин сопротивления. Сделал вот такую табличку в excel. Будет во вложении.
6. Прошивка контроллера. Прошить контроллер можно с помощь программы ST Visual Programmer и программатора ST-Link V2. В STM8 есть такая область памяти называемая Option Byte, это некий аналог фьюзов AVR. Тут нужно переключить альтернативную функцию AF0 как на картинке, остальное по умолчанию. После заливки программы, переключения AF0 и установки коэффициентов в EEPROM устройство готово.
7. Проверка В крутой кипяток был помещен MF58 и DS18B20. DS18B20 конечно "тот еще" эталон, но у меня была еще задача проверить как работает мое устройство в комплекте со штатным DS18B20. Кружка с водой не спеша остывала и я смотрел разницу показаний на разных температурах. Где-то до двух градусов получилось. В реперных точках (т.е. когда stm8 показывал температуры из таблицы EEPROM) разница была запомнена и на это значение были скорретированы реперные температуры. Эксперимент повторил заново. Теперь уже в целом разница между DS18b20 и STM8 составила до 0,5 градусов и меньше. В двух точках доходила до 0,9 градусов. Возможно благодаря тому что DS18b20 тоже не идеален, а может действительно так характеристика подзагнулась. Самое главное показания температуры получились стабильными, не скачут, я опасался что будет хуже, а еще можно будет усреднение добавить. После кратковременного выключения-включения устройства, показания не изменялись.
8. Заключение. Устройство работает, но проверка выполнена не полностью. Я реально пока спаял ОУ только для первого канала, но не вижу причин не работать другим каналам. Плату явно можно сделать меньше, ну ЛУТом лучше чем получилось, я не умею. Проводил тест, где мастером 1-wire является мое же некое устройство. Оно само находит датчики с помощью функции поиска ROM. Проблем при параллельной работе настоящего DS18B20 и STM8 на одной линии не наблюдал. Реально подключал две DS и STM. Т.е. на линии было 7 девайсов и все работало. Команды SKIP_ROM и READ_ROM тестировал с помощью обычной терминальной программы и "1-wire терминал" т.к. мой мастер-устройство их не использует. За программу "1-wire терминал" отдельное спасибо товарищу ARV. Хорошая вещь. Зачем вообще это надо было:
Всех с наступающим 2018 годом!!!
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||