Вот схема моей схемы NTC-ADC,
АЦП 10 бит, ADCVCC 2,56 В
Вин = 5В
Кто-нибудь может объяснить мне, как я получаю RT, значение сопротивления NTC от значения ADC? Спасибо.
Я использую формулу делителя напряжения:
Vout = ADCVCC * ADC_value / 1024
BETA = 3950
R25 = 4700
RT = 10K / (Vin - Vout - 1)
T = (1 / (1/298.16 + 1/BETA * ln(RT/R25 )) - 273.15
Но я получил неправильные результаты:
Диапазон моих температур:
adc = 1 -> T = 344 °C;
adc = 1023 -> T = 8
Как мне настроить АЦП в AVR? с внутренним опорным напряжением или нет?
у меня неправильная формула?
Мне нужно прочитать "точную" температуру в диапазоне от -10°C до +30°C более или менее.
Я уже пробовал с уравнением SH с коэффициентами A, B, C, но у меня были худшие результаты!!!
Я думаю, что не понимаю схемы цепей NTC - ADC...
И настроил мою ATMega с неправильными параметрами.
Кто-нибудь может попытаться объяснить мне, как преобразовать значение моего АЦП в сопротивление термистора с помощью этой схемы?
Спасибо в совете за помощь.
[РЕДАКТИРОВАТЬ]
Моя установка для AVR ADC:
ADMUX |= (1<<REFS0) | (1<<REFS1);
ADCSRA |= (1<<ADEN) |(1<<ADSC) |(1<<ADIE);
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
и формула, используемая для получения сопротивления из значения АЦП: Vin = 5V Vref = 2,56V (AREF)
Vout = adc_val * (Vref / 1024.0))
RT = 10k / (Vin / Vout - 1.0)
Этот код соответствует схемам? Правильно ли настроен мой АЦП с этими схемами? спасибо за совет.
Кто-нибудь может попытаться объяснить мне, как преобразовать значение моего АЦП в сопротивление термистора с помощью этой схемы?
Во-первых, схема операционного усилителя практически ничего не делает, кроме добавления небольшой ошибки. Если бы у него была выгода, вы могли бы утверждать, что это было выгодно.
Во-вторых, эта схема выигрывает от использования напряжения питания в качестве аналогового эталона, потому что тогда вы удаляете еще один член ошибки, который представляет собой переменную разницу между напряжением питания на резисторе R1 и опорным напряжением АЦП.
Таким образом, значение АЦП представляет собой отношение
Вы можете взять это отсюда?
Я запустил ваш код на Python и получил 285 для adc_val = 1 и -84 для adc_val = 1023. При adc_val 318 я получаю 25,9. RT в этот момент составляет 4504. Похоже, ваши уравнения должны быть правильными. Вы уверены, что это правильно реализовано с точки зрения типов? Это должно быть все с плавающей запятой. Если что-то преобразуется в целое число или что-то в этом роде, вы можете получить странные результаты.
>>> BETA = 3950
>>> R25 = 4700
>>> Vin = 5
>>> Vref = 5
>>> adc_val = 1
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT = 10000 / (Vin / Vout - 1.0)
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
285.3553121325664
>>> adc_val = 1023
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT = 10000 / (Vin / Vout - 1.0)
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
-84.45667531777428
>>> adc_val = 318
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT = 10000 / (Vin / Vout - 1.0)
>>> RT
4504.249291784702
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
25.970525623383708
Ложка
Рафаэлло