Тестирование схемки опроса ТРД

Aug 13, 2014 20:57

Я уже давно сделал регистратор температуры, но только на этой неделе дошли руки. Почему-то АЦП оказался сгоревшим, пришлось при помощи промышленного фена (т.к. паяльную станцию с феном нам еще не купили) выпаять старую АЦП и впаять новую, заодно заменив "кренку" (видимо, из-за нее и сгорел старый АЦП, т.к. на его ногах питания были все +12В). Дня три я убил на код (который и сегодня допиливал, но так до конца и не исправил все баги), в результате получилось вот что:


Банка с азотом

Я решил посмотреть, насколько стабильно будет работать эта схема по сравнению с регистрацией температуры встроенным в STM32F103 12-битным АЦП. 8 ТРД я повесил на свою схему, 8 прицепил к входам АЦП микроконтроллера.
Только спаяв схемку и начав с ней работать, я понял, как сильно промахнулся в выборе мультиплексора: используемые имеют сопротивление с полкилоома! Между тем, существуют и 1-2-омные мультиплексоры (правда, в неудобных корпусах, зато рублей по 50 за штучку).
У МК тоже был какой-то "косяк": один из каналов показывал в 2 раза меньшее падение напряжения, несмотря на то, что вроде бы по схеме ничего к нему не подключено! Прозвонка никаких проблем не выявила.

При комнатной температуре мой "велосипед" дал разброс показаний ТРД в ±0.15% (т.е. около полуградуса туда-сюда). У встроенного АЦП вышло ±0.3% (±1°C). Корреляция в дрейфе показаний всех датчиков наблюдалась однозначная. В среднем дрейф при комнатной температуре получился около 0.01% для 24-битного АЦП и 0.04% для 12-битного АЦП. Но сказать однозначно, что вызвано это шумами, нельзя: для этого надо поместить датчики в термостат, а так было видно даже незначительное изменение температуры из-за нахождения меня недалеко от датчиков.

Для контроля температуры я к этим 16-ти датчикам подвесил в общую "гроздь" еще пару, сопротивление которой измерял актакомовским точным авометром.

А под конец рабочего дня (из-за чего пришлось почти до восьми вечера высиживать) я залил жидкий азот в "термостат", который уже использовал ранее при проверке работоспособности датчиков Холла, и поместил туда датчики. Ну и осталось выжидать для накопления достаточной статистики.

Правда, буквально через полтора часа после начала эксперимента обнаружились его дыры:


Мое рабочее место
так как датчики висели гроздью внутри дюралевой плошки без физической изоляции от жидкого азота, было ясно видно, как очередной датчик становится выше уровня убывающего азота. Потом был участок слабого нагрева из-за "всплывания" дюралевой плошки. Ну и наконец весь азот испарился, и датчики охлаждались уже за счет воздействия окружающей среды и самонагрева (самонагрев отлично было видно: т.к. гроздь, которая считывалась МК, была ближе к одному опорному датчику, показания стали сильно различаться). По мере приближения к нулю показания датчиков сходились все ближе и ближе.

Окончательного нагрева я не дождался. Пришлось идти домой, а установку от греха подальше выключить (т.к. коммутаторы имеют еще один минус - питаются от 12 Вольт).

В общем, судя по результатам явно видно, что даже совершенно идиотские мультиплексоры, как ни старались, не смогли совсем уж убить показания. Получается где-то в районе честных 14 бит безо всякой обработки! А если бы мультиплексоры были правильными, то наверняка еще можно было бы вытянуть пару-тройку бит, если не больше!

Но и так уже точности предостаточно - лишь бы не было сильного теплового дрейфа за счет изменения температуры регистрирующей аппаратуры. Этого я еще не проверял. А чтобы проверить, надо собрать почти настоящий термостат, залить туда воды со льдом из холодильника и накапливать статистику, скажем, обогревая феном микроконтроллер и АЦП с коммутаторами.


Начало эксперимента: опыты при комнатной температуре

Теперь остается объявить торги (вот - один из современных ломов в колесах науки), получить радиодетали (правда, не все: я так и не нашел поставщика, который бы предоставил все, что нужно, да еще и не по астрономической цене) и печатные платы, спаять и добить уже альфа-версию системы управления спектрографом.

UPDATE

Сегодня погонял еще в коробке + подул на плату феном. Внутри коробки вполне стабильно себя чувствуют датчики: точность измерения будет не хуже 0.05К внешним АЦП (внутренним - не хуже 1К). Однако, как только начал дуть феном, получилась гадость: сигма на 0.52% средней амплитуды при 60°C, 0.58% при 90°C и 0.89% при 110°C.


Обдувание платы феном 110°C

Проблему с зависанием внешнего АЦП я вроде бы решил (по крайней мере, уже не зависало).

А вот что вчера получалось. 24-битный АЦП (на график нанесены точки с измеренным сопротивлением, не в масштабе, а информации ради):


24-битный АЦП, нагрев от 76К

А вот и 12-битный, встроенный в МК:


12-битный АЦП, нагрев от 76К

P.S. Вот чем я графики рисовал:

function data_stat(filename, msrd)
% prints some statistics
% also plot graphs

MF = 0;
if(nargin == 0) filename = 'tempout'; endif;
if(nargin == 2) MF = 1; endif;
D = dlmread(filename);
if(isempty(D)) return; endif;
[r c] = ind2sub(size(D), find(D(:,[3:18]) == 0)); % find bad data
D(r,:) = []; % and delete it
% [r c] = ind2sub(size(D), (D(:,[11:18]) < 2000000));
% D(r,:) = [];
printf("Some statistics:\n\n\trelative error for inner ADC:\n");

Time = (D(:,1)*2^24+D(:,2))/1000;

x = rel_error(D(:,[3 4 6:10]));
printf("%f ", x);
avrg = mean(x);
printf("\t(aver: %f)\n", avrg);
printf("\n\trelative error for outern ADC:\n\n");
plot(Time, D(:,[3 4 6:10]));
T = sprintf("Internal 12-bit ADC, err=%f%%", avrg);
xlabel("Time, s"); ylabel("R, ADU"); title(T);
print -dpng -color int.png;

x = rel_error(D(:,[11:18]));
avrg = mean(x);
printf("%f ", x);
printf("\t(aver: %f)\n", avrg);
printf("\n");
plot(Time, D(:,[11:18]));
if(MF)
R = dlmread(msrd);
M = mean(mean(D(:,[11:18]))) / mean(R(:,2));
Y = R(:,2) * M;
Time = R(:,1)/1000;
hold on; plot(Time, Y, '.');
text(Time+10, Y, num2str(R(:,2)));
hold off;
endif;
T = sprintf("External 24-bit ADC, err=%f%%", avrg);
xlabel("Time, s"); ylabel("R, ADU"); title(T);
print -dpng -color ext.png;

%close
endfunction

octave, железяки, stm32

Previous post Next post
Up