Программирование МК STM32. УРОК 16. HAL. ADC. Regular Channel

  Рет қаралды 27,009

narod stream

narod stream

Күн бұрын

Программирование на СИ в среде Keil μVision.
Пишем код под микроконтроллер STM32F407VG на плате STM32F4DISCOVERY.
Продолжаем работать с библиотекой HAL. Сегодня мы познакомимся с Аналого-цифровым преобразователем, присутствующим в нашем микроконтроллере.
Напишем код для измерения напряжения на ножке порта с помощью использования регулярного канала АЦП в ручном режиме (без использования прерываний).
Для визуализации принятых данных микроконтроллером используем дисплей LCD 20x4
Купить отладочную плату STM32F4-DISCOVERY можно здесь ali.pub/178fif
Дисплей LCD 20x4 можно приобрести тут ali.pub/vk7tl
Навигация по видео:
00:00 Введение
00:27 Очень коротко об АЦП (ADC)
04-20 Настраиваем проект в Cube MX
12-30 Начинаем писать исходный код для реализации АЦП (ADC)
17-23 Находим в документации, какие функции и как использовать для реализации АЦП (ADC)
23-10 Посмотрим схему подключения
26-10 Первый тест кода
27-40 Улучшаем код для читабельности показаний
30-30 Смотрим окончательный результат нашего труда
Рекомендуется также перед просмотром данного урока просмотреть данное видео:
УРОК 1. Установка Keil μVision • Программирование МК ST...
УРОК 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка • Программирование МК ST...
УРОК 6. Библиотека HAL. LCD 20x4. 4-битный режим • Программирование МК ST...
УРОК 7. HAL. LCD 20x4. 4-битный режим. Выводим информацию • Программирование МК ST...
Текстовая версия урока и исходный код здесь narodstream.ru/stm-urok-16-hal...
Группа в контакте club116656325
Группа в Одноклассниках ok.ru/group/52987126153436
Группа в Facebook / 236905359999556
Мой сайт "Программирование МК" narodstream.ru
Форум narodstream.ru/forum
Вы можете помочь проекту:
ЮMoney
yoomoney.ru/to/41001176473465
Webmoney
Z341906933112
Карта Сбербанка (МИР)
2202201799288929
Можно в USDT
1) Сеть:TRC20
Адрес: TBBPFk5Widf1CYvF7Xk5ssKXeiPJHwtMgS
2) Сеть: BSC BNB Smart Chain (BEP20) (комиссия намного меньше)
Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17
3) Сеть: Huobi ECO Chain (HECO) (комиссия еще меньше)
Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17

