Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 14:32:38

Во-первых, минимальное время для УВХ не канает, точность потеряешь. Во-вторых, на расчёты нужно время, а МК занят массой других дел. Ещё не забывай, что пересылки из АЦП в память занимают полосу пропускания шин, так что задирать частоту выборки не следует, а следует выбрать достаточной для обеспечения требуемых характеристик.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 16:13:01

tonyk писал(а):минимальное время для УВХ не канает
Dimon456 писал(а):ADC_SampleTime_239_5Cycles
наверное надо было максимум написать
tonyk писал(а):Ещё не забывай, что пересылки из АЦП в память занимают полосу пропускания шин,
Мне интересно, сколько дма каналов можно задействовать одновременно?
tonyk писал(а):Во-вторых, на расчёты нужно время,
и опять все упирается в такты время и т.п.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 17:02:04

сколько дма каналов можно задействовать одновременно?

Задействованные каналы одновременно вообще не работают. Естественно, что речь идет об МК, где ОЗУ имеет единственную шину.
Вы можете включить все каналы ДМА, но арбитр шины на основании текущего приоритета решит кому предоставить доступ к памяти в данный конкретный момент. С целью недопущения потери данных в контроллере ДМА создают буфер FIFO, который способен удержать некоторый объем поступающих данных для ожидания доступа. Таким образом, перегрузка каналов ДМА приведет к потере производительности МК.
Пример. Вы пытаетесь загрузить данные от внешнего параллельного конвейерного АЦП на скоростях близких к предельным для шины памяти. Это приведет к блокировке ядра МК и фактическому останову исполнения кода. Точнее, чтение из флеша кода будет продолжено, арифметика ядра (регистровая арифметика) так же будет исполняться, но чтение-запись ОЗУ будут блокированы.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 17:26:21

Во как, не все упирается в дма.
КРАМ писал(а):на скоростях близких к предельным для шины памяти.
И каковы же предельные значения для шины памяти? К примеру вот у этого stm32f030f4p6.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 17:31:36

И каковы же предельные значения для шины памяти?

Насколько я знаю, предельной скоростью для ДМА будет четверть от системной частоты. Но для STM32 (M0) конкретно я могу немного ошибаться.
В любом случае, использовать ДМА не предельных скоростях неконструктивно. Нужно менять МК на более скоростной.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 17:49:12

КРАМ писал(а):четверть от системной частоты
Даже если и так. 48МГц/4=12МГц, это что-то около 0,083us,
даже если и при ADC_SampleTime_1_5Cycles 1us, получается что еще предел не достигнут?

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 17:54:00

предел не достигнут?

Нет, конечно. Внутренним SAR ADC перегрузить DMA невозможно. Но любая транзакция DMA при конфликте доступа ядро-DMA и приоритете DMA будет вставлять в исполнение кода "пузырьки". То есть задерживать исполнение.
Я не очень понял к чему вообще все это обсуждение. Какая цель ставится?

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 19:14:58

КРАМ писал(а):Какая цель ставится?
Думаю, цель, использование одновременно дма каналов.
Речь идет про оверсемплинг, даже если и отбросить повышение разрядности АЦП, остается одно интервал времени между отсчетами, и он должен быть постоянен, в противном случае это приведет к накоплению ошибки и неверному результату или "прыганию показаний".
А у ТС на дма все весит, все что можно повесить, и uart и spi и i2c, и куча прерываний.
Так вот и возникает вопрос, как эти все дма увяжутся с постоянным интервалом времени между отсчетами?

Здесь еще не рассматривается тот вариант, что у ТС внешний АЦП.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 20:51:07

Речь идет про оверсемплинг, даже если и отбросить повышение разрядности АЦП, остается одно интервал времени между отсчетами, и он должен быть постоянен

Вы путаете Божий дар с яичницей.
Семплирование АЦП НИКАКОГО ОТНОШЕНИЯ к ДМА не имеет. Захват аналогового сигнала в УВХ (S&H) АЦП и транзакция данных ПОСЛЕ завершения преобразования - "две большие разницы". Учите матчасть.
Можно вообще не использовать ДМА, а просто выгружать данные в прерывании - это ровным счетом никак не скажется на стабильности отсчетов во времени. Лишь бы все это успевало произойти между двух событий готовности данных.
ЗЫ. В догон. Какое отношение оверсемплинг имеет к стабильности отсчетов? Вы понимаете о чем говорите или просто фантазируете?

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 21:15:42

КРАМ писал(а):Вы путаете Божий дар с яичницей.
Ну а тогда какого хрена мне тут тарочут про занимаемую полосу пропускания шины? Если эта штука способна все запросы обработать +кучу прерываний и положить это все куда нужно, тогда ни какой проблемы не вижу.
КРАМ писал(а):ЗЫ. В догон.
Нооооо. Две темы перетрясли и в разделе stm и в разделе avr. Пока что, из вас, ни кто не предложил другого варианта измерения.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 21:47:28

