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

Поделиться
HTML-код
  • Опубликовано: 4 окт 2024

Комментарии • 47

  • @СРБКолодий
    @СРБКолодий 7 лет назад +12

    Хорошие уроки! Благодарю! Когда первый раз изучаешь материал, скорость не нужна) Это не олимпиада, скорость потом нарабатывается. Нужна скорость - на сайте можно прочитать)

  • @ОлегСевастьянов-з8о

    Спасибо за познавательные видео и продолжайте в том же духе.

    • @narodstream552
      @narodstream552  8 лет назад +1

      Спасибо! Своей обратной связью Вы мне этот дух поднимаете!

  • @DrargonsM
    @DrargonsM 8 лет назад +4

    Лайк ! очень интересно!

  • @АлександрВасильев-ы1й2х

    Огромное Вам спасибо. Все видео получаются очень интересными и информативными.

  • @ОлексійЮрченко-я8м
    @ОлексійЮрченко-я8м 4 года назад

    Огромное Вам спасибо.

  • @ДмитрийТисов-ж6я
    @ДмитрийТисов-ж6я 6 месяцев назад

    Спасибо

  • @ButerbrodnyBaron
    @ButerbrodnyBaron 7 лет назад +4

    с каждым упоминанием предела измерения АЦП предел уменьшается на 1)

  • @YuriyIY
    @YuriyIY 8 лет назад +1

    А будет видео с регулярными каналами и ДМА? Ну или просто преобразование нескольких каналов и распихивание в разные переменные. :-) Хотя, у меня есть мысль использовать именно непрерывное преобразование и ДМА. Кстати, по опорной напруге. Там можно их две делать, минимальную и максимальную.

    • @narodstream552
      @narodstream552  8 лет назад

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

  • @ПетрДолгих-ы9е
    @ПетрДолгих-ы9е 7 лет назад

    Можно задать опорное напряжение от внешнего источника на ногу Vref согласно datasheet на конкретный контроллер.
    Младший разряд в цифровых измерительных системах всегда "прыгает" на +/-1 значение (деление) в лучшем случае, при отсутствии шумов от входного сигнала и от самого АЦП.

    • @narodstream552
      @narodstream552  7 лет назад

      Петр Долгих в принципе можно. Также можно и отфильтровать прыжки. Я показал вообще принцип программирования АЦП с помощью HAL, а дальше уже вопрос фантазии.

    • @ПетрДолгих-ы9е
      @ПетрДолгих-ы9е 7 лет назад

      narod stream Хотелось как-то вставить свои пять копеек и дополнить Ваш труд.

    • @Олег-ю4ш3й
      @Олег-ю4ш3й 7 лет назад

      Петр Долгих а как кой смысл?, Как я понял из datasheet, опорное напряжение все равно больше питания микроконтроллера нельзя подать(3,6V). В дискавери Vref на Vdd посажен и все...

  • @Avrora707
    @Avrora707 2 года назад

    sprintf может конвертировать ФЛОАТ в строку? Я пишу так:
    float f = 1.123456789;
    char c[50] = {}; //size of the number
    sprintf(c, "%g", f);
    Но после принта массив все равно остается пустой. Библиотека #include включена. МК - STM32F072

  • @sergeydemchuk1039
    @sergeydemchuk1039 4 года назад

    Сделайте пожалуйста урок на Triple Interleaved mode с использованием DMA. Довольно сложно с этим всем разобраться самому.
    А вообще в идеале, что мне нужно: Triple Interleaved Mode, DMA и при этом сканирование 8-ми каналов. Это вообще возможно.
    Удачно получилось только реализовать поочередное сканирование 13-ти каналов АЦП в обычном режиме с использованием DMA.
    З.Ы. Если вопрос вас заинтересовал, возможно ли с вами связатсья по почте?

  • @smidani8132
    @smidani8132 3 года назад

    я вот не пойму одно, всё настроил, но откуда напряжение на ноге изначально если я ещё ничего не подавал? STM32f4 похоже изначально настраивает её в высокий уровень, это нормально?

  • @iVAtcg
    @iVAtcg 7 лет назад +1

    Разве не так нужно:
    if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
    {
    // код
    }

  • @TheVovanin
    @TheVovanin 5 лет назад

    Здравствуйте, давно смотрю ваши ролики, они стали для меня очень полезными! Хотел бы узнать возможно ли как то передать сигнал с платы по USB но без USART ? Моя задача считать аналоговый сигнал и передать его на компьютер. Для начала хотелось бы просто посмотреть на форму сигнала. Можно ли это как то реализовать?
    Спасибо большое!

    • @narodstream552
      @narodstream552  5 лет назад

      Как правило по USB аналоговые сигналы не передаются. По данной шине передаётся информация в виде последовательного кода.

    • @Rus422
      @Rus422 5 лет назад

      Конечно, можно. Данные АЦП после преобразования передаются по USB через VCP. Принимаете эти данные и визуализируете.

  • @ДимаПигарь-б4и
    @ДимаПигарь-б4и 7 лет назад

    Подскажите пожалуйста как провести калибровку ацп?

  • @Евгенийджексон-ж5м

    при установке функции sprintf,не компилируется хотя подключил stdio.h.Вывожу данные через USART на экран ПК.

    • @rockykid3785
      @rockykid3785 6 лет назад +1

      причёт тут stdio? вы путаете с printf

  • @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 лет назад

      Отлично! Дисплей, это хорошо. Пока не до кнопок. Вообще собирался. Там в принципе ничего сложного, я в обзоре физику этого дисплея с кнопками объяснял, там через АЦП заводится всё. Как будет время, замучу занятие. Я думаю, будет интересно

    • @Олег-ю4ш3й
      @Олег-ю4ш3й 7 лет назад

      Проблема с этим дисплеем, что кнопки на 5V работают, а у stm32 ацп 3.6V максимум и напрямую кнопки не подрубишь(делитель нужно городить)

  • @motoday3580
    @motoday3580 5 лет назад

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

    • @narodstream552
      @narodstream552  5 лет назад +2

      А ещё круче после каждой строчки кода было бы сплясать чечётку.

    • @motoday3580
      @motoday3580 5 лет назад

      @@narodstream552 сплясать не нужно ... а хорошо было коментов больше... это все уроки.

    • @narodstream552
      @narodstream552  5 лет назад +3

      Я больше сделаю - вместо комментариев я вживую объясню. А комментарии любой для себя напишет сам, как ему нравится. Зачем нам тратить драгоценное время на это. А вообще лучший комментарий - это грамотно и читабельно написанный код.

    • @motoday3580
      @motoday3580 5 лет назад

      @@narodstream552 Согласен .. но когда открываешь код и смотришь урок, не очень удобно . Собственно в этом уроке по adc вы дали очень понятные коментарии все сразу понятно . Я по этому и затронул эту тему , так в остальных уроках на мой взглят этого нехватает.

    • @narodstream552
      @narodstream552  5 лет назад +1

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

  • @fanatnauki
    @fanatnauki 6 лет назад

    Здравствуйте Narod Stream! Подскажите пожалуйста, где узнать максимальную частоту оцифровки ацп?
    У меня плата с stm32f767, частота ядра 216 МГц. Нашел в RM, что ацп висит на шине APB2, которая делит частоту пополам. Еще предделитель делит на 4, больше не получается.
    Выходит 216/2/4=27 Мгц. Правильно рассуждаю? yadi.sk/i/8Uanr9qOHCpuGg
    Делаю индукционный нагреватель на 300 кГц, хочу сделать фапч программно. Скорости большие, но хранить и передавать данные с ацп не надо, обрабатываются на лету. Так что теоретически должно хватить )))

    • @narodstream552
      @narodstream552  6 лет назад

      Здравствуйте!
      Нет такой величины - максимальная частота оцифровки АЦП.
      Поэтому каждый понимает под этим какие-то свои величины.
      Конкретнее скажите
      Вам нужен сэмплрейтинг или реальная частота колебаний, которую Вы хотите измерить?
      Сэмплрейтинг зависит от того, какое разрешение АЦП Вы выставите, 8 бит, 12, 16 или ещё какую. мегабиты в секунду Вы в принципе нормально рассчитали. Поэтому получаем что частота сэмплирования с разрешением 8 бит (градаций будет от 0 до 255 единиц) будет где-то 4 мегабита. Чтобы нам измерить синусоиду, то нам как минимум надо 20 сэмплов на один период, чтобы у нас хоть что-то нарисовалось. При 8-битном разрешении мы соответственно получим 200 килогерц максимальную частоту, которую мы сможем измерить. При 12-битном - меньше, при 16-битном - 100 килогерц. Да я по-моему в каком-то уроке это говорил, когда свой самодельный осциллограф подключал на F746. Если хотите большие частоты, то используйте внешний АЦП и контроллер, у которого есть широкий аппаратный параллельный порт (на 32 ноги). Тогда будет нормально.
      Это я тоже теоретически, так как такой целью не задавался. Поэтому не знаю таких контроллеров и таких АЦП. Только знаю, что они есть.

    • @fanatnauki
      @fanatnauki 6 лет назад

      А, дошло, делим еще на 8 (процессов делений отрезка, как Вы рассказывали в видео про avr, каждый расходует один такт), итого 168,7 КГц.
      Плюс еще время на конверсию. Не найду, сколько это, пишут 15 тактов. Это общее время или каждое из 8 штук?

    • @narodstream552
      @narodstream552  6 лет назад

      Это общее время, вернее не время, а количество тактов. как правило в Cube MX оно написано.
      Мне удалось где-то 100 герц колебаний замерить с разрешением 8 бит.

  • @Jensiru
    @Jensiru 8 лет назад

    Для тех, кому лень или с телефона видео по АЦП по АВР ч.1 : ruclips.net/video/JUy8tAjBvhc/видео.html

  • @bobahkz
    @bobahkz 7 лет назад

    Напряжение 3.3 вольта!
    Делайте уроки покороче, 33 минуты для 7 строчек кода это ОЧЕНЬ долго.
    И рассказываете как не уверенно, как будь-то разбираетесь с STM32 прям во время записи видио.

    • @Сергей-у6и7б
      @Сергей-у6и7б 7 лет назад +5

      По поводу длительности согласен, но зато все понятно и разжевано! Я смотрю на скорости 1.5, в итоге все замечательно!

  • @iVAtcg
    @iVAtcg 7 лет назад +1

    Разве не так нужно:
    if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
    {
    // код
    }

    • @patupin
      @patupin 5 месяцев назад

      так