STM32 PWM на практике.

Поделиться
HTML-код
  • Опубликовано: 5 окт 2024
  • Краткий рассказ о том, как включить генерацию PWM сигнала на процессоре STM32. Не претендует на полноценное описание всех тонкостей этого процесса.
    ------------------------------------------
    Поддержать автора канала можно перейдя по ссылке:
    yoomoney.ru/to...
    Или просто отправив перевод на Yandex.кошелек:
    4100116547550395
    А также переводом по номеру карты Сбер:
    4279-3000-1033-0561
    ------------------------------------------

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

  • @biounit4161
    @biounit4161 Год назад +1

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

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

    спасибо большое,дней 5 уже не мог разобраться и тут наткнулся на ваше видео!

  • @ТёмнаясторонаСилы-з9э

    Кратко и информативно - плюс автору! Могу только дополнить, что в серии f303 advanced control таймеры (а это TIM1, TIM8 и TIM20) имеют возможность тактирования удвоенной частотой шины, если шина 72MHz, то частота тактирования 144MHz. Эта настройка осуществляется в регистре RCC->CFGR3, бит TIM1SW.

  • @АлександрКолянов-х3э

    Да просто опечатка В принципе разобрался Спасибо Вам за ответ

  • @Aleksandr_Sidorov
    @Aleksandr_Sidorov 5 лет назад +4

    Максимальную частоту PWM которую можно снять с шины это половина частоты самой шины , то есть если частота шины к примеру 80 мГц , то на выходе можно снять 40мГц максимум , хотя на крутых платах я не совсем добился частоты переваливающию за 50мГц , надо было еще подсказать зачем такие значения заносим в регистр напрямую , а то некоторым не совсем понятно или с ходу могут не понять , это значение половина значения периуда , тоесть нашего тикания , к примеру если периуд 200 то что бы получить 50 процентов заполнения ШИМ , то нужно просто взять е половинку 100, и тогда будет хороший меандр

    • @РоманТихомиров-у6е
      @РоманТихомиров-у6е 4 года назад

      т.е по примеру выше, например для STM32F103C8T6 мы сможем получить ШИМ свыше 35 мГц?

  • @zuckermanity
    @zuckermanity 4 года назад +2

    На случай, если кому-то очень не хватает частоты ШИМа, но уходить с AVR не хочется, добавлю, что в копеечном attiny85 имеется высокоскоростной асинхронный таймер (Timer1 + PLL), который умеет работать на частоте 64 МГц. Что сходу дает частоту ШИМ 250 кГц. А если полная длительность импульса не требуется, можно ее уменьшить наполовину, и получить ШИМ 500 кГц.

    • @Vladimir_Zarubin
      @Vladimir_Zarubin 4 года назад +4

      А почему не хочется уходить с AVR??? Бегом надо бежать!!! Технический прогресс никогда не будет стоять на месте и ждать пока вы наиграетесь в ардуино.

    • @zuckermanity
      @zuckermanity 4 года назад +5

      Не знаю, чем вам не угодил AVR, и куда вы хотите бежать, но в данной ситуации он полностью удовлетворяет поставленной задаче. Камни разные важны, камни разные нужны.

  • @artsiomkazlouski5127
    @artsiomkazlouski5127 10 месяцев назад

    Бомба пушка ! Ваши видео подтолкнули и помогли перейти с Arduino на stm
    Надо не часто, но как же stm поможет расширить возможности) спасибо

  • @АндрейКапитонов-д7й
    @АндрейКапитонов-д7й 4 года назад +1

    Доброго дня.
    Вы очень интересно всё объясняете. Можно вас попросить записать видео по прерываниям в stm32 совместно с работой энкодера для меню.
    За ранее благодарен за ответ.

  • @dmitriibannikovasx
    @dmitriibannikovasx 3 года назад +2

    Объясните мне, зачем нужно заносить значение заполнения шим напрямую в регистр? Чем это отличается от халовской функции SET_COMPARE? Благодарю заранее)

  • @kazimiralmazov2245
    @kazimiralmazov2245 4 года назад +1

    Владимир Спасибо!! Только по вашему видео получилось плавно моргать светодиодом на TIM2 на процессоре STM32F103. Материал усваивается,когда на столе получилось все без ошибок и потом уже легче осваивать материал!!! В каком куске кода идет плавное включение диода? Выключение плавное,а вот включение светодиода быстрое.. Это если вариант с одним диодом. Разобрался! CCR2 CCR3 Спасибо.

  • @dmitriibannikovasx
    @dmitriibannikovasx Год назад

    Разве предделитель и период нужно выбирать не с учетом Prescaler = Желаемый_предделитель - 1 ? Ведь там минимальное значение предделителя = 0, но по сути частота делится на 1. Значит, если мы хотим разделить частоту на 8, то нужно выставить значение 7. (та же логика и с периодом)

  • @АлександрКолянов-х3э

    Спасибо за содержательные ролики. Не могли бы вы поднять тему регулировки Dsad time при комплементарном pwm

    • @VladimirMedintsev
      @VladimirMedintsev  Год назад

      Может dead time? Ну типа "мертвое время"?

  • @oleksandrhusiev6544
    @oleksandrhusiev6544 6 лет назад +2

    У меня один вопрос, почему все снимают видо про Keil, неужели так плох Atollic? Но спасибо, видео очень хорошее!

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

      А какая разница? Это всего лишь IDE каждый выбирает что ему удобнее. Если вам по какой-то причине удобнее использовать Atollic, то вы можете абсолютно свободно это делать.

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

      Потому что кеил понятнее и удобнее. Что называется сел и поехал.

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

      @@ugene4063 атолик разве не сел и поехал? Настроил дебаг конфигурейшн и погнал

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

    Даааа, работает! Частоту 100 кГц набирает в лёгкую! В avr наверное уже не вернусь. Владимир - Вы мой личный Иисус Христос!
    Только у меня нет файла tim.c, все настройки идут в main. Походу кейл обновили.
    PS. Вот еще что. В avr был глюк - когда ШИМ подбирался к крайниму верхнему значению, он не заполнял скважность на 100%, была пауза в один такт (провал шириной в одну микросекунду). Об этом даже в эрратах предупреждали, приходилось ставить дополнительное IF, чтобы убрать этот провал. В stm такого нет, только в счетный регистр надо записывать на единичку больше (не 4096, а 4097, иначе тоже появляется провал).

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

      Генерировать настройки периферии в один файл - main.c или разнести по файлам, например spi.c, i2c.c, tim.c задается в настройках проекта в кубе. Удобнее чтобы не плодить кашу из кода.

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

      И это... Что касается PWM, само понятие подразумевает что существуют чередующиеся периоды высокого и низкого уровней повтопяющиеся с определенной частотой. Без как вы выразились провала, это уже не ШИМ, а просто сигнал логического уровня. Записывая такие значения в регистр вы просто нарушаете нормальную работу генератора ШИМ.

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

      Ну вот работает у меня step-down преобразователь со 100% мощностью. Это значит надо полностью открыть ключ (мощности киловаттные, любая лишняя дерготня мне кажется - ни к чему). А из-за этого короткого провала получается скважность не 100%, а 99,999%
      Вы думаете, что записывать в регистр на единицу больше это ошибка (и читерство)? )))

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

      Я ничего не думаю. Есть у меня причины не любить ШИМ со скважностью 100% и во всех случаях, когда это только возможно я заменю его на 99.99%. Это долгая дискуссия и слишком долгое обьяснение. Ну реально вагон времени потратить не хочется. Неспроста и в процессорах 99.999% скважность стоит. Не думаете же вы что и в STM и в AVR ошибка. Более того в эрраташите это обозначено как особенность а не как ошибка.

  • @zisoua
    @zisoua 4 года назад +2

    Добрый день, что можете сказать про dsLogic - насколько он хорош в работе и где вы его брали ? Спасибо.

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

      Для большинства работ вполне подходит. К работе претензий нету. Брал на каком-то сайте уж и не вспомню где.

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

      @@VladimirMedintsev Спасибо, а по цене не помните как на офицальном или дешевлен, а то сейчас я понял появились клоны на али. и как можно понять клон или оригинал?

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

      Когда я покупал клонов еще не было. А официальный стоил 60 долларов.

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

    Спасибо за столь познавательное видео!!!
    Подскажите пожалуйста, у меня STM32F103 и мне нужно с него получить 2 рабочие частоты 30кГц и 100кГц. Т.к. они будут использоваться для усилителя и импульсного блока питания хотелось бы понять, надо ли использовать внешний кварцевый резонатор или нет и реально ли получить две рабочие частоты с разной скважностью и периодом 50!50?
    Заранее спасибо Это видео вселяет надежды)

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

      Да, это возможно. Но нужно понимать, что внутренняя RC цепочка имеет отклонение по частоте гораздо больше чем кварцевый резонатор. Если указанная в даташите точность вас устраивает то внешний кварц не нужен.

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

      Частота гулять будет по температуре.

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

    А как же определить какой порт нужно настроить на канал ШИМа .В Stm32f1 нашёл.А в Stm32f4 ?

  • @РоманТихомиров-у6е
    @РоманТихомиров-у6е 4 года назад +1

    Можно пример получения 15-35мГц ШИМ?

  • @МихаилТиунов-с7д
    @МихаилТиунов-с7д 3 года назад +1

    Здравствуйте Владимир. Подскажите пжлст простой способ преобразовать ШИМ в напряжение 0...10 В. Для управления частотником. Точность сильная не нужна - у меня есть обратная связь - она подстроит.

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад +1

      Конденсатор и резистор. Проще способа нету. На конденсаторе измеряем напряжение.

    • @МихаилТиунов-с7д
      @МихаилТиунов-с7д 3 года назад

      @@VladimirMedintsev А 10В откуда возьмется ? Операционник?

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

      Операционный усилитель.

  • @Mozobretenie
    @Mozobretenie 2 года назад +1

    Только не скважность 50%, а рабочий цикл

  • @СергейСтрелочных-и9г

    Добрый день. Подскажите, как можно присвоить значение счётчика циклов REP (0-255), какой либо переменной для МК STM32F103C8T6.

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

    Доброе время суток! Не подскажите как лучше поступить. У меня 4 драйвера (drv8432) на 4 мотора. В отличии от некоторых драйверов у него 2 входа ШИМ для изменения направления вращения мотора. Можно ли использовать 1 ШИМ с stm32 с двумя выходными каналами. И направление регулировать CCR регистром, по очереди включаяя и отключяя выходы?

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

    А есть ли возможность проверить максимальную частоту работы GPIO (GPIOx-> OSPEEDRx |= {0x1,0x2,0x3}) с помощью PWM (TIMx->ARR = 2, 3, 4; TIMx->CCRx = {1..3})?
    к сожалению нет в хозяйстве ни осциллографа ни анализатора уровней ☹

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

      Честно говоря я не понял чего бы вы хотели проверить. Частоты переключения gpio в 2 мегагерца я использовал.

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

      В смысле хотели бы посмотреть как начнут фронты заваливаться у сигналов? Это можно но уже завтра.

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

      именно фронт. спс!!

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

      Вот тут я думаю вы найдете ответ на свой вопрос - ruclips.net/video/wFN2K_ALT8k/видео.html

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

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

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

    Не подскажешь как сгенерировать опорную частоту 32.768khz для stm32f103c8t6? Нужно для датчика. В MCO не поддерживается LSE с 32.767khz частотой. Поэтому вроде как остаётся только вариант с таймером и ШИМ. Если частота 72mhz то 2197 это делитель, получится частота 32.771. а как это все организовать в cube mx?

    • @dmitriibannikovasx
      @dmitriibannikovasx 3 года назад +1

      У тебя есть два способа задать частоту: это предделитель (prescaler) и счетчик (counter). Чтобы просто сгенерировать частоту, не нужно использовать ШИМ. Нужно в конфигурации канала таймера выбрать OUTPUT COMPARE. И подбирая значения делителя и счетчика можно добиться нужной частоты. Для твоего случая достаточно установить предделитель = 70, а счетчик = (нужная частота) - 1, то есть 32767. Ну предделитель устанавливается в зависимости от частоты тактирования таймера.

  • @MrVladkk
    @MrVladkk Год назад

    Здравствуйте! Скажите пожалуйста, можно при генерации ШИМ сигнала выставить значение периода меньше 128, чтобы получить больше значение частоты, чем 560 кГц? Например период 64? Что будет?

    • @VladimirMedintsev
      @VladimirMedintsev  Год назад +1

      Вы еще раз разберитесь со значениями регистра. Для ШИМ сигнала высокой частоты есть HRTIM.

    • @MrVladkk
      @MrVladkk Год назад

      @@VladimirMedintsev Спасибо за информацию

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

    Попробовал повторить и не понял где там вообще светодиоды в коде описаны, их переключения нигде же нет или я чего то не понимаю?

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

    Надо что то написать для улучшения статистики канала.... Раз уж по видео придраться не к чему :))
    Сегодня выпал в осадок на али, F407VGT стали по 220р ! Еще они.... будут умолять нас кубом не пользоваться.. :))
    И появился китайский клон CS32F103C8T6 , но почему то по 50р, как и оригинал, видимо скоро подешевеет...

    • @dmitriibannikovasx
      @dmitriibannikovasx 3 года назад +1

      Ммммм) год назад.... Теперь зайди сейчас на али и посмотри сколько это все стоит)

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

    А можно пояснить для чайников, что за ошибка в HAL?

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

      Скорее не ошибка а дибилизм. Нет нормальной функции для изменения скважности генерируемого сигнала. Запустить-остановить генерацию можно, а изменить скважность только через перенастройку. Хотя делов то всего одно значение в регистр записать.

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

      Ну, тогда это не ошибка... :)

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

      Вот список функций:
      Time PWM functions. This section contains the following APIs:
      HAL_TIM_PWM_Init()
      HAL_TIM_PWM_DeInit()
      HAL_TIM_PWM_MspInit()
      HAL_TIM_PWM_MspDeInit()
      HAL_TIM_PWM_Start()
      HAL_TIM_PWM_Stop()
      HAL_TIM_PWM_Start_IT()
      HAL_TIM_PWM_Stop_IT()
      HAL_TIM_PWM_Start_DMA()
      HAL_TIM_PWM_Stop_DMA()
      Как вы думаете какая из них позволяет изменять скважность генерируемого ШИМ сигнала?

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

      Такая же проблема с подключением энкодера))) до смешного тупость. Не баг а фича©

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

      DeInit, меняем нужное, потом опять Init... :) Так?