Tips`n`tricks по шине 1-Wire | Блог им. Catethysis

Tips`n`tricks по шине 1-Wire

 

Двухпроводная линия

Чтобы подключить датчик по двухпроводной линии, притяните линию DQ к + через резистор сопротивлением в несколько килоом. Даташит рекомендует 4.7 кОм, я использую 1.5 кОм. При таком подключении по-прежнему можно подключать много датчиков на линию, но сама линия становится немного проще.

Длинная линия

Несмотря на заявленную дальность линии, даже двухметровый кабель вызывает проблемы при паразитном питании. Дело в том, что при преобразовании датчик потребляет довольно большой импульсный ток, и сопротивление кабеля вызывает просадку напряжения. Такой датчик начинает присылать 1360 или 2046 в качестве измеренной температуры — якобы, температура составляет 85 или 127 градусов. Решение проблемы простое — достаточно припаять конденсатор в несколько микрофарад прямо на датчик, на ножки GND и Vcc — он послужит накопителем энергии и обеспечит датчик питанием на время преобразования.

Мощное питание

Однако, бывает что и это не решает проблему. Тогда необходимо обеспечить датчик питанием «по-полной» :)

  1. На время преобразования переключать выходной контакт STM32 в режим Push-pull
  2. Сделать это даже немного раньше — до подачи команды Convert T (0×44). Установлено что некоторые датчики начинают что-то отвечать в процессе подачи этой команды, и конечно же портят её и не получают. Поэтому нужно перевести линию в режим жёсткого переключения push-pull и не дать датчику сломать команду.

Делаем это так: заменяем строки

one_wire_write_byte(0x44);
delay(6000000);

на строки

 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
one_wire_write_byte(0x44);

delay(6000000);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOA, &GPIO_InitStructure);

После таких манипуляций всё точно будет работать.

Снижение потребления

Зайдём с другой стороны. Датчик DS18B20 немного нагревается во время измерения, и при частом опросе он может нагреться на градус-полтора. Это довольно сильная погрешность, но её можно устранить простым снижением периодичности опроса. Для большинства бытовых применений вполне достаточно опроса раз в минуту или даже раз в несколько минут.

Ещё один приём по снижению потребления, удобный при двухпроводном подключении — полное снятие питания с датчика. При паразитном подключении датчик питается от высокого уровня на линии данных, и вы можете просто установить на линии низкий уровень в периоды между опросом датчика. Конечно, в таком случае имеет смысл после включения подержать высокий уровень подольше, чтобы накопительный конденсатор в датчике (или внешний конденсатор) успел зарядиться.

Правильное размещение датчика

Датчик довольно плохо относится к дождю. Ничего удивительного, вода замыкает его контакты и линия данных оказывается заземлена. Именно такой глюк произошёл у меня только что, и в принципе лучшее решение — разместить датчик так, чтобы осадки не попадали на него.

Ещё один момент — прямые солнечные лучи. Корпус датчика чёрный, солнечный свет он поглощает хорошо и нагревается минимум на два лишних градуса. Наверное, самое простое решение первых двух проблем — залить его корпус силиконом и поместить датчик в тень — под подоконник или куда-то ещё.

Есть ещё несколько факторов, вызывающих нагрев датчика: наружный блок кондиционера дует тёплым воздухом, а стена дома нагревается солнцем и переизлучает тепло на датчик. Нужно помнить об этом всём и постараться устранить каждый фактор — к примеру, покрасить датчик в белый цвет и поставить его подальше от кондиционера.

Ссылка на основную публикацию
Optimized with PageSpeed Ninja