Приветствую. Решил опробовать сервопривод и столкнулся с проблемой. при повороте вала на какой-либо градус иногда возникают колебания вала. Прикладываю код инициализации ШИМ. В общем проблема что-то в духе перерегулирования. Вопрос, как избавиться от колебаний? Иногда привод четко поворачивает, иногда с колебаниями. Сервопривод 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 градусов, для эксперимента. Код
А импульсы по даташиту? Длина и скважность? Я когда начинал баловаться с сервой, с дуру просто ШИМил с разным заполнением. Естественно, получил ХЗ что. Почитал документацию на сервик - тогда понял, как правильно. И действительно, ты начинаешь с
А положено полторы миллисекунды для среднего положения ротора. Т.е. в CCR1 следует загнать 1499.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Со скважностью всё, вроде, четко. Поворачивается на тот угол на который нужно. На привод на этот вообще какая-то мутная документация была. Кое-как каую-то инфу в гугле нашел, что ШИМ 50Гц и 500мкс - это поворот на -90град, 2500мкс поворот на +90град. 1500мкс - 0 град соответственно. Все сделал, проверил, работает. Но иногда перерегулирование возникает. Но в конечном итоге он свой угол отрабатывает. мне как бы не критично, но какую-то муть оставлять не хочется
Скорей всего, препроцессор gcc записал 2000/180 как константу 11! И получается 11*deg, т.е. уже до честных 180° оно не довернется немного. А колебания возникают, возможно, из-за глюкавости самого сервика. У меня тоже самый дешевый сервик плохо держал некоторые углы: буквально небольшое усилие, и начинается вибрация...
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
извиняюсь, с сервой дело не имел, но интуитивно ... я так понял - двиг борется с пружиной. И если есть такая проблема - или менять машинку или применять метод упр. с плавным подводом к точке.
еще раз извиняюсь пружину то я предположил зря - там собставенный контроллер, получается сервик поддельный. У качественного, вроде как, этой болезни быть не должно.
Проблема решена. пришел сервик с али подороже. Тот же самый код. Всё чётко. Как и писали выше проблема оказалась в самом сервоприводе. Всем кто помог спасибо)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения