Цепляем 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, получил нормальную комнатную температуру, греется тоже нормально...
Так вот, вопрос в том что не так с оригинальной формулой, почему при помощи нее не получается подсчитать температуру?
Популярные вопросы
Выбор первого 3d принтера
Добрый день. Понимаю, что вопрос стар как мир. Выбираю 3d принтер для домашней печати. Подскажите есть ли модель принтера которая нормально печа...
Локально подгорел (как я думаю) финишный слой при печати
Всем доброго времени суток. В общем, при снятии напечатанной детали обнаружил данный дефект. Судя по всему в один момент подгорел последний слой (как...
Чем 3D принтер отличается от 3D плоттера?
Коллеги, помогите!
На занятиях по моделированию один школьник спросил - Чем 3D принтер отличается от 3D плоттера и что лучше для нови...
На занятиях по моделированию один школьник спросил - Чем 3D принтер отличается от 3D плоттера и что лучше для нови...
Комментарии и вопросы
Открываете во Freecad ваш stl....
Первое наперво на новом куплен...
Опять питерские звезды :D
Приветствую, начал знакомится...
Здравствуйте. Имеется стоковый...
Всем доброго! По поводу жидкой...
На 3 д тодей я делаю не очень...