Разгон Arduino. Под жидким азотом. 20⇒65.3Mhz @ -196 °C
![](http://s.14.by/ln2-logo.jpg)
1) Какой в этом практический смысл? Разобраться в том, как ведет себя электроника при криогенных температурах, да и просто интересно сколько можно выжать из 20Мгц AVR-ки :-) Удалось выяснить момент, крайне важный и для разгона настольных процессоров с криогенным охлаждением.
2) Почему Arduino, ведь есть же куча микроконтроллеров быстрее, а i7 вообще всех рвет? Совершенно верно. Есть куча намного более современных микроконтроллеров, которые на 2-3 порядка быстрее (и они есть у меня в наличии). Однако Arduino получила большую известность среди любителей, потому было решено мучить именно её. А для практических применений конечно дешевле и проще взять более быстрые микроконтроллеры (Cortex-M3, M4).
Разгон микроконтроллера под жидким азотом обещает быть несколько сложнее разгона "настольных" процессоров - ведь тут нет ни тестов стабильности, ни программируемого генератора тактовой частоты, ни управления напряжением питания. Да и компоненты на Arduino, как показала практика, не выдерживают криогенных температур - и с ними придется разбираться в индивидуальном порядке. Все эти проблемы к счастью удалось решить.
Жидкий азот
Давно хотел до него дорваться. Оказалось, в Москве его продают несколько компаний. Ближе всего был НИИ КМ, там азот по 50 рублей за литр. Некоторые компании не морщась за 5 литров просят 950 рублей - с ними нам конечно не по пути.Жидкий азот получают буквально из воздуха - сжижая его и разделяя на ректификационной колонне, или наоборот - сначала выделяя азот из воздуха специальными фильтрами, и затем сжижая. Как оказалось, продаются даже небольшие установки по производству жидкого азота (10 литров в день). Себестоимость производства по электроэнергии - 5-10 рублей за литр. Теперь я точно знаю, что хочу себе на день рождения!
![](http://s.14.by/1000/ln2-3.jpg)
![](http://s.14.by/1000/ln2-4.jpg)
Переносить азот можно в обычных стальных термосах (стеклянные могут треснуть от резкого падения температуры). После дополнительного утепления (+1 сантиметр теплоизоляции и полиэтилен для защиты от конденсата) азот выкипал за 30 часов, что в принципе достаточно для работы. Покупать специальный сосуд Дьюара - достаточно дорогое удовольствие, хотя азот из маленьких (~5 литров) "правильных" сосудов Дьюара выкипает уже за 25 дней. Также нужно помнить, что ни в коем случае нельзя герметично закрывать жидкий азот - разорвет в клочья.
На physics.stackexchange.com/ подсказали, что термоизоляцию нужно делать наоборот - надевать сверху, а не снизу. Чтобы испаряющийся азот охлаждал внешнюю стенку термоса.
![](http://s.14.by/1000/ln2-2.jpg)
Нагрузочное тестирование
Пришлось написать тест, который тестирует чтение/запись в 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-а требуемое напряжение для зажигания стало выше напряжения питания, об этом ниже).
![](http://s.14.by/1000/barsstress.jpg)
Генератор тактовой частоты
Arduino по умолчанию работает от кварца. Кварцы на первой гармонике обычно работают не выше 30Мгц, потому работа с внешним генератором неизбежна. Чтобы не паять саму плату Ардуины - я отогнул 2 ноги, к котором подключается кварц, и припаял контакт к внешней тактовой частоте. Ну и нужно было изменить fusе-ы для работы от внешнего генератора, для чего нужен отдельный программатор. Об этом я конечно подумал уже после отгибания ног, и в программатор микроконтроллер пришлось ставить с костылями. На снимке слева - виден также китайский модуль DCDC на LM2596, которым я изменял напряжение питания.![](http://s.14.by/1000/prog.jpg)
Генератора сигналов до 100Мгц у меня конечно не было - недешевое это дело. Перестраиваемый генератор, способный генерировать в нужном мне диапазоне (16-100Мгц) со скважностью 50% удалось собрать только с 4-й попытки. Оказалось, многие генераторы на логических элементах - или имеют слишком низкую максимальную частоту, или нестабильны на высоких частотах (некоторые импульсы случайно становятся короче/шире). В конце концов следующая схема надежно генерировала во всем требуемом диапазоне. Резистор R1 на выходе - частичное последовательное терминировавшие, чтобы overshot тактового сигнала на стороне микроконтроллера был не такой страшный. Нам предстоит работа на повышенном напряжении, так и сжечь микросхему можно (при "резком" сигнале амплитудой 8V - мгновенные "выбросы" на стороне микроконтроллера были бы до 16 вольт).
![](http://s.14.by/clk-gen-16-120MHz.png)
![](http://s.14.by/1000/gen.jpg)
Особенности работы электроники при криогенных температурах
При охлаждении до -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 литра азота.
![](http://s.14.by/1000/ice.jpg)
![](http://s.14.by/1000/arduino-ln2.jpg)
![](http://s.14.by/1000/running.jpg)
На воздухе - плата мгновенно покрывается инеем:
![](http://s.14.by/1000/inei.jpg)
На видео тест на частоте 65Мгц начинается на 7:12, вид работы Arduino под слоем жидкого азота - на 9.00.
▶ А остатки жидкого азота встретятся лицом к лицу с горячей водой:
Резюме
- Arduino под жидким азотом разгоняется и стабильно работает более часа на частоте 65.3Мгц, а на воздухе - только до 32.5-37Мгц. AVR короткое время спокойно работает при напряжении 8 Вольт.
- Удалось разобраться как изменяются параметры электронных компонент при глубоком охлаждении: падение сопротивления металлов в ~8.5 раз, падение емкости конденсаторов (электролитов, керамики Y5V и немного X7R. Емкость NP0 не изменяется), увеличение ширины запрещенной зоны полупроводников (рост падения напряжения диодов, изменение цвета светодиодов, очень большие изменения в работе аналоговых схем)
- При разгоне "больших" процессоров - нужно внимательно следить за температурой конденсаторов (электролитов и дешевых керамических с диэлектриком Y5V). Она не должна падать ниже нуля - даже если для этого придется устанавливать дополнительный подогрев. Иначе они потеряют почти всю емкость, и процессор будет терять стабильность.
- Ни одна Arduino не пострадала в процессе написания статьи. После отогревания и высыхания - продолжила работать, как и раньше :-)
PS. Если кто знает, где можно приобрести образцы сверхпроводников - напишите. То что я нашел - чудовищно дорого.