Библиотека с низкой мощностью/сна?

Бдбелл
Пн июня 08, 2015 12:50
Я какое -то время скрывался на этом форуме и в оригинальной теме - сначала хочу поблагодарить Роджера и всех остальных за эту отличную работу по тому, чтобы заставить STM32 работать в последней среде Arduino!

Кто-нибудь здесь сделал что-нибудь с режимами с низким энергопотреблением или сном с Maple Mini или аналогичными клонами? Я проектирую устройство с помощью STMF103C8T6 и 2.4 "ILI9341 TFT. Я хочу отключить дисплей и утомить устройство после определенного времени неиспользования. Я работаю, чтобы отключить дисплей и включение прерывания на кнопке - но не очень удачила никакой информации об использовании режимов низкой мощности. На сайте Leaflabs есть несколько примеров, использующих ту же библиотеку сна, что и Arduino - но мне не повезло, что я что -то работал. Не так хорошо с низкоуровневым программированием или кодированием библиотеки - больше аппаратного парня...

Единственное, что я нашел, что, кажется, работает, по крайней мере, снижает скорость и мощность процессора;

RCC_SET_PRESCALER (RCC_PRESCALER_AHB, RCC_AHB_SYSCLK_DIV_256); // замедляет процессор и уменьшает мощность

RCC_SET_PRESCALER (RCC_PRESCALER_AHB, RCC_AHB_SYSCLK_DIV_1); /нормальная скорость процессора

Но когда я иногда использую это прерывание кнопки, чтобы проснуться, устройство не работает последовательно. Это может быть способ, которым я настроил прерывания...

Любая помощь, безусловно, будет оценена!

Брент

Mrburnette
Пн июня 08, 2015 12:58
Я лично не изучал низкую мощность, но у оригинального форума Leaflabs есть несколько соответствующих сообщений. Когда мы унаследовали и развивались от усилий Lefflabs, большая часть структуры все еще должна быть на месте:

http: // форумы.Leaflabs.com/тема.PHP?ID = 1437

http: // форумы.Leaflabs.com/тема.PHP?ID = 922


Когда вы исследуете возможности, отправьте свой опыт.

луча

victor_pv
Вт, 09 июня 2015, 14:18
Спасибо, что поделились, как изменить разделитель часов, чтобы сохранить питание. Вы сделали какое -либо измерение по использованию мощности?

Я делаю что -то, что будет работать на батареях, и определенно сокращение скорости поможет мне, так как мне, вероятно, не нужна половина мощности процессора в этом MCU.

РЕДАКТИРОВАТЬ: эти сообщения от Рэя выглядят многообещающими.
Я думаю, что вы могли бы использовать Systick, чтобы пережить прерывание каждого MS, проверить, есть ли что -то, что нужно сделать (например, любой вход для обработки), и если нет, вернитесь ко сну.
Обработчик Systick в Libmaple имеет функцию для установки функции обратного вызова в вашем коде, поэтому, как только прерывание поездок, помимо увеличения счетчика Systick, он назовет вашу функцию, чтобы выполнить все необходимое. Вы также можете вообще реализовать свой собственный обработчик Systick.

Если вы посмотрите на файлы COOS или Freertos и поищите Systick, вы увидите, как эти настраивают обратный вызов Systick и Systick.

Позже я постараюсь сменить COO и установить задачу на холостом ходу, чтобы заснуть процессор, когда нечего делать, и посмотреть, работает ли она.

Любой может предложить измеримый способ увидеть, много ли процессор спит?

Ахулл
Вт. 09 июня 2015 14:37
victor_pv написал: Любой может предложить измеримый способ увидеть, много ли процессор спит?

Mrburnette
Вт. 09 июня 2015 г. 15:35
Любой может предложить измеримый способ увидеть, много ли процессор спит? Небольшой резистор 1 Ом последовательно с STM32 и используйте прицел для визуализации циклов включения/сна путем измерения VD через резистор.

На моем Maple Mini, на полной скорости, ток составляет около 50 мА, что будет VD 165 мВ, поэтому 1 -кратный зонд должен дать приличный показатель, оставляя 3.3 - 0.165 или 3.135V для UC. Если вы собираетесь моделировать проект батареи, то я бы порекомендовал использовать фактические (свежие) батареи, которые вы намерены использовать, LifePo4, щелочный и т. Д. Химия окажет влияние, хотя я не задокументировал (где бы я ни был легко найти), что это будет. Из текущего измерения вы не слишком обеспокоены, так как ищете Deltas в токе в резисторе 1 Ом.