Я настраивал ацп по запуску от таймера. И в ДМА он у меня работает.Но это не решение проблепмы.Есть аппаратная фильтрация.А вот о программной фильтрации кто нибудь может сказать?

Добавлено after 2 minutes:
КРАМ я с ним в какой то мере согласен.

Re: stm32 измерение переменного напряжение.

Вс мар 13, 2022 23:27:05

сколько дма каналов можно задействовать одновременно?

Задействованные каналы одновременно вообще не работают. Естественно, что речь идет об МК, где ОЗУ имеет единственную шину.
Вы можете включить все каналы ДМА, но арбитр шины на основании текущего приоритета решит кому предоставить доступ к памяти в данный конкретный момент. С целью недопущения потери данных в контроллере ДМА создают буфер FIFO, который способен удержать некоторый объем поступающих данных для ожидания доступа. Таким образом, перегрузка каналов ДМА приведет к потере производительности МК.


Где прочитать про буфер FIFO для ДМА в каком STM есть и его размер огласите плиз....

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 01:17:33

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

Я не в курсе что и кто вам говорит. Однако кроме того, что вы поместили данные в ОЗУ, делать с этими данными вы что то планируете? Или вы полагаете, что они Святым духом превратятся в искомый результат?
Вы так и не озвучили КОНЕЧНУЮ ЦЕЛЬ.
Где прочитать про буфер FIFO для ДМА в каком STM есть и его размер огласите плиз....

Буфер FIFO расположен в самом контроллере DMA. Получить информацию о нем вы можете в референсном мануале на свой STM32 в разделе "Контроллер DMA".
Например для F407:

Изображение

Однако, даже при отсутствии упоминания о таком буфере он там может быть.
Так, например, в dsPIC33CH нет информации о нем, однако я его там обнаружил по факту генерации флага overrun DMA при превышении скорости формирования реквестов DMA выше допустимой. После взведения оного флага легко увидеть сколько транзакций прошло и посчитать длину буфера.
А вот о программной фильтрации кто нибудь может сказать?

Вы хотите, что бы вам в формате одного сообщения объяснили как написать фильтр?
Это невозможно. Тем более, что вы ничего не сказали о требованиях к этому фильтру. Ну или о КОНЕЧНОЙ ЗАДАЧЕ.
Что за странная привычка задавать вопросы без четкого описания исходных данных задачи?
Есть фильтры КИХ (FIR), есть БИХ (IIR). Вам конкретно что требуется и для каких целей?
Пока что, из вас, ни кто не предложил другого варианта измерения.

Измерения ЧЕГО?

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 01:47:39

Интересно о FIFO я почитал для STM32F407 и тоже не нашел размер FIFO только Bits 2:0 FTH: FIFO threshold. получается 64 максимальная глубина FIFO. Например в стандарте IEEE 1284, LPT 32 глубина FIFO но иногда не хватает для драйвера мне показалось.
Получается что FIFO для USB и ETHERNET в своей выделенной памяти организуется и оно больше чем для APB?

"Однако, даже при отсутствии упоминания о таком буфере он там может быть.
Так, например, в dsPIC33CH нет информации о нем, однако я его там обнаружил по факту генерации флага overrun DMA при
превышении скорости формирования запросов DMA выше допустимой"

Это совсем интересно, но как флаг поймать? этот флаг генерирует системный вызов?

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 04:17:18

Флаг поймать можно простым опросом. В этой платформе изначально сброшенный флаг overrun DMA приводит к остановке канала DMA при его поднятии. Поэтому просто ловим флаг и смотрим что в массиве ДМА.

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 05:59:11

Вы вообще понимаете устройство периферии в СТМ32? Вся периферия имеет свои буферы, а те регистры, что видны программисту, служат лишь для приёма-передачи результатов. У АЦП есть свой внутренний регистр, в котором идёт формирование результата преобразования, который выкладывается только после его готовности. Вот вам и буфер. Заметьте, что частота тактирования АЦП в разы меньше частоты шины, по которой из него пересылаются данные.

Буфер FIFO есть не во всех DMA. Более того, его использование включается отдельно и логика работы с данными становится немного другой и описана в RM на МК.

Тема называется "stm32 измерение переменного напряжение". Напиши алгоритм свое цифровой обработки и замерь длительность его работы. Получишь оценку того, есть ли шанс у твоего МК успевать обрабатывать поступающую информацию. Если маразм меня не обманывает, то 9 каналов у нас считались около 2-3мс на F745.

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 08:01:01

Вы вообще понимаете устройство периферии в СТМ32?

