Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

stm32 сервопривод.

Вс фев 06, 2022 15:03:26

Приветствую. Решил опробовать сервопривод и столкнулся с проблемой. при повороте вала на какой-либо градус иногда возникают колебания вала.
Прикладываю код инициализации ШИМ. В общем проблема что-то в духе перерегулирования. Вопрос, как избавиться от колебаний? Иногда привод четко поворачивает, иногда с колебаниями. Сервопривод 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

А импульсы по даташиту? Длина и скважность?
Я когда начинал баловаться с сервой, с дуру просто ШИМил с разным заполнением. Естественно, получил ХЗ что. Почитал документацию на сервик - тогда понял, как правильно.
И действительно, ты начинаешь с
TIM10->CCR1 = TIM10->ARR/2; // коэффициент заполнения 50%

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

Re: stm32 сервопривод.

Вс фев 06, 2022 15:30:00

Со скважностью всё, вроде, четко. Поворачивается на тот угол на который нужно. На привод на этот вообще какая-то мутная документация была. Кое-как каую-то инфу в гугле нашел, что ШИМ 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

(2000/180 * deg)

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

Re: stm32 сервопривод.

Вс фев 06, 2022 16:01:52

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

Re: stm32 сервопривод.

Вс фев 06, 2022 16:26:29

Понял, спасибо :beer:

Re: stm32 сервопривод.

Вс фев 06, 2022 16:38:27

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

Re: stm32 сервопривод.

Вс фев 06, 2022 16:56:36

Пришел в магаз, взял один из самых дешевых) видимо придется посмотреть что-нибудь получше)

Re: stm32 сервопривод.

Чт фев 24, 2022 16:00:26

Проблема решена. пришел сервик с али подороже. Тот же самый код. Всё чётко. Как и писали выше проблема оказалась в самом сервоприводе. Всем кто помог спасибо)
Ответить