|
АЦП и энергопотребление |
|
|
|
Dec 1 2015, 13:55
|
Участник

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

|
Есть необходимость оцифровывать несколько сигналов, с разной частотой (2кГц, 256Гц, 16Гц) и разной разрядностью (8-12бит) и скидывать все это дело на карту памяти. Все это усложняется батарейным питанием. Как лучше поступить?
1. Вариант, запускать преобразование по таймеру, с самой большой частотой дискретизации, с максимальной разрядностью, по окончанию преобразования забирать через DMA. По заполнению буфера DMA, выдаст прерывание, после него заполнять другой буфер, а за это время разгребать то что накопилось. Чем нравится решение, тем что, наверное, будет время для сна. Чем не нравится - не гибко, это будет огромный массив, в который будут свалены все данные скопом. Придется вычленять нужные данные, преобразовывать их битность, затем распихивать по мелким массивам, чтобы отсортировать, затем снова правильно раскладывать.
2. Вариант постоянно преобразовывать значения АЦП и сразу складывать их через DMA в массив. Запускать таймер с частотой 2кГц, в прерывании забирать только нужные значения, сразу же преобразовывать и аккуратно складывать. Чем нравится, удобно, займет меньше места в оперативе. Чем не нравится, не понятно что получится с энергопотреблением, думаю что оно вырастет, этого не хотелось бы.
Еще вопрос: как лучше делать с т.з энергопотребления - копить большой буфер и скидывать на карту большим куском, или мелкими порциями
|
|
|
|
|
 |
Ответов
|
Dec 3 2015, 06:42
|

Частый гость
 
Группа: Участник
Сообщений: 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. Остальной ток потребления будет зависеть от потребностей карты памяти и быстроты работы кода.
|
|
|
|
|
Dec 3 2015, 08:14
|
Гуру
     
Группа: Свой
Сообщений: 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-х разных частотах, суммируя их на выходе в единый поток событий, да ещё переключать каналы АЦП в зависимости от события.  Такое умеет делать например АЦП в 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 А эти цифры вообще с потолка...
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|