Перейти к содержанию

Владимир Манзаров

Members
  • Постов

    32
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Владимир Манзаров

  1. Всем привет. Настраиваю таймер на генерацию ШИМ сигнала. Появился вопрос по поводу выбора Counter Mode. Помимо Up, Down которые сбрасывают счетчик на фронте и спаде, есть еще и center aligned. 

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

    Но тут у меня появился вопрос: меняется ли период ШИМ сигнала при этом? Мне просто необходимо вызывать прерывание по середине импульса ШИМ, но если период ШИМ сигнала при этом меняется, то это мне не подойдет.

    Скриншот 25-09-2022 193256.jpg

  2. Всем привет. Довольно глупый вопрос, но хотелось бы уточнить. Допустим есть два включенных таймера. Каждый вызывает прерывание по переполнению, но у первого таймера период переполнения 100 мс, а у второго - 10 мс. Вопрос: включаются ли эти таймеры одновременно? 

    То есть, когда второй таймер отработает прерывание 10 раз, последнее прерывание вызовется одновременно с первым?

    Скриншот 25-09-2022 164350.jpg

  3. 11 minutes ago, IMXO said:


    причем полную, а не каракули

    Без каракулей не получилось, но вот примерно так выглядит схема подкючения. Силовой драйвер другой, на 24 вольта, ну и вместо arudino стоит stm32 f103c8t6, в остальном все так же. Плюс датчик тока ACS758 50 A

    источник питания не батарейка и мотор не на 5 В, а на 24 В)))

    podkl-kontaktov-8.jpg

  4. 42 minutes ago, IMXO said:

    а для нас нет.
     

    ток растет по логарифмическому закону, у вас на картинко нарисована кривая антилогарифма

    Хорошо, буду знать. То есть тогда следует мерить ток  не в середине импульса ШИМ, а в его конце-начале?

  5. 13 hours ago, Огонёк said:

    Ты себе ШИМ как синусоиду представляешь что ли?

    Нет. Я предполагаю, что ток отстает в скорости нарастания от напряжения, как на картинке. Если что, ШИМ - это черная линия, а ток - красная. Поэтому для меня довольно логично считать ток на середине периода ШИМ. А для вас?

    Скриншот 25-09-2022 145831.jpg

  6. 2 hours ago, ChePay said:

    При этом получившуюся цифру через коэффициент Вы трактуете как силу тока через мотор. 

    Непонятно, откуда такая идея возникла.

    Дело в том, что датчик тока устроен на эффекта Холла. Есть там такая характеристика, как чувствительность (отношение напряжение к силе тока). То есть через АЦП показывает по факту напряжение, но его можно перевести в ток

  7. Всем привет. Есть силовой драйвер, двигатель постоянного тока (с каким возбуждением, не знаю), датчик тока и источник питания. 

    Так вот, я вроде отладил датчик тока на значения, примерно равные тем, что показывает источник питания(24 V), по крайней мере на определенном диапазоне скважности ШИМ( управляю двигателем с помощью генерации ШИМ сигнала ). Так вот, если подавать на двигатель ШИМ сигнал со скважностью от 0 до 75%, то датчик тока показывает примерно те же значения, что и источник питания. Но стоит увеличить коэффициент заполнения от 75%, то датчик тока показывает довольно низкую силу тока, на источнике питания при этом ток все еще растет при увеличении оборотов.

    Это нормальное явление или неправильное? Можно ли объяснить это с точки зрения электротехники или ошибка все-таки в коде? Я беру значения АЦП датчика тока на половине периода ШИМ сигнала, то есть примерно тогда, когда амплитуда тока примерно максимальна.

  8. Всем привет, работаю с стм32 bluepill. Устанавливаю третий таймер на ШИМ генерацию (Канал 1). Задача следующая: вызвать прерывания по заполнению счетчика на половину. Встроенный коллбек не работает, через systick тоже, да и его приоритет по-моему самый низкий из всех.

    Как можно грамотно вызывать прерывание по определённому значению счетчика? (Тактовая частота 72 мГц, предделитель 24, ARR регистр = 1000).

    while(1) использовать нельзя.

  9. 3 hours ago, BARS_ said:

    Нафиг этих крокодилов писать, когда можно сделать просто и быстро?

    Мне нужно именно такое прерывание, которое вызывается в середине импульса ШИМ. То, что вы написали, обычно работает по переполнению, а мне нужно заполнение до половины

     

  10. Всем привет, работаю на стм32 BluePill. Мне нужно сделать так, чтобы возникало прерывание на каждый полупериод одного таймера. Такая функция уже есть, называется HAL_TIM_PWM_PulseFinishedHalfCpltCallback

    Включаю третий таймер на генерацию ШИМ. Предделитель 719, ARR = 1000.
    В main ввожу HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_1);

    Чуть выше main ввожу

    void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) {
        if (htim -> Instance == TIM3){
            cringe = 50;
        }
    }

    однако эта переменная в stm studio показывает мне число 536891392 и не меняется. Почему не работает callback функция?

  11. Всем привет, я работаю с СТМ32 BluePill. Есть датчик тока ACS712 на диапазон +-5А. Мне необходимо достаточно точно определять значения переменного тока. Дело в том, что для работы с этим датчиком нужно всегда знать условный ноль, то есть когда на датчик тока идет 3.3/2 В. По АЦП мне показывает 2138, вместо необходимых 2048 или около (макс значение ацп 4096). Что с этим делать? 

    Также хочу спросить по поводу кода для поиска условного нуля. Я сделал такую реализацию: в начале работы (когда нет нагрузки) каждые 10 мс снимаются показания с АЦП, складываются и делятся на число измерений. Таким образом можно находить условный ноль. Но есть одна проблема - при любой подключенной нагрузке, даже когда ток не идет, а просто есть подключение, значение тока уходит с нуля на порядок. Как можно решить такую проблему? Это можно реализовать программно или нужно ковыряться где-то еще?

  12. Добрый день. Есть задача - постоянно знать значение силы тока, идущего на двигатель.
    Есть два датчика тока, еще не купленных. Они оба работают на эффекте Холла, но один измеряет диапазон токов от -50 до 50А (Allegro ACS758), а другой от -5 до 5А (ACS712). Суть в том, что на двигателе сила тока едва ли будет выше 4 А, а датчик тока на 5А найти гораздо сложнее, чем на 50. 

    Вопрос: если нужно довольно точное измерение тока, то реально лучше поискать датчик на нормальный диапазон токов (-5.... 5 А) или можно работать и с забугорными диапазонами?

  13. 15 minutes ago, Огонёк said:

    Странный подход. Целевые обороты изначально больше исходных - ведь в самом начале двигатель не крутится.

    Извиняюсь, наоборот. заданное минус текущее. Пишу код сам. 

    Ну смотрите, мотор может увеличить свою скорость так, что заданное значение станет меньше, чем текущее. Это можно реализовать просто внешними воздействиями. Просто условное колесо, которое крутится от мотора, пнуть или кинуть так, что он прокрутится и его скорость увеличится. Это ведь тоже надо регулировать. 

  14. 5 minutes ago, Гость_Григорий_Т. said:

    Ваш драйвер позволяет менять направление вращения двигателя?

    И что зв выходной сигнал у вас уходит в минус?

    Да, позволяет. Выходной сигнал может войти в минус из-за ошибки регулирования. То есть если текущее значение стало меньше, чем нужное, то направление меняется (ошибка регулирования - текущее знач. минус необходимое)

  15. 1 hour ago, Гость_Григорий_Т. said:

    От чего? От работы ШИМ?

    Нет, от самой реализации ПИД-регулятора. В коде написано, что если выходной сигнал ушел в отриц. сторону, то направление движения меняется

     

    2 hours ago, Огонёк said:

     Поставь в коде проверку, что перед переключением направления двигатель остановился.

    Вот так?

    Скриншот 17-09-2022 224311.jpg

  16. 40 minutes ago, Огонёк said:

     Двигатель будет разгоняться с максимально возможным в данных условиях ускорением - ну и что с того?

    У меня есть подозрение, что китайский двигатель этого не выдержит. Даже не то, что заполнение ШИМ резко меняется, а то что может резко меняться и направление вращения. Если двигатель за очень короткий промежуток времени несколько раз на максимальной частоте поменяет свое направление, может ли это привести к чему-то плохому?

    27 minutes ago, Lexter said:

    для этого надо написать фрагмент программы с изменением коэффициента заполнения ШИМ от и до заданных значений за заданное время.

    Да, именно это и нужно. Но я совсем не могу даже придумать алгоритм для кода.

  17. Всем привет. Я работаю на СТМ32 BluePill. Есть двигатель, силовой драйвер и источник питания.

    Для того, чтобы подать напряжение на двигатель через ШИМ, нужно задать коэффициент заполнения. Я настроил таймер с возможностью генерации ШИМ -сигнала. Настройки его на картинке 1. То есть максимальное значение, которое можно подать, это 1000. 

    Суть в том, что я написал регулятор скорости через прерывание (выполняется каждые 10 мс, скорость вращения находится через энкодер на том же прерывании).Выходной сигнал - это нужная скорость вращения.

    У этого регулятора выходной сигнал ограничен до макс. диапазона шим (то есть о 0 до 1000 может быть максимальный выходной сигнал). Значение этого сигнала подается на ШИМ (Я написал в коде как TIM3 -> CCR1 = out)

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

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

    Скриншот 17-09-2022 191642.jpg

    Скриншот 17-09-2022 191833.jpg

  18. 15 minutes ago, СЕРСАР said:

    Каков вопрос, такой и ответ!

    Ты о чём student? Садись Два! За то что не Корректно поставлена у тебя Задача!

    Тебя что в школе не учили правильно задачки решать?! Правильная задача начинается с Дано:

    А у тебя всё сообщение - набор букф! 

    Это вообще что?!

    Свою неуёмную агрессию оставьте при себе. Идите погуляйте, свежим воздухом подышите. Не надо засорять форум своими мусорными сообщениями.

  19. Как я понял, для того чтобы дать напряжение на двигатель (через таймер), достаточно обратиться к регистру CCR и диапазон значений будет варьироваться от 0 до значения Counter Period (Условно ширина импульса).
    Дело в том, что при реализации ПИД-регулятора произошло резкое увеличение тока, которое вывело все из строя. Я предполагаю, что это было связано с тем, что в зависимости от знака выходного сигнала менялось направление двигателя, и его резкое многократное изменение могло просто привести к резкому скачку напряжения. Я ограничиваю выходной сигнал в промежутке от 0 до макс. значения CCR регистра, также я ограничиваю интегральную составляющую на такой же диапазон. Но в любом случае - произошел выход из строя.

    Можете ли вы мне помочь с этим? Действительно ли это могло произойти из-за изменения направлений вращения. Как это можно исправить. Нужно ли помимо выходного сигнала и интегр. составляющей что-то ограничивать?

  20. On 9/3/2022 at 6:12 PM, Yurkin2015 said:

    Достаточно. А какое расстояние будет между STM32? 

    Меньше 15 см - в корпусе. Не подскажете, как обработать эту информацию в Slave? Ну то есть, как сделать так, чтобы slave стм-ка получила инфу и где она будет храниться?

  21. 13 hours ago, zeconir said:

    @Владимир Манзаров "Я практически ничего не нашел в Интернете, поэтому прошу помощи здесь." Ага, конечно верим. https://yandex.fr/search/?text=STM32+HAL+SPI&from=os&clid=1836587&lr=39

    Я искал связь между двумя STM32, но не нашел ничего такого, что могло бы помочь мне. Вы на другой вопрос можете ответить ("Достаточно ли этих строк, чтобы отправить одной STM32 какую-либо информацию, или этого мало?")?

    4 hours ago, vavaav said:

    Вот тут https://habr.com/ru/company/skyeng/blog/456094/?ysclid=l7lex46ajm661814951 хорошо расписано по работе с SPI но без STM32CubeMX

    Спасибо

  22. Есть задача на семестр - обеспечить связь между двумя контроллерами BluePill. Я практически ничего не нашел в Интернете, поэтому прошу помощи здесь.

    Достаточно ли этих строк, чтобы отправить одной STM32 какую-либо информацию, или этого мало?

    И доп. вопрос - если все-таки в этом коде все верно, то как получить Slave STM-ке эту информацию? Через HAL_SPI_Recieve? Какое условие должно быть, чтобы уведомить ведомую плату о получении информации по SPI? 

    Сейчас нет возможности работать с железом, поэтому не могу проверить никак.

    Скриншот 02-09-2022 223801.jpg

    Скриншот 02-09-2022 224820.jpg

    Скриншот 02-09-2022 224824.jpg

×
×
  • Создать...