Цепляем AD22100 к RAMPS или что я сделал не так?
Всем доброго времени суток!
Так совпало, что в свободное время я занимаюсь допиливанием своего домашнего 3D принтера и у меня как раз завалялся датчик температуры AD22100STZ с диапазоном измерения -50..+150 °С.и уж очень мне захотелось его поставить вместо терморезистора стола. Чем мне не понравился обычный китайский термистор? Да тем, что верить ему нельзя, а калибровать лень да и негде, а я хочу знать точную температуру кроватки. В общем, просто моя блажь, да и по началу все казалось просто - подцепить на свободный АЦП вход датчик, подправить чуток код и профит...
Первый мой промах заключался в том, что свободных аналоговых входов, как оказалось, нет. Совсем нет, вот кусок схемы RAMPS 1.4:все они задействованы. Ну как можно было занять все АЦП входы? Как, Карл? Ладно, простого пути не вышло, придется пилить плату... Дело в том, что выходным сигналом AD22100STZ является напряжение, а не сопротивление как у терморезистора и нет необходимости в схеме делителя напряжения в которую включаются термисторы. Итак, смотрим опять схему RAMPS:видим уже упомянутую схему делителя напряжения с демпфирующим (???) конденсатором на каждом канале измерителя температуры. Нам нужно убрать резистор и конденсатор, подсоединить выход датчика напрямую к ноге ардуины и, естественно, запитать его. Ищем что ломать: в прошивке (Marlin) в pins.h забиты конфигурации выходов ардуины под различные платы, в части RAMPS есть строчка
#define TEMP_BED_PIN 14
смотрим на схему, на аналоговый вход с номером 14 приходит Thermistor1. Значит отпаиваем резистор, что звонится с 4 контактом колодки термисторов, и конденсатор, минус которого с 3. Подпаиваем AD22100 к освободившимся контактам (даташит в помощь):Заливаем тестовый скетч:
float Temp;
int raw=0;
void setup() {
Serial.begin(9600);
}
void loop()
{
raw= analogRead(14);
Serial.print(raw);
Serial.print(' ' );
Temp= (raw/1024.0*5.0-1.375)/22.5*1000.0;
Serial.println(Temp);
delay(1000);
}
и... все работает))) по RS идут коды АЦП и температура 25 °С, зажав в кулак, можно догнать до 34 °С. Пора насиловать прошивку принтера... Сразу скажу, с Marlin-Development у меня не вышло, долго мучился, температура скакала непонятно как, да и вообще, она у меня температуру нормально не показывала, до этого момента я не обращал на это внимание, т.к. датчиков не подсоединял. Поискал на гитхабе, скачал первую попавшуюся и понеслось...
Я не программист и с ардуино знаком на уровне поморгать светодиодиком, поэтому сразу попрошу помощи - получить нормальную температуру по формуле выше не получилось. Что я сделал:
1) определил в настройках #define TEMP_SENSOR_BED -5 (все что с плюсом считается термистором, как я понял)
2) в Configuration_adv.h добавил:
#if TEMP_SENSOR_BED == -5
#define BED_USES_AD22100
#endif
3) в temperature.cpp в функцию analog2tempBed(int raw) добавил:
#elif defined BED_USES_AD22100
return ((raw/1024.0*5.0-1.375)/22.5*1000.0);
Залив получил, что температура в комнате 1324 °С, что по мне, так жарковато. Датчик на нагрев реагирует, формула верная, косяк где-то в вычислении этого самого raw значения, он же 'current_temperature_bed_raw'. Прикинул на листочке разницу в кодах, получилось, что такое значение температуры получается, если значение raw где-то в 16 раз больше. Изменил формулу на (raw/1024.0/16.0*5.0-1.375)/22.5*1000.0, получил нормальную комнатную температуру, греется тоже нормально...
Так вот, вопрос в том что не так с оригинальной формулой, почему при помощи нее не получается подсчитать температуру?
Так совпало, что в свободное время я занимаюсь допиливанием своего домашнего 3D принтера и у меня как раз завалялся датчик температуры AD22100STZ с диапазоном измерения -50..+150 °С.и уж очень мне захотелось его поставить вместо терморезистора стола. Чем мне не понравился обычный китайский термистор? Да тем, что верить ему нельзя, а калибровать лень да и негде, а я хочу знать точную температуру кроватки. В общем, просто моя блажь, да и по началу все казалось просто - подцепить на свободный АЦП вход датчик, подправить чуток код и профит...
Первый мой промах заключался в том, что свободных аналоговых входов, как оказалось, нет. Совсем нет, вот кусок схемы RAMPS 1.4:все они задействованы. Ну как можно было занять все АЦП входы?
#define TEMP_BED_PIN 14
смотрим на схему, на аналоговый вход с номером 14 приходит Thermistor1. Значит отпаиваем резистор, что звонится с 4 контактом колодки термисторов, и конденсатор, минус которого с 3. Подпаиваем AD22100 к освободившимся контактам (даташит в помощь):Заливаем тестовый скетч:
float Temp;
int raw=0;
void setup() {
Serial.begin(9600);
}
void loop()
{
raw= analogRead(14);
Serial.print(raw);
Serial.print(' ' );
Temp= (raw/1024.0*5.0-1.375)/22.5*1000.0;
Serial.println(Temp);
delay(1000);
}
и... все работает))) по RS идут коды АЦП и температура 25 °С, зажав в кулак, можно догнать до 34 °С. Пора насиловать прошивку принтера... Сразу скажу, с Marlin-Development у меня не вышло, долго мучился, температура скакала непонятно как, да и вообще, она у меня температуру нормально не показывала, до этого момента я не обращал на это внимание, т.к. датчиков не подсоединял. Поискал на гитхабе, скачал первую попавшуюся и понеслось...
Я не программист и с ардуино знаком на уровне поморгать светодиодиком, поэтому сразу попрошу помощи - получить нормальную температуру по формуле выше не получилось. Что я сделал:
1) определил в настройках #define TEMP_SENSOR_BED -5 (все что с плюсом считается термистором, как я понял)
2) в Configuration_adv.h добавил:
#if TEMP_SENSOR_BED == -5
#define BED_USES_AD22100
#endif
3) в temperature.cpp в функцию analog2tempBed(int raw) добавил:
#elif defined BED_USES_AD22100
return ((raw/1024.0*5.0-1.375)/22.5*1000.0);
Залив получил, что температура в комнате 1324 °С, что по мне, так жарковато. Датчик на нагрев реагирует, формула верная, косяк где-то в вычислении этого самого raw значения, он же 'current_temperature_bed_raw'. Прикинул на листочке разницу в кодах, получилось, что такое значение температуры получается, если значение raw где-то в 16 раз больше. Изменил формулу на (raw/1024.0/16.0*5.0-1.375)/22.5*1000.0, получил нормальную комнатную температуру, греется тоже нормально...
Так вот, вопрос в том что не так с оригинальной формулой, почему при помощи нее не получается подсчитать температуру?
Популярные вопросы
Несколько косячных слоев посреди печати
Ghost 5 многострадальный. Почти вернулся к истокам, поставил заводскую голову и боуден.
Посреди печати вылезает такая шляпа. Может по...
Посреди печати вылезает такая шляпа. Может по...
Коэффициент потока
Добрый день, можете понятными словами расписать про коэффициент потока новичку? в Орке стоит для АБС 0.926, я правильно понимаю, что увеличение этого...
Зачем используют слово '3D' при описании аддитивных технологий?
Несколько раз уже я обращался к уважаемому сообществу с вопросом на тему - почему так говорят '3D печать', '3D принтеры' и прочие интерпретации, типа...
Комментарии и вопросы
Хорошо сделано, с умом и добро...
Вы реально печатаете слоем 0.3...
Я менял пружины на жесткие про...
Всем доброго времени суток. Ре...
Калибровку ровно по инструкции...
Помогите, пожалуйста, добавить...
Добрый день! Купил недавно any...