Пікірлер: 47
@user-ry7wu9pm8k
@user-ry7wu9pm8k 7 жыл бұрын
Хорошие уроки! Благодарю! Когда первый раз изучаешь материал, скорость не нужна) Это не олимпиада, скорость потом нарабатывается. Нужна скорость - на сайте можно прочитать)
@user-hw3kc3qz1r
@user-hw3kc3qz1r 5 жыл бұрын
Огромное Вам спасибо. Все видео получаются очень интересными и информативными.
@user-dx7gh3wu4n
@user-dx7gh3wu4n 8 жыл бұрын
Спасибо за познавательные видео и продолжайте в том же духе.
@narodstream552
@narodstream552 8 жыл бұрын
Спасибо! Своей обратной связью Вы мне этот дух поднимаете!
@user-br6gp7hc4l
@user-br6gp7hc4l 3 ай бұрын
Спасибо
@user-il2bz9qg6u
@user-il2bz9qg6u 4 жыл бұрын
Огромное Вам спасибо.
@DrargonsM
@DrargonsM 8 жыл бұрын
Лайк ! очень интересно!
@narodstream552
@narodstream552 8 жыл бұрын
Спасибо!
@ButerbrodnyBaron
@ButerbrodnyBaron 7 жыл бұрын
с каждым упоминанием предела измерения АЦП предел уменьшается на 1)
@user-sd8gz1jg6z
@user-sd8gz1jg6z 7 жыл бұрын
Подскажите пожалуйста как провести калибровку ацп?
@sergeydemchuk1039
@sergeydemchuk1039 4 жыл бұрын
Сделайте пожалуйста урок на Triple Interleaved mode с использованием DMA. Довольно сложно с этим всем разобраться самому. А вообще в идеале, что мне нужно: Triple Interleaved Mode, DMA и при этом сканирование 8-ми каналов. Это вообще возможно. Удачно получилось только реализовать поочередное сканирование 13-ти каналов АЦП в обычном режиме с использованием DMA. З.Ы. Если вопрос вас заинтересовал, возможно ли с вами связатсья по почте?
@Avrora707
@Avrora707 2 жыл бұрын
sprintf может конвертировать ФЛОАТ в строку? Я пишу так: float f = 1.123456789; char c[50] = {}; //size of the number sprintf(c, "%g", f); Но после принта массив все равно остается пустой. Библиотека #include включена. МК - STM32F072
@smidani8132
@smidani8132 2 жыл бұрын
я вот не пойму одно, всё настроил, но откуда напряжение на ноге изначально если я ещё ничего не подавал? STM32f4 похоже изначально настраивает её в высокий уровень, это нормально?
@user-vq5cs2ps9n
@user-vq5cs2ps9n 7 жыл бұрын
Можно задать опорное напряжение от внешнего источника на ногу Vref согласно datasheet на конкретный контроллер. Младший разряд в цифровых измерительных системах всегда "прыгает" на +/-1 значение (деление) в лучшем случае, при отсутствии шумов от входного сигнала и от самого АЦП.
@narodstream552
@narodstream552 7 жыл бұрын
Петр Долгих в принципе можно. Также можно и отфильтровать прыжки. Я показал вообще принцип программирования АЦП с помощью HAL, а дальше уже вопрос фантазии.
@user-vq5cs2ps9n
@user-vq5cs2ps9n 7 жыл бұрын
narod stream Хотелось как-то вставить свои пять копеек и дополнить Ваш труд.
@user-tl3fg5br5u
@user-tl3fg5br5u 7 жыл бұрын
Петр Долгих а как кой смысл?, Как я понял из datasheet, опорное напряжение все равно больше питания микроконтроллера нельзя подать(3,6V). В дискавери Vref на Vdd посажен и все...
@YuriyIY
@YuriyIY 8 жыл бұрын
А будет видео с регулярными каналами и ДМА? Ну или просто преобразование нескольких каналов и распихивание в разные переменные. :-) Хотя, у меня есть мысль использовать именно непрерывное преобразование и ДМА. Кстати, по опорной напруге. Там можно их две делать, минимальную и максимальную.
@narodstream552
@narodstream552 8 жыл бұрын
Конечно, будет. Уже готово по прерываниям в регулярном канале, но ещё не заливал, надо доработать его немного. А следующим пойдёт в рейс именно регулярный DMA, так что ждите.
@iVAtcg
@iVAtcg 7 жыл бұрын
Разве не так нужно: if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) { // код }
@user-dz5tj2ek5b
@user-dz5tj2ek5b 6 жыл бұрын
при установке функции sprintf,не компилируется хотя подключил stdio.h.Вывожу данные через USART на экран ПК.
@rockykid3785
@rockykid3785 6 жыл бұрын
причёт тут stdio? вы путаете с printf
@fanatnauki
@fanatnauki 5 жыл бұрын
Здравствуйте Narod Stream! Подскажите пожалуйста, где узнать максимальную частоту оцифровки ацп? У меня плата с stm32f767, частота ядра 216 МГц. Нашел в RM, что ацп висит на шине APB2, которая делит частоту пополам. Еще предделитель делит на 4, больше не получается. Выходит 216/2/4=27 Мгц. Правильно рассуждаю? yadi.sk/i/8Uanr9qOHCpuGg Делаю индукционный нагреватель на 300 кГц, хочу сделать фапч программно. Скорости большие, но хранить и передавать данные с ацп не надо, обрабатываются на лету. Так что теоретически должно хватить )))
@narodstream552
@narodstream552 5 жыл бұрын
Здравствуйте! Нет такой величины - максимальная частота оцифровки АЦП. Поэтому каждый понимает под этим какие-то свои величины. Конкретнее скажите Вам нужен сэмплрейтинг или реальная частота колебаний, которую Вы хотите измерить? Сэмплрейтинг зависит от того, какое разрешение АЦП Вы выставите, 8 бит, 12, 16 или ещё какую. мегабиты в секунду Вы в принципе нормально рассчитали. Поэтому получаем что частота сэмплирования с разрешением 8 бит (градаций будет от 0 до 255 единиц) будет где-то 4 мегабита. Чтобы нам измерить синусоиду, то нам как минимум надо 20 сэмплов на один период, чтобы у нас хоть что-то нарисовалось. При 8-битном разрешении мы соответственно получим 200 килогерц максимальную частоту, которую мы сможем измерить. При 12-битном - меньше, при 16-битном - 100 килогерц. Да я по-моему в каком-то уроке это говорил, когда свой самодельный осциллограф подключал на F746. Если хотите большие частоты, то используйте внешний АЦП и контроллер, у которого есть широкий аппаратный параллельный порт (на 32 ноги). Тогда будет нормально. Это я тоже теоретически, так как такой целью не задавался. Поэтому не знаю таких контроллеров и таких АЦП. Только знаю, что они есть.
@fanatnauki
@fanatnauki 5 жыл бұрын
А, дошло, делим еще на 8 (процессов делений отрезка, как Вы рассказывали в видео про avr, каждый расходует один такт), итого 168,7 КГц. Плюс еще время на конверсию. Не найду, сколько это, пишут 15 тактов. Это общее время или каждое из 8 штук?
@narodstream552
@narodstream552 5 жыл бұрын
Это общее время, вернее не время, а количество тактов. как правило в Cube MX оно написано. Мне удалось где-то 100 герц колебаний замерить с разрешением 8 бит.
@TheVovanin
@TheVovanin 5 жыл бұрын
Здравствуйте, давно смотрю ваши ролики, они стали для меня очень полезными! Хотел бы узнать возможно ли как то передать сигнал с платы по USB но без USART ? Моя задача считать аналоговый сигнал и передать его на компьютер. Для начала хотелось бы просто посмотреть на форму сигнала. Можно ли это как то реализовать? Спасибо большое!
@narodstream552
@narodstream552 5 жыл бұрын
Как правило по USB аналоговые сигналы не передаются. По данной шине передаётся информация в виде последовательного кода.
@Rus422
@Rus422 5 жыл бұрын
Конечно, можно. Данные АЦП после преобразования передаются по USB через VCP. Принимаете эти данные и визуализируете.
@Jensiru
@Jensiru 8 жыл бұрын
Не пойму, откуда берутся эти 4096 ? u = ((float)HAL_ADC_GetValue(&hadc1))*3/4096 Как быть если 5 вольт к примеру подавать? Или больше? Т.е. простенький вольтметр чтобы был. Делитель из резисторов надо ставить? Урок по вотчдогу будет?
@narodstream552
@narodstream552 8 жыл бұрын
1. Данная цифра из даташита. Если смотреть все уроки по АЦП, то то я где-то я делаю экскурс по даташиту, там есть формула расчета. Только там она несколько наоборот. Получается неизвестная величина в теле уравнения. Переворачиваем уравнение и получаем эту формулу. Вообще-то эта цифра очевидна, т.к. АЦП у нас 12-битный, 12 включенных бит это - FFF, т.е. 4095, а 0 мы используем тоже. Имеются споры насчет того, все таки 4096 или 4095. Вообще в даташите стоит 4095, но с 4096 у меня почему-то получилось точнее. 2. Если 5 вольт и больше, то тут только 1 вариант - собрать делитель на резизторах с тем учетом, чтобы на выходе делителя не превышалось 3 вольта, а 3 вольта - это максимальное опорное напряжение АЦП у нашего МК. А вот если мы хотим очень точно измерить малые напряжения, то опорное напряжение можно понижать, но тогда надо будет использовать внешнее опорное напряжение. Как-то так. 3. Урок по режимам низкого энергопотребления пока не стоит на повестке дня. Пока кроме него очень много разработанных, но не опубликованных проектов.
@Jensiru
@Jensiru 8 жыл бұрын
Странно, может я чего пропустил про 4096 в уроках....Спасибо большое за развёрнутый ответ:) Кстати, мне таки удалось запустить ILI9341 по SPI1. Дело было в двух лишних строках при отправке команд и данных. А урока не будет по LCD 2002 с кнопками? ( www.dfrobot.com/wiki/images/thumb/1/1e/Arduino_Shield8.png/600px-Arduino_Shield8.png ) Интересно было бы глянуть реализацию меню на нём или ILI9341. Меню, подменю...
@narodstream552
@narodstream552 8 жыл бұрын
Отлично! Дисплей, это хорошо. Пока не до кнопок. Вообще собирался. Там в принципе ничего сложного, я в обзоре физику этого дисплея с кнопками объяснял, там через АЦП заводится всё. Как будет время, замучу занятие. Я думаю, будет интересно
@user-tl3fg5br5u
@user-tl3fg5br5u 7 жыл бұрын
Проблема с этим дисплеем, что кнопки на 5V работают, а у stm32 ацп 3.6V максимум и напрямую кнопки не подрубишь(делитель нужно городить)
@Jensiru
@Jensiru 8 жыл бұрын
Для тех, кому лень или с телефона видео по АЦП по АВР ч.1 : kzfaq.info/get/bejne/gLupa9dyz6jamJc.html
@motoday3580
@motoday3580 5 жыл бұрын
Добрый день! Просьба , почему бы Вам не писать коментарии по каждой строке кода , в каждом примере. Я думаю для новичков это будет большым плюсом ..смотря уроки иногда тяжело разобраться в коде..
@narodstream552
@narodstream552 5 жыл бұрын
А ещё круче после каждой строчки кода было бы сплясать чечётку.
@motoday3580
@motoday3580 5 жыл бұрын
@@narodstream552 сплясать не нужно ... а хорошо было коментов больше... это все уроки.
@narodstream552
@narodstream552 5 жыл бұрын
Я больше сделаю - вместо комментариев я вживую объясню. А комментарии любой для себя напишет сам, как ему нравится. Зачем нам тратить драгоценное время на это. А вообще лучший комментарий - это грамотно и читабельно написанный код.
@motoday3580
@motoday3580 5 жыл бұрын
@@narodstream552 Согласен .. но когда открываешь код и смотришь урок, не очень удобно . Собственно в этом уроке по adc вы дали очень понятные коментарии все сразу понятно . Я по этому и затронул эту тему , так в остальных уроках на мой взглят этого нехватает.
@narodstream552
@narodstream552 5 жыл бұрын
Я смотрю, Вы всерьёз занялись моим воспитанием. Я постараюсь, конечно, последовать Вашим всем советам, но сейчас, простите, дела зовут, работаю над очень нужной видеодорожкой.
@bobahkz
@bobahkz 7 жыл бұрын
Напряжение 3.3 вольта! Делайте уроки покороче, 33 минуты для 7 строчек кода это ОЧЕНЬ долго. И рассказываете как не уверенно, как будь-то разбираетесь с STM32 прям во время записи видио.
@user-il3xh5di2i
@user-il3xh5di2i 6 жыл бұрын
По поводу длительности согласен, но зато все понятно и разжевано! Я смотрю на скорости 1.5, в итоге все замечательно!
@iVAtcg
@iVAtcg 7 жыл бұрын
Разве не так нужно: if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) { // код }
@patupin
@patupin 2 ай бұрын
так
БОЛЬШОЙ ПЕТУШОК #shorts
00:21
Паша Осадчий
Рет қаралды 11 МЛН
Русалка
01:00
История одного вокалиста
Рет қаралды 7 МЛН
КАК ПОСТРОИТЬ WEB SERVER НА ESP32
11:34
Kirill Ivanychev
Рет қаралды 5 М.
STM32 #7. PWM - для изменения яркости LEDs
27:40
NR.electronics
Рет қаралды 6 М.
STM, HAL and CubeMx
22:19
Home Made
Рет қаралды 18 М.
ОБСЛУЖИЛИ САМЫЙ ГРЯЗНЫЙ ПК
1:00
VA-PC
Рет қаралды 2,1 МЛН
Смартфон УЛУЧШАЕТ ЗРЕНИЕ!?
0:41
ÉЖИ АКСЁНОВ
Рет қаралды 1,1 МЛН
Какой ноутбук взять для учёбы? #msi #rtx4090 #laptop #юмор #игровой #apple #shorts
0:18