STM32. PWM на практике. Проверяем себя осциллографом. Переходим с Arduino на STM32.

แชร์
ฝัง
  • เผยแพร่เมื่อ 14 ต.ค. 2024

ความคิดเห็น • 35

  • @proman8078
    @proman8078 ปีที่แล้ว +4

    Очень крутое объяснение ШИМ

  • @qrtgfqrtgf1574
    @qrtgfqrtgf1574 4 ปีที่แล้ว +5

    Спасибо, что так подробно объясняешь.

  • @timsystemsTS
    @timsystemsTS 4 ปีที่แล้ว +5

    сколько копаюсь - более понятного объяснения не встречал!
    ждем видосы про уарт с проверкой целостности пакета. Продолжайте в том же духе!

    • @Solderingironspb
      @Solderingironspb  4 ปีที่แล้ว +2

      Спасибо) я как раз сейчас с усартом разбираюсь. Заходите в группу вк, мы там бывает обсуждаем насущные вопросы по темам) Ссылка в описании.

  • @sasha-bj5tt
    @sasha-bj5tt 4 ปีที่แล้ว +1

    Только я что-то изучу, как по этой теме выходит подробный урок. 👍

  • @edmelectronics4110
    @edmelectronics4110 3 ปีที่แล้ว +2

    Можете сделать урок по работе с таймерами - переполнение и сравнение и внутреннее прерывание / типы /? Считаю, что это фундаментальная тема в изучении контроллера.

    • @Solderingironspb
      @Solderingironspb  3 ปีที่แล้ว +3

      Это можно все сделать. Я просто сейчас пока с ремонтом и переездом очень занят. Как с этими делами разберусь, так начну снова снимать видео.

    • @edmelectronics4110
      @edmelectronics4110 3 ปีที่แล้ว

      @@Solderingironspb ОК

  • @NeussMsk
    @NeussMsk 3 ปีที่แล้ว +2

    Timerclock это не частота МК. Это частота шины таймера. А шина за делителем висит и может отличаться от частоты МК

    • @Solderingironspb
      @Solderingironspb  3 ปีที่แล้ว

      Спасибо! Хорошее замечание). Да...я не учел, что мы же частоту APB1 и APB2 тоже менять можем...

  • @DIY_PLC
    @DIY_PLC ปีที่แล้ว

    С указателями еще можно делать так для упрощения #define Ts p->Ts

  • @DIY_PLC
    @DIY_PLC ปีที่แล้ว

    Смотрю на гитхабе есть modbus расскажи пожалуйста про него ооочень надо.

    • @Solderingironspb
      @Solderingironspb  ปีที่แล้ว

      Там у меня функции для формирования запросов от мастера к слейву. Потом может преобразователь usart->rs485 спаяю и в рамках практики покажу, как работать с ним

    • @DIY_PLC
      @DIY_PLC ปีที่แล้ว

      @@Solderingironspb Преобразователи 485е нескольких видов есть тут вопросов нет. Нужен модбас на стм32. Моя версия не стабильно работает опыта мало еще видимо.

    • @Solderingironspb
      @Solderingironspb  ปีที่แล้ว +1

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

  • @DIY_PLC
    @DIY_PLC ปีที่แล้ว

    Попробуй из iso646.h or bitor итд.)

  • @andrejkomockij329
    @andrejkomockij329 3 ปีที่แล้ว

    Странно, что итерация на осциллограмме заметна глазу. Или я что-то упустил?

  • @kooba6205
    @kooba6205 2 ปีที่แล้ว

    Подскажите пожалуйста, с периодом понятно TIM2->CCR1=..., а вот как изменять частоту в цыкле?

  • @us3eo
    @us3eo 4 ปีที่แล้ว

    А какую максимальную частоту так можно генерировать на выводе стмки? Платка тоже Blu Pill

  • @ascuber4650
    @ascuber4650 4 ปีที่แล้ว

    00:15 - это проблема не ардуины (как железки), а софтового ядра. А именно функция analogWrite() так написана. Посмотрите файл wiring_analog.c и все поймете. В этом случае надо просто использовать регистры таймера напрямую, а не эту функцию.

    • @Solderingironspb
      @Solderingironspb  4 ปีที่แล้ว

      Под словом "arduino", я и имел ввиду оболочку для AVR.

    • @ascuber4650
      @ascuber4650 4 ปีที่แล้ว

      @@Solderingironspb оболочка, если Вы имеете ввиду IDE, тоже ни при чем. И компилятор, и вся остальная "обвязка". Кроме ядра, ну или можно сказать, набора пользовательских функций, библиотеки. У них (разработчиков) задача просто иная стояла - максимально все упростить для пользователя и убрать рутину под капот. В результате - очень низкий порог вхождения и в итоге - широкая распространенность. Ну а обратная сторона - в том числе и то, что Вы описали.

    • @Solderingironspb
      @Solderingironspb  4 ปีที่แล้ว +2

      Да, я не про IDE с компилятором, а именно про ядро и библиотеки) К примеру, у меня коллега берет ардуино уно, сносит с них ардуиновский загрузчик, ставит кварц на 20 Мгц и программирует их уже на чистом си в atmel studio. Пишет свои библиотеки и четко понимает, что и как работает. При таком подходе, я вообще ничего плохого к атмегам не имею) такое хоть в промышленность. А по поводу ардуино...я все еще считаю, что ардуино - это прекрасная возможность начать что-то делать. Люблю именно за быстрый старт, за то, что за год работы с ней, можно действительно наклепать множество интересных проектов (главное голову включать). И я считаю правильным, что если человек начнет изучение мира мк именно с ардуино. Нужно всегда идти от простого к сложному, иначе развитие будет ну очень медленным)

  • @ВалентинСысоев-л6ъ
    @ВалентинСысоев-л6ъ ปีที่แล้ว

    Сделал всё по видео, но почему то у меня светодиоды не включаются.

    • @nikolaystepanets2483
      @nikolaystepanets2483 ปีที่แล้ว

      Может светодиоды неправильно подключены. У меня подключение через резистор к плюсу 3.3 вольт
      Сделал все почти как в видео (на STM32F030) - вроде работает.

  • @DIY_PLC
    @DIY_PLC ปีที่แล้ว

    Если заранее написать программу, а потом просто рассказать на видео то будет гораздо быстрее.

  • @AE-systems
    @AE-systems 4 ปีที่แล้ว

    Добрый день, а как сместить начало импульса, чтобы один канал стартанул с 0 мксек, а канал 2 стартанул с 10мксек, то есть сдвинуты относительно друг друга на 10 мксек

    • @AE-systems
      @AE-systems 4 ปีที่แล้ว

      Без использования задержки делей

    • @Solderingironspb
      @Solderingironspb  4 ปีที่แล้ว

      Здравствуйте. Именно 10 микросекунд, а не миллисекунд?

    • @AE-systems
      @AE-systems 4 ปีที่แล้ว

      @@Solderingironspb ну это как пример, а так задача состоит в смещение на определенное время в миллисекундах, без использования делея

    • @Solderingironspb
      @Solderingironspb  4 ปีที่แล้ว

      Попробуйте так (Не тестировал.)
      uint8_t flag_start; //очередь старта
      unsigned long Time; // переменная времени
      int main(void)
      {
      flag_start = 1;
      Time = HAL_GetTick();
      while (1)
      {
      if (flag_start == 1)
      {
      TIM2->CCR2 = 1023; //задаем значение шим
      Time = HAL_GetTick(); // запоминаем время
      flag_start = 2; // очередь сдвигаем на +1
      }
      if (flag_start == 2 && HAL_GetTick() - Time >= 10) //если с прошлого момента прошло 10 мс и очередь настала
      {
      Time = HAL_GetTick(); //запоминаем время
      TIM2->CCR3 = 1023; //задаем значение шим
      flag_start = 3; // очередь сдвигаем на +1(чтоб не перезапускать шим каждые 10 мс)
      }
      }
      }

    • @AE-systems
      @AE-systems 4 ปีที่แล้ว

      Спасибо, попробую и отпишусь