Интересно, будет ли хитрость чтения напряжения батареи Arduino AVR с использованием UC работать с STM32... Если это так, после того, как было достигнуто критическое напряжение, вы можете что -то сделать: светодиод мощности Mlink, отображение значка на 5110, выключить подсветку, отбросить скорость UC дальше!


Луча

victor_pv
Вт, 09 июня 2015 г., 16:22
Я нашел код от кого -то для измерения использования процессора в задаче COOS IDLE, но случается, что просто измеряется время там, так что даже если MCU спит, время проходит, так что это недопустимо.

Кажется, что текущее измерение может быть лучшим. Это может быть проектом, чтобы поставить свиньи и на некоторое практическое использование тоже :)
У меня есть куча действительно низкого значения резистора 1/2 Вт, который мог бы съесть 50 мА на завтрак.
с 0.5ohm I Рассчитываю 25 мВ, приобретая резистор.
Энди, только что протестировал пироскоп больше, вы думаете, что у нас есть хорошая чувствительность для 25 мВ?
Я думаю, что у меня есть немного мультиметра, чем достаточно чувствительности.

Я планирую запустить что -нибудь интенсивное ЦП в периоды бодрство.
Вероятно, периоды нескольких секунд будут работать лучше всего.
Что -то вроде:
-Coos
-Установите холостое время, чтобы заснуть ЦП, который следует разбудить в следующем систерек (1 мс)
-1 задача выполняет только математику процессора в течение 5 секунд.
-Затем задержка за 5 секунд, прежде чем снова запустить. В течение этого времени процессор должен спать почти на 1 мс, просыпаться очень коротко, убедитесь, что нет другой задачи для выполнения, и вернуться ко сну.

Что -то подобное имеет смысл как измеримый тест?

П.С. Я думал о том, чтобы сделать IO на дисплее, но я думаю, что было бы лучше измерить только процессор сам по себе, так как ЖК -дисплей можно усыпить другими способами.

РЕДАКТИРОВАТЬ:
Рэй, я не уверен, как вы рассчитываете 165 мВ с резистором 1OM с 50 мА поперек. Я что -то упускаю? Это дало бы мне 50 мВ. :?

Mrburnette
Вт, 09 июня, 2015, 16:44
Что -то подобное имеет смысл как измеримый тест? Для тестирования UC Power Down, доказательство находится в фактическом коде. Симуляция приведет вас на стадион.
РЕДАКТИРОВАТЬ:
Рэй, я не уверен, как вы рассчитываете 165 мВ с резистором 1OM с 50 мА поперек. Я что -то упускаю? Это дало бы мне 50 мВ. :?
Я идиот : o
Мой персонал никогда не даст мне калькулятор... Особенно RPN! 1-2-3 и Excel были все, что у меня было.

Луча


True Story: у друга, работающего на Tek давным -давно, был босс, который «украл» программируемый настольный HP Desktop, тот, который с наложениями шаблона... Он написал шаблоны, а затем отмечен карандашом для легкого входа. Калькулятор почувствовал конкретный шаблон и знал, какую программу запустить. Итак, друг и колледжи сделали точный дублированный шаблон, тщательно копируя почерк босса - точное, за исключением того, что PI был слегка искажено от точного значения 3.141592654. Когда босс проверит работу младшего инженера, ответ будет другим. Босс выйдет в зону куба, чтобы получить инженера, и неизбежно они вернутся в офис босса. Во время этого отсутствия один из старших инженеров проникнет и поменял шаблон на калькуляторе с исходным шаблоном, который, конечно, дал правильный ответ! Их никогда не поймали, но мне пришлось остановить розыгрыш, потому что босс был очень взволнован, что все новые инженеры думали, что он помешан!

Клубника
Вт, 09 июня 2015 г., 8:19 вечера
Разве это уже не так низкая мощность, когда вы используете меньше периферийных устройств?
Изображение
Все ли периферийные устройства инициализированы, даже если там не использовались?
Я предполагаю, что использует NPN -транзисторы для светодиодов & VCC для экрана и LDO с низким уровнем покоя было бы достаточно хорошим. Вам нужно только снова отправить начальные команды экрана.

