Я работаю над проектом, который включает в себя переключение состояния Telosb, я хотел бы знать, как перевести пылинки в «сон» (низкое энергопотребление) и как разбудить пылинки.
Режим малой мощности Telosb:
Ответы (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
};
Общий вывод таков: если вы разрабатываете только приложения, вам никогда не придется беспокоиться о том, чтобы заснуть или проснуться.
См. также: Управление питанием микроконтроллера