U

АЦП STM32 + мультиплексор

7 сообщений в этой теме

Приветствую! Товарищи, требуется консультация по АЦП. Собственно процессор STM32F103RET6. Требуется проводить измерения ряда датчиков. датчики делятся на "быстрые"  - основные датчики двигателя мотора - MAP, MAF и им подобные сенсоры ,  а также медленные  - типа датчики температур (резистивные) и прочие датчики, которые медленно меняют свои значения. Собственно так как одних датчиков температур до 12 штук, то повесить всё напрямую на АЦП не выйдет, то для "медленных" каналов хочу использовать мультиплексор типа 74HC4051. Вопрос в том - как сделать вариант чтения каналов мультиплексора. В стм немного не такой АЦП как в АВР.

В AVR я делал просто  - конструкция switch, и дёргаем один канал АЦП, переключая мультиплексор,  а потом меряем остальные каналы. Для этого вызываю функцию типа adc_read в которой все эти измерения написаны. А вот в STM32, как данное реализовать что то не пойму никак. То есть измерения должны производится так

1)измеряем 12 быстрых каналов через регулярные каналы (используя DMA)

2)измеряем 13й канал к которому подключен мультиплексор ( производим 8 измерений данного канала) каждое измерение соответствует новому каналу мультиплексора) измерение производим через DMA

3)измеряем 14й канал к которому подключен мультиплексор ( производим 8 измерений данного канала) каждое измерение соответствует новому каналу мультиплексора) измерение производим через DMA

Подскажите пожалуйста, как реализовать данный функционал?

 

 

Изменено пользователем ukr823f
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну можно использовать механизм регулярных и инжектированных канлов. Регулярная группа может непрерывно опрашиваться DMA и обрабатываться как независимая группа. А инжектированный канал подключаете к мультиплексору и спокойно читаете его по необходимости, не мешая основной группе. У инжектированных каналов даже свои отдельные регистры данных (до 4-х по моему на один АЦП)

Получится ровно то, что вы задумали. Я кстати использовал мультиплексоры из серии 74HC40хх и весьма успешно. Нормально работают. Только на выходе мультиплексора поставьте повторитель на ОУ. У АЦП STM_ки УВХ емкостное и просит источника с низким выходным импедансом для более точной работы.

почитайте, будет полезно http://leoniv.livejournal.com/194681.html

и не задирайте частоту опроса без необходимости. 71,5 цикла обычно более чем достаточно

Изменено пользователем mail_robot
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, mail_robot сказал:

ну можно использовать механизм регулярных и инжектированных канлов

То есть я например два мультиплексора вешаю на два инжектированных канала и читаю их грубо говоря раз в секунду, а остальные каналы использую как регулярные через ДМА (то есть в автоматическом режиме)?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

совершенно так. Именно для этого и предусмотрены эти каналы. ЕМНИП до 4-х на один АЦП

В принципе можно вашу задачу решить и на регулярных каналах, но не так красиво. Опрос может быть как по запросам DMA, так и по софтовым запросам. Правда это не так быстро и нужен поллинг результатов. Так что это грубый и не очень хороший вариант, хотя и возможный.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А ещё - Напрмиер если в МК два АЦП. ADC0 и ADC1.

Можно например ADC0 - использовать 15 каналов для измерения регулярных каналов, а ADC1 настроить только на инжектированные каналы для работы с мультиплексорами (2-3 штуки).  Итого  - получается мы не будем мешать работать модулей и т.д и код обработки уменьшиться .

Так получиться сделать?

И ещё - часть подключаемых датчиков - 0-5Вольт сигнал выдают (тот же дад и т.д). я так понимаю нужно ставить ОУ в качестве повторителя напряжения и на выходе ОУ ставить резистивный делитель, чтобы преобразовать сигнал из 0-5В в 0-3.3Вольт.

Сейчас стою перед выбором МК. Или STM32F103R8xx использовать с их 3.3вольтами, или Atmega64 с 5 вольтами и более удобным использованием АЦП.

Изменено пользователем ukr823f
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

3
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был востановлен.   Очистить редактор

