Jump to content

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

Members
  • Posts

    32
  • Joined

  • Last visited

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

  1. Всем привет. Настраиваю таймер на генерацию ШИМ сигнала. Появился вопрос по поводу выбора Counter Mode. Помимо Up, Down которые сбрасывают счетчик на фронте и спаде, есть еще и center aligned. Как я понял, этот режим не сбрасывает счетчик, а позволяет плавно переходить от нуля до ARR и обратно. Но тут у меня появился вопрос: меняется ли период ШИМ сигнала при этом? Мне просто необходимо вызывать прерывание по середине импульса ШИМ, но если период ШИМ сигнала при этом меняется, то это мне не подойдет.
  2. Всем привет. Довольно глупый вопрос, но хотелось бы уточнить. Допустим есть два включенных таймера. Каждый вызывает прерывание по переполнению, но у первого таймера период переполнения 100 мс, а у второго - 10 мс. Вопрос: включаются ли эти таймеры одновременно? То есть, когда второй таймер отработает прерывание 10 раз, последнее прерывание вызовется одновременно с первым?
  3. Без каракулей не получилось, но вот примерно так выглядит схема подкючения. Силовой драйвер другой, на 24 вольта, ну и вместо arudino стоит stm32 f103c8t6, в остальном все так же. Плюс датчик тока ACS758 50 A источник питания не батарейка и мотор не на 5 В, а на 24 В)))
  4. Хорошо, буду знать. То есть тогда следует мерить ток не в середине импульса ШИМ, а в его конце-начале?
  5. Нет. Я предполагаю, что ток отстает в скорости нарастания от напряжения, как на картинке. Если что, ШИМ - это черная линия, а ток - красная. Поэтому для меня довольно логично считать ток на середине периода ШИМ. А для вас?
  6. Дело в том, что датчик тока устроен на эффекта Холла. Есть там такая характеристика, как чувствительность (отношение напряжение к силе тока). То есть через АЦП показывает по факту напряжение, но его можно перевести в ток
  7. Всем привет. Есть силовой драйвер, двигатель постоянного тока (с каким возбуждением, не знаю), датчик тока и источник питания. Так вот, я вроде отладил датчик тока на значения, примерно равные тем, что показывает источник питания(24 V), по крайней мере на определенном диапазоне скважности ШИМ( управляю двигателем с помощью генерации ШИМ сигнала ). Так вот, если подавать на двигатель ШИМ сигнал со скважностью от 0 до 75%, то датчик тока показывает примерно те же значения, что и источник питания. Но стоит увеличить коэффициент заполнения от 75%, то датчик тока показывает довольно низкую силу тока, на источнике питания при этом ток все еще растет при увеличении оборотов. Это нормальное явление или неправильное? Можно ли объяснить это с точки зрения электротехники или ошибка все-таки в коде? Я беру значения АЦП датчика тока на половине периода ШИМ сигнала, то есть примерно тогда, когда амплитуда тока примерно максимальна.
  8. Всем привет, работаю с стм32 bluepill. Устанавливаю третий таймер на ШИМ генерацию (Канал 1). Задача следующая: вызвать прерывания по заполнению счетчика на половину. Встроенный коллбек не работает, через systick тоже, да и его приоритет по-моему самый низкий из всех. Как можно грамотно вызывать прерывание по определённому значению счетчика? (Тактовая частота 72 мГц, предделитель 24, ARR регистр = 1000). while(1) использовать нельзя.
  9. Правда? Тогда спасибо огромное. Сегодня попробую
  10. Мне нужно именно такое прерывание, которое вызывается в середине импульса ШИМ. То, что вы написали, обычно работает по переполнению, а мне нужно заполнение до половины
  11. Всем привет, работаю на стм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 функция?
  12. Всем привет, я работаю с СТМ32 BluePill. Есть датчик тока ACS712 на диапазон +-5А. Мне необходимо достаточно точно определять значения переменного тока. Дело в том, что для работы с этим датчиком нужно всегда знать условный ноль, то есть когда на датчик тока идет 3.3/2 В. По АЦП мне показывает 2138, вместо необходимых 2048 или около (макс значение ацп 4096). Что с этим делать? Также хочу спросить по поводу кода для поиска условного нуля. Я сделал такую реализацию: в начале работы (когда нет нагрузки) каждые 10 мс снимаются показания с АЦП, складываются и делятся на число измерений. Таким образом можно находить условный ноль. Но есть одна проблема - при любой подключенной нагрузке, даже когда ток не идет, а просто есть подключение, значение тока уходит с нуля на порядок. Как можно решить такую проблему? Это можно реализовать программно или нужно ковыряться где-то еще?
  13. Добрый день. Есть задача - постоянно знать значение силы тока, идущего на двигатель. Есть два датчика тока, еще не купленных. Они оба работают на эффекте Холла, но один измеряет диапазон токов от -50 до 50А (Allegro ACS758), а другой от -5 до 5А (ACS712). Суть в том, что на двигателе сила тока едва ли будет выше 4 А, а датчик тока на 5А найти гораздо сложнее, чем на 50. Вопрос: если нужно довольно точное измерение тока, то реально лучше поискать датчик на нормальный диапазон токов (-5.... 5 А) или можно работать и с забугорными диапазонами?
  14. Извиняюсь, наоборот. заданное минус текущее. Пишу код сам. Ну смотрите, мотор может увеличить свою скорость так, что заданное значение станет меньше, чем текущее. Это можно реализовать просто внешними воздействиями. Просто условное колесо, которое крутится от мотора, пнуть или кинуть так, что он прокрутится и его скорость увеличится. Это ведь тоже надо регулировать.
  15. Да, позволяет. Выходной сигнал может войти в минус из-за ошибки регулирования. То есть если текущее значение стало меньше, чем нужное, то направление меняется (ошибка регулирования - текущее знач. минус необходимое)
  16. Нет, от самой реализации ПИД-регулятора. В коде написано, что если выходной сигнал ушел в отриц. сторону, то направление движения меняется Вот так?
  17. У меня есть подозрение, что китайский двигатель этого не выдержит. Даже не то, что заполнение ШИМ резко меняется, а то что может резко меняться и направление вращения. Если двигатель за очень короткий промежуток времени несколько раз на максимальной частоте поменяет свое направление, может ли это привести к чему-то плохому? Да, именно это и нужно. Но я совсем не могу даже придумать алгоритм для кода.
  18. Всем привет. Я работаю на СТМ32 BluePill. Есть двигатель, силовой драйвер и источник питания. Для того, чтобы подать напряжение на двигатель через ШИМ, нужно задать коэффициент заполнения. Я настроил таймер с возможностью генерации ШИМ -сигнала. Настройки его на картинке 1. То есть максимальное значение, которое можно подать, это 1000. Суть в том, что я написал регулятор скорости через прерывание (выполняется каждые 10 мс, скорость вращения находится через энкодер на том же прерывании).Выходной сигнал - это нужная скорость вращения. У этого регулятора выходной сигнал ограничен до макс. диапазона шим (то есть о 0 до 1000 может быть максимальный выходной сигнал). Значение этого сигнала подается на ШИМ (Я написал в коде как TIM3 -> CCR1 = out) Но как я понимаю, этот скорость нарастания данного сигнала следует ограничивать, то есть чтобы не было такой ситуации, что выходной сигнал резко перешел от 0 до 1000. Просто источник тока я включаю немного позже, и за это время выходной сигнал естественно очень сильно возрастает. Почитав пару статей про двигатель постоянного тока, я понял, что такой ситуации следует избегать. Везде пишут про ограничение скорости нарастания сигнала. Как это можно ограничить программно? Прошу помочь.
  19. Свою неуёмную агрессию оставьте при себе. Идите погуляйте, свежим воздухом подышите. Не надо засорять форум своими мусорными сообщениями.
  20. Добрый день, можете пояснить, на какой именно вопрос вы ответили?
  21. Как я понял, для того чтобы дать напряжение на двигатель (через таймер), достаточно обратиться к регистру CCR и диапазон значений будет варьироваться от 0 до значения Counter Period (Условно ширина импульса). Дело в том, что при реализации ПИД-регулятора произошло резкое увеличение тока, которое вывело все из строя. Я предполагаю, что это было связано с тем, что в зависимости от знака выходного сигнала менялось направление двигателя, и его резкое многократное изменение могло просто привести к резкому скачку напряжения. Я ограничиваю выходной сигнал в промежутке от 0 до макс. значения CCR регистра, также я ограничиваю интегральную составляющую на такой же диапазон. Но в любом случае - произошел выход из строя. Можете ли вы мне помочь с этим? Действительно ли это могло произойти из-за изменения направлений вращения. Как это можно исправить. Нужно ли помимо выходного сигнала и интегр. составляющей что-то ограничивать?
  22. Меньше 15 см - в корпусе. Не подскажете, как обработать эту информацию в Slave? Ну то есть, как сделать так, чтобы slave стм-ка получила инфу и где она будет храниться?
  23. Я искал связь между двумя STM32, но не нашел ничего такого, что могло бы помочь мне. Вы на другой вопрос можете ответить ("Достаточно ли этих строк, чтобы отправить одной STM32 какую-либо информацию, или этого мало?")? Спасибо
  24. Есть задача на семестр - обеспечить связь между двумя контроллерами BluePill. Я практически ничего не нашел в Интернете, поэтому прошу помощи здесь. Достаточно ли этих строк, чтобы отправить одной STM32 какую-либо информацию, или этого мало? И доп. вопрос - если все-таки в этом коде все верно, то как получить Slave STM-ке эту информацию? Через HAL_SPI_Recieve? Какое условие должно быть, чтобы уведомить ведомую плату о получении информации по SPI? Сейчас нет возможности работать с железом, поэтому не могу проверить никак.
×
×
  • Create New...