Разбор тестового задания по электронике в Яндекс
- вторник, 18 февраля 2025 г. в 00:00:11
Сегодня в очередной раз наткнулся на вакансию старшего инженера - схемотехника в Яндекс. Решил, что это знак и настало время разобрать их тестовое задание. Звучит оно следующим образом:
Есть:
Сенсор температуры на основе Pt1000, где Rt = 1000 Ом при 0 °С, Rt = 1385 Ом при 100 °С. АЦП с входным диапазоном 0–3 В и эквивалентным входным сопротивлением не более 10 кОм.
Требуется:
Разработать схему согласования сенсора и АЦП так, чтобы температуре 0 °С соответствовало напряжение 0 В на входе АЦП, температуре 100 °С соответствовало 3 В. Мощность, рассеиваемая на Pt1000, не должна превышать 1 мВт.
По ссылке есть дополнительные требования по указанию на схеме токов и напряжений, этого делать я не буду.
Начнем с выгодного для нас трактования задания, условимся, что датчик расположен на удалении от схемы в 2м и и подключен проводами сечением 0.03мм^2 к плате. Соответственно, нет надобности функционирования схемы в температурном диапазоне 0-100°С. Считаем, что температура резко не изменяется, к примеру, не быстрее чем 1°С/1мс. За минимизацией стоимости я не гонюсь, поэтому не буду рассматривать китайские аналоги микросхем. Будем считать, что печатная плата спроектирована идеально и не оказывает никакого влияния на схему.
Поскольку не все модели выбранных компонентов есть в среде моделирования, буду выбирать похожие, дополнительно комментируя выбор. Также я не буду подробно разбирать базовые схемы, про них можно почитать в интернете и в даташитах производителей.
Начнем с датчика и сопротивления его проводов.
Исходя из таблицы выше при длине кабеля 2м из меди сопротивление составит 1.067 Ом. Предположим что 0.2м кабеля расположена в зоне, где температура 100°С, тогда получим:
1.067Ом + 0.1 * (1 + 4.3 * 10^-3 * (100°С - 20°С)) = 1.1 Ом.
С учетом, что у нас есть еще и возвратный кабель, умножаем на 2, итого 2.2 Ома, что составляет 0.22% от минимального сопротивления. Много это или мало, зависит от требований по точности измерительной схемы, однако мы попробуем снизить ошибку до минимума.
Какие схемы измерения можно применить?
Мост Уитстона. Мост состоит из 4 сопротивлений, причем R1 = R2, Pt1000 в нашем случае - Rx, при температуре 0°С его сопротивление равно R3. При повышении температуры сопротивление Rx растет, таким образом появляется разность потенциалов между точками соединения R1, R2 и R3, Rx.
Данный метод измерения позволяет устранить ошибку из - за вариаций источника питания. Однако, в нашем случае есть нюанс - сопротивление проводов термодатчика. Также будут влиять и прочие эффекты, связанных с проводным соединением. Помимо прочего не забываем о точностях резисторов R1, R2, R3.
Измерение с помощью источника тока. Идея простая: источник тока подключается к резистивному датчику, падение напряжения на датчике измеряется операционным усилителем и масштабируется.
Выделяют три вида подключения: 2-, 3- и 4-проводное.
2-х проводное самое простое, но обладает наименьшей точностью за счет отсутствия полной компенсации сопротивления проводов. 4-х и 3-х проводное более точные, но требует дополнительных измерительных компонентов в схеме. Попробуем скомбинировать два этих способа в один, конечно, с некоторыми допущениями.
Начнем с источника тока, используем схему зеркала тока Вилсона, Q4 держит напряжение Vce Q5 примерно на напряжении 2*Vbe, работая как каскод. Добавим R15, R17 для создания большей стабильности при вариациях Vbe от транзистора к транзистору 100 Ом, 1% вполне достаточно. В качестве Pt1000 у нас выступает R2. Для большей точности используем pnp транзисторы с высокой бета BC807-40:
Чем больше тока, тем больше падение напряжения на термодатчике, следовательно, более точные измерения. Однако не забываем про условие ограничения мощности в 1мВт. Зададим ток, равный 800мкА, исходя из графика в документации, считаем Vbe равным 600мВ:
Таким образом для 800мкА нам понадобится резистор:
R18 = (3.3В - (0.6В * 2) - (800мкА * 100Ом)) / 800мкА = 2525 Ом
Возьмем 2.49кОм и 34.8Ом 0.1% (на схеме будет указана их сумма как R18).
А теперь нам понадобится еще одно плечо, соединим базы транзисторов, в таком случае ток в R3 будет равен R2 (считаем что Vbe отличается минимально). R3 выберем равным сопротивлению Pt1000 при 0°С, т.е 1кОм 0.1%
Для соединения датчика будем использовать псевдо 3-х проводную схему соединения, два провода для источника тока и один для измерения.
Помним, что расчетное сопротивление кабеля 1.1Ом. Оно обозначено резисторами R22, R21, R9. То есть за счет непосредственного подключения входа усилителя к датчику третьим проводом, падение напряжения на сопротивлении верхнего провода (R22) не будет влиять на измерения. Остается вопрос: что делать с возвратным проводником R21? Его я предлагаю компенсировать цепью R10, R6. Внеся их в соседнее плечо - мы создаем дополнительное падение напряжения, которое будет компенсировать падение на R21 (обратном кабеле). R10 - подстрочный резистор, которым можно калибровать измерения, например, при 0 градусов.
Теперь перейдем к самому усилителю, в данном случае отлично подойдет дифференциальный усилитель. Основные требования: низкое смещение нуля, низкий входной ток, минимальная несимметрия токов между выводами, rail - to rail выход, минимальные отличия усиления каждого из диф. входов. Хорошим кандидатом на эту роль является AD8223:
Vos - 160мкВ (0.052% от полного диапазона при температуре от 0 до 100°С)
Ib - 28нА (дает падение 38мкВ на Pt1000 и ошибку в 0.012%)
Ibos - 2.5нА (дает падение 3.46 мкВ на Pt1000 и ошибку в 0.0011%)
Vout - 0.01В от земли и 0.15В от питания при нагрузке 100кОм (дает ошибку в 0.7% при G = 5, поборемся с этим позже)
Точность усиления - 0.02% при G = 5
CMRR - 100дБ при G = 5
Усилитель хороший, но при работе с ним есть нюансы, например, его не получится напрямую подключить к АЦП, поскольку при нагрузке 10кОм максимальное выходное напряжение будет на 0.5В ниже положительного питания. Также усилитель имеет наименьшую погрешность при усилении G = 5:
The AD8223 defaults to G = 5 when no gain resistor is used. Add the tolerance and gain drift of the RG resistor to the specifications of the AD8223 to determine the total gain accuracy of the system. When the gain resistor is not used, gain depends only on internal resistor matching, so gain error and gain drift are minimal.
То есть, никаких резисторов нам не потребуется. Для ограничения полосы предлагаю добавить на выход фильтр с частотой среза 5кГц (1кОм и 3.3нФ):
В моей библиотеке нет AD8223, поэтому для модели я использую AD8221 с двуполярным питанием.
Итого:
В R20 и R16 течет одинаковый ток, при росте сопротивления термодатчика падение напряжения на нем увеличивается, на входе дифференциального усилителя растет разность напряжений, поскольку R20 остается все также равным 1кОм.
Осталось спроектировать выходной каскад для согласования с АЦП. Теперь наступает самая интересная часть, на что же мы готовы ради милливольт? У rail to rail усилителей есть одна важная особенность: напряжение на их выходе никогда не будет равно абсолютному нулю. Лучшее, что я нашел 30мВ, а это 1% выходного напряжения. Похоже, пора создавать отрицательное питание. Используем для этого ICL7660A, ее внутренняя схема:
Подключение стандартное, для напряжения 3.3В необходимо заземлить 6й вывод LV, диод, исходя из графика производителя, не потребуется.
Выберем частоту переключения равной 10кГц, конденсатор Cosc в таком случае не понадобится. Емкость С1 = С2 выберем равной 120мкФ (один танталовый 293D107X96R3B2TE3 и два керамических по 10мкФ). Рассчитаем пульсации при таких условиях
Vripple = 1 / (2 * fpump * C2) = 410мВ
Много? А давайте посмотрим на PSRR (коэффициент ослабления шумов по питанию) усилителей, для которых предназначается это питание. Вот, например график для отрицательной шины AD8223. Итого наши 410мВ при ослаблении в 90дБ превратятся в 13мкВ.
У потенциального претендента (OPA2376) в следующем каскаде график PSRR чуть хуже, но при 75дБ ослабления мы получим 73мкВ пульсаций.
Однако эти усилители могут быть заменены на аналоги (например, AD8223 -> AD8221) у которых PSRR хуже. Помимо прочего, подобные пульсации создают помехи на плате. Для их устранения потребуется пару элементов, которые не скажутся ни на габаритах платы, ни на стоимости устройства.
Соберем отрицательный линейный регулятор на транзисторе MMBT2907A и стабилитроне PH_BZX884-B3V0 с напряжением 3В. Таким образом, мы сгладим все пульсации выше примерно -3В + 0.7В), т.е -2.3В, отлично! Итоговая схема:
Будем использовать полученные -2.3В для выходного каскада, также, раз есть такая возможность, подключим отрицательное напряжение и к дифференциальному усилителю, таким образом обойдем ограничение в 0.01В от земли. Кстати, при двуполярном питании AD8223 производитель рекомендует отрицательное напряжение не больше -2, при сформированных -2.3В будем иметь небольшой запас.
Выходной каскад построим на OPA2376, его параметры
Vos - 25мкВ (0.0017% от полного диапазона при температуре от 0 до 100°С)
Ib - 10пА (несравнимо малое падение на R12)
Ibos - 10пА (несравнимо малое падение на R12)
Vout - 30мВ от земли и питания
Zin - 0.1ГОм (несравнимо малый делитель с R13)
Zol 150Ом
Gol 120дБ
Теперь предстоит понять какой коэффициент усиления нам потребуется. Для этого посчитаем какое напряжение при 100°С мы получим на выходе дифференциального усилителя:
Vu2out_max = 800мкА * (1385Ом - 1000Ом) * 5 =1.54В
Для получения 3В при 100°С нам потребуется усиление:
Gcl = 3 / 1.54 = 1.948
Выберем R24 = 200кОм 0.1%, тогда:
R23 = 200кОм * (1.948 - 1) = 189.6кОм
В этом случае можно использовать два резистора 2.61кОм и 187кОм 0.1%.
Выходной импеданс усилителя будет:
Zout = Zol / (1+Gol * R23 / (R24 + R23)) = 0.3мОм
Выходной импеданс создаст несравнимо малую ошибку с 10кОм на входе АЦП. Для спокойствия также рассчитаем падение токов Ib + Ibos на резисторе в обратной связи:
200кОм * (0.1нА + 0.5нА) = 0.12мВ, что составляет 0.008% от 1.54В, думаю можно пренебречь.
Добавим еще один фильтр для ограничения полосы пропускания, для этого достаточно будет установить конденсатор параллельно с R23, R25. Выберем номинал равным 0.1нФ, частота среза будет составлять 8.4кГц. Хочу обратить внимание, что на схеме используется другой ОУ, поскольку OPA2376 нет в моей библиотеке.
Во избежание неприятных сюрпризов промоделируем готовую схему и внесем правки при необходимости.
Проведем AC - анализ, для этого используем источник напряжения V1 вместо R16. Подключим оба входа дифференциального усилителя к источнику. Взглянем на график Боде выходного каскада.
Полоса пропускания схемы - 275кГц, видно, что запас по фазе маловат (около 20 градусов), т.е схема может быть не устойчива. Для увеличения запаса увеличим емкость на выходе дифференциального усилителя до 6.8нФ, результат следующий:
Отлично! Теперь запас 60 градусов, достаточно для устойчивости, тем более, если учитывать, что максимальная частота сигнала на входе 100Гц, дополнительно зададим требование для частоты семплирования АЦП не более 100к Выб/Cек.
Последним шагом протестируем схему, для этого временно уберем источник тока, идущий к термодатчику, заменим термодатчик на источник напряжения, который имитирует синусоидальное изменение сопротивления от 1кОм до 1385Ом с частотой 100Гц. Схема будет выглядеть следующим образом:
Зеленая трасса - напряжение на отрицательном входе U2;
Cиняя трасса - напряжение на положительном входе U2;
Красная трасса - напряжение на выходе U1.
Последним шагом добавляем конденсатор от помех на положительный вход дифференциального усилителя, на ФЧХ он не скажется, однако спасет от резких выбросов, связанных с индуктивностью кабеля. Также лучшим решением будет добавить подстройку тока. Используем резистор номиналом 2430 Ом и подстрочный резистор номиналом 150 Ом.
Основную погрешность в измерения будут вносить транзисторы из - за разброса Vbe. Возможным выходом является измерение характеристик используемых элементов и разделение их по группам с минимальным разбросом. Однако можно попробовать свести к минимуму и эту погрешность. Предупреждаю что дальнейшее повышение точности может повышать стоимость устройства.
Неплохим выходом является использовать готовый источник тока, нам важно, чтобы в нем было два идентичных канала, я нашел REF200. К сожалению, два канала рассчитаны на 100мкА, в этом случае придется пересчитать выходной усилитель. Требуемый коэффициент усиления будет:
Vu2out_max = 100мкА * (1385Ом - 1000Ом) * 5 =0.1925В
Gcl = 3 / 0.1925 = 15.584
В выходном каскаде заменим R24 на 20кОм, R23 тогда будет:
R23 = 20кОм * (15.584 - 1) = 291.68кОм
Казалось бы, все хорошо, но теперь натыкаемся на такую фразу в даташите REF200:
High accuracy: 100 µA ±0.5%
Для нас 0.5% не считается высокой точностью. Также хочется обратить внимание, что R24 даже при точности 0.1% будет давать ошибку 0.1%*Gcl = 1.5%. К сожалению погрешности не обманешь....
Попробуем самостоятельно построить источник тока с требуемой точностью. У нас остался один свободный операционный усилитель (у OPA2376 два усилителя в корпусе), давайте его применим. Также понадобится опорный источник напряжения, хорошо подойдет AD780BR с напряжением 2.5В и погрешностью 0.08%. Подключение возьмем из документации:
Для формирования 800мкА номинал токозадающих резисторов должен быть:
Rcs = (3.3В - 2.5В) / 800 мкА = 1кОм 0.1%
Схема будет выглядеть так:
И все же два транзистора остались, а это очередной источник погрешности. Помимо прочего, в условии утверждают, что напряжение 3.3В идеально стабильно. В жизни так, конечно, не бывает, и это повлияет на точность. Последний ход, который можно сделать это заменить OPA2376 на OPA4376 (4 усилителя в корпусе). На базе еще одного усилителя создадим отдельный источник тока в левом плече. В этом случае ток будет зависеть только от сопротивления резисторов и напряжения опорного источника (который у нас общий для двух усилителей).
Мы рассмотрели несколько вариантов схемы со своими плюсами и минусами и выбрали наиболее подходящий вариант. В любом случае схеме понадобится регулировка, в этом помогут резисторы R2, R10. Кстати, все неуказанные точности элементов считаем некритичными и равными 5%.
Стоимость элементной базы без учета датчика варьируется в диапазоне 7-8тыс. рублей. Еще около 500-1000 будет стоить двухслойная печатная плата при хороших партиях.