Режим малой мощности Telosb:

Я работаю над проектом, который включает в себя переключение состояния Telosb, я хотел бы знать, как перевести пылинки в «сон» (низкое энергопотребление) и как разбудить пылинки.


person Alejandro Alhama    schedule 26.04.2016    source источник


Ответы (1)


Mote будет автоматически переведен в спящий (с низким энергопотреблением) режим планировщиком TinyOS, когда очередь задач пуста (так что в основном, когда нечего делать - нет кода для выполнения). Mote пробуждается прерыванием, например, прерыванием таймера (произошло событие таймера), прерыванием радиосвязи (получен радиопакет) или прерыванием внешнего вывода ввода-вывода (пользователь нажал кнопку).

Однако микроконтроллеры имеют различные уровни энергопотребления, которые различаются условиями пробуждения, периферийными устройствами, которые могут продолжать работу, задержкой пробуждения и энергопотреблением. Как правило, при более низких уровнях сна моты потребляют меньше энергии, но их можно разбудить всего несколькими прерываниями, и большинство периферийных устройств перестанут работать. Уровень сна регулируется в зависимости от того, какие периферийные устройства работают в тот момент, когда узел собирается заснуть.

Уровень сна можно переопределить. Это то, что делают водители, обеспечивая самый низкий допустимый уровень сна в зависимости от их состояния. Например, если запрашивается прием радиопакета, драйвер радио может предотвратить переход в самые глубокие уровни сна, потому что в этом случае пакет будет потерян (то есть прерывание радио, уведомляющее о приеме пакета, не разбудит мот). Чтобы переопределить уровень сна, ваш модуль должен реализовать интерфейс PowerOverride, чтобы он возвращал самый низкий допустимый уровень сна во время вызова lowestState:

interface PowerOverride {
    async command mcu_power_t lowestState();
}

Затем PowerOverride необходимо подключить к компоненту McuSleepC:

component McuSleepC {
    provides interface McuSleep;
    provides interface PowerState;
    uses interface PowerOverride;
}

mcu_power_t — это тип чипа, описывающий возможные уровни мощности. В случае TelosB, основанного на микроконтроллере MSP430, этот тип определен в tos/chips/msp430/msp430hardware.h:

enum {
    MSP430_POWER_ACTIVE = 0,
    MSP430_POWER_LPM0   = 1,
    MSP430_POWER_LPM1   = 2,
    MSP430_POWER_LPM2   = 3,
    MSP430_POWER_LPM3   = 4,
    MSP430_POWER_LPM4   = 5
};

Общий вывод таков: если вы разрабатываете только приложения, вам никогда не придется беспокоиться о том, чтобы заснуть или проснуться.

См. также: Управление питанием микроконтроллера

person maral    schedule 27.04.2016