Разгон Arduino. Под жидким азотом. 20⇒65.3Mhz @ -196 °C
До начала статьи сразу следует ответить на 2 вопроса, к гадалке не ходи - они будут заданы:1) Какой в этом практический смысл? Разобраться в том, как ведет себя электроника при криогенных температурах, да и просто интересно сколько можно выжать из 20Мгц AVR-ки :-) Удалось выяснить момент, крайне важный и для разгона настольных процессоров с криогенным охлаждением.
2) Почему Arduino, ведь есть же куча микроконтроллеров быстрее, а i7 вообще всех рвет? Совершенно верно. Есть куча намного более современных микроконтроллеров, которые на 2-3 порядка быстрее (и они есть у меня в наличии). Однако Arduino получила большую известность среди любителей, потому было решено мучить именно её. А для практических применений конечно дешевле и проще взять более быстрые микроконтроллеры (Cortex-M3, M4).
Разгон микроконтроллера под жидким азотом обещает быть несколько сложнее разгона "настольных" процессоров - ведь тут нет ни тестов стабильности, ни программируемого генератора тактовой частоты, ни управления напряжением питания. Да и компоненты на Arduino, как показала практика, не выдерживают криогенных температур - и с ними придется разбираться в индивидуальном порядке. Все эти проблемы к счастью удалось решить.
Жидкий азот
Давно хотел до него дорваться. Оказалось, в Москве его продают несколько компаний. Ближе всего был НИИ КМ, там азот по 50 рублей за литр. Некоторые компании не морщась за 5 литров просят 950 рублей - с ними нам конечно не по пути.Жидкий азот получают буквально из воздуха - сжижая его и разделяя на ректификационной колонне, или наоборот - сначала выделяя азот из воздуха специальными фильтрами, и затем сжижая. Как оказалось, продаются даже небольшие установки по производству жидкого азота (10 литров в день). Себестоимость производства по электроэнергии - 5-10 рублей за литр. Теперь я точно знаю, что хочу себе на день рождения!
Переносить азот можно в обычных стальных термосах (стеклянные могут треснуть от резкого падения температуры). После дополнительного утепления (+1 сантиметр теплоизоляции и полиэтилен для защиты от конденсата) азот выкипал за 30 часов, что в принципе достаточно для работы. Покупать специальный сосуд Дьюара - достаточно дорогое удовольствие, хотя азот из маленьких (~5 литров) "правильных" сосудов Дьюара выкипает уже за 25 дней. Также нужно помнить, что ни в коем случае нельзя герметично закрывать жидкий азот - разорвет в клочья.
На physics.stackexchange.com/ подсказали, что термоизоляцию нужно делать наоборот - надевать сверху, а не снизу. Чтобы испаряющийся азот охлаждал внешнюю стенку термоса.
Нагрузочное тестирование
Пришлось написать тест, который тестирует чтение/запись в SRAM, чтение из flash, арифметические операции и program flow тест (с ветвлениями). Идея тестов - была найдена последовательность команд, которая выводит систему из начального состояния, и затем через определенное количество шагов - приводит в исходное. Скачать законченный стресс-тест можно тут.▶ Смотреть тесты
На экране HD44780 подключенном стандартным образом по 4-х битной шине во второй строке выводится номер итерации цикла, и 8 шестнадцатеричных цифр контрольных сумм. Первые 2 - тест SRAM, затем Flash, арифметика и program flow. Если все ок - то контрольная сумма должна получаться 12345678. Ошибка в контрольных суммах накапливается. Также код ошибки выводится морганием светодиода на плате : монотонное моргание - все ок, 1 вспышка - ошибка SRAM, 2 - Flash и т.д. При тестах на ~-100°C - обычно находил ошибку program flow тест, при -196°C - тест с чтением/записью SRAM памяти.
Предполагалось, что при повышении напряжения мне придется отключить дисплей, и полагаться только на светодиод. Однако вышло наоборот - светодиод при температуре жидкого азота перестал работать (из-за расширения band-gap-а требуемое напряжение для зажигания стало выше напряжения питания, об этом ниже).
Генератор тактовой частоты
Arduino по умолчанию работает от кварца. Кварцы на первой гармонике обычно работают не выше 30Мгц, потому работа с внешним генератором неизбежна. Чтобы не паять саму плату Ардуины - я отогнул 2 ноги, к котором подключается кварц, и припаял контакт к внешней тактовой частоте. Ну и нужно было изменить fusе-ы для работы от внешнего генератора, для чего нужен отдельный программатор. Об этом я конечно подумал уже после отгибания ног, и в программатор микроконтроллер пришлось ставить с костылями. На снимке слева - виден также китайский модуль DCDC на LM2596, которым я изменял напряжение питания.Генератора сигналов до 100Мгц у меня конечно не было - недешевое это дело. Перестраиваемый генератор, способный генерировать в нужном мне диапазоне (16-100Мгц) со скважностью 50% удалось собрать только с 4-й попытки. Оказалось, многие генераторы на логических элементах - или имеют слишком низкую максимальную частоту, или нестабильны на высоких частотах (некоторые импульсы случайно становятся короче/шире). В конце концов следующая схема надежно генерировала во всем требуемом диапазоне. Резистор R1 на выходе - частичное последовательное терминировавшие, чтобы overshot тактового сигнала на стороне микроконтроллера был не такой страшный. Нам предстоит работа на повышенном напряжении, так и сжечь микросхему можно (при "резком" сигнале амплитудой 8V - мгновенные "выбросы" на стороне микроконтроллера были бы до 16 вольт).
Особенности работы электроники при криогенных температурах
При охлаждении до -196 градусов - сильно падает сопротивление металлов. Например для меди - катушка имела сопротивление 56.3 Ома при комнатной температуре и только 6.6 Ома при охлаждении (падение в 8.5 раз).Поведение конденсаторов намного сложнее: электролитические конденсаторы при замерзании электролита теряют емкость в ~500'000 раз. Керамические конденсаторы - в зависимости от диэлектрика: самые дешевые Y5V - теряют почти всю емкость при охлаждении, X7R - теряют 66% емкости и NP0 (C0G) - изменение емкости не более 1% (но такие конденсаторы емкостью больше 1000 пФ - редкость). Соответственно, если развязочные конденсаторы по питанию были с диэлектриком Y5V - то схема может потерять стабильность при охлаждении. Проверить тип диэлектрика можно и при нагревании до 100-150 градусов - влияние на емкость примерно такое-же. Для исключения этой проблемы - прямо на ноги питания микроконтроллера были припаяны конденсаторы с диэлектриками X7R и NP0.
Для полупроводников - увеличивается ширина запрещенной зоны, и изменяется мобильность электронов/дырок (тут зависимость сложная). На практике это приводит к тому, что например кремниевые диоды - имеют падения напряжения не 0.6-0.7 В, а 1.1. Это особенно касается аналоговых схем, в которых много биполярных транзисторов.
Из-за увеличения ширины запрещенной зоны - изменяется цвет свечения светодиодов, он становится более коротковолновым. Особенно это заметно на оранжевых/желтых светодиодах - они становятся зелеными. При этом сильно повышается требуемое напряжение питания, и данном случае - для его включения уже не хватало напряжения питания.
Почему микросхемы могут начать работать быстрее при охлаждении? Скорость работы CMOS-логики ограничена скоростью заряда/разряда паразитных конденсаторов (емкости затвора транзисторов и металлических соединений). А т.к. при уменьшении температуры снижается сопротивление металлов - может повыситься скорость работы, особенно если в схеме критичный по скорости участок - это были какие-то длинные цепи.
Т.е. жидкий азот нужен не для отвода большого количества тепла (с его теплоемкостью с этим он справляется хуже обычной воды), а для улучшения характеристик микросхемы за счет снижения сопротивления внутренних металлических соединений.
Непосредственно разгон с драматичным началом
После всех этих приготовлений - медленно заливаю Arduino жидким азотом, слышу как там похрустывают соединения, и вдруг - гаснет подсветка экрана, и затем плата "зависает". Я подумал было, что это конец. Затем выяснилось, что если немного приподнять плату над азотом, чтобы она так сильно не охлаждалась - подсветка загорается снова, и плата работает. С трудом удалось поразгонять, до ~50Мгц. Но конечно результат был не надежным, т.к. температура микроконтроллера была непостоянной.Но внезапно, глядя на то, как плата останавливается при опускании в азот и продолжает работу при отогревании - пришла идея : а вдруг это срабатывает защита от слишком низкого напряжения питания? Отключил Brown-out detection - и микроконтроллер стал стабильно работать при опускании в жидкий азот! С экраном - оказалось, что подсветка была подключена к 3.3В линейному регулятору на плате (пины питания заканчивались) - и при снижении температуры у него видимо тоже толи защита срабатывала, толи напряжение сильно падало. Подключил напрямую к 5В - и тоже все заработало.
Стабильная работы была около 50Мгц - и я начал повышать напряжение. Оказалось, что выше 8 Вольт - система переставала работать, а 7.5-8 Вольт обеспечивали абсолютно стабильную работу на частоте 65.3Мгц. Для сравнения, при комнатной температуре и 5В - максимально стабильная частота - 32.5Мгц, а при 8В - 37Мгц.
На частоте 65Мгц тест стабильно отработал больше часа, суммарно на разгон ушло 3 литра азота.
На воздухе - плата мгновенно покрывается инеем:
На видео тест на частоте 65Мгц начинается на 7:12, вид работы Arduino под слоем жидкого азота - на 9.00.
▶ А остатки жидкого азота встретятся лицом к лицу с горячей водой:
Резюме
- Arduino под жидким азотом разгоняется и стабильно работает более часа на частоте 65.3Мгц, а на воздухе - только до 32.5-37Мгц. AVR короткое время спокойно работает при напряжении 8 Вольт.
- Удалось разобраться как изменяются параметры электронных компонент при глубоком охлаждении: падение сопротивления металлов в ~8.5 раз, падение емкости конденсаторов (электролитов, керамики Y5V и немного X7R. Емкость NP0 не изменяется), увеличение ширины запрещенной зоны полупроводников (рост падения напряжения диодов, изменение цвета светодиодов, очень большие изменения в работе аналоговых схем)
- При разгоне "больших" процессоров - нужно внимательно следить за температурой конденсаторов (электролитов и дешевых керамических с диэлектриком Y5V). Она не должна падать ниже нуля - даже если для этого придется устанавливать дополнительный подогрев. Иначе они потеряют почти всю емкость, и процессор будет терять стабильность.
- Ни одна Arduino не пострадала в процессе написания статьи. После отогревания и высыхания - продолжила работать, как и раньше :-)
PS. Если кто знает, где можно приобрести образцы сверхпроводников - напишите. То что я нашел - чудовищно дорого.