STM32Cube encoder STM32F407 discovery (СТМ32 Энкодер)

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

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

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

    Didn't understand a word of the audio, but the code and use of the analyzer helped me get my encoder signal working (mine needed the pull-up resistor enabled). Thanks!

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

    Дуже подобаються ваші відео, особливо подобається коли ви розказуєте про регістри (що вони означають)!

  • @Serjaru
    @Serjaru 9 лет назад

    CND ножка у энкодера - это круто!!! ))) и ведь уверенно, несколько раз повторили!

    • @ElectroHobby1
      @ElectroHobby1  9 лет назад

      +Sergey Abaev уже давно так называю общую шину привычка. GND является общей по отношению к другим двум ногам энкодера и кнопки .Это не значит, что на нее нужно подавать отрицательное напряжение чтобы все работало. Можно было запитать ножку на плате с энкодером с обозначением "GND"(+3в), а " + " (-3в) и все бы работало. Спасибо

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

    у меня вопрос к автору.Как сделать так. Чтоб энкодер в разных подразделах меню настраивал разные переменные?А то по кнопке у меня получается.Или же энкодер программный использовать?

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

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

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

    Hello..
    I want to interface TCS3200 color sensor with STM32f746ZG. Since the TCS3200 outputs a frequency based on the amount of light received, I need some way to count the number of pulses for different colors to determine a color.
    In CubeMX, I set PF6(s0) PF7(s1) PF8(s2) PF9(s3) and TIM2 ch1 input capture as (out) of the sensor. Frequncy for timer 2, I selected to be 84MHz with prescalar 83 which will bring it to 1MHz (I am not sure whether I should do this or not). I also enabled TIM2 global interrupt in nvic window. Next, I activated TIM6 to measure time of 5s (timer f=84MHz, prescalar=41999 and counterperiod = 9999).
    I have doubt about how to use these two timers inside the while loop, which HAL library functions to use here and how to use.
    CubeMX is the source code generator and the IDE is Kiel5. Following is my setting for output frequency scaling and filter type outside the main function. If I am wrong, please correct me.
    void TCSFREQ()
    {
    HAL_GPIO_WritePin(GPIOF, s0_Pin,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOF, s1_Pin,GPIO_PIN_RESET);
    }
    void TCSRED()
    {
    HAL_GPIO_WritePin(GPIOF, s2_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOF, s3_Pin,GPIO_PIN_RESET);
    }
    void TCSBLUE()
    {
    HAL_GPIO_WritePin(GPIOF, s2_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOF, s3_Pin,GPIO_PIN_SET);
    }
    void GREEN()
    {
    HAL_GPIO_WritePin(GPIOF, s2_Pin,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOF, s3_Pin,GPIO_PIN_SET);
    }
    void TCSCLEAR()
    {
    HAL_GPIO_WritePin(GPIOF, s2_Pin,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOF, s3_Pin,GPIO_PIN_RESET);
    }
    Correct me if there is something wrong above.
    As I am new to microcontrollers, I am struggling with how to count the number of pulses in a time period (let's say 5s). It would be nice if you would help me with my problem or suggest some alternative solution.

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

      Hey. To calculate the time, you can use HAL_GETtick().To count pulses, you can use interrupts.
      For example.You create a variable counter and a variable pulse.You reset the variable counter and pulse ,then wait until the time is the same as the specified interval.The variable pulse will increase in the interrupt service function.I hope you understand.

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

      I would have toys like you. I only have F4 series.

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

    Виникло таке питання, у таймера 4 канали 2 з яких ми використали на енкодер, чи можна використати інші 2 або хоча б 1 для інших задач? Якщо так то як його налаштувати (усі налаштування ми використали для енкодера)? І ще чому не можна включати подільник "Prescaler (PSC - 16 bits value)" - я пробував ставити то у мене погано рахував (то не рахував узагалі то тахував у будь який бік)?

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

      Вполне можно, когда добавляешь другие каналы, появятся новые строчки в конфиге.
      пескаляр - это заранее установленное значение счётчика (типо счётчик уже насчитал сколько-то),
      но если ты не установишь предельное число для счётчика - он ничего считать не будет ;) ессно..

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

    Нельзя чтобы при прокрутке в обратную сторону был знак минуса? -2 0 +2 , а не +254 0 +2.
    Нужно в коде писать условие проверки? Копался в настройках таймера, но так и не получилось так сделать. Мало ли:)

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

    Как настроить, что бы за один щелчек было не на +-2 изменение, а на +-1?
    Пробовал в настройках покрутить делители, что-то не помогло.
    Ибо энкодер на 20 делений, а на них выходит 40 импульсов.

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

      Ни как.Можно настроить только чтоб на 4 увеличивалось)

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

      где переменая бeрёт с регистра значение дели на два :) или ставь по обоим каналам как в embeddedsystemengineering.blogspot.lt/2016/07/arm-cortex-m3-stm32f103-tutorial.html

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

    can u please help to do synchronize decoder with encoder in stm32

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

    11:42
    Что за указатель ? я лично так и не понял

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

      Указатель на структуру с настройками таймера.Когда я открывал описание функции там на английском языке все описано.Далее внизу я нашел заполнение структуры и передал указатель на эту структуру в функцию с помощью &

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

      Спасибо, я просто не очень быстро читаю на аглицком..
      Очень полезные видосы, удачи..
      p.s. Я всегда не дружил с указателями и ссылками, и до сих пор в них не очень разбираюсь.. )))

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

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

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

      Всяких "лайфхаков", челенЖев и DIY-ев на ютюбе навалом, а вот действительно полезных единицы..
      Так держать !

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

      Понял)

  • @773ivan
    @773ivan 3 года назад

    отличное видео! все простым языком и понятно! подскажите как вывести показания на тфт дисплей?

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

      Я работал только с этой моделью.

    • @773ivan
      @773ivan 3 года назад

      @@ElectroHobby1 я имел ввиду -имеем показания счетчика -как эти показания вывести на дисплей с помощью библиотеки ili9341 ?или нужна другая библиотека?

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

      @@773ivan с этим дисплеем не работал. Скорее всего библиотека не подойдет.

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

    thats increase only????
    1 direction turn...??

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

      At the end of the video on the graph, you can see that the value of the counter changes up and down.Bidirectional!!!

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

      ow.. you good men, you good.. i must admit it. YOU THE BEST.

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

      Thanks!!!

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

    Есть алгоритм софтваерного энкодера, если кого заинтересует (проверял на пик-контроллерах, на стм-ах ващще летать будет)
    if ( (предыдущий_А == сейчасшный_В) && (предыдущий_В != сейчасшный_А) )
    {
    счётчик++;
    }
    if ( (предыдущий_А != сейчасшный_В) && (предыдущий_В == сейчасшный_А) )
    {
    счётчик--;
    }
    //.. проверка крест на крест..

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

      ОК

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

      Спасибо большое!

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

      @@masterkit9517 Да не за что))
      ..я уж и забыл, что я тут был когда-то
      пы. сы. у этого метода есть существенный недостаток - контроллер желательно высокосоростной, обработка через прерывание, тут мало чем поможет. Если толькр не сделать таймер-прерывание, и вызывать процедуру например раз в миллисекунду, а данные записывать в стэк памяти, а не в переменную.
      ..Или сделать что-то вроде RtOS (как в stm32-контроллерах, кстати копеечные)
      Удачи )

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

      @@GypsyRewind Спасибо!

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

    какой алгоритм расскажите в двух словах ?

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

      Тут нет никакого алгоритма.Все заложено в периферию микроконтроллера TIMER.У периферии есть регистры, которыми выбирается режим работы таймера для работы с энкодером.

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

    Может кто подскажет как ему запретить перепрыгивать на ноль после последний цифры и наоборот.

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

      Покажи чего у тебя в main.c?

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

      Всё сдул у тебя . Я про то как счетчику запретить делать как у тебя на видио 18:47, что бы он не сбрасывался, а оставался на 255

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

      У меня исходника нет, a за просмотр своего видео ютуб может плохо оценить.

  • @МихаилЖуравель-в2к

    Блин а я вот чет не додумался до этого сделал просто на прерываниях, жду прерывание на линии и смотрю что на второй.

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

      )

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

      Это самая первая идея, которая мне пришла в голову (прежде чем загуглить). По сути эта идея самая тупая, НО она рабочая. Та как между фронтами задержка 10мс в среднем, то даже на хал библиотеке это можно реализовать ( юзал ф103 камень на частоте 72мгц)