Хочу запустить три 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
Открываете 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.
Нашел на Github .Там он берет 0 поток и 0 канал.Это привязяно к АЦП1. И общий регистр.А третий ацп совсем на другом канале.Скачал его main.c CUB начал ругаться.АЦП2 на четвертом канале,АЦП 3 на втором канале, поток один 0.Не пойму, как ацп если указан другой канал будут кидать с общего регистра в DMA
Регистр данных один на 3 ADC, соответственно и DMA канал тоже один.
Да регистр общий, в ДМА его ставлю в настройки , канал АЦП один 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, увеличил тайминг .....нифига.
допустим что мы ставим в регистр 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, но тут, по идее, без разницы.
В дуальном режиме свойства второго 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];
И не забывайте, у ADC входное "сопротивление" и так не особо высокоомное, а с х3 будет еще в 3 раза меньше. Перед ним надо ставить низкоомный выход ОУ.
перешел на два АЦП. В общем регистре одно число.Регистр 32 разряда , должно кидать 2 байта , я поставил разрешение АЦП 8 бит. Кидает один байт, АЦП 2 не включается. У меня вопрос, это считаем или не считаем последовательностью. Если считаем то у меня одна последовательность, 2 два канала и врегистре нужно отоображать номера канали на первом месте 13 канал АЦП 1 и на втором месте тоже 13 канал но АЦП 2 или этот режим просто толкает АЦП 1 , а оно подхватывает АЦП2, а на последовательности начхать.Пробовал и так , один байт меряет правильно, задержи пробовал менял . одно данное в общем регистре.ДА еще один момент, ЦАП на вход кидал три АЦП садят его , измерения неправильные , но это суть не меняет , сейчас просто меряю 3,3 вольта на плате это в регистре 255 , максимальное число при байте, но если с АЦП показания при одном правильные а при трех заниженые, что то оно пытается померять, но нули в регистре на месте второго байта блин.Завтра возьму другой камень ,407, на 429 там просто экран очень удобно выводить цифры, на 407 тоже прикручен экран буквенно цифровой. и для 407 есть готовый в CooCоse проект, 429 он не понимает , жаль все проекты в этой IDE заводятся с пол оборота, но китайцы бросили поддержку, новы платы не идут, можно запустить но там мороки, во всех исходниках надо подметать.Прект в коксе на SPL, 429 я на регистрах пытаюсь люблю я просто на регистрах.
Нигде не пишут, но данные в общем регистре появляются только если включить ДМА. а так каждый АЦП кидает в свой. ПРи MULTI 111 у меня вообще нихрена не меряет, пробую без ДМА, при 110 это шесть в MULTI для парного режима меряют, каждый АЦП кидает в свой регистр, в примере на GITHube тоже стоит 110 то есть 6 для парного режима в MULTI. Получается на длину начхать если ноль, L =0,тогда каналы оба 13, так я и ставлю для каждого АЦП 13 канал. Что то меряет но подаю с таймера меандр , у меня тут типа развертки на экране, триггер программный, Но на экране меандром и не пахнет, короче, соединяю выход таймера с АЦП, запоминаю 100 отсчетов в память потом кидаю на экран, пять шесть периодов меандр, потом ерунда какая то , ноль периодов 20 , потом не меандр а хаос.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения