Например TDA7294

Форум РадиоКот • Просмотр темы - stm32 сервопривод.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 26, 2025 22:24:04

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 15:03:26 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн июл 31, 2017 10:53:04
Сообщений: 48
Рейтинг сообщения: 0
Приветствую. Решил опробовать сервопривод и столкнулся с проблемой. при повороте вала на какой-либо градус иногда возникают колебания вала.
Прикладываю код инициализации ШИМ. В общем проблема что-то в духе перерегулирования. Вопрос, как избавиться от колебаний? Иногда привод четко поворачивает, иногда с колебаниями. Сервопривод ES08MA ii

Код:
void init_servo_PWM(void) {
   __HAL_RCC_TIM10_CLK_ENABLE();
   /* f = 50 Гц. Время периода 20 мс */
   TIM10->ARR = (20000 - 1); // период в микросекундах
   TIM10->PSC = (120 - 1); // предделитель

   TIM10->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // режим ШИМ1
   TIM10->CCMR1 |= TIM_CCMR1_OC1PE; // буферизируем CCR1. необходимо в шиме. Подгрузка осуществляется только после события обновления
   TIM10->CCMR1 &= ~TIM_CCMR1_CC1S; //канал на выход

   TIM10->CCR1 = TIM10->ARR/2; // коэффициент заполнения 50%
   TIM10->CCER &= ~TIM_CCER_CC1P; // активный сигнал высокий
   TIM10->CCER |= TIM_CCER_CC1E; //   активировать выход OC1
   TIM10->EGR = TIM_EGR_UG; //необходимо установить для установки всех коэффициентов

   TIM10->CR1|= TIM_CR1_CEN; // Запуск таймера
}


В основном цикле тупо поворачиваю вал на 30 градусов, для эксперимента. Код
Код:
   while (1) {
      set_servo_rot_angle(0);
      HAL_Delay(1000);
      set_servo_rot_angle(30);
      HAL_Delay(1000);
      set_servo_rot_angle(60);
      HAL_Delay(1000);
      set_servo_rot_angle(90);
      HAL_Delay(1000);
      set_servo_rot_angle(120);
      HAL_Delay(1000);
      set_servo_rot_angle(150);
      HAL_Delay(1000);
      set_servo_rot_angle(180);
      HAL_Delay(1000);
      set_servo_rot_angle(150);
      HAL_Delay(1000);
      set_servo_rot_angle(120);
      HAL_Delay(1000);
      set_servo_rot_angle(90);
      HAL_Delay(1000);
      set_servo_rot_angle(60);
      HAL_Delay(1000);
      set_servo_rot_angle(30);
      HAL_Delay(1000);
   }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 15:19:59 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
А импульсы по даташиту? Длина и скважность?
Я когда начинал баловаться с сервой, с дуру просто ШИМил с разным заполнением. Естественно, получил ХЗ что. Почитал документацию на сервик - тогда понял, как правильно.
И действительно, ты начинаешь с
Цитата:
TIM10->CCR1 = TIM10->ARR/2; // коэффициент заполнения 50%

А положено полторы миллисекунды для среднего положения ротора. Т.е. в CCR1 следует загнать 1499.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 15:30:00 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн июл 31, 2017 10:53:04
Сообщений: 48
Рейтинг сообщения: 0
Со скважностью всё, вроде, четко. Поворачивается на тот угол на который нужно. На привод на этот вообще какая-то мутная документация была. Кое-как каую-то инфу в гугле нашел, что ШИМ 50Гц и 500мкс - это поворот на -90град, 2500мкс поворот на +90град. 1500мкс - 0 град соответственно. Все сделал, проверил, работает. Но иногда перерегулирование возникает. Но в конечном итоге он свой угол отрабатывает. мне как бы не критично, но какую-то муть оставлять не хочется

Добавлено after 1 minute 2 seconds:
Код:
void set_servo_rot_angle(uint8_t deg) {
   TIM10->CCR1 = 500 + (2000/180 * deg); // коэффициент заполнения
}



Изменяю вот в этой функции. В инициализацию вбил меандр.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 15:35:54 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
Цитата:
(2000/180 * deg)

Скорей всего, препроцессор gcc записал 2000/180 как константу 11! И получается 11*deg, т.е. уже до честных 180° оно не довернется немного.
А колебания возникают, возможно, из-за глюкавости самого сервика. У меня тоже самый дешевый сервик плохо держал некоторые углы: буквально небольшое усилие, и начинается вибрация...

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 16:01:52 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
извиняюсь, с сервой дело не имел, но интуитивно ...
я так понял - двиг борется с пружиной. И если есть такая проблема - или менять машинку или применять метод упр. с плавным подводом к точке.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 16:26:29 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн июл 31, 2017 10:53:04
Сообщений: 48
Рейтинг сообщения: 0
Понял, спасибо :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 16:38:27 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
еще раз извиняюсь
пружину то я предположил зря - там собставенный контроллер, получается сервик поддельный.
У качественного, вроде как, этой болезни быть не должно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Вс фев 06, 2022 16:56:36 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн июл 31, 2017 10:53:04
Сообщений: 48
Рейтинг сообщения: 0
Пришел в магаз, взял один из самых дешевых) видимо придется посмотреть что-нибудь получше)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 сервопривод.
СообщениеДобавлено: Чт фев 24, 2022 16:00:26 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн июл 31, 2017 10:53:04
Сообщений: 48
Рейтинг сообщения: 0
Проблема решена. пришел сервик с али подороже. Тот же самый код. Всё чётко. Как и писали выше проблема оказалась в самом сервоприводе. Всем кто помог спасибо)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y