Например TDA7294

Форум РадиоКот • Просмотр темы - stm32 измерение переменного напряжение.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср фев 18, 2026 12:38:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 77 ]    , 2, ,  
Автор Сообщение
В сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 14:32:38 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1277
Рейтинг сообщения: 0
Во-первых, минимальное время для УВХ не канает, точность потеряешь. Во-вторых, на расчёты нужно время, а МК занят массой других дел. Ещё не забывай, что пересылки из АЦП в память занимают полосу пропускания шин, так что задирать частоту выборки не следует, а следует выбрать достаточной для обеспечения требуемых характеристик.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 16:13:01 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
tonyk писал(а):
минимальное время для УВХ не канает
Dimon456 писал(а):
ADC_SampleTime_239_5Cycles
наверное надо было максимум написать
tonyk писал(а):
Ещё не забывай, что пересылки из АЦП в память занимают полосу пропускания шин,
Мне интересно, сколько дма каналов можно задействовать одновременно?
tonyk писал(а):
Во-вторых, на расчёты нужно время,
и опять все упирается в такты время и т.п.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 17:02:04 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
сколько дма каналов можно задействовать одновременно?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 17:26:21 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Во как, не все упирается в дма.
КРАМ писал(а):
на скоростях близких к предельным для шины памяти.
И каковы же предельные значения для шины памяти? К примеру вот у этого stm32f030f4p6.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 17:31:36 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
И каковы же предельные значения для шины памяти?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 17:49:12 
Мудрый кот

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 17:54:00 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
предел не достигнут?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 19:14:58 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
КРАМ писал(а):
Какая цель ставится?
Думаю, цель, использование одновременно дма каналов.
Речь идет про оверсемплинг, даже если и отбросить повышение разрядности АЦП, остается одно интервал времени между отсчетами, и он должен быть постоянен, в противном случае это приведет к накоплению ошибки и неверному результату или "прыганию показаний".
А у ТС на дма все весит, все что можно повесить, и uart и spi и i2c, и куча прерываний.
Так вот и возникает вопрос, как эти все дма увяжутся с постоянным интервалом времени между отсчетами?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 20:51:07 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Речь идет про оверсемплинг, даже если и отбросить повышение разрядности АЦП, остается одно интервал времени между отсчетами, и он должен быть постоянен

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 21:15:42 
Мудрый кот

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 21:47:28 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Я настраивал ацп по запуску от таймера. И в ДМА он у меня работает.Но это не решение проблепмы.Есть аппаратная фильтрация.А вот о программной фильтрации кто нибудь может сказать?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Вс мар 13, 2022 23:27:05 
Это не хвост, это антенна
Аватар пользователя

Карма: -16
Рейтинг сообщений: -136
Зарегистрирован: Чт фев 19, 2015 12:41:04
Сообщений: 1405
Рейтинг сообщения: 0
сколько дма каналов можно задействовать одновременно?

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


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

_________________
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Пн мар 14, 2022 01:17:33 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Ну а тогда какого хрена мне тут тарочут про занимаемую полосу пропускания шины? Если эта штука способна все запросы обработать +кучу прерываний и положить это все куда нужно, тогда ни какой проблемы не вижу.

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

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

Изображение

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Пн мар 14, 2022 01:47:39 
Это не хвост, это антенна
Аватар пользователя

Карма: -16
Рейтинг сообщений: -136
Зарегистрирован: Чт фев 19, 2015 12:41:04
Сообщений: 1405
Рейтинг сообщения: 0
Интересно о FIFO я почитал для STM32F407 и тоже не нашел размер FIFO только Bits 2:0 FTH: FIFO threshold. получается 64 максимальная глубина FIFO. Например в стандарте IEEE 1284, LPT 32 глубина FIFO но иногда не хватает для драйвера мне показалось.
Получается что FIFO для USB и ETHERNET в своей выделенной памяти организуется и оно больше чем для APB?

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

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

_________________
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Пн мар 14, 2022 04:17:18 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Флаг поймать можно простым опросом. В этой платформе изначально сброшенный флаг overrun DMA приводит к остановке канала DMA при его поднятии. Поэтому просто ловим флаг и смотрим что в массиве ДМА.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Пн мар 14, 2022 05:59:11 
Сверлит текстолит когтями

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Пн мар 14, 2022 08:01:01 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Вы вообще понимаете устройство периферии в СТМ32?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Пн мар 14, 2022 09:19:54 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
КРАМ писал(а):
Однако кроме того, что вы поместили данные в ОЗУ, делать с этими данными вы что то планируете?
Допусти так
Спойлер
Код:
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 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24832
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Я знаю что АЦП беферизированный, но АЦП не будет ждать пока ДМА заберет из буферизированного регистра данные

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

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

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 измерение переменного напряжение.
СообщениеДобавлено: Пн мар 14, 2022 10:14:40 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
КРАМ писал(а):
Никаких проблем с накоплением тут нет от слова совсем.
Но тогда и с вашим FIFO и с полосой пропускания шины не должно возникнуть ни каких проблем.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 77 ]    , 2, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: tonyk и гости: 34


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y