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