Формирование ШИМ для трёхфазного сервомотора управляемого через 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.
И втыкаю в обозначенные пины на силовой плате паяльника. Мотор крутится, видно на прикреплённом видео. Но это, как мне говорят не то