Пощебечем? Часть II. Нанотаймер.

Тема в разделе "Глядите, что я сделал", создана пользователем parovoZZ, 10 авг 2019.

  1. parovoZZ

    parovoZZ Гуру

    Главная задача при разработке автономных устройств - энергоэффективность. Когда мы говорим про улучшение энергоэффективности, мы понимаем, что можно выбрать два пути:
    1. увеличить врем работы от одного комплекта батарей
    2. мы можем уменьшить габариты устройства за счет уменьшения емкости батарей и, как следствие, их габариты.
    Сегодня я буду размышлять по поводу того, как можно снизить токи потребления устройством в режиме ожидания. Для этого возьмем код из первой части и посмотрим с помощью встроенного в лаунчпад микроамперметра, каких показателей мы можем достичь. Но сперва картинка из даташита (это те цифры, к которым я буду стремиться):
    [​IMG]
    Режимы 3.5 и 4.5 я использовать не буду умышленно - в них содержимое RAM не сохраняется, что накладывает определенные накладные расходы.
    Итак. Запускаем в лоб наш код и смотрим:
    tweet3.png
    В паузе 100 мкА! Да. Так мы далеко не уплывем. В чем же дело, спросите вы? Куда уплыли нано технологии? Мы же всё делали правильно, а получилось....получилось как всегда.
    Давайте смотреть на фотографию лаунчпада:
    [​IMG]
    мы видим установленные перемычки RXD и TXD. Но мы такую музыку не просили. Давайте снимем их:
    tweet4.png
    Wow! Ток обвалился на порядок! Но..., погодите. 14 мкА!? Меня это категорически не устраивает! Куда же девается ток? Мы же всё сделали правильно. Давайте разбираться! В инструкции к IAR по использованию модуля амперметра сказано, что для измерения токов в спящих режимах, интерфейс JTAG (а в нашем случае это 2-х проводный JTAG) необходимо отключать. В IAR это называется Release JTAG on GO:
    tweet5.png
    Галочку поставили и снова запускаем:
    tweet6.png
    Бинго!, - кто-то взвизгнет. Кому-то и этого достаточно, но я хочу отжать абсолютно всё! Всё до последнего фарада, джоуля и ампера!
    Открываем даташит и ищем секцию рекомендаций по снижению энергопотребления в режимах сна. Там говорится, что все неиспользуемые выводы надо проинициализировать на выход. Сказано - сделано:
    Код (C++):
        P1DIR = 0xFF;
        P2DIR = 0xFF;
    И снова запускаем:
    tweet7.png
    500 нА! Фууух. Аж испарина проступила.
    Итак, что мы имеем? Мы имеем таймер RTC, который тактируется от внутреннего микромощного осциллятора. Если нужна более высокая точность, чем это может дать внутренний RC осциллятор, есть возможность подключить внешний часовой кварц и тактироваться от него. Но ток потребления в этом случае возрастет почти в два раза. К слову сказать: сам таймер RTC потребляет при работе всего 75 нА, а всё остальное - это осциллятор и RAM.
     
    koteika, alex_rnd61 и Daniil нравится это.