STM32 ADC. Основные приемы работы. Примеры кода и настройки.
HTML-код
- Опубликовано: 11 дек 2024
- Основные настройки STM32 ADC. Коротко и по делу, как включить, как настроить использовать. Примеры кода.
Канал в телеграмм - t.me/vladimir_...
Канал Яндекс.Дзен - zen.yandex.ru/...
Канал на RuTube - rutube.ru/chan...
Канал на RUclips - / vladimirmedintsev
------------------------------------------
Если вы хотите поддержать автора канала номер карты Сбер:
2202-2023-2480-4008
------------------------------------------
Смотрю 90% ваших видео с мобильного (5,5 дюймов 1080р амолед) и все отлично видно!
Спасибо большое. Очень полезное видео. Хотелось бы больше информации для начинающих, но с Вашей позицией я знаком по этому поводу.
Нормально все видно, продолжайте снимать видео, очень интересно
По идее так по таймеру будет срабатывать АЦП раз в 2 секунды, только первое срабатывание после включения или перезагрузки микроконтроллера произойдет через 1 секунду. Это связано с тем, что Toggle on match меняет состояние с LOW на HIGH и наоборот при сравнении со значением в Pulse. Если разбирать Ваш случай, то при включении МК таймер начнет считать до 1000, затем он сбросится и сравняется со значением в Pulse (0), в этот момент произойдет переключения сигнала с LOW на HIGH, что вызовет наше событие (АЦП) и мы получим значение через секунду, потом таймер снова досчитает до 1000 (пройдет 1 секунда), сбросится и произойдет переключение сигнала, но уже с высокого уровня (HIGH) на низкий (LOW), что уже не вызывает наше событие, поэтому мы не получим значение с АЦП через секунду, далее счетчик снова отсчитывает до 1000 и при сбрасывании меняет уровень сигнала уже с LOW на HIGH, что нам и нужно для вызова АЦП, затем данный цикл повторяется. Поэтому получать данные с АЦП мы будем раз в 2 секунды в этом случае.
супер! хоть и хорошо знаю ацп, но с удовольствием посмотрел. спасибо!
Спасибо за урок, всё классно и понятно.👍 Я без проблем вижу всё на экране монитора. Всех Вам благ.
Спасибо за видео! С экрана смартфона всё видно.
Спасибо очень помогло. Вот-бы такое видео для встроенного датчика температуры - stm32u585
Мужик, ты крут!
Нормально видно на телефоне, только качество на максимум нужно. Видео для меня полезно, спасибо!
Нормальное поучительное видео. Я много раз уже обращался к вашим роликам, когда разбираться сильно не хочется а сделать надо.
Спасибо.
Нормально все видно, 720р на j7 видно все прекрасно)
Спасибо. Досмотрел до конца!
Спасибо за видео. А по поводу разрешения захвата экрана, то мне кажется, что нужно снимать под FullHD. Поясню. Если я посмотрел видео на мобильном устройстве (как говорится, на ходу) и содержание меня заинтересовало, то я обязательно добавлю его себе в закладки, чтобы посмотреть его позже на стационарном ПК в нормальном разрешении.
В стандартной винде есть инструмент лупа, можно её использовать. А вообще пора вам помощника искать для монтажа )
За видео спасибо )
Был бы с этого доход хоть какой-нибудь было бы время и на монтаж. А так это хрупкий балланс между развлечением и хобби. Я вообще задумываюсь сбежать в англоязычный сегмент.
@@VladimirMedintsev зачем сбегать? Можно же между видосиками про STM выкладывать видео про различные блюда. Сегмент домохозяек очень большой и подписоты много будет. Почти все каналы такой тематики МК набирают подписчиков не более 10 тыс.
@@VladimirMedintsev Не уходите пожалуйста :) Еще хотел сказать, что в этот раз у Вас, тьфу-тьфу не сглазить, вообще очень четкое и информационно наполненное (в смысле достаточно быстро говорили) видео вышло. У Вас вообще и до этого все видео очень и очень неплохие.
@@ajdarseidzade688 Да блин это все по ночам делается, иногда просто не получается быстро говорить. Я для такого всем советую в настройках просто включить ускоренный просмотр видео. И отрегулировать скорость как кому нравится.
Владимир, за библиотеку 3F 1.11 отдельное Спасибо.
Все видно спасибо делайте в куб пожалуйста
Какой системной литературы много на эту тему? Я по стм32 нашел только какие-то слайдовые обзоры, как на презентации, много AN и похожей документации на сайте ST, но она написана для людей которые уже умеют программировать, я бы не сказал что такое подходит новичкам. Скажите название литературы которая относиться к системной на эту тему?
Спасибо
Делители в таймерах надо уменьшать на 1.Т.е., не 8000, а 7999. Не 1000, а 999. Тогда всё будет точно.
Я и в массивах про нулевой элемент вспоминаю только когда отлаживать начинаю. А все потому что нету в наших домах нулевого этажа. Во всем правительство виновато.
@@VladimirMedintsev Вот нигадяи, а. :-)
Владимир спасибо. Подскажите stm32f4 два датчика темпераптуры (100к). Хочу делать по 6 замеров - > скидывать в буфер
1раз в секунду по 6 непрерывных замеров (потом /6 = усредняю). делаю PID по вашему видео
volatile uint16_t adc_buffer[6][2]; // [6 замеров] для [2х датчиков] через DMA, но без прерывания и таймера. Лучше инжекторный или ошибаюсь? и про настройку что за чем - PORT. DMA. ADC ?? (беру готовые примеры у всех по разному)
в инжект каналах 4 дата регистров 4 канала можно настроить.И управление 4 шимами
Можно монтировать видео во всяких SonyVegas, там можно довольно быстро увеличить нужный фрагмент, кроме того, можно записывать отдельный участок и у некоторых записывающих экран программ есть функция увеличения. Но это будет отнимать ваше время, к сожалению. Но самое главное это конечно нормальный монитор. Храни судьба тех людей, кому хватает одного монитора и тем более ноутбучного.
ПРИВЕТ! DAC к таймеру привязывать аналогично? мне нужно сделать отсчет от большего до нуля в течении времени.
Здравствуйте, Владимир. С огромным интересом смотрю Ваш канал. Очень интересует вопрос создания электронных весов на базе STM32. Приобрел у китайцев на Али комплект (тензодатчик 10 кг + АЦП hx711) Нужно прикрутить эту связку к STM32, а результат вывести на обычный LCD1602. Но знаний катастрофически не хватает. Думаю такой проект заинтересовал бы многих Ваших подписчиков. Желательно в среде разработки CubeIDE.
Благодарю вас за идею. Это я всегда с удовольствием. Но чтобы было интересно заниматься каким-то проектом нужно как минимум иметь все на столе, а тензодатчиков у меня нету. И микросхемки для них тоже.
в даташите на stm32f0 написано, что макс. частота сэмплирования 1МГц. а в реальной жизни с 1000 замеров в секунду на двух каналах справится как думаете?
Конечно справится. Куда она денется. Главное пнуть посильнее.
@@VladimirMedintsev спасибо! будем значит пытать суперконденсатор импульсной зарядкой. видео про токовые мониторы как раз в тему пришлось.
Дядь Вов, тебе и всем, можно стлинком работать хорошим шнуром, полметра, только в экране, в комплекте идет обычно см 15 шинка, 30 см сделал в экране, работает, хочу сейчас 50 см сделать, отпишусь о результатах
Хорошая идея, спасибо огромное.
@@VladimirMedintsev попробовал, метр работает, просто в экране без земли, кабель типа Мкэш в экране попробовал сейчас, работает
Еще раз большое спасибо. Меня этот вопрос всегда интересовал.
@@VladimirMedintsev дядь Вов, смотрю твои видео и учусь, только с Атмела на Стм перешел, это тебе спасибо за познавательное видео, делай еще 😉
я сделал шнур пол метра без экрана и норм вроде работает)
Доброго времени суток. Владимир, какую литературу почитать по stm32?
Все интересное и необходимое на сайте st.com или вот тут я про хорошую книгу рассказывал ruclips.net/video/dSinwjV1vVQ/видео.html
- пасиба за видео, дай Бог вам здоровья. Подскажите, у вас вначале крупным планом PCB-шка с энкодером, подскажите, какие есть хорошие и качественные энкодеры, с плавным хорошим ходом. Эти обычные дешевые китайские, они все какие-то деревянные, или туго идут или почти не чувствуется трещётки. Имею в виду, если вдруг вы знаете типы энкодеров, доступные к покупке на e-Bay или Ali-шке, такие как в измерительных приборах стоят. Спасибо.
Покупка это всегда в каком-то роде лотерея. Нельзя сказать заранее что вот этот товар особо хорош. Я покупаю много и от партии к партии все сильно меняется.
Здравствуйте Владимир !!! Пересмотрел ещё раз видео про АЦП и имею ряд вопросов. Описание задачи: Я выбрал для своего устройства процессор STM32L151VDT6. Одна из причин - мне необходимо измерять сопротивление термопреобразователя Pt100 по четырехпроводной схеме. А у процессоров с буквой V (100 ног), помимо VDDA и VSSА есть еще на отдельных ногах VREF+ и VREF-. Ну и я рассуждал так - берем опорный резистор (200 Ом 25ppm) , подключаем его между REF+ и REF-, REF- на землю. Последовательно с опорным подключаем измеряемый резистор и верхний конец его запитываем от Vcc (оно же- VDDA). Т.е. Получаем цепь Vcc - Rизм - Rопорн-GND. По этой цепи течет ток и мы имеем падение напряжения на Rопорн - подаем его на REF+ и REF-, а также имеем падение напряжения на Rизм - подаем его на IN0 и IN1. И все красиво. Измеряем разницу между IN0 и IN1, относительно опоры REF+ и REF-. А вопрос вот в чем - могу ли я при этом измерить, например, напряжение опорного источника микропроцессора (Vrefint) для вычисления напряжения питания, например? Ведь опорой для АЦП теперь у меня будет не напряжение питания, а падение напряжения на опорном резисторе. На Nucleo мне эту ситуацию проработать не удалось. Зарание скажу - я развел на плате еще и AD7790 так что измерение термометра могу перенести туда. Но все, если бы можно было бы не паять AD7790 - всё ж комплектация будет дешевле.
Если кратко то vrefint подключен к одному из каналов вашего АЦП, вы можете считать это значение. Смотрите в кубе.
@@VladimirMedintsev Как Vrefint считать я понимаю. Как вычислить напряжение питания не понимаю. Если бы у меня REF+ было бы подключено к питанию - тогда понятно. Вся шкала 4095 - это напряжение питания, код полученный с Vrefint - 1,224В. Пропорция. Но у меня REF+ подключен не к питанию, а к опорному резистору. И падение напряжения на нем будет меняться от температуры т.к. будет меняться сопротивление измеряемого термодатчика, а значи - и ток. Вот если бы можно было бы, например, программно переключать опору АЦП с REF+ на VDDA - тогда бы получилось бы.
@@МихаилТиунов-с7д Простите, с мобильного в командировке комментарии второго уровня не видно. В референс мануале есть формула как это пересчитывать, я сейчас с мобильного устройства ее не найду.
@@VladimirMedintsev Спасибо Владимир! Собственно я сам допер. Но, часто так бывает, что решение проблемы приходит в тот момент, когда пытаешься объяснить её кому то другому. Так что - спасибо что вы есть!!!
Ну, недостатки мобильной жизни и хронических командировок. Раньше ответить не мог, я догадывался что там есть комментарий, а панель управления каналом его не отображала.
По поводу видеть на экранчке, там в настройках вроде есть font large. Все никак не складывается в голове, установил в настройках 4 ножки на АЦП, и как к каждой обращатся аля analogread на ардуино. Там какая то хитрая структура hadc
Тут нет analogread это не ардуино.
@@VladimirMedintsev как определить с какого канала из 4х получены значения без инжектирования и dma?
Каналы перебираются последовательно в том порядке, в котором вы их настраиваете. Для этого есть регистры ADC_SQR1… ADC_SQR3. Считайте сколько раз опросили и узнаете какой сейчас. Если это не устраивает, то инжектируйте.
Добрый день Владимир. Не читал все комментарии, был ли такой вопрос: можно ли запускать тайм-аут опроса АЦП (функция HAL_ADC_PollForConversion(...)) с большей скоростью, т.е. не в миллисекундах, а в микро или наносекундах? Ведь частота тактирования и преобразования АЦП не такие низкие...
Есть много способов запустить преобразования с требуемой частотой. Посмотрите в сторону DMA.
помогите с вопросом новичку) плата bluepill, затык на примере с прерыванием. сделал как на видео, но переменная val не меняется, хотя в отладчике во вкладке регистров SFRs регистр ADC-DR-DATA меняется корректно
разобрался сам. частота МК и частота отладчика не совпадали. может коллеге-новичку пригодится данная информация
Добрий вечер, а можно ли скачять куб без регистрации. У мене не получаетса зарегистрироватса на "ст.ком"
Добрый вечер! Обновление с версией 1.11.1 глючное только для STM32F3? Для других оно нормально? У меня STM32F0.
Я проверял только на F3 и мы сразу всей компанией откатились в ожидании.
Подскажите пожалуйста, с АЦП приходят какие-то "средние" значения если на пинах ничего нет, я ожидал увидеть там ноль или как у вас минимальные, по факту там от 1000 до 2000, если замыкаю на 3V то все нормально, отображает ~4000
Это нормально.
@@VladimirMedintsev нет ли в таком случае возможности как то это регулировать, тоесть изменение напряжения почувствовать получается, а как быть с обрывом линии? Неужели только дополнительными элементами схемотехникой?
Столкнулся с очередной проблемой. Связана она с тем, что я вынужден на одном устройстве заменить микроконтроллер с STM32L431RCT6 (который убило разницей потенциалов между землями, я об этом писал) на STM32F030R8T6, который оказался под рукой. По ногам всё совпало, программу перетащил. Единственная проблема - у F030 нет инжектированых каналов АЦП. Соответственно - надо переключать каналы самому на лету. У меня их 3 - IN0, IN1, Vref. делаю вот как
if (FL_StatusFlags & ADC_Vref_Status) {
FL_StatusFlags &=~ ADC_Vref_Status;
ADC_Vref += HAL_ADC_GetValue(&hadc); // Считываем код ADC_Vref
HAL_ADC_Stop_IT(&hadc); //Останавливаем
adsConfig.Channel = ADC_CHANNEL_0; // Устанавливаем канал
adsConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
adsConfig.SamplingTime = ADC_SAMPLETIME_13CYCLES_5;
HAL_ADC_ConfigChannel(&hadc, &adsConfig); //Сонфигурируем АЦП
FL_StatusFlags |= ADC_CH0_Status; //Ставим флаг что запустили канал IN0
HAL_ADC_Start_IT(&hadc);
}
На всех каналах возвращает одно и тоже число. Если начинаю с Vref - то это будет Vref. Если начинаю с IN0 - то это будет IN0 и т.д. Не приходилось такое делать ?
вот что говорит первоисточник: It is also mandatory to use the ADC peripheral in DMA mode when we want to perform conversions
of multiple channels using scan mode. Это Ваш случай
@@alexeyjilinsky5926 Ок. Спасибо
Владимир, а приходилось ли Вам использовать встроенный датчик температуры контроллера?
Приходилось, а что такого в нем необычного?
@@VladimirMedintsev Да что-то не получается у меня с пересчётом показаний. Имеется ли какая-нибудь библиотека для него? И как производится калибровка, ведь он имеет довольно большую абсолютную погрешность?
@@ЮрийКильдюшкин-к2к нет, никакой библиотеки для этого не требуется. Если у вас не получается прочитать значения с этого датчика, значит вы не разобрались с АЦП. Надо знания подтянуть. Ну а погрешность да, там особой точности нет, о чем и сказано в даташите.
А как мне замедлить значение что бы цифры не менялись быстро.?на дисплее?
Фильтрация лучший выход.
@@VladimirMedintsev Программная или аппаратная?.Ну допустим у меня есть датчик тока .Ток меняется мгновенно. На дисплее мы значения не увидим как нужно.А мне для срабатывания нужны мгновенные значения.Если программная .То можете ссылку ?
А откуда вы узнали что то или иное так. Почему таймер4й а не 7й... Есть какие то первоисточники?
Да, есть. Этот первоисточник называется Reference Manual. Он доступен на сайте производителя микроконтроллеров. Вы можете его абсолютно свободно скачать и изучить.
На злобу дня хотел спросить. Недавно обновил CubeIDE до версии 1.1.0. Она потребовала обновить прошивку отладчика до версии 34 и все... Теперь отладчик отказывается работать с CubeIDE. Пишет что не может проверить ST-линк девайс. А утилитой флешера все нормально прошивается. Кто нибудь с этим столкнулся уже? Или я один такой счастливчик? С кейлом еще не пробовал если что.
Там в настройках отладчика есть 3 варианта устройства. Я далеко от компьютера не подскажу название. Выберите устройство следующее за segger. У меня глючило пока там не пошурудил.
@@VladimirMedintsev Я так понимаю речь об openocd? Он тоже ругается с текстом: UNEXPECTED idcode: 0x2ba01477 . Я очень сильно подозреваю, что индусы впилили проверку на валидность самого отлдачика и без "правильного" серийного номера, оно работать не захочет...
Т.е. я так понимаю вы до самого конца ролик досмотрели и увидели мое ворчание по поводу обновления...
@@VladimirMedintsev nfo : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 8000 kHz
adapter_nsrst_delay: 100
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 8000 kHz
Info : STLINK v2 JTAG v34 API v2 SWIM v7 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.232783
Info : Unable to match requested speed 8000 kHz, using 4000 kHz
Info : Stlink adapter speed set to 4000 kHz
Warn : UNEXPECTED idcode: 0x2ba01477
Error: expected 1 of 1: 0x1ba01477
@@VladimirMedintsev нет, я пока еще в процессе просмотра =) Спасибо, кстати, за видео. Познавательно.
А можно писать в регисрах.
Можно, никто не возражает. Если вам удобнее пишите в регистрах.
@@VladimirMedintsevвы можете ответить на два вопроса? 1 какой компелятор лчше использовать.И почему нельзя обойтись без куба кортекс м3 стм32 получается почти всё начинаю с кортекс м4 прерывание по тамеру -ноль ацп -ноль. в ацп я согласен не все регистры похожы в таймерах один в один только 2 и 5 32 битный cmsis лучше но информации и примеров на кортексе 4 и дальше почти нет а если и есть то не правельная это не авр
@@ivanrusev2270 Да, пожалуйста:
1. В принципе для начинающего нет разницы какой конкретно компилятор использовать. У них, разумеется есть отличия, но для начинающих эти отличия не играют никакой роли. Ну а если серьезно, то мне не очень нравится код создаваемый GCC, хотя это придирки.
2. Без куба обойтись можно, но не имеет смысла. С использованием куба повышается производительность труда. Там реально за несколько минут получить готовый проект который нормально собирается и компилируется, а потом его (при необходимости) можно оптимизировать. Если это необходимо. А без использования куба время сборки заготовки для проекта возрастает в разы и риск ошибок также. Т.е. все дело в целесообразности.
@@VladimirMedintsev получается что на cmsis нет смысла тратить время я 4 года програмировал avr учился и всё на смарку тут столько регистров но самое главное что нет примеров на другие кортексы
@@ivanrusev2270 Все немного не так как вы себе это нарисовали. Давайте немного по другому.
Что все ждут от программиста МК? Разумеется работающего кода и этот код нужен не через год, он нужен завтра. Т.к. продукт надо продавать. Для ускорения разработки созданы специальные инструменты. Один из которых STM32CubeMX он позволяет за считанные минуты создать под-основу будущего проекта, грамотно подключить необходимые библиотеки, настроить периферию микроконтроллера, настроить тактирование и сформировать проект под выбранную вами IDE. Это реально хорошо экономит время и это реально работает.
Далее программист должен написать код и "оживить" устройство. При этом он может использовать библиотеку HAL или LL в зависимости от того, какой уровень ему необходим. Этого вполне достаточно чтобы написать хороший и работающий проект. Однако, бывают ситуации, когда требуется опуститься на самый низкий уровень. В этом случае надо помнить, что библиотека CMSIS уже (всегда) подключена к проекту и вы в любой момент можете ее использовать. Т.е. просто взять и начать использовать данные там определения.
По поводу "все на смарку" ну если вы так реально считаете, то видимо ничему за 4 года так и не научились. Потому, что главное это четко понимать написанное на языке Си, если это есть, то освоение какой-либо библиотеки это всего-лишь просмотреть ее код, найти интересующие вас функции и их попробовать.
По поводу того "нет примеров на другие кортексы" вы наверное издеваетесь? Вместе с STM32CubeMX вам разработчик дает СОТНИ примеров на всю доступную периферию, прочитать, взять куски кода и использовать.
Замислився: не знаю чим регістри в адресному просторі пам'яті відрізняються від DMA (буду розбиратися, дякую за натяк).
Изначально DMA означало передачу данных не процом, а отдельным контроллером.
Почему нельзя в 4К писать видосы, ну или в 2К? Судя по паршивому качество предположу, что видос писался в 720.
Видос писался в HD качестве. А писать в 2 или 4К у меня нет возможности. Я делаю это на ноутбуке возрастом в 6 лет.
и смысл писать это в 2к? не все же смотрят это на диагонали 1,5м телевизоре... а представляете что получится с этим видео на мобильном телефоне? - Ютюб на столько ухудшит качество что при 720 буквы превратятся в мутные пятнышки
@@highvolthome Да ладно, что там ухудшится, каждый выберет в настройках нужное разрешение, хотя больше чем full hd, для записи с экрана. смысла нет.
забейте на куб иде. Зачем он вообще нужен если есть keil.
Ну как минимум не нарушать законодательство. Для дома и для семьи можно использовать что угодно, а с определенного уровня приходится задумываться и о лицензиях. Также, иногда это бывает требованием заказчика к коду, чтобы все было лицензионненько. В моей практике было что заказчик (ну правда не Российский) просил подтвердить лицензионную чистоту автокада.
@@VladimirMedintsev мне кажется с определенного уровня уже не стоит вопрос в лицензии - если проект "взрослый" и особенно если это военка, то тем более. В целом насчет законодательства согласен. но с другой стороны на этом канале контент воспринимается как образовательный и лично я привык к подаче в кейл, поскольку сам в нем работаю. Но безусловно cube ide понравился черной темой) я вообще ненавижу белые темы, от них глаза устают. В целом мне кажется кейл не стоит тех денег которые за него хотят. Вот если бы в Visual studio прикрутили С с intellisens-ом и возможностью прямо из оболочки так же отлаживать мк-она бы стоила 4к евро, но не кейл.
Уважаемый ты удивишься но попробуй вбить stm32 visual studio. Там есть плагин VisualGDB лицензия дешевая, ителисцайнс о да просто песня с середины команду набираешь и все круто. Но на работе заставляют мучатся в CubeIDE лицензионненько хотять.
Hal это зло
Доказать сумеете?
@@VladimirMedintsev 1. Если какие проблемы ниже уровнях hal, ты подвиснешь изучая все уровни, т.к и не знаешь как это работет и какие регистры и за что отвечает. Это что то типа ардуино.. Я бы такого программиста не взял на работу.
@@1975nacgul прям потеря века :)