Загрузка...

  • Сообщения

    • ему "эти" помогали
    • Кто ни будь пробовал для плавного пуска вместо реле что то типа MOC3063 + mac15-10 ?
    • Большое спасибо за ответы дорогие форумчане. Но боюсь на осваивание темы компараторов и транзисторов у меня уйдет куча времени. А его у меня последнее время крайний дефицит. Я прошу вас набросать готовую схемку хоть на транзисторах, хоть на компараторе, большой разницы нет.  Тема почти автомобильная, точнее зажигание двухтактного двигателя скутера 20 лет назад снятого с производства. Оригинальных запчастей на него нет и не будет, приходится прикручивать то что  есть. Беда в том что на этом скутере итальянцы поэксперементировали один раз - получилось достаточно компактно но не надежно и на других моделях такую схему больше нигде не использовали. Сопротивление обмотки датчика положения с которого идет импульс 600 ом, Максимальное число оборотов 14000 об/мин. На оборотах выше 3000 отрицательные импульсы начинают выпрыгивать в плюсовую сторону до 0.5v, соответственно  порог срабатывания надо подобрать 0.7- 0.8v Готов отблагодарить материально за практическую помощь.
    • не думаю, что у кого-то хватит "УМА" на ЭТО Он и даром как изделие никому не нужен!
    • Нарисовал схемы кодера, декодера и регуля. Кодер согласно ссылке Жмяк  ,Согласно усовершенствованию автора добавлены подстроечники, их попробую поменьше купить, а то эти огромные. Три пина слева- для передатчика, воткну пока самый дешевый и наверное самый бородатый китайские передатчик и приемник (комплект на 315Мгц) Декодер по ссылке Жмяк с некоторыми доработками, питание 5В, резистор светодиода 330 Ом и по все выходам поставил токоограничивающие по 300 Ом, вычитал что максимальный ток порта 20мА, с резисторами должен быть не более 16,6мА, вроде запас есть. 4 отдельных пина- для приемника Регулятор по ссылке тык . Плечи моста не симметричные, ибо в одну сторону двигаться будет всяко больше модель, чем в другую, значит на одном плече сэкономим. Мосфеты P и N канальные, в Dpack корпусе(или ТО252, вроде так). Вместо управляющего P-мосфетами полевика воткнул биполярник мелкий(sot23), должно хватить с током коллектора макс 0,15А. Расположение деталей с двух сторон будет, на мосфеты если что удобно будет радиатор приспособить, дорожки может потом еще проводом утолщу, по калькуляторам ширина маловата (раза в два). Резистор на 1кОм не стал оставлять как в исходной схеме, раз на выходе приемника уже стоят токоограничивающие, то счел здесь ненужным еще один (может не прав). И конденсатор по питанию электролит на 100 мкФ, т.к. своего стабилизатора до 5В не предусматриваю на регуле, питание для мк браться будет с приемника, а там уже толстый стаб стоит. Размер плат, кроме регуля, устраивает вполне. Регуль большой получился, но меньше делать не умею, возможны ошибки в правильности разводки плат. Если кого заинтересовало, то вот еще спринт файл плат, там по вкладкам, как в экселе, все три платы. Принципиальные схемы рисовать отдельно лень, все элементы и так подписаны   Передатчик.lay6
    • Если отсоединить шлейф, то всё получится.
    • у меня пока несколько вопросов осталось ) 1. Я заметно убрал вторую гармонику и добился вполне хорошего показателя - от 0,04% THD. Вернулся в начало темы, посмотрел показатели Василича... Не, ну это фантастика. Хотя, возможно, если убрать фон максимально и понять, как убрать 3-ю гармонику, плюс учесть, что искажения вносятся реверсом - обратным корректором и на компе звуковой картой, так как сам комп вносит ооочень много своих шумов, что слышно при подключении наушников в параллель с фоником ко входу ЗК (уши 150 Омов - ну очень чувствительны ко всему). Собственно, вопрос - каковы варианты убрать 3-ю, самую противную, гармонику? Я даже вторую опустил ниже её. И, судя по тому, что в одном канале она ещё в два раза ниже, чем в другом, то можно и ещё опустить. Но третья остаётся как вкопанная. И всегда равна по каналам. И только ну очнеь большое увеличение 2-й начинает поднимать 3-ю. Но после какого-го момента борьбы со второй, 3-я замирает и всё. Что на неё влияет, что можно покрутить? 2. Возможно фон, как он указан выше, и правда есть. Вспомнилось, что я как-то делал оцифровку (https://yadi.sk/d/R2jzx3hc3JokBd) своим корректором и брендовым от АТ: первопресса Wall: И получил такой вот отзыв: Не об это ли лишнем нч-гуле говориться? (( эх (( Вроде бы петель не делаю по земле, придерживаюсь в этом плане рекомендаций Василича (вроде бы )))),а откуда 50Гц в таком количестве, не знаю (   Да, по THD надо будет попробовать 1кгц пустить с компа точно такого же уровня по амплитуде, как и при измерениях в RMAA, и тогда посмотреть на THD осциллографом.