Цепляем 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, получил нормальную комнатную температуру, греется тоже нормально...
Так вот, вопрос в том что не так с оригинальной формулой, почему при помощи нее не получается подсчитать температуру?
Популярные вопросы
Переэкструзия внизу модели
Всем привет.
Внезапно стал возникать нехороший дефект, похожий на пресловутую слоновью ногу, но не совсем.
На фото...
Внезапно стал возникать нехороший дефект, похожий на пресловутую слоновью ногу, но не совсем.
На фото...
Есть ли потребность в системе замены катушки?
Всем привет, хочу собрать данные. Существует ли у кого потребность в автономной системе смены филамента, работающей с любым принтером без подключения...
Кубик, Simplify3D и мосты
slic3r перед тем, как выкладывать верхние слои, кладет мосты, а прекрасный Simpli3D этого не делает :(
То есть вот это зелено...
То есть вот это зелено...





Комментарии и вопросы
а кто такой Безруков? Это тот....
Это стандартная поза Безрукова...
ПРИВЕТСТВУЮ. сегодня собрал си...
После замены мат. платы при вк...
Добрый день, пордскажите, пожа...
Добрый день, после отключения...
Здравствуйте всем 🤝Есть такой...