Формирование ШИМ для трёхфазного сервомотора управляемого через IGBT модуль.
- Войдите на сайт для отправки комментариев
Чт, 07/04/2016 - 11:50
Доброго всем времени суток. Буржуйский форум по ардуино оказался безсилен, по сему обращаюсь к вам уважаемые форумчане, может у кого будут знания по поводу моего вопроса.
Вопрос - кто знает математическую модель формирования Пространственно Векторного ШИМ (SVPWM) для управления трёхфазным сервомотором?
Текущий код который я смог рассчитать
#include <TimerOne.h> // Подключаем библиотеку таймера =) const float pi = 3.14; //Обьявляем константы используемые в вычисляемой формуле SVPWM const float squ = 1/sqrt(3); const int fanPin1 = 5; //Пины с которых выходит положительно стартующий ШИМ const int fanPin2 = 6; // противофазу я настроил функцией complementaryEnable(); const int fanPin3 = 9;// Изменив библиотеку самого таймера(приведу ниже) const int fanPin4 = 10; const int fanPin5 = 11; const int fanPin6 = 13; const int fanPin7 = 29; const int fanPin8 = 30; const int fanPin9 = 31; float degree = 0; void setup(void) { Timer1.complementaryEnable(); Timer1.initialize(20); // 20 us = 25 kHz Serial.begin(9600); } void loop(void) { float sensorValue = analogRead(A0); //Считываем показателя 1кОм резюка для управления скоростью(её эмулирую изменяя угол альфа) sensorValue = sensorValue/10000; int amplitude = analogRead(A2)/2; //Так как работаем в половине dutcicle то и скважность тоже в половину делим degree = sensorValue+degree;// * (360.0 / 1023.0); //Собственно так и вращаю управляя и скоростью так как угол обнуляется то вращается бесконечно if(degree>=360) { degree = 0; } float rads = degree*(pi/180); //Переводим градусы в радианы int PWM1 = squ*amplitude*(sin(rads)+1/6*sin(3*rads))+511; //Собственно сама формула int PWM2 = squ*amplitude*(sin(rads-(2*pi/3))+1/6*sin(3*rads))+511; //OM int PWM3 = squ*amplitude*(sin(rads-(4*pi/3))+1/6*sin(3*rads))+511; //OM //MOTOR1 Timer1.pwm(fanPin1, PWM1); ..ну и выдаём сам ШИМ. Timer1.pwm(fanPin2, PWM2); Timer1.pwm(fanPin3, PWM3); //MOTOR2 Timer1.pwm(fanPin4, PWM1); Timer1.pwm(fanPin5, PWM2); Timer1.pwm(fanPin6, PWM3); //MOTOR3 Timer1.pwm(fanPin7, PWM1); Timer1.pwm(fanPin8, PWM2); Timer1.pwm(fanPin9, PWM3); // Serial.println(PWM1); // Serial.println(PWM2); // Serial.println(PWM3); // delay(1000); // Serial.println(PWM11); // Serial.println(PWM22); // Serial.println(PWM33); // delay(1000); // Serial.println(PWM111); // Serial.println(PWM222); // Serial.println(PWM333); // delay(1000); }
Видео запуска мотора через IGBT модуль силовой платы
Результат формирования шим.
Добрый день. А как подключено к силовому модулю (схема) ?
Схема подключения простая. Наш паяльник разработал силовую плату питания сервомотора. Там стоит igbt модуль. Соединения моего контроллера и его платы следующим образом
Ардуино
Pwm pin А+/Pwm pin A- это фаза A(2 пина)
Pwm pin B+/Pwm pin B- это фаза B(2 пина)
Pwm pin C+/Pwm pinC - это фаза C(2 пина)
Gnd.
И втыкаю в обозначенные пины на силовой плате паяльника. Мотор крутится, видно на прикреплённом видео. Но это, как мне говорят не то