Коммутация ротора с помощью энкодера
Привет ребята,
Я пытаюсь коммутировать двигатель BLDC с помощью энкодера, и одна ревуляция-это значение 1024 энкодера.И двигатель 10 пар полюсов,в этом случае 18 кодирующее значение(60 электрических градусов) равно 6 механическим градусам, так что, когда Ротор достигнет 18 изменений, я должен выполнить следующий этап.
Например, теперь Ротор в 0. положение и поворот кодера 13 значение, а затем поворот CCW -10(1024-13-10= 1001) я не могу решить, как я могу найти правильную последовательность.Я не могу найти хороший алгоритм решения для этого?Как люди делают это правильно?
Что я уже пробовал:
encoderValue = Get_Encoder_Pos(); if(((encoderValue - xEncoderValue) >= 18) && dir==1) { Set_Commutation_and_DutyCycle(table[x],PWM); } //This doesn't work,If motor rotate CCW from 0 to in this case enc value will increase 1024-1023 .... like that.
CPallini
Пожалуйста, детализируйте свой сценарий и будьте точны. Например, если оборот соответствует 1024 на энкодере, то 18 должно соответствовать примерно 6 (а не 60) градусам.
Emrah Duatepe
каждые 6 механических градусов равны 60 электрическим градусам в соответствии с 10 полюсными двигателями,поэтому для энкодера max 1024 подсчета, 360/1024 = 0.3515625 и 6 механических градусов равны примерно 17 значениям энкодера.Я собираюсь попробовать сделать кодировщик карт, как
1,2,3 значение кодера соответствует таблице[1],таблице[2],таблице[3] = активировать фазы А и с так, вероятно, работает таблица[18] = активировать разные фазы.
CPallini
Предполагая, что энкодер измеряет электрический угол, то, согласно следующей странице:
https://www.researchgate.net/post/Is_there_a_relation_between_the_electrical_and_mechanical_angle
значение кодера 18 будет соответствовать
около 6 градусов (электрический угол)
около 30 градусов (механический угол)
Тем не менее, что вы пытаетесь сделать? Это то, что должна вычислить ваша программа?
И все же мне это непонятно.
Emrah Duatepe
код, который я указываю выше, не является хорошим подходом, уже неправильным.Я пытаюсь создать таблицу, связанную с перемещением двигателя и значениями энкодера, чтобы открыть фазы в правильной последовательности.Из-за разрешения энкодера я получаю ошибку разрешения.60 электрических градусов для 20-полюсного двигателя для 60 электрических градусов равно значению энкодера 8.53333.Полностью электрическая степень составляет 20*360 для 20 полюсов,но формула говорит (20/2)*360 ? Я в замешательстве.20 полюсов означает 20 магнитных, и каждый магнитный создает один 360-й электрический градус.