dimir 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба У меня такой риторический вопрос как мне произвести 10 замеров ацп?Это мне нужно создавать массив?И при каждом замере выполнив замер отключать бит запуска измерений потом заново включать? Или как правильно ? Подскажите спецы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 5 октября, 2022 Опубликовано 5 октября, 2022 (изменено) · Жалоба Берёшь массив из 20 значений. АЦП в кольцевом режиме непрерывно измеряет. Настраиваешь 2 прерывания от АЦП: по половине буфера и по окончании измерений. В итоге каждые 10 замеров получаешь прерывания. В зависимости от того, какое получил, используешь в расчётах либо первые 10, либо вторую десятку. Ессно, всё через DMA. Изменено 5 октября, 2022 пользователем tonyk_av Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 5 октября, 2022 Опубликовано 5 октября, 2022 (изменено) · Жалоба Прерывание от DMA?Если я использую DMA.То прерывание от АЦП отключаем.Я таких примеров не видел.Если можно пример. Изменено 5 октября, 2022 пользователем dimir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad_G 8 5 октября, 2022 Опубликовано 5 октября, 2022 (изменено) · Жалоба 54 минуты назад, dimir сказал: Я таких примеров не видел В Reference manual-е смотрели, аппендикс? RCC->AHBENR |= RCC_AHBENR_DMA1EN; //Включили тактирование ДМА ADC1->CFGR1 |= ADC_CFGR1_DMACFG; //Циклический режим DMA1_Channel1->CPAR = (uint32_t)&(ADC1->DR); //Адрес регистра данных АЦП DMA1_Channel1->CMAR = (uint32_t)&(buff[0]); //Начальный адрес в памяти, результат DMA1_Channel1->CNDTR = 80; //Количество измерений в цикле - по 16 на канал DMA1_Channel1->CCR |= 10656; //разрядность: памяти данных 32 бит; источник 16 бит DMA1_Channel1->CCR |= DMA_CCR_TCIE; //вкл прерывание на DMA Channel 1 ; DMA1_Channel1->CCR |= DMA_CCR_EN; //включили DMA Channel 1 NVIC_EnableIRQ(DMA1_Channel1_IRQn); //вкл прерывания канал DMA1 NVIC_SetPriority(DMA1_Channel1_IRQn,0); //приоритет 0 самый высокий buff[] - тот самый массив, про который вам говорили А по сути, вы не определились чего хотите в этой жизни - демократии или осетрины с хреном... Есть алгоритмы, которые используют каждый отсчёт ацп для расчётов. Есть более простые - сложить измерения и поделить на количество. Сколько чего задействовано в мк. Отсюда и конкретная реализация. Изменено 5 октября, 2022 пользователем Vlad_G Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Немного смущает настройка.2 и 6 строки.У меня этого бита нет.А вот 6 строка мне больше интересует.Контроллер какой?Я имею ввиду как измерить допустим 10 измерений на канал и вывести среднее значение этого канала.И ещё один вопрос.Устанолвка приоретета по прерыванию обязательна? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad_G 8 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Да, утро раннее, не обратил - F0. У F1 по по продвинутее ацп будет, биты другие, но суть та же. 2 строка - циклический режим работы - дошел до последнего, потом начал с первого канала и так по кругу не выключаясь. А может вам надо один цикл по 10 замеров .!. знает 6 строка - настройка дма, источники разные бывают: 16 бит, 8 бит ... надо указывать, чтоб дма правильно с памятью работал. Для 10 замеров указываете массив [10], DMA1_Channel1->CNDTR = 10; Когда сработало прерывание в [10] ваши отсчёты. Если у вас одно прерывание, то приоритет можно не указывать, если несколько, то желательно, а то и обязательно, а то тапки достанутся не тому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 30 minutes ago, dimir said: Я имею ввиду как измерить допустим 10 измерений на канал Уже сказали как и даже показали. 30 minutes ago, dimir said: вывести среднее значение этого канала Для сложить 10 значений и поделить сумму на 10 тоже нужен пример? :))) 31 minutes ago, dimir said: Контроллер какой? А какая разница? Принцип показан. Дальше смотри АЦП в своём и МК и DMA. 36 minutes ago, dimir said: Устанолвка приоретета по прерыванию обязательна? Может, теорию измерений для начала изучить? Кстати, в примере не показана настройка таймера для запуска АЦП. Если делать по-умному, то брать отсчёты нужно каждые 2мс, после чего усреднять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба В 05.10.2022 в 09:42, Vlad_G сказал: А может вам надо один цикл по 10 замеров .!. знает 6 строка - настройка дма, источники разные бывают: 16 бит, 8 бит ... надо указывать, чтоб дма правильно с памятью работал. Для 10 замеров указываете массив [10], DMA1_Channel1->CNDTR = 10; Когда сработало прерывание в [10] ваши отсчёты. Если у вас одно прерывание, то приоритет можно не указывать, если несколько, то желательно, а то и обязательно, а то тапки достанутся не тому. Не совсем 4 каналов по 10 замеров? Как это сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 12 минут назад, dimir сказал: Не совсем 4 каналов по 10 замеров? Как это сделать? Открываете руководство пользователя (User manual), раздел АЦП (ADC), читаете его несколько раз до просветления. Потом внимательно читаете описание регистров ADC_SQRx, записываете в них нужную вам последовательность каналов и количество каналов в последовательности (4). Переходите к разделу ПДП (DMA), читаете его, настраиваете регистры ПДП на 4*10 = 40 пересылок. Запускаете АЦП, ожидаете готовности ПДП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 5 октября, 2022 Опубликовано 5 октября, 2022 (изменено) · Жалоба Сергей Борщ.Это нужно сделать не в основном меню. Так что этот вариант с настройкой DMA не катит.А других вариантов нет? Изменено 5 октября, 2022 пользователем dimir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad_G 8 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 50 минут назад, dimir сказал: А других вариантов нет? Нет. Либо вы каждый раз вручную считываете результат из ацп или, что тоже самое, ставите прерывание на преобразование. Либо поручаете дма всю эту рутину. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба В 05.10.2022 в 16:59, Vlad_G сказал: Нет. Либо вы каждый раз вручную считываете результат из ацп или, что тоже самое, ставите прерывание на преобразование. Либо поручаете дма всю эту рутину. А вот этот вариант вручную поподробнее если можно.Если не жалко.С чем и как это проделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 2 часа назад, dimir сказал: Это нужно сделать не в основном меню Что за меню? Откуда оно появилось? Как работа АЦП, ПДП и, возможно, прерываний связана с каким-то меню? 1 час назад, dimir сказал: А вот этот вариант вручную поподробнее если можно Настраиваете в ADC_SQR последовательность из одного канала, настраиваете АЦП на однократное измерение, запускаете АЦП, дожидаетесь окончания измерения, вычитываете результат из регистра данных АЦП, повторяете 4*10=40 раз. Документацию читать придется все равно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Нужно непрерывное измерение тока 3 фаз .Но настройка должна производится немного по другому. ADC.h APB.h I2C.h lcd.h main.h rts_chasi.h stroka_u.h timers.h USART.h ADC.c APB.c I2C.c lcd.c main.c rtc_chasi.c stroka_u.c timers.c USART.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться