Фактично єдиний параметр який можна змінювати і регулювати у SiPM є напруга зміщення. Напруга зміщення (bias voltage) вибирається на кілька вольт більше breakdown voltage (напруга при якій SiPM починає працювати). Залежно від того, наскільки bias voltage більше breakdown voltage, залежить чимало параметрів (див даташит): підсилення, шуми, ефективність і тд. Аби вимірювати гарні спектри, потрібно стабілізувати overvoltage. Але от біда, breakdown voltage кристалу залежить від температури (26 mV/K зазначено в даташиті). Отже, є два шляхи: помістити кристал в термостат (дорого і об'ємно) або підкручувати bias voltage щоразу як темрература змінюється, аби тримати overvoltage стабільним (це наш шлях).
Для цього потрібно мати вимірювання температури і вміти регулювати напругу з мікроконтроллера.
Регулювання напруги зсуву було передбачено схемотехнічно. Операційний підсилювач живиться 34В напруги і видає на виході помножене на 10.1 значення напруги з неінвертуючого входу. На цей вхід подається напруга від 0 до 3.3В з ЦАП. Я використав MCP4725, бо такий мав під рукою, але він має лише 12біт.
В наступній версії швидше за все використаю 16 bit DAC, або буду сумувати напруги ЦАПа і опорної 2.5В, бо насправді регулювання треба лише від трохи менше breakdown voltage 26.9В до максимального overvoltage 26.9+10В. Тому можна просумувати скажімо 2.5В від TL431 (приблизно 25В на виході) і 0.8В (вихід ЦАПа на дільник, але зберігаємо 12 біт крок), що в максимумі дає до 3.3В (приблизно 33В на виході). Але це відступ від теми.
Щоб вимірювати температуру, я застосував RTD резистор. Я трохи скомбінував схеми, аби застосувати наявні деталі.
Для підсилення сигналу, я використав інструментальний підсилювач. З ним я маю найменше проблем при однополярному живленні. До неінвертуючого входу я приєднав RTD резистор і резистор зсуву. На інший вхід я даю опорну напругу з підсилювача, аби виставити опорний рівень. Мені не потрібні абсолювні значення температури, а лише зміна і вимірювана напруга має бути високолінійна від температури (того і RTD, а не терморезистор). Резистор, яким я підпираю RTD, це щоб виставити потрібний common mode voltage інструментального підсилювача.
Інша частина схеми, це джерело струму на 0,25 мА (типова схема). Варто зазначити, що оптимальний стум через резистор зазначений в його даташиті і є 0.1-0.4мА. Якщо більше, то резистор почне грітись і завишати температуру.
Тоді, на вході інстументального підсилювача буде (5600+500)*0.00025=1.52 В (ок при 5В живленні -- див мал 13 даташиту (синенькі межі)). А на виході операційного підсилювача джерела струму буде 1.52+10000*0.00025=4.02В (має бути rail to rail op amp).
Далі я додаю певні розмірковування без коментарів щодо того, скільки x bit ADC має змінитись щоб порухнути 1 bit DAC.
Гаразд, зчитуваття і підлаштування напруги мікроконтроллером не викликає труднощів. Проте є одне але. Сигнал, що зчитується має багато шуму. Якщо змінювати напругу ЦАПу щораз із вхідним шумом, то ми створимо потужне джерело шуму для SiPM, а не компенсацію температурного зсуву.
Рішення -- цифровий фільтр НЧ. Я використав фільтр Чебишева 2го типу:
Розрахувати фільтр (цей чи інший) можна в octave (matlab) однією функцією [b,a]= cheby2(2,50,0.167). Три вхідні параметри, це порядок, рівень режекції і гранична частота (нормалізована). Вихідні параметри a i b потрбно вставити в код МК:
Зчитування сигналу має бути періодичним аби фільтр працював. Я це зреалізував на простому перериванні SysTick таймера. Частота зчитування 500Гц.
Як видно з малюнків знизу фільтр працює добре. 50 Гц фільтруються на ура.
Наступний крок, це тести приладу і покращення прошивки.