Если я ошибаюсь, пожалуйста, скажите мне :)

Вы можете прочитать таблицу данных. У него было много инфо о сне и пробуждении (это не A0 даже не описан как пробуждение?)

~ Солома

Ахулл
Вт, 09 июня 2015 г., 21:32
@Straw, вы правы в той степени, в которой при активности периферийные устройства потребляют значительное количество тока (в значительной степени значительны в случае проекта с батарейным питанием), однако, чтобы получить действительно низкие токи, нам тоже нужно спать, как даже при холостом ходу, на холостом ходу. Процессор и память, вероятно, станут основными факторами в области потребления власти. Чтобы использовать наименьшее количество энергии, нам нужно положить столько кремния, сколько сможем. Другая вещь, которая влияет на мощность, - это тактовая скорость, но часто это не так просто, как снижение скорости, сэкономить мощность, поскольку выполнение задач быстро может привести к более длительным периодам сна.

РЕДАКТИРОВАТЬ: Эта библиотека (AVR Special) и связанная документация должна предоставить некоторую полезную информацию. Я использовал его в прошлом для проектов с аккумулятором.

Ахулл
Вт, 09 июня 2015 г., 22:36
Другой ток -свиней, вероятно, будет регулятором напряжения. Не беспокойтесь, если вы питаете * непосредственно * из батарей, поскольку там не будет регулятора, но если вы серьезно относитесь к низкой мощности, а ваш источник питания - это что -то иное, чем 3.6 В липо и диод, или пара ячеек АА, тогда регулятор является серьезным конструктивным соображением. Вот пример того, о чем я говорю.

Может показаться странным думать о 5MA в любом контексте как о мощности, но в том, что касается конструкций с питанием от аккумулятора, это может означать разницу между днями резервной батареи и неделями, месяцами или даже годами. Если вы можете сократить ток с 5 мА до 500UA, то, очевидно, ваша батарея длится 10 раз длиннее в режиме ожидания, поэтому ваш маленький липо 120 мАч, который длится 1 день между зарядами, становится более полезным устройством, которое идет за 10 дней до того. Липо 2000 мАч переходит с 16 1/2 дня до 167 дней в режиме ожидания, и мой аккумулятор "палки O Dynamite" длится вечно или около того ;) (Теоретически, предполагая среднюю продолжительность жизни современного коммерческого продукта) . Отсюда мой комментарий об удалении светодиода власти.

victor_pv
Вт, 09 июня 2015 г. 11:38
Первоначальный отчет:
Пример в первой ссылке из Ray's Post компилируется и переключает светодиод с несколькими модификациями, поскольку мы избавились от Toggled и еще нескольких вещей. Я думаю, что мы не должны были удалять их, теперь, чтобы использовать все примеры, которые вам нужно, чтобы добавить их в эскиз :(
В любом случае, если вы нажмете кнопку дважды, он выключает светодиод, еще 2 раза включите ее. Я все еще должен питать его через резистор и рассчитать COMSAPE:

Записки о сериалузбе, а остальные уже были там уже. Я не проверял, работает ли это или нет, кроме как переключать булавку.
stm32flash Arduino_STM32_0.9 http://github.com/rogerclarkmelbourne/arduino_stm32 Using Parser : Raw BINARY Interface serial_posix: 230400 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0414 (High-density) - RAM : 64KiB (512b reserved by bootloader) - Flash : 512KiB (sector size: 2x2048) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory Wrote address 0x08000100 (0.17%) Wrote address 0x08000200 (0.35%) Wrote address 0x08000300 (0.52%) .....

Бдбелл
Пт 12 июня 2015 г., 18:04
Хочу поблагодарить всех за их отзыв по этому поводу, я получил работу с работой, поэтому не успел вернуться к нему до сих пор. Я настроил пару тестовых набросков для моего устройства - один использует метод масштабирования процессора, который я упомянул в OP, а другой с использованием предоставления эскиза Victor_pv (спасибо!). Вот результаты;

Спящий режим - 2.892ma
ЦП масштабирован 256 - 15.954ma
Без сна или масштаба, TFT OFF - 48.26 мА
TFT ON - 89.85 мА