Это вопрос КОМУ?
Вы, с точностью до неразличимости, повторили то, о чем я тут чуть ранее написал. Следует лишь напомнить, что период частоты тактирования АЦП меньше времени преобразования примерно в 14 раз для 12-битного режима. А если учесть, что частота тактирования АЦП сильно ниже частоты ядра, то о существенной загрузке "пузырьками" конвейера ядра при накоплении массива АЦП через ДМА говорить не приходится.
Опять же при рассуждениях о потребной производительности при измерениях переменного напряжения нужно обозначить КОНКРЕТНУЮ задачу, а не абстрактно резонерствовать о том, "как это сделано у меня".
Есть минимум ТРИ варианта измерений.
1. Измерения с целью вывода на дисплей для считывания с него результата человеком.
2. Измерения с целью использования их в петле автоматического регулирования.
3. Измерения с целью бесконечного накопления данных (типа измерителя энергии или логгирования результатов с нормированным интервалом).
Для каждого из этих вариантов нужны РАЗНЫЕ вычислительные мощности. Особенно для п.п. 2 и 3 по сравнению с п.1
Простые дисплейные измерения не требуют никаких особенных производительностей от ядра. Достаточно просто выдержать требуемую частоту дискретизации и иметь необходимый объем ОЗУ для накопления массива.

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 09:19:54

КРАМ писал(а):Однако кроме того, что вы поместили данные в ОЗУ, делать с этими данными вы что то планируете?
Допусти так
Спойлер
Код:
volatile uint32_t avg_s;

#define ARRAYSIZE 1024UL
uint16_t ADC_values[ARRAYSIZE] __attribute__ ((aligned(4)));
#define d_count 512UL

void DMA1_Channel1_IRQHandler(void)
{
   static uint32_t avg;
   static uint32_t avg_t;
   static uint32_t count=0;
   uint16_t *dp;   
   uint32_t irq; uint16_t n;

   DMA1->IFCR = irq = DMA1->ISR & D_IRQ_MASK;   
   dp = &ADC_values[(irq & DMA_ISR_TCIF1) ? ARRAYSIZE / 2 : 0];   

   n = ARRAYSIZE / 2;     
   avg = 0;
   do {
   avg += *dp;
   dp += 1;
   } while (--n != 0);

   avg_t += avg;
   if(count++ == d_count) {

   avg_t /= ((ARRAYSIZE * d_count) / 2);   // 1024*512/2=262144 или 2^18

   avg_s = avg_t;

   count=0; avg_t=0;
   }
}
В зависимости от ADC_SampleTime и общее время измерения.
Я знаю что АЦП беферизированный, но АЦП не будет ждать пока ДМА заберет из буферизированного регистра данные, и может затереть новыми или вообще не записать новые данные, смотря как там в этом чипе беферизированный регистр работает.
Но интервал времени между отсчетами должен быть постоянен, в противном случае это приведет к накоплению ошибки и неверному результату или "прыганию показаний" и никакие КИХ (FIR) БИХ (IIR) фильтры не помогут.
КРАМ писал(а):Вы так и не озвучили КОНЕЧНУЮ ЦЕЛЬ.
А конечная цель, на дма все весит, все что можно повесить, и uart и spi и i2c, и куча прерываний.
Так вот и возникает вопрос, как эти все дма увяжутся с постоянным интервалом времени между отсчетами и не возникнет ли ситуация, что ваш FIFO не будет успевать вовремя обрабатывать поставленную задачу.

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 10:12:15

Я знаю что АЦП беферизированный, но АЦП не будет ждать пока ДМА заберет из буферизированного регистра данные

Бред не надо нести. Если в качестве реквеста для ДМА будет выбран сам АЦП, то данные уйдут в ОЗУ практически мгновенно после завершения преобразования. Изменение данных в буфере АЦП произойдет только по завершении следующего преобразования. Интервал семплирования (дискретизации) АЦП вы выбираете сами. Например от ШИМа. Никаких проблем с накоплением тут нет от слова совсем.

Добавлено after 2 minutes 5 seconds:
А конечная цель, на дма все весит, все что можно повесить, и uart и spi и i2c, и куча прерываний.

:facepalm: У вас конечная цель состоит в куче прерываний? Вы вообще понимаете что тут бормочете?
Конечная цель - это НАЗНАЧЕНИЕ УСТРОЙСТВА, а не ваши ковыряния с интерфейсами и кодом.
И прекратите коверкать русский язык.
вИсит!!!!

Добавлено after 5 minutes 46 seconds:
Но интервал времени между отсчетами должен быть постоянен, в противном случае это приведет к накоплению ошибки и неверному результату или "прыганию показаний" и никакие КИХ (FIR) БИХ (IIR) фильтры не помогут

Это вы сами придумали или рассказал кто? Какое еще нах накопление ошибки? Вы вообще понимаете о чем ведете разговор?
И с какого перепуга интервал будет изменяться, если запуск АЦП производится от стабильной частоты?

Re: stm32 измерение переменного напряжение.

Пн мар 14, 2022 10:14:40

КРАМ писал(а):Никаких проблем с накоплением тут нет от слова совсем.
Но тогда и с вашим FIFO и с полосой пропускания шины не должно возникнуть ни каких проблем.
Ответить