Например TDA7294

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

Текущее время: Ср дек 31, 2025 00:15:55

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


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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Прошу помощи
СообщениеДобавлено: Пн дек 22, 2025 23:49:24 
Встал на лапы

Зарегистрирован: Ср май 16, 2012 20:44:38
Сообщений: 123
Откуда: Харків-Україна.
Рейтинг сообщения: 0
Хочу запустить три ADC поочередно с одного канала на stm32F429 discovery.Прошу концептуально описать этот режим,как прикрутить DMA,канали и потоки прикручены к отдельним АЦП. В этом режиме,поочередном , данные кидаются в общий регистр.Как мне его прикрутить к DMA.Настраивать каждый АЦП на свой поток и канал , а потом разбирать этот регистр....Пишу на регистрах про КУБ прошу не напоминать. У меня аллергия на этого чувака, ножки посмотреть, да пользуюсь и УУУсе больше он и нах.... не нужон.

Добавлено after 1 hour 29 minutes 27 seconds:
Ay......"A в ответ тишина , он вчера не вернулся из боя"
Высоцкий В.С.

Добавлено after 1 hour 43 seconds:
Нашел на Github .Там он берет 0 поток и 0 канал.Это привязяно к АЦП1. И общий регистр.А третий ацп совсем на другом канале.Скачал его main.c CUB начал ругаться.АЦП2 на четвертом канале,АЦП 3 на втором канале, поток один 0.Не пойму, как ацп если указан другой канал будут кидать с общего регистра в DMA


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошу помощи
СообщениеДобавлено: Вт дек 23, 2025 01:07:13 
Электрический кот

Карма: 5
Рейтинг сообщений: 170
Зарегистрирован: Пн май 01, 2017 20:01:45
Сообщений: 1063
Рейтинг сообщения: 0
Открываете RM на МК, конкретно RM0090. Стр. 404 раздел 13.9 Multi ADC mode. Видимо, вы хотите _один_ канал оцифровывать с максимальной скоростью. Это делается через 13.9.3 Interleaved mode - когда сигнал захватывается тремя ADC по очереди, потом оцифровывается. Здесь важно выдержать задержки в "таймингах" - см. Figure 57. Interleaved mode on 1 channel in continuous conversion mode: triple ADC (стр 411). Для считывания данных в режиме х2, х3 используется еще один регистор - 13.13.17 ADC common regular data register for dual and triple modes (ADC_CDR), стр. 433. На него надо настроить тот DMA, который будет пинаться по получению данных с ADC.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошу помощи
СообщениеДобавлено: Вт дек 23, 2025 01:34:35 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 478
Рейтинг сообщения: 0
Нашел на Github .Там он берет 0 поток и 0 канал.Это привязяно к АЦП1. И общий регистр.А третий ацп совсем на другом канале.Скачал его main.c CUB начал ругаться.АЦП2 на четвертом канале,АЦП 3 на втором канале, поток один 0.Не пойму, как ацп если указан другой канал будут кидать с общего регистра в DMA

Регистр данных один на 3 ADC, соответственно и DMA канал тоже один.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошу помощи
СообщениеДобавлено: Ср дек 24, 2025 11:22:08 
Встал на лапы

Зарегистрирован: Ср май 16, 2012 20:44:38
Сообщений: 123
Откуда: Харків-Україна.
Рейтинг сообщения: 0
Да регистр общий, в ДМА его ставлю в настройки , канал АЦП один 13,вывод один С3,на вывод кидаю меандр с ЦАП.Мануал АЦП пропахал вдоль и поперек, есть кое какие вопросы по регистрам настройки АЦП:, допустим что мы ставим в регистр ADC_CCR разряды MULTI , 111, это чередующийся режим, или 11001 попеременный режим, тут я не вьехал,далее разряды DDS- режим выключения DMA для нескольких ADC, ставлю его, далее разряды DMA ставлю режим 1. Вроде все по Библии...У меня три АЦП .что ставить в разряды регистра ADC_SQR1-L это длина регулярной последовательности , у нас одна последовательность 1, или раз три АЦП то ставить 3.

Добавлено after 13 minutes 22 seconds:
Кстати пример из githuba он на SPL не работает ошибок нет, но не работает, задержку увеличиваю, что то схватил в регистр АЦП, но ересь у меня ЦАП выдает 200 , а намеряло 7, уменьшил разрядность до 8 , в примере 12, увеличил тайминг .....нифига.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Прошу помощи
СообщениеДобавлено: Ср дек 24, 2025 12:54:24 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 478
Рейтинг сообщения: 0
допустим что мы ставим в регистр ADC_CCR разряды MULTI , 111, это чередующийся режим, или 11001 попеременный режим, тут я не вьехал,далее разряды DDS- режим выключения DMA для нескольких ADC, ставлю его, далее разряды DMA ставлю режим 1. Вроде все по Библии...У меня три АЦП .что ставить в разряды регистра ADC_SQR1-L это длина регулярной последовательности , у нас одна последовательность 1, или раз три АЦП то ставить 3.