Устройство работает с одной батареей Lion 2000 мАч. Я использую дискрипцию покупки.com 2.4 "ILI9341 TFT (без щита), у моей доски есть оба 2.8 и 3.3V регуляторы (LP3981), зарядное устройство для аккумулятора MCP73831, сенсорный контроллер DS3231M, EEPROM IC, TCS2046 сенсорный контроллер, BMP180, SHT21, MOSFET схема для проверки аккумуляторного напряжения, Piezo Buzzer и BT - I модуль для тестов, но пока ничего больше.

Будет делать больше тестов и обновить сообщение, когда у меня будет время.

Клубника
Пт 12 июня 2015 г. 18:54
Ну, это уже звучит красиво :) Я заинтересован в дальнейших тестах ^^

~ Солома

Ахулл
Пт 12 июня 2015 г. 22:18
Я пока впечатлен. Регулятор напряжения будет значительным источником. Пробуждение от сна может, насколько я понимаю, это будет достигнуто, установив прерывание от RTC, а также нажатие кнопки, и я подозреваю, что использование RTC может быть одним из наиболее полезных методов пробуждения для большинства сна с значительной продолжительностью. (я.эн. больше секунды).

Согласно таблице данных, должно быть возможно, чтобы процессоры были включены примерно до 6UA с еще 3UA или меньше для RTC и регистров с аккумулятором. Это абсолютно все закрытое, но, по -видимому, в этом случае процессор должен был бы сделать резервное копирование и восстановить все часы и т. Д.

Что касается создания полезного набора библиотечных функций для этого, я открыт для предложений. Сон до определенного времени, спите в течение n секунд, спать до прерывания (переход Event/Pin), кажется, стоит, пока цели.

victor_pv
SAT 13 июня 2015 г. 14:44
Ахулл написал:Я пока впечатлен. Регулятор напряжения будет значительным источником. Пробуждение от сна может, насколько я понимаю, это будет достигнуто, установив прерывание от RTC, а также нажатие кнопки, и я подозреваю, что использование RTC может быть одним из наиболее полезных методов пробуждения для большинства сна с значительной продолжительностью. (я.эн. больше секунды).

Согласно таблице данных, должно быть возможно, чтобы процессоры были включены примерно до 6UA с еще 3UA или меньше для RTC и регистров с аккумулятором. Это абсолютно все закрытое, но, по -видимому, в этом случае процессор должен был бы сделать резервное копирование и восстановить все часы и т. Д.

Что касается создания полезного набора библиотечных функций для этого, я открыт для предложений. Сон до определенного времени, спите в течение n секунд, спать до прерывания (переход Event/Pin), кажется, стоит, пока цели.

Ахулл
Сб 13 июня 2015 г., 19:50
victor_pv написал: Одна из проблем заключается в том, что самый глубокий спящий режим не сохраняет ОЗУ. Таким образом, для достижения 9UA нам может потребоваться использовать EEPROM внешней памяти или Flash, чтобы сохранить состояние. Я только недавно обнаружил воспоминания о Фрам, которые не нуждаются в силе для хранения данных, но совершенно случайный чтение и пишу, как SRAM, с гораздо более низкими требованиями питания для написания, поскольку не нужно стирать целые страницы одновременно.
Они доступны параллельно, I2C и SPI интерфейсы. Кажется более низким вариантом питания для постоянного хранения. Сохраните всю важную информацию там, идите спать, при пробуждении проверьте, есть ли состояние для восстановления, а затем бегите из этого штата.

victor_pv
SAT 13 июня 2015 г. 20:13
Ахулл написал:
Насколько я понимаю, домен мощности для RTC/RAM отделен от процессора, поэтому вы можете принять решение о его отдельности или не в зависимости от вашего применения (отсюда отдельная фигура 3UA для RTC/RAM), но я ' ll перечитайте эту часть таблицы, чтобы убедиться, что я не лая.

Ахулл
SAT 13 июня 2015 г. 8:40 вечера
victor_pv написал: Я хорошо смотрел на таблицу данных, и, кажется, положил MCU в DeepSleep (часы теряются, все периферийные устройства остановки, но RAM сохраняется) может снизить ток до 14UA до максимума 340UA. Следующий режим будет в режиме ожидания, который теряет ОЗУ.

