Многофазные электродвигатели: теория и моделирование
Author
In [ ]:
using LinearAlgebra
function clarke_transform_nphase(n_phases::Int; verbose=true)
# Инициализация матриц
T_Clarke = zeros(2, n_phases)
T_Inverse = zeros(n_phases, 2)
# Заполнение матриц
for k in 1:n_phases
angle = 2π*(k-1)/n_phases
T_Clarke[1, k] = cos(angle)
T_Clarke[2, k] = sin(angle)
T_Inverse[k, 1] = cos(angle)
T_Inverse[k, 2] = sin(angle)
end
# Нормализация
T_Clarke = (2/n_phases) * T_Clarke
if verbose
is_constructible = check_gauss_wantzel(n_phases)
println("\n========================================")
println("Конфигурация: $n_phases-фазная система")
println("========================================")
println(is_constructible ? "✓ Удовлетворяет теореме Гаусса-Ванцеля" :
"✗ НЕ удовлетворяет теореме Гаусса-Ванцеля")
println("Угол между фазами: $(round(360/n_phases, digits=2))°")
println("\nНорма ошибки ортогональности: $(norm(T_Clarke * T_Inverse - I(2)))")
end
return T_Clarke, T_Inverse
end
function check_gauss_wantzel(n::Int)
fermat_primes = [3, 5, 17, 257, 65537]
temp_n = n
while mod(temp_n, 2) == 0
temp_n = div(temp_n, 2)
end
temp_n == 1 && return true
for fp in fermat_primes
if mod(temp_n, fp) == 0
temp_n = div(temp_n, fp)
mod(temp_n, fp) == 0 && return false
end
end
return temp_n == 1
end
# Параметры синхронного генератора с постоянными магнитами
n = 6; # Число фаз
Pnom = 800e3; # Номинальная мощность генератора, Вт (800 кВт)
wnom = 39.27; # Номинальная угловая скорость вращения, рад/с
Mnom = Pnom/wnom; # Номинальный момент, Н·м
Inom = 2040; # Номинальный ток, А
Lsd = 0.0023; # Индуктивность по продольной оси (d-axis), Гн
Lsq = 0.002; # Индуктивность по поперечной оси (q-axis), Гн
Rs = 0.077; # Активное сопротивление статора, Ом
zp = 8; # Количество пар полюсов
Psi_pm = 2/3*(Mnom/(zp*Inom)); # Потокосцепление постоянных магнитов, Вб
J = 113; # Момент инерции ротора, кг·м²
# Параметры преобразователя
Unom = 380; # Номинальное выходное напряжение, В
Fpwm = 10000; # Частота ШИМ (широтно-импульсной модуляции), Гц
Tpwm = 1/Fpwm; # Период ШИМ, с
# Примеры использования
T_Clarke, T_Inverse = clarke_transform_nphase(n)
Out[0]: