|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 3:25 pm
Работа с ADC канали в STM32F4xx
| Автор |
Съобщение |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
 Работа с ADC канали в STM32F4xx
Имам конфигурирани 4 канала в ADC-то. Каналите са sConfig.Channel=ADC0-4 sConfig.Rank =Rank1-4 и sConfig.SamplingTime Линкнал съм ги през DMA към буфер [12000] по 2 баита(12 бит адц) и 4 канала ... Работи както трябва. За нов канал имат HAL_ADC_ConfigChannel(.... Но когато искам да намаля каналите, преиницялизирам наново ADC-то с клонинг на MX_ADC1_Init(void)...
Друг начин не намерих!!! Въпроса ми де ... има ли друг начин?
времето смятам по датата. ADCCLK = 42 MHz and a sampling time of 3 cycles: Tconv = 3 + 12.5 = 15,5 cycles = 0.369 µs μs Мисля после да вдигна APB2 на 84МHz.
_________________ Вниманиене съмвишист....ИЙ.
|
| Сря Сеп 25, 2024 8:33 pm |
|
 |
|
VPavlov
Ранг: Популярен
Регистриран на: Съб Апр 01, 2023 9:59 am Мнения: 302
|
 Re: Работа с ADC канали в STM32F4xx
Здрасти, имам съвсем малко опит, но все пак ще споделя: При инициализацията се извършват множество конфигурации и чак в края й се активира АДЦ и ДМА потокът. Тоест АДЦ и ДМА не работят докато биват конфигурирани, така че ако се интересуваш за друг начин (освен тяхната повторна инициализация) мисля че е малко вероятно да има. Иначе редът на конфигурация е следния: Пуска се сигнал до портовете на пиновете, поставят се съответните пинове в "analog mode". Пуска се сигнал до АДЦ и се конфигурира броят на преобразуванията. После конфигурираме последователността на изпълнение, mod на работа и работа с ДМА. След това се конфигурира ДМА и на края се пускат и двете да работят. Ако те интересува по-подробно ще ти опиша кои регистри се ползват. Циклите броиш много точно с DWT. Ако търсиш да става по-бързо. Би могъл да преконфигурираш само регистрите, които се отнасят за броя на конверсии и редът на отчитане, след като си инициализирал един път АДЦ-то. Отново ще трябва да спреш и пуснеш АДЦ и ДМА, както и да промениш броя на каналите.
Последна промяна VPavlov на Чет Сеп 26, 2024 10:14 am, променена общо 1 път
|
| Чет Сеп 26, 2024 9:08 am |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
 Re: Работа с ADC канали в STM32F4xx
Трябва да почета по подробно документите. Има правила ... В биб. има и функций за Init и DeInit ... Ще опитам първо да променя само броя на каналите.
_________________ Вниманиене съмвишист....ИЙ.
|
| Чет Сеп 26, 2024 9:51 am |
|
 |
|
VPavlov
Ранг: Популярен
Регистриран на: Съб Апр 01, 2023 9:59 am Мнения: 302
|
 Re: Работа с ADC канали в STM32F4xx
Просто ги спираш, преправяш някоя настройка и пускаш. Ако го деинициализираш сигурно ще върне всички ползвани регистри в стойностите им по подразбиране, което няма да ти спести цикли, тъй като отново ще трябва да се направят всички конфигурации. ADC то се пуска (enable) от ADC1->CR2 първия бит, и стартира с 30тия от същия регистър. За съжаление нямам опит с HAL.
|
| Чет Сеп 26, 2024 10:10 am |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
 Re: Работа с ADC канали в STM32F4xx
Трябва ми да изследвам един синусоидален сигнал, който отива на майка си в г--а и се връща. Генерирам го с AD9834. Имам всички сметки които трябва да направя. Поне така си мисля. Нещо такова.  |  |  |  | Код: float find_max(const uint16_t *buf, size_t len) float find_min(const uint16_t *buf, size_t len) float calculate_average(const uint16_t *buf, size_t len) float calculate_frequency(const uint16_t *buf, size_t len, float sampling_rate) void generate_ideal_sine(float *ideal_sine, size_t len, float amplitude, float frequency, float sampling_rate, float phase) float calculate_rms(const uint16_t *buf, size_t len) float calculate_snr(const uint16_t *adcBuf, const float *ideal_sine, size_t len)
|  |  |  |  |
Най-вероятно ще махна резултатите със запетайките където е възможно. Нямам си на идея как да извлеча от буфера шума насложен върху синусоидата. Шума не е симетрично насложен върху синусоидалния сигнал. Имам някакви фантазии, да изчисля допълнително спрямо реалния период на сигнала и по реалното семплиране на всяка точка от предполагаемата вярна синусоида и да сравнявам със реалната от ADC-то.  Ама нямам толкова "багаж".
_________________ Вниманиене съмвишист....ИЙ.
|
| Нед Окт 06, 2024 7:56 am |
|
 |
|
VPavlov
Ранг: Популярен
Регистриран на: Съб Апр 01, 2023 9:59 am Мнения: 302
|
 Re: Работа с ADC канали в STM32F4xx
Разбирам си уловил сигналът, изчислил си му параметри, филтрирал си шума, така че вече разполагаш с търсената синусоида и сега се интересуваш от амплитудата на шума. Не разбирам какво правят (calculate_rms, и calculate_snr). Ако те разбирам правилно, то можеш да извадиш замерената моментна стойност на сензора, от филтрираната амплитуда. Ще се получи положително или отрицателно число, в зависимост от коя страна е шумът. След като е несиметрично разположен, можеш да ги третираш отделно и да сметнеш средно аритметично за амплитудата на шума.
|
| Нед Окт 06, 2024 10:28 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: Работа с ADC канали в STM32F4xx
пускаш сигнал мериш амплитудата спираш сигнала мериш шума ... общо взето с 12 битово ADC нищо няма да премериш SNR = 10 log (S ÷ N) за напрежение. за мощност е 20 log...
теоретично 72 db е без да бараш усилване или опорно
_________________ main[-1u]={1};
|
| Нед Окт 06, 2024 10:56 pm |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
 Re: Работа с ADC канали в STM32F4xx
Като за начало, без да съм тествал е това ... разделям ги на по малки стъпки за да мога да дебъгвам. Иначе ми е трудно. Това долното не знам дали изобщо ще работи. не съм много сигурен но ще опитам да мине буфера през медианен филтър или LP филтър
_________________ Вниманиене съмвишист....ИЙ.
Последна промяна RM на Сря Окт 09, 2024 4:56 pm, променена общо 1 път
|
| Сря Окт 09, 2024 4:38 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: Работа с ADC канали в STM32F4xx
ако не е - няма да се научиш какви точности гониш с това "чудо"
_________________ main[-1u]={1};
|
| Сря Окт 09, 2024 4:49 pm |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
 Re: Работа с ADC канали в STM32F4xx
Сега като изпратя чиста синусоида 70000Hz от изхода на DDS (само единия изход, сигнала е от 2 пина за диференциален инструментален операционен) и го прекарам през 12 битовия ADC1 през DMA канал с най-бързото семплиране, данните са направо отчайващо лоши. Трябва ми да изследвам един датчик. С мерене с обикновени уреди не става. Трябва да хвана шумове и изкривявания. Сега не искам да хардуерно да правя нищо за подобряване на сигнала. Лошия сигнал на този етап ми е добре дошъл.
"ако не е - няма да се научиш" Нямам никакви напъни да се уча защото не ставам за това, но понякога се налага.
Е това с 20 log10 дали не съм го объркал ??? Отношението на амплитуди наистина ли е така.
_________________ Вниманиене съмвишист....ИЙ.
|
| Сря Окт 09, 2024 5:15 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: Работа с ADC канали в STM32F4xx
Дай при ер за отчайващо лоши, дай картинка на синусуида възстановена само по точки, без фурие, или просто файл с 300-400 семпъла.
|
| Сря Окт 09, 2024 5:33 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: Работа с ADC канали в STM32F4xx
70000Hz тактова или синусоида
_________________ main[-1u]={1};
|
| Сря Окт 09, 2024 5:35 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: Работа с ADC канали в STM32F4xx
Да не се бъркам в проекта, но на пазара отдавна има звукови карти семплиращи на 384 или 768 кила, 24 бита. Няма да се учудя ако има и с 32 бита, най-вече "на хартия". Ако картата е по-лачена, има балансни (диференциални) входове и изходи.
Софтуери за измерване на шумове, изкривявания и куп други параметри също не е като да няма. Че и добре направени, безплатни...
Отделно има анализатори за аудио работещи до 250 кила или мегахерц, но за тях трябва малко по-сериозен бюджет.
|
| Сря Окт 09, 2024 6:16 pm |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
 Re: Работа с ADC канали в STM32F4xx
примерно при 105kHz шумовете са около 5-10% от сигнала. Изобразявам синусоидата на цветно дисплейче 3,2 инчово ILI9341, само информативно. Сигнала ми идва от AD9834. Искам да хвана отделно от генератора, въпреки че знам винаги каква честота пускам- честотата, дефазирането, амплитудата и по натам ще сложа серийно и активно за да хвана и реактивното от импеданса . Трябва ми възможно най верен сигнал поне от 2 честоти, за да хвана достатъчно точно шумовете и да сметна и индуктивността. Сега съм още в началото. Сега на точно 105kHz , 70kHz ..35kHz изчислява честотата със 100% точност. Но чета ADC-то непрекъснато, хващам буфера в прекъсването при изчетени всички зададени броя семпли. Ще преправя четенето от адц-то да бъде само когато другата периферия мълчи - USB , SPI и предполагам всичко ще си дойде на място.
_________________ Вниманиене съмвишист....ИЙ.
|
| Сря Окт 09, 2024 7:03 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: Работа с ADC канали в STM32F4xx
шума ли ще мериш или изкривяването на сигнала
_________________ main[-1u]={1};
|
| Сря Окт 09, 2024 7:28 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|