MULTI - Interleaved(10111), DDS не трогал, ADC_SQR1-L - 0, а DMA у меня был Mode2, но тут, по идее, без разницы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошу помощи
СообщениеДобавлено: Ср дек 24, 2025 13:20:38 
Электрический кот

Карма: 5
Рейтинг сообщений: 170
Зарегистрирован: Пн май 01, 2017 20:01:45
Сообщений: 1063
Рейтинг сообщения: 0
В дуальном режиме свойства второго ADC клонируются из свойств первого (не все). Для тройного режима может быть аналогично, никогда не делал.
Самый простой вариант - найти пример на х3 и его склонировать.
Открываем RM, раздел х3 оцифровки (поеревод гугла):
СпойлерРежим тройного АЦП
После срабатывания внешнего триггера:
• АЦП1 запускается немедленно и
• АЦП2 запускается с задержкой в ​​несколько тактовых циклов АЦП
• АЦП3 запускается с задержкой в ​​несколько тактовых циклов АЦП относительно преобразования АЦП2

Минимальная задержка, разделяющая 2 преобразования в режиме чередования, задается битами DELAY в регистре ADC_CCR. Однако АЦП не может начать преобразование, если комплементарный АЦП все еще производит выборку его входного сигнала (только один АЦП может производить выборку входного сигнала в данный момент времени). В этом случае задержка становится равной времени выборки + 2 тактовых цикла АЦП. Например, если DELAY = 5 тактовых циклов, а выборка занимает 15 тактовых циклов на трех АЦП, то между преобразованиями на АЦП1, АЦП2 и АЦП3 проходит 17 тактовых циклов.

Если бит CONT установлен на АЦП1, АЦП2 и АЦП3, выбранные обычные каналы всех АЦП непрерывно преобразуются.

Если последовательность преобразования прерывается (например, при завершении передачи DMA), многоканальный АЦП-секвенсор необходимо перезагрузить, предварительно настроив его в независимом режиме (биты DUAL[4:0] = 00000), прежде чем перепрограммировать его в чередующийся режим. В этом режиме запрос DMA генерируется каждый раз, когда доступны 2 элемента данных (если биты DMA[1:0] в регистре ADC_CCR равны 0b10). Запрос сначала передает первые преобразованные данные, хранящиеся в младшем полуслове 32-битного регистра ADC_CDR, в SRAM, затем передает вторые преобразованные данные, хранящиеся в старшем полуслове ADC_CDR, в SRAM.
Последовательность следующая:
• 1-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
• 2-й запрос: ADC_CDR[31:0] = ADC1_DR[15:0] | ADC3_DR[15:0]
• 3-й запрос: ADC_CDR[31:0] = ADC3_DR[15:0] | ADC2_DR[15:0]
• 4-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]

Из этого понятны настройка DELAY и ADC_CCR, DMA[1:0]. Следует ожидать получение 2 слов х32 на один запуск. DMA надо настроить на ADC_CDR.
Моего личного кода нет, а "на слух" я леплю баги как нечего делать, давай попробуем получить это от ИИ.
Спойлер
Код:
#include "stm32f4xx.h"

// Массив из 3-х элементов (каждый по 32 бита содержит 2 измерения)
volatile uint32_t adc_buffer[3];

