[Решено] Самый быстрый АЦП (анализа) - как ?

Акронис
Солнце 01 октября 2017 г. 9:03
Привет.
Используя библиотеку - STM32Generic
Правление - STM32F746G -Disco 

Мне нужно быстро прочитать аналоговый сигнал (ADC).
Я написал программу, но скорость медленная 25 мкс .
Как сделать то же самое, но как можно быстрее.

https: // github.com/danieleff/stm32generic


int intarray [10000];
pinmode (a3, input);


для (int a = 0; a < 10000; A ++)
{
Intarray [a] = анализа (A3); // медленное 25 мкс
}

Ахулл
Солнце 01 октября 2017 г. 9:51
Вы правы, анализа не оптимизируется для скорости, однако с помощью DMA и двойного канала режима вы можете получить около 1 миллиона образцов в секунду в секунду.

Прочтите через нить свиньи-o-scope ниже, чтобы получить представление о том, как это было достигнуто.

http: // stm32duino.com/viewtopic.PHP?F = 19&t = 107

Кодовая база здесь -> https: // github.com/pingumacpenguin/stm32-o-scope/wiki

В первом потоке, которое я связал, есть много улучшений, но код GitHub опробован и протестирован, так что вы можете использовать это в качестве основы для того, что вы пытаетесь сделать.

Акронис
Солнце 01 октября 2017 г. 10:07
только начинаю изучать АЦП, и мне трудно понять.
Не могли бы вы исправить мой код для максимальной производительности ?
Я был бы очень благодарен

Rogerclark
Солнце 01 октября 2017 г. 11:13
Одна из причин, по которой аналоговое чтение медленно заключается в том, что нет выделенных аналоговых контактов, поэтому подумайте, что вызов сначала устанавливает режим PIN.

Наверное, лучшее, что можно сделать, это посмотреть в ядре для аналоговой функции чтения и посмотреть, как это называется внутренняя либмапл, чтобы на самом деле читать из АЦП

Или, как и любой, говорит Энди.... Читайте с помощью DMA

Посмотрите на код свиньи Энди

Дэнниф
Солнце 01 октября 2017 г. 11:42
Но скорость медленная 25 мкс . Самый большой водитель - это прокалы. Перейдите в таблицу данных и выберите максимально возможных прокалеров для ваших часов и кода как таковой.

Я думаю, что я сделал здесь некоторый сравнительный анализ, когда написал Armduino (http: // stm32duino.com/viewtopic.PHP?F = 42&t = 2131, С ссылками на фактический код, чтобы вы могли увидеть реализацию), а АЦП - это с точки зрения нас.

После этого это так, как вы получаете доступ к данным. Самый быстрый АЦП приходит от бесплатного модуля, но остальная часть вашего кода должна быть там.

Mrburnette
Солнце 01 октября 2017 г. 14:26
[Акронис - Солнце 01 октября 2017 г. 10:07] - только начинаю изучать АЦП, и мне трудно понять.
Не могли бы вы исправить мой код для максимальной производительности ?
Я был бы очень благодарен
Конечно, вы шутите?

Форумы должны помочь вам создать собственное решение и тем самым помочь вам понять и развивать уверенность. Были ли вы вручную рабочий код, не было бы обучения... Просто включить чужое решение.

Луча

Александрос
Пн, 02 октября 2017 г., 19:52
Поздравляю проект O Scope.

Мне удается получить чтения АЦП из аналога в PIN -коде.

Есть ли другой пример 2 аналоговых двойных показаний АЦП??

Арпрос
Чт 12 октября 2017 г., 17:31
[Ахулл - Солнце 01 октября 2017 г. 9:51 утра] - Вы правы, анализа не оптимизируется для скорости, однако с помощью DMA и двойного канала режима вы можете получить около 1 миллиона образцов в секунду в секунду.
Верно, но я хочу отметить, что вам на самом деле не нужно использовать DMA. Если вы используете двухканальный переоцененный режим, обычный процессор достаточно быстрый, чтобы привлекать данные на максимальной скорости без DMA, а именно 0.584 микросекунд на образец. В конце концов, 0.584 микросекунд - 123 тактовых цикла при 72 МГц, что составляет достаточно времени, чтобы потянуть чтение, увеличить индекс и т. Д.

Конечно, DMA круто, и имеет преимущество, которое прерывает, не будет проблемой, но просто использование процессора имеет более низкую кривую обучения.

Для простого кода, управляемого процессором, см https: // github.com/arpruss/stm32scope-e ... /объем.Ино

Акронис
Пт 13 октября 2017 г. 14:01
Привет.
Могу ли я использовать этот код на плате STM32F4* - F7* Библиотека https: // github.com/danieleff/stm32generic ?

Акронис
Сб 14 октября 2017 г. 2:19
adc_set_sample_rate (adc1, adc_smpr_1_5); // ADC_SMPR_13_5, ADC_SMPR_1_5

На борту STM32F103 все это хорошо компилируется




Встроенная ошибка STM32F407

Ошибка: не может преобразовать 'const adc_dev' в 'const adc_dev*' для аргумента '1' в 'void adc_set_sample_rate (const adc_dev*, adc_smp_rate)'

adc_set_sample_rate (adc1, adc_smpr_1_5); // ADC_SMPR_13_5, ADC_SMPR_1_5


Пожалуйста, скажите мне, как сделать это должным образом на доске STM32F4

Арпрос
Ср 18 октября 2017 г., 19:30
Может быть, просто положите Ampersand перед ADC1?

Акронис
Пн 23 октября 2017 г. 15:03
Код https: // github.com/arpruss/stm32scope-e ... /объем.Ино Работает на F4 Black !

Огромная благодарность Стивестронг за помощь в адаптации этого примера к F407Vet6 !

ViewTopic.PHP?F = 39&P = 36083#P35918

Chismicro
Пн 23 октября 2017 г. 15:37
Привет, Арконис,
Спасибо, что вы сделали свой код открытым исходным кодом.
Наверное, было бы неплохо, если бы вы добавили в readme, какую структуру Arduino вы использовали, и небольшая картина установки.