реклама на сайте
подробности

 
 
> АЦП и энергопотребление
data_stack
сообщение Dec 1 2015, 13:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 16-10-15
Пользователь №: 88 891



Есть необходимость оцифровывать несколько сигналов, с разной частотой (2кГц, 256Гц, 16Гц) и разной разрядностью (8-12бит) и скидывать все это дело на карту памяти. Все это усложняется батарейным питанием. Как лучше поступить?

1. Вариант, запускать преобразование по таймеру, с самой большой частотой дискретизации, с максимальной разрядностью, по окончанию преобразования забирать через DMA. По заполнению буфера DMA, выдаст прерывание, после него заполнять другой буфер, а за это время разгребать то что накопилось. Чем нравится решение, тем что, наверное, будет время для сна. Чем не нравится - не гибко, это будет огромный массив, в который будут свалены все данные скопом. Придется вычленять нужные данные, преобразовывать их битность, затем распихивать по мелким массивам, чтобы отсортировать, затем снова правильно раскладывать.

2. Вариант постоянно преобразовывать значения АЦП и сразу складывать их через DMA в массив. Запускать таймер с частотой 2кГц, в прерывании забирать только нужные значения, сразу же преобразовывать и аккуратно складывать. Чем нравится, удобно, займет меньше места в оперативе. Чем не нравится, не понятно что получится с энергопотреблением, думаю что оно вырастет, этого не хотелось бы.

Еще вопрос: как лучше делать с т.з энергопотребления - копить большой буфер и скидывать на карту большим куском, или мелкими порциями
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlanDrakes
сообщение Dec 3 2015, 06:42
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Итак, обобщу снова.
- DMA в L1 достаточно экономный.
- Оцифровывать несколько каналов можно в режиме ждущего преобразования (заранее собираете очередь преобразований, а затем запускаете по таймеру).
- DMA будет складывать посылки данных в буфер и по заполнению его на половину контроллер должен проснуться и обработать их первую часть, соответственно, по окончании буфера - вторую.
Потребление... Заранее предупрежу, что пишу на имеющийся лично у меня STM32L152.
RUN @8MHz, VCore = 2 - 2.5mA
SLEEP @8MHz, VCore = 2 - 0.6mA
Переферия:
ADC: 9uA * MHz (8) = 72uA.
GPIOA: 3.5uA * MHz (8) = 28uA.
DMA: 8uA * MHz (8) = 64uA.
ADC (режим преобразования) - 1.45mA
TIM2 (таймер для запуска преобразования) - 8uA * MHz (8) = 64uA.
Итого, ожидаемый ток: 0.6 + (0.072 + 0.028 + 0.064 + 0.064) = 0.828mA в режиме сна.
Считаем ток во время преобразования: Время преобразования на канал (худшее для мультиплексированных): 1uS * 10 каналов + PowerOnTime 3.5uS. Итого - 13.5uS + время преобразования. Обычно 4 + 12 тактов, что при 8 МГц даёт 0.5uS на преобразование. Итого - 13.5 + 4 = 17.5uS.
Частота выборки - 2000Sa/s = 500uS. 17.5 / 500 = 3.5% времени преобразование. В течении этого времени потребление должно возрасти на 1.45mA, плюс-минус 0.1mA.
При размере буфера в 40кБ, он будет заполняться 2 раза в секунду.
Таким образом, нужно будет писать данные на карту памяти те же 2 раза в секунду.

Итого, суммарный ток (не учитывая рабочее время на запись) будет:
0.828 * 0.965 + 1.45 * 0.035 = 0,79902 + 0,05075 = 0,84977
Приблизительно, 0.85mA это только преобразования и складирование их в RAM.
Остальной ток потребления будет зависеть от потребностей карты памяти и быстроты работы кода.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 3 2015, 08:14
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlanDrakes @ Dec 3 2015, 12:42) *
TIM2 (таймер для запуска преобразования) - 8uA * MHz (8) = 64uA.