void ADC_Triple_Config(void) {
    // 1. Тактирование: GPIOA, DMA2, ADC1, ADC2, ADC3
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_DMA2EN;
    RCC->APB2ENR |= RCC_APB2ENR_ADC1EN | RCC_APB2ENR_ADC2EN | RCC_APB2ENR_ADC3EN;

    // 2. PA0 -> Analog
    GPIOA->MODER |= (3U << (0 * 2));

    // 3. Настройка DMA2 Stream 0 Channel 0 (для ADC1)
    DMA2_Stream0->CR = 0; // Сброс
    while(DMA2_Stream0->CR & DMA_SxCR_EN);
   
    DMA2_Stream0->PAR  = (uint32_t)&ADC->CDR;       // Общий регистр данных АЦП
    DMA2_Stream0->M0AR = (uint32_t)adc_buffer;      // В массив
    DMA2_Stream0->NDTR = 3;                         // 3 пересылки по 32 бита
   
    // CH0, PSIZE=32, MSIZE=32, MINC (инкремент памяти), CIRC (кольцо), EN
    DMA2_Stream0->CR = (0 << 25) | (2 << 13) | (2 << 11) |
                       DMA_SxCR_MINC | DMA_SxCR_CIRC | DMA_SxCR_EN;

    // 4. ADC Common (CCR): Triple Interleaved, Delay 5 cycles, DMA Mode 1
    ADC->CCR = (0x07 << 0) | (5 << 8) | (1 << 14);

    // 5. Настройка каналов и времени выборки (S&H = 3 цикла)
    ADC1->SQR3 = ADC2->SQR3 = ADC3->SQR3 = 0;      // Все на PA0 (CH0)
    ADC1->SMPR2 = ADC2->SMPR2 = ADC3->SMPR2 = 0;   // 3 цикла S&H

    // 6. Запуск АЦП: ADON=1, CONT=1, DDS=1 (DMA запрос на каждое событие)
    ADC1->CR2 |= ADC_CR2_ADON | ADC_CR2_CONT | ADC_CR2_DDS;
    ADC2->CR2 |= ADC_CR2_ADON | ADC_CR2_CONT;
    ADC3->CR2 |= ADC_CR2_ADON | ADC_CR2_CONT;

    // 7. Программный старт (только Master)
    ADC1->CR2 |= ADC_CR2_SWSTART;
}


И не забывайте, у ADC входное "сопротивление" и так не особо высокоомное, а с х3 будет еще в 3 раза меньше. Перед ним надо ставить низкоомный выход ОУ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошу помощи
СообщениеДобавлено: Чт дек 25, 2025 22:03:45 
Встал на лапы

Зарегистрирован: Ср май 16, 2012 20:44:38
Сообщений: 123
Откуда: Харків-Україна.
Рейтинг сообщения: 0
перешел на два АЦП. В общем регистре одно число.Регистр 32 разряда , должно кидать 2 байта , я поставил разрешение АЦП 8 бит. Кидает один байт, АЦП 2 не включается. У меня вопрос, это считаем или не считаем последовательностью. Если считаем то у меня одна последовательность, 2 два канала и врегистре нужно отоображать номера канали на первом месте 13 канал АЦП 1 и на втором месте тоже 13 канал но АЦП 2 или этот режим просто толкает АЦП 1 , а оно подхватывает АЦП2, а на последовательности начхать.Пробовал и так , один байт меряет правильно, задержи пробовал менял . одно данное в общем регистре.ДА еще один момент, ЦАП на вход кидал три АЦП садят его , измерения неправильные , но это суть не меняет , сейчас просто меряю 3,3 вольта на плате это в регистре 255 , максимальное число при байте, но если с АЦП показания при одном правильные а при трех заниженые, что то оно пытается померять, но нули в регистре на месте второго байта блин.Завтра возьму другой камень ,407, на 429 там просто экран очень удобно выводить цифры, на 407 тоже прикручен экран буквенно цифровой. и для 407 есть готовый в CooCоse проект, 429 он не понимает , жаль все проекты в этой IDE заводятся с пол оборота, но китайцы бросили поддержку, новы платы не идут, можно запустить но там мороки, во всех исходниках надо подметать.Прект в коксе на SPL, 429 я на регистрах пытаюсь люблю я просто на регистрах.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прошу помощи
СообщениеДобавлено: Вс дек 28, 2025 16:47:48 
Встал на лапы

Зарегистрирован: Ср май 16, 2012 20:44:38
Сообщений: 123
Откуда: Харків-Україна.
Рейтинг сообщения: 0
Нигде не пишут, но данные в общем регистре появляются только если включить ДМА. а так каждый АЦП кидает в свой. ПРи MULTI 111 у меня вообще нихрена не меряет, пробую без ДМА, при 110 это шесть в MULTI для парного режима меряют, каждый АЦП кидает в свой регистр, в примере на GITHube тоже стоит 110 то есть 6 для парного режима в MULTI. Получается на длину начхать если ноль, L =0,тогда каналы оба 13, так я и ставлю для каждого АЦП 13 канал. Что то меряет но подаю с таймера меандр , у меня тут типа развертки на экране, триггер программный, Но на экране меандром и не пахнет, короче, соединяю выход таймера с АЦП, запоминаю 100 отсчетов в память потом кидаю на экран, пять шесть периодов меандр, потом ерунда какая то , ноль периодов 20 , потом не меандр а хаос.


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


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

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


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