Как снять данные с нескольких аналоговых пинов быстро и точно?
Контроллер STM32F0.
устройство- электронные барабаны.
есть несколько пьезодатчиков, с которых нужно с как можно бОльшим разрешением снимать показания.
в настоящее время контроллер отказывается отлавливать промежуточные значения показаний пьезодатчиков (контроллер понимает только максимальное, иногда среднее и самое маленькое) и как следствие на выходе получается максимум три значения "велосити" - силы удара по датчику (датчик исправен и обладает свойством выдавать весь диапазон велосити в микроконтроллер) также присутствуют другие несовпадения с желаемым)))
код был скопипасчен с подобного устройства, но на кнопках и переделан под пьезо-датчики без опыта и наугад и в настоящее время недоступен.
подскажите ключевые моменты для реализации быстрого, точного, одновременного с нескольких пинов съема сигнала с АЦП STM32F0
STM32F0 имеет DMA для ADC. Соответственно, все что вам нужно - это правильно настроить эту связку и запустить ADC в непрерывном режиме. ADC будет проводить измерения как можно быстрее, а DMA будет складывать эти измерения в память. Может так оказаться, что для вас это будет даже слишком быстро, ибо ADC в 12битном режиме может выдавать данные с частотой вплоть до мегагерца.
получается, что в "массиве" "оперативки" dma будет очень быстро по-кругу записывать данные из ацп.
мне нужно отправлять данные дальше (по usb-midi) только если произошел удар по датчику- как это реализовать?- анализируя алгоритмами "массив из оперативки" и отправляя данные только если алгоритм обнаружил "всплеск"?
есть ли способ подключить датчик, выставить "уровень нуля" для ацп и отдавать данные только пиковых значений сигнала без использования дополнительных алгоритмических ухищрений? это относится к настройке dma?
получается, что в "массиве" "оперативки" dma будет очень быстро по-кругу записывать данные из ацп.
Не обязательно по кругу. Вы можете настроить DMA так, что бы он присылал прерывание когда достиг конца массива и останавливался (или начинал заполнять второй массив). У вас будет время чтобы обработать данные и запустить DMA снова.
есть ли способ подключить датчик, выставить "уровень нуля" для ацп и отдавать данные только пиковых значений сигнала без использования дополнительных алгоритмических ухищрений?
Это называется "аналоговый компаратор". На вашем чипе его скорее всего нет. Тут можно либо обойтись внешним операционными усилителем, либо попытаться подать сигнал с вашего пьезодатчика на обычный цифровой вход и активировав прерывание на этом порту. Если в момент удара ваш датчик выдает напряжение которое выше чем Vcc/2, то этого будет достаточно для срабатывания прерывания.
На самом деле подавать сигналы с пьезодатчика прямо на чип - не очень хорошая идея. Лучше использовать ОУ в качестве буфера. Кстати, китайцы продают готовые сборки с ОУ как раз для таких случаев. Там можно настраивать и коэффициент усиления сигнала и уровень срабатывания компаратора.
попытаться подать сигнал с вашего пьезодатчика на обычный цифровой вход и активировав прерывание на этом порту. Если в момент удара ваш датчик выдает напряжение которое выше чем Vcc/2, то этого будет достаточно для срабатывания прерывания.
в этом случае возможно получить только булево значение, показатель того, что сигнал больше или меньше напряжения vcc/2 ?
На самом деле подавать сигналы с пьезодатчика прямо на чип - не очень хорошая идея. Лучше использовать ОУ в качестве буфера. Кстати, китайцы продают готовые сборки с ОУ как раз для таких случаев. Там можно настраивать и коэффициент усиления сигнала и уровень срабатывания компаратора.
параметры на которые указанны для извлечения звука, а не для случая использования в качестве датчика. использовал мультиметр мастек в режиме фиксации пиков напряжения и эти звонки хорошо фиксируют удары различной силы. уже не помню какой диапазон показывал мультиметр, но что то не более 1В, в итоге подключал эти датчики последовательно через 1,10,100 кОм и параллельно с, кажется, стабилизатором или стабилитроном (где то нашел инфу что можно сильным ударом по пьезе вывести из строя ацп и там же совет использовать эту детальку с русским обозначением)
а какие параметры ацп контроллера нужно узнать чтобы подобрать буфер? мельком посмотрел на чипдипе-глаза разбегаются. как я понял можно выбрать микросхему максимум с 4 входами. как рассчитать параметры?
в этом случае возможно получить только булево значение, показатель того, что сигнал больше или меньше напряжения vcc/2 ?
Да. Но если вам все же важна форма сигнала - вы можете подать его и на цифровой и на аналоговый входы. Соответственно в момент прихода прерывания можно будет запустить DMA, но вы не узнаете что было до момента срабатывания прерывания. Но можно решить и эту проблему.
уже не помню какой диапазон показывал мультиметр, но что то не более 1В,
Мультиметр усредняет значения, поэтому пиковое вы не увидите. А оно легко может быть выше трех вольт. Так что стабилитрон тут очень в тему. Вам бы найти хотя бы простенький осциллограф и посмотреть на сигнал. Это вам очень сильно поможет со следующим пунктом - настройкой ОУ.
В качестве примера - вот вам схема которая используется в датчиках касания для 3д принтеров:
Собственно, это как раз то что вам надо - послать сигнал когда пьезодатчик испытывает какие-то нагрузки.
Благодаря использованию подстроечных резисторов можно подобрать нужные параметры для вашего случая.
Но вообще, я бы начал с осциллографа. Он вам сильно поможет при разработке и тестировании всего что связано с аналоговыми схемами. Для ваших задач подойдет практически любой.