ShutUp & StormForge
StormForge StormForge
Ты когда-нибудь задумывалась о создании крошечной портативной приставки? У меня целая куча комплектующих, и есть безумная идея для кастомной ОС, которая могла бы запускать и инди-игры, и мои собственные утилиты. Как насчет того, чтобы вместе спроектировали миниатюрную систему, которая была бы и игровой консолью, и платформой для тестирования кода с низким энергопотреблением?
ShutUp ShutUp
Конечно, начнём с перечня компонентов, проверим энергопотребление и выберем стабильную прошивку. Сосредоточься на минималистичной ОС, лёгких драйверах и оптимизируй аппаратную часть. Просто скажи, что у тебя есть, а я продумаю конструкцию с низким энергопотреблением.
StormForge StormForge
Хорошо, вот что у меня получилось: Внутри коробочки – крошечный 32-битный ARM Cortex-M4 контроллер, 3.2-дюймовый OLED-дисплей, 4-канальный аналого-цифровой преобразователь, 16-битный таймер, маленький динамик размером с 1 дюйм, понижающий стабилизатор на 2.5 вольта, потребляющий максимум 100 миллиампер, и несколько керамических конденсаторов на 0.1 микрофарада. У меня 512 килобайт флэш-памяти и 64 килобайта SRAM. Батарея – одиночная литий-полимерная на 3.7 вольт, способная выдавать 200 миллиампер около часа. Что касается прошивки: "голый" C, маленькая операционная система реального времени, типа FreeRTOS-Lite, легковесный драйвер графики для OLED, простой I²S драйвер для динамика, и быстрый обработчик АЦП. По энергопотреблению: нужно держать контроллер в режиме сна с низким энергопотреблением между кадрами, переводить дисплей в режим пониженного энергопотребления, когда он неактивен, и снизить частоту дискретизации АЦП примерно до 10 Герц. Если мы это сделаем, то должны уложиться в 200 миллиампер и получить приличный срок службы батареи. Как ты смотришь на то, чтобы ужесточить контроль?
ShutUp ShutUp
Звучит неплохо, только проверь ток потребления микроконтроллера в спящем режиме. Если он выше ста миллиампер от регулятора, цель не достичь. Выключай OLED между кадрами, используй 2.5 вольта от импульсного преобразователя только для микроконтроллера. Если удастся запитать дисплей на 3.3 вольта с большим запасом по напряжению, может, выжмешь еще немного тока. АЦП на 10 Гц – нормально, только следи, чтобы прерывание не выводило микроконтроллер из спящего режима. И если получится, наведи динамик на отдельный вывод ШИМ с компаратором с низким энергопотреблением, чтобы избежать лишних переключений. Все это должно удержать средний ток ниже 200 миллиампер и дать приличный срок работы.
StormForge StormForge
Поняла. Я переведу OLED в режим ожидания между кадрами, снижу напряжение МК до 2,5 вольт с помощью понижающего преобразователя, а дисплей запитаю от линии 3,3 вольта с малопотерьным стабилизатором. Обработчик прерываний АЦП будет просто проверкой флага, чтобы он не будил МК. Динамик подключу к одному пину ШИМ и защёлкну им с помощью компаратора с низким потреблением тока. Это должно удержать средний ток ниже 200 мА и обеспечить нам приемлемое время работы. Что-нибудь еще, что, по твоему мнению, стоит попробовать?
ShutUp ShutUp
Просто подключи DMA для OLED, чтобы не перегружать процессор, глуши тактовый сигнал таймера, когда он не используется, и используй сторожевой таймер, который работает в фоновом режиме. Всё.
StormForge StormForge
ОК, OLED — сделано, таймер деактивирован, когда бездействует, сторожевой таймер работает в энергосберегающем режиме. Готово.
ShutUp ShutUp
Кажется, напряжение высокое. Заверши прошивку и запусти тест производительности, чтобы убедиться в нормальном потреблении тока вхоломине. И тогда всё будет в порядке.