Цепляем 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, получил нормальную комнатную температуру, греется тоже нормально...
Так вот, вопрос в том что не так с оригинальной формулой, почему при помощи нее не получается подсчитать температуру?
Популярные вопросы
Монетизация.
Добрый день.
Вопрос к тем, кто купил принтер для своих нужд, но, дабы он не простаивал, печатает на заказ.
Где клиен...
Вопрос к тем, кто купил принтер для своих нужд, но, дабы он не простаивал, печатает на заказ.
Где клиен...
Почему на ось Z не ставят винты с мелким шагом?
Почему на ось Z не ставят винты с мелким шагом? Например 1мм на оборот.
Программа для 3D проектирования
Понимаю, что тема 100500 раз обсуждалась, но не удалось нигде найти обобщающей информации, в основном все в одной куче советуется.
Пр...
Пр...
Комментарии и вопросы
удырявить всю стену для кроншт...
Давно уже такие перехватчики е...
Переделафте пожалуфста и вылож...
Прошу поделиться опытом постро...
Приветствую! Подскажите, кто т...
Недавно хотел напечатать модел...
Уже пошло второе сопло 0.4 на...