ТСу вроде как требуется оцифровывать три разных канала, каждый со своей частотой сэмплирования, причём частоты некратны друг другу (и не про какие допустимые погрешности частоты сэмплирования ТС не писал - а значит принимаем что нужно точно 2кГц, 256Гц и 16Гц).
И как Вы собрались запускать эти преобразования одним таймером с разными некратными друг другу частотами без пробуждения CPU и перепрограммирования таймера???
Я конечно не очень хорошо знаю периферию STM32, но сомневаюсь что TIM2 в нём способен формировать события на 3-х разных частотах, суммируя их на выходе в единый поток событий, да ещё переключать каналы АЦП в зависимости от события. sm.gif
Такое умеет делать например АЦП в LPC4370 - ему можно задать довольно произвольную диаграмму работы нескольких каналов АЦП одновременно с разными частотами сэмплирования на связке ADC+DMA без участия CPU.
А вот в STM32L я думаю вряд-ли такое можно сделать не пробуждая ядро. А пробуждая ядро получите потребление близкое к потреблению RUN-моде на 8МГц.

ТС нужно или искать МК, в котором периферия позволяет работать АЦП по нескольким каналам одновременно с разными некратными частотами без участия ядра (например как сделано в LPC4370).
Либо искать МК с более экономичным ядром и работать на нём управляя АЦП программно ядром. Здесь я бы смотрел в сторону MSP430.

Цитата(AlanDrakes @ Dec 3 2015, 12:42) *
0.828 * 0.965 + 1.45 * 0.035 = 0,79902 + 0,05075 = 0,84977

А эти цифры вообще с потолка...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- data_stack   АЦП и энергопотребление   Dec 1 2015, 13:55
- - AlanDrakes   Как понимаю, использовать собираетесь что-то из ST...   Dec 1 2015, 14:45
|- - data_stack   Видимо не очевидно проблему описал. Использовать б...   Dec 1 2015, 15:02
|- - Сергей Борщ   Цитата(data_stack @ Dec 1 2015, 18:02) не...   Dec 1 2015, 16:39
- - Alechek   Не знаю как для STM32L, но я бы сравнил потреблени...   Dec 2 2015, 06:54
- - jcxz   Цитата(data_stack @ Dec 1 2015, 19:55) Ещ...   Dec 2 2015, 10:18
|- - data_stack   Была и такая мысля. Почему не понравилась. В STM32...   Dec 2 2015, 11:58
|- - data_stack   Цитата(jcxz @ Dec 3 2015, 09:14) Либо иск...   Dec 3 2015, 08:44
|- - jcxz   Цитата(data_stack @ Dec 3 2015, 14:44) Ви...   Dec 3 2015, 09:07
- - data_stack   Вы не внимательно читали мой первый вопрос Запуск...   Dec 3 2015, 10:12
|- - jcxz   Цитата(data_stack @ Dec 3 2015, 16:12) Вы...   Dec 3 2015, 11:38
- - data_stack   Да именно так, вроде так я и писал.   Dec 3 2015, 12:22
- - Сергей Борщ   Есть возможность более редкие измерения делать от ...   Dec 3 2015, 13:22
|- - jcxz   Если так важно получить минимальное потребление, т...   Dec 3 2015, 14:00
|- - AlanDrakes   Цитата(jcxz @ Dec 3 2015, 14:14) ТСу врод...   Dec 4 2015, 14:13
|- - MiklPolikov   Я постоянно занимаюсь вопросами потребления, счита...   Dec 5 2015, 03:45
|- - jcxz   Цитата(MiklPolikov @ Dec 5 2015, 09:45) Я...   Dec 5 2015, 08:29
- - data_stack   Кругозор действительно ограничен, наличие того что...   Dec 3 2015, 14:42
- - data_stack   Если кому интересно, то в конкретно моем случае о...   Jan 15 2016, 13:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016