Формирование ШИМ для трёхфазного сервомотора управляемого через IGBT модуль.

Garpastym
Offline
Зарегистрирован: 30.06.2015

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

 

Вопрос - кто знает математическую модель формирования Пространственно Векторного ШИМ (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 модуль силовой платы

http://sendvid.com/dd4utlra

 

Результат формирования шим.

результат осцилограммы

 

 

 

 

 

 

 

sivanko
Offline
Зарегистрирован: 25.02.2016

Добрый день. А как подключено к силовому модулю (схема) ?

Garpastym
Offline
Зарегистрирован: 30.06.2015

Схема подключения простая. Наш паяльник разработал силовую плату питания сервомотора. Там стоит igbt модуль. Соединения моего контроллера и его платы следующим образом
Ардуино
Pwm pin А+/Pwm pin A- это фаза A(2 пина)
Pwm pin B+/Pwm pin B- это фаза B(2 пина)
Pwm pin C+/Pwm pinC - это фаза C(2 пина)
Gnd.

И втыкаю в обозначенные пины на силовой плате паяльника. Мотор крутится, видно на прикреплённом видео. Но это, как мне говорят не то