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

 
 
> АЦП и энергопотребление
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 1 2015, 14:45
Сообщение #2


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

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



Как понимаю, использовать собираетесь что-то из STM32?
Если применить STM32L - то можно запускать ADC по таймеру, заранее выставив биты пониженного потребления. В таком случае - ADC запускается таймером, включается, инициализируется, проводит оцифровку и сбрасывает данные по DMA в участок памяти.
На DMA потребуется настроить прерывания по половинному заполнению буфера и окончанию буфера.
Просыпаться, соответственно, два раза за буфер.
Оцифровывать можно с изначально известной частотой дискретизации. Причём, чем ниже частота выборки, тем больше времени будет контроллер находиться в состоянии сна при одинаковом размере буфера.
Опять же, при оцифровке с достаточно большой частотой сэмплирования (более 100kSa/s) выигрыша Вы уже не получите.
Хотя, для 16Гц (Sa/s?) можно проводить во сне более 99.5% времени.

Вариант с большми буфером для медленного заполнения (как у вас) будет наилучшим.
Go to the top of the page
 
+Quote Post
data_stack
сообщение Dec 1 2015, 15:02
Сообщение #3


Участник
*

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



Видимо не очевидно проблему описал. Использовать буду STM32L1, вы как раз описали первый случай, еще раз попытаюсь объяснить чем он мне не нравится, частота дискретизации будет 2кГц, ибо АЦП придется настраивать по максимальной частоте. Получится что все каналы будут оцифровываться с частотой 2кГц и 16бит. У меня 10 каналов. 2000*2*10 = 40кБ за секунду, вместо 5кБ планируемых. Даже если забирать буфер раз в 1/16 сек, это будет 2.5кБ вместо 312байт, которые нужно еще отсортировать и преобразовать. Поэтому я задумался, не проще ли копировать только в нужные моменты в прерывании и преобразовывать на ходу?

Сообщение отредактировал IgorKossak - Dec 1 2015, 22:25
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 1 2015, 16:39
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(data_stack @ Dec 1 2015, 18:02) *
не проще ли копировать только в нужные моменты в прерывании и преобразовывать на ходу?
Напишите оба варианта. Сравните размер получившегося кода. Прикиньте проигрыш по потреблению на исполнение этого лишнего кода. Я тоже за первый вариант - пробежаться по массиву с фиксированным шагом гораздо проще, чем обрабатывать кучу счетчиков в прерывании. Могу предложить улучшение - выборки частотой 256 и 16 Гц делать как инжектированные. Тогда буфер DMA вам нужен будет только для отсчетов частотой 2 кГц.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- data_stack   АЦП и энергопотребление   Dec 1 2015, 13:55
- - 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
- - AlanDrakes   Итак, обобщу снова. - DMA в L1 достаточно экономны...   Dec 3 2015, 06:42
|- - jcxz   Цитата(AlanDrakes @ Dec 3 2015, 12:42) TI...   Dec 3 2015, 08:14
|- - 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 Текстовая версия Сейчас: 21st July 2025 - 15:29
Рейтинг@Mail.ru


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