Цепляем 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, получил нормальную комнатную температуру, греется тоже нормально...
Так вот, вопрос в том что не так с оригинальной формулой, почему при помощи нее не получается подсчитать температуру?
Популярные вопросы
Какие принтеры купить вместо Anet a8?
Всем привет, собственно весь вопрос в заголовке, что взять взамен анетов, бюджет на принтер 20-25к, печатаю пла и петг.
Напечатанные шестерни быстро стёрлись в работе
Сломались пластмассовые шестерни от мойки Kercher. Нашёл в инете готовую модель для 3D печати, скачал и распечатал PLA филаментом. В работе их хватило...
Чем 3D принтер отличается от 3D плоттера?
Коллеги, помогите!
На занятиях по моделированию один школьник спросил - Чем 3D принтер отличается от 3D плоттера и что лучше для нови...
На занятиях по моделированию один школьник спросил - Чем 3D принтер отличается от 3D плоттера и что лучше для нови...
Комментарии и вопросы
Являюсь владельцем данной плат...
Интересный эффект получается к...
Сейчас мало кто режет , в осно...
Добрый день, принтер Creality...
На картинке видно что слой нем...
Господа, товарищи, братья, обл...
Купил двухсторонний коврик A и...