STM32 DS18B20 подключение датчика температуры
Вставка
- Опубліковано 23 лис 2024
- STM32CUBE DS18B20 подключение датчика температуры.Считываем значение температуры.
Сам проект drive.google.c...
То что я использую или использовал в своих видео :
STM32F103C8T6 отладочная плата alipromo.com/re...
STM8 отладочная плата alipromo.com/re...
ESP8266 отладочная плата alipromo.com/re...
Программатор STM32&STM8 alipromo.com/re...
Логический анализатор alipromo.com/re...
Проводки для логического анализатора alipromo.com/re...
NEOWAY M590 GSM\GPRS модуль alipromo.com/re...
Блютуз модуль alipromo.com/re...
Дисплей ST7735S alipromo.com/re...
Проводки alipromo.com/re...
Датчик движения alipromo.com/re...
BME280 крутой датчик alipromo.com/re...
DC-DC step-down alipromo.com/re...
Бумага для ЛУТ alipromo.com/re...
DS18B20 alipromo.com/re...
материалы по данной теме
mycontroller.ru...
Тоже использую эти модули на МК STM32F103, но решил подключить внутренний температурный сенсор и вывести на LCD экран температуру.
Ещё запитал устройство от аккумуляторов и заряжаю его от солнечных панелей.
Подробные изыскания записал на видео и выложил на канале, там же есть ссылка на проект в Кейл студии.
Сейчас пытаюсь подключить датчик температуры 18B20, как у автора, но решил железным способом реализовать через usart 1-wire.
Но как то не очень выходит, пока добился, что отдаёт показания датчик, только во время отладки.
Если есть у кого какие советы пишите.
с моим уровнем нужно немного поломать голову)) Думаю, что в таких видео лучше предупредить, что нужны базовые знания с по-битовыми операциями и наименованиями регистров. В остальном отличное видео. Предполагаю, что это самое ресурсоэкономное исполнение. Спасибо за видео! Лайк!
ua-cam.com/video/miBf5bqynyo/v-deo.html
ua-cam.com/video/uVVhgYG-n2I/v-deo.html на любой вкус.
Спасибо тебе добрый человек, за 15 минут запустил датчик.
Самый простой пример .Поэтому только по одному на каждую ногу)
Я их и хотел использовать на разных ногах, 2-3 штуки. Пример очень помог.
В защиту "ногодрыга" скажу что так можно точнее формировать интервалы, чем при использовании UART, где интервалы грубее. Иногда при изменении емкости кабеля, изменении температуры, отсыревании, связь пропадает. Причина не хватает каких-то микросекунд для передачи данных, уровень сигнала нарастает, но немного дольше, чем нужно и данные пропадают полностью. У нас так в бассейне было, кабель 50 метров в стене в штробе, некоторое время работал, а потом перестал отвечать датчик температуры воды DS18b20. Пришлось корректировать сигнал RC цепочкой на стороне датчика, нарушив его герметичность...
Сечение кабеля?Лог уровни 3.3В или 5В были?
4096 это максимальное значение для 12бит, соответственно при изменении разрядности измерения это значение нужно будет уменьшать.
Merhaba Programınız çalışıyor. Fantastik. Ben stm32f030f4p6 için programı dönüştürdü. Herşey için teşekkürler.
I'm glad that you did it.
hi
DS18b20 fast reading temperature code is
ds_reset_pulse(1
Спасибо огромное за ваш труд!!!
На канале есть еще два видео для ds18b20 и stm32 с множественным подключением.
Отличный урок, благодарю.
Здравствуйте. Благодарю за Вашу работу. Подскажите как Вы настроили отображение кириллицы в комментариях?
Edit-Configuration-Encoding-UTF8
такая же конфигурация. Если делать замеры раз в секунду, то в течении 4х часов очень много выбросов до 50
Если делать рас в 2 секунды?
ElectroHobby картина практически не меняется, 9 датчиков на шине, раз в секунду спрашиваю все. пробовал каждую секунду опрашивать по одному датчику( период опроса одного датчика 9сек.) разница небольшая
Как я понял вы используете стороннюю библиотеку, а не код из этого примера.Ну тогда надо искать какую-то зависимость.Например изменить количество датчиков до одного проверить что все ОК?Уменьшить длину линии проверить с парой - тройкой датчиков может напряжение в конце линии проседает.Вообще нужны эксперименты.Мне интересна схема подключения и длинна линии?В таких случаях выручает осциллограф и логический анализатор.Погрешность в одних и тех же датчиках?
ElectroHobby погрешность сыпется по всем датчикам, длина линии около двух метров, провод экранирован, все датчики на конце линии, там же и подтяжка к 3.3В, экспериментов делали много. в итоге сделали фильтрацию цифровую.
Не знаю как устроена библиотека но как вариант если команда преобразования отправляется сразу всем датчикам то может проседать напряжение.
Подскажите пожалуйста, почему нельзя использовать внутреннюю подтяжку ноги у микроконтроллера, а вместо этого все используют подтяжку ставя резистор?
Резистор внутри мк имеет очень малую мощность. А так можно использовать если сопротивление устраивает.
@@ElectroHobby1 спасибо
здравствуйте! видео было весьма познавательным, спасибо. если я правильно понимаю у вас датчик подключен к внешнему питанию, а что если сделать "паразитное питание", там вроде другая обработка(и этот алгоритм не сработает) или я ошибаюсь?!
Датчик питается от самой платы с мк.+ - 3.3в и одна из ножек мк.Паразитное питание здесь не работает.
А видео будет с "паразитным" подключением DS18B20?думаю ни одному мне это будет интересно + я еще в интернете пока не нашел, кто по полочкам раскладывает подключение с "паразитным" питанием
а где ссылка на статью?
can you make an English version? appreciate it
У меня ещё один вопрос.Как конвертировать с дробным числом?
А почему вы не ответили?
Доброго времени суток! А зачем использовали таймер? В Hal же есть встроенные задержки HAL_Delay.
Можно но код можно переделать немного и он не тупо в while() будет ждать. То же самое и HAL_Delay() можно переделать под себя и если время не прошло заниматься чем-то полезным.
Таймер использован, т.к. HAL_Delay даёт задержку в миллисекундах. А для работы с Onewire требуются задержки в микросекундах.
Почему-то переменная temp нулю постоянно равна. Проект залил не меняя скачанный по ссылке. Открываю в STMStudio
Что возвращает функция ds_reset_pulse()?
скажите пожалуйста как быть если будет использоваться длинная линия с датчиками? там нужно использовать схему на двух транзисторах. ее можно привязать к этой библиотеке?
Данный код не предусматривает подключение большого количества датчиков. А какое расстояние между датчиками?
метров до 100
Ну тогда может STM8+NRF24+DS18B20+ два провода питания? На ста метрах при раздаче 3В с одной стороны на другой ничего не окажется)
та почему? у датчиков же ток маленький
Ну как бы 1- wire и на 300 метрах может работать, ну я видел у людей проблемы были с 2-мя датчиками проседало напряжение,тогда уже применяли транзисторы подтягивали шину к питанию на время преобразования....ну вообще надо пробовать.
А как же измерить отрицательную температуру.У вас есть пример?
У меня было пару видео на эту тему,там точно должно быть и для отрицательных температур.Для последнего видео есть исходники там должно показывать отрицательную.
@@ElectroHobby1 А сылку можете дать.
@@ivanrusev2270 ua-cam.com/video/HAeRa_5kW5U/v-deo.html
Сорри моих знаний не хватило на 4 минуты не выдержал, зайду попозже
Если цель подключить датчик то скачайте прошивку и вставьте ваш кусок кода.
А как считывать температуру, если несколько датчиков подключено к одной шине?
В этом видео рассмотрен сам принцип снятия показаний для одного датчика.Для нескольких на одном и том же проводе приведенный код не подходит.Само проще наЙти и использовать библиотеку.С данным кодом максимум можно подвесить пару датчиков на разные выводы мк отредактировав код.
Скажите, пожалуйста, как Вы через стлинк данные выводили?
С помощью SWO?
Да.Постоянно этим пользуюсь.В последней версии кейл после обновления,не удалось на f4 запустить.
@@ElectroHobby1 но Вы же не модифицировали сам стлинк? И к блюпилу от стлинка тоже всего 4 провода подключено.
По идее - для использования SWO нужен пятый провод
@@Nidvoraich модифицировал китайский stlink.Если не сможете сами в любой мастерской за копейки припаяют только объяснить откуда куда.
@@ElectroHobby1 да я припаял к 31 ноге, но толку - ноль :)
Но у меня на свистке не оригинальный стм, а клон камня. Может, в этом дело
@@Nidvoraich У меня тоже клон.На 5.27 Keil нормально все работало на 5.29 не настроил.Можно просто весь вывод в UART перенаправить.Тоже норм работает на скорости 2000000бод.Конечно SWO не грузит проц.
Не пойму почему датчик стал возвращать "2" в ф-ции ds_reset_pulse(). Датчик в целом почти не перемещался, код не менялся, кроме как с переключения дисплея ILI9341 на LCD1602 и всё. Ну и порт не "B", а - "A". Пин тот же.
Что может быть?
84МГц на АПБ2, с предделителем = 34 и ARR = 19999.
1.проверить настройку вывода(открытый коллектор)
2.проверить подтягивающий резистор
1. Можно подробнее, не понял(
2. Целый, проверил.
1.Нога микроконтроллера ответственная за прием передачу с ds18b20 должна быть настроена в CUBE или в проекте изменить как открытый коллерктор.
2.Если резистор исправен то на DQ относительно GND должно быть в примерно 3.3в при вкл. питании.Если нет выключаем питания меряем сопротивление между GND и DQ ? и линией 3.3 в относительно DQ?
1. Да, стоит open drain.
2. Между gnd и dq 0.85 в.
3. между 3.3в и dq = 12 и 22 МОм. в зависимости как щупы прикладывать. В одну сторону 12, в другую 22.
Между gnd и dq в одну сторону 11 МОм, в другую бесконечность, т.е. 1.
Не должно так быть до обмена данными (0.85в) отсоедини линию данных DQ от мк и померяй относительно земли на DQ сколько?
Пробую запустить это чудо на STM32F4-discovery и как результат:
Температура : 1 градус постоянно
Знак: 45 или 47, забыл, ну в общем минус. И данные никак не обновляются.
Что может быть? Датчик один, подключенный через резистор, всё верно. Но вот что-то не так.
Хотел узнать, а как написать код не на регистрах, а через HAL? Как сдвинуть на 9 битов и т.д.?
По поводу датчика он должен быть подключен не через резистор, а резистор подтягивает ножку обмена данными датчика к 3.3в мк.
Что возвращает ds_reset_pulse()
Вообщем могу помочь портировать проект на F4 c HAL функциями если не получится F4 у меня есть
На STM32F4-discovery подключил его к 3в, резистор параллельно DQ и VDD. Так: naprisar.at.ua/Termlcd/DS18B20-TO-92.jpg ну только на 3 вольта.
ds_reset_pulse() возвращает 1, т.е. датчик не обнаружен.
Проверял так:
uint8_t xxxx;
//цикл
xxxx = ds_reset_pulse(1
1.ЗАДЕРЖКИ 2.КАК НАСТРОЕНА НОГА МК?
Зачем это таймерный изврат если можно использовать аппаратный UART аки белый человек?
we.easyelectronics.ru/STM32/esche-raz-o-stm32-i-ds18b20-podpravleno.html
Читал знаю.
А зачем этот изврат, с двумя пинами на один датчик. И уарт привязан к определенным пинам, а тут можно использовать любой свободный.
texnikaiservis зачем вообще эти идиотские аппаратные интерфейсы привязанные к конкретным пинам, если можно юзать программные на любых?
То сарказм был про "идиотские аппаратные интерфейсы" если что)
Не работает.
Не может не работать!!!Почитайте кометы там у кого-то тоже были проблемы.Я писал что проверить.Также у меня есть пример для множественного подключения датчиков.По нему было 2 видео, можете его опробовать.
@@ElectroHobby1 импульсы от стм есть, датчик не отвечает.
@@EveusLab Проект мой изменяли или используете как есть?
@@ElectroHobby1 как есть попробовал, тишина. Попробовал пересобрать, куб ругается на библиотеки. Сейчас делаю новый проект в кубе и попробую собрать все заново.