Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

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

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


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

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

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

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

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

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

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

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

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

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


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

UPDATE

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

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


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

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


А вот и 12-битный, встроенный в МК:
int_N2
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

Tags: octave, stm32, железяки
Subscribe

  • Опять Подорванка смыла мост

    В четверг лило настолько, что, похоже, опять на подорванке забилась стремнина бревнами, а потом внезапно это все прорвало. МЧСовсцы перетаскивали…

  • Аж коробит…

    Уже который раз вижу (даже в прессе) выражение: "ставить прививку". Это что за странное такое словоблудие? Либо эпохи царской России, либо даже…

  • Упаковочка

    Получил сегодня пару посылок с алиэкспресса. Одна из них была с новым для меня способом доставки (на посылке не указывался адрес, а лишь "до…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 1 comment