Клубника
SAT 13 июня 2015 г., 21:05
Ахулл написал:victor_pv написал: Если мы сможем составить библиотеку, которая экономит состояние периферийных устройств и часы в оперативной памяти, а затем положить чип в режим DeepSleep, и при пробуждении восстанавливает часы периферийные устройства, я думаю, что это может достичь огромной экономии для любого эскиза, который нуждается чтобы сохранить барану. Я согласен, сценарий, который вы описываете, вероятно, был бы самым полезным режимом. Deepsleep потребуется только для экстремальных случаев (очень длинные сна или относительно небольшие резервные батареи).

victor_pv
Солнце 14 июня 2015 2:26 утра
[QUOTE = "ClorkberryMaker не будет немного не нужна, чтобы сохранить часы, а затем остановить его?

~ Солома [/QUOTE]
Идея состоит в том, чтобы сохранить состояние всех периферийных часов, поэтому после того, как спящий режим останавливает их все, при пробуждении вы можете восстановить одни и те же настройки.
Конечно, вы можете просто пойти и запустить начальную настройку часов, как будто система просто загружалась из сброса, но что происходит, если ваш эскиз намеренно останавливает некоторые часы или снижает скорость на других?
Я понимаю, что режим глубокого сна, по крайней мере, не сохраняет статус основных часов:
«При выходе из режима остановки путем выпуска прерывания или события пробуждения генератор HSI RC является
Выбран в качестве системных часов. "

victor_pv
Пн 15 июня 2015 г., 5:14 утра
Я сделал пару тестов:
-Используя спящий режим (не DeepSleep/Stop), я могу продолжать использовать serialusb и т. Д. Когда MCU разбудит сразу же. Часы все еще ВСЭ на пробуждении. Сокращение тока незначительное, около 0.5 мА меньше, чем только бег.
-Использование DeepSleep Я могу настроить HSE, PLL и т. Д. Когда MCU просыпается, и вернуться к использованию HSE. Я не пробовал периферийные устройства, но я подозреваю. Я ожидаю, что остальные будут работать. В таблице данных только говорится, что источник часов переходит в HSI, но ничего не говорит о потере настройки периферических часов. Systick не может быть использован в этом режиме.
-Используя частотное разделение, которое я могу перейти к Div16 и при этом оставить MCU отвечать на кнопку, но все ниже, чем кажется, что я теряю много нажатий кнопок. Может работать лучше для других источников прерываний, таких как RTC. Текущее сокращение значительное, я забыл записать цифры, но я думаю, что в Div16 я использовал около 1/10, по сравнению с полной скоростью.

Выводы для меня:
-DeepSleep - лучший, если вам нужно серьезно сэкономить энергию, но нам нужно настроить MCU обратно на использование Xtal, и некоторые периферийные устройства, возможно, потребуются сбросить к.
-Сон сам по себе, кажется, очень мало, но не оказывает никакого влияния ни на что. Это может быть полезно в сочетании с отключением часов до нескольких периферийных устройств.
-Установка прокалера до Div8 кажется хорошим способом сэкономить энергию, если ваш эскиз не нуждается в дополнительной скорости. Скорость растет быстрее, чем текущее использование (или уменьшается быстрее, чем сокращение тока), поэтому, как упоминал Энди, может быть лучше быстро выполнить задачу, а затем перейти к Deepsleep. Если вы задаете, что ждет чего -то вроде кнопки или обработки некоторого медленного ввода, то снижение скорости может быть довольно хорошим способом сохранить питание.
-Я верю, что наибольшая экономия в режиме DeepSleep происходит от выключения периферийных часов. Для всего, что работает на батареях, мы должны сразу же закрыть все неиспользованные периферийные устройства, так как Libmaple инициализирует часы практически во всем в начале.

Так что тактика для меня будет:
-Выключить часы на все, что не нужно
-Установите подразделение прескалера на то, что завершает вкус самым быстрым, не будучи таким быстрым, что мне нужно ждать чего -то другого.
-Глубокопил как можно скорее.

Я скопировал код, чтобы установить HSE и PLL и выбрать HSE как часы из процедур Libmaple init и работал нормально. Всякий раз, когда у меня будет больше времени, я посмотрю, смогу ли я проверить некоторые периферийные устройства после глубокого сна, например, SPI, сериал.USB (после повторного выхода) и посмотрите, нужен ли им какой-то другой сброс или нет.

ТИМОТЕО
Пт 21 декабря 2018 г., 17:35
Привет, Victor_pv,

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

Всего наилучшего,
Тим

iwdg_init () и iwdg_feed ()