Моделирование напорной характеристики насоса с частотно-регулируемым приводом

In [1]:
from scipy.interpolate import interp1d #интерполяция
import numpy as np #работа с массивами

Для примера возьмём насос Grundfos CR 3-3 напорная характеристика которого при частоте переменного тока 50 Гц (3000 об/мин) выглядит следующим образом (жирная линия - рабочий диапазон): title

In [2]:
#Возьмём несколько точек с напорной характеристики (включая две крайних)
Qs = np.array([1.19, 2, 3, 4, 4.43])
Hs = np.array([18.01, 16.55, 13.64, 8.91, 6.14])
Q_eff = 3.1 #подача, при которой насос имеет максимальное значение КПД
#Напорная характеристика насоса при частоте тока статора асинхронного двигателя 50 Гц (см. ссылку в конце статьи)
f_pump = interp1d(Qs, Hs, kind = 'cubic')
In [3]:
ns = np.array([50, 45, 40, 35, 30, 25]) #значения частот тока статора асинхронного электродвигателя насоса

Частотный преобразователь позволяет изменять частоту переменного тока в статоре электродвигателя, влияя тем самым на скорость вращения ротора насоса, приводимого этим электродвигателем.

Скорость вращения ротора насоса при частоте переменного тока 50 Гц зависит от параметров электродвигателя и режима работы насоса. Так, при подаче 3 м3/ч и напоре 14 м скорость вращения ротора рассматриваемого насоса составляет 2757 об/мин.

Чем выше потребляемая электродвигателем насоса мощность тем ниже скорость вращения его ротора. Примем, что скорость вращения ротора насоса изменяется в той же степени, что и частота переменного тока электродвигателя.

При изменении частоты вращения ротора насоса подача изменяется пропорционально относительному значению частоты, а напор - пропорционально квадрату относительного значения частоты:

$$Q_n = Q_{n_0} \frac{n}{n_0},\ \ \ H_n = H_{n_0} \left(\frac{n}{n_0}\right)^2$$

где $Q_{n_0}$, $H_{n_0}$ - подача и напор насоса при частоте тока 50 Гц, $n$ - частота тока для которой ищутся подача и напор, $Q_n$, $H_n$ - подача и напор при частоте тока $n$, $n/n_0$ - относительное значение частоты.

In [4]:
#Для каждого n приведём Qs и Hs к частоте n. Получим двумерные массивы (строка i - набор значений Q или H для n[i])
#для того чтобы получить двумерный массив необходимо преобразовать ns из строки в столбец
Qs_n = Qs * np.reshape(ns, (ns.shape[0], 1)) / ns[0]
Hs_n = Hs * (np.reshape(ns, (ns.shape[0], 1)) / ns[0]) ** 2
Qs_n
Out[4]:
array([[1.19 , 2.   , 3.   , 4.   , 4.43 ],
       [1.071, 1.8  , 2.7  , 3.6  , 3.987],
       [0.952, 1.6  , 2.4  , 3.2  , 3.544],
       [0.833, 1.4  , 2.1  , 2.8  , 3.101],
       [0.714, 1.2  , 1.8  , 2.4  , 2.658],
       [0.595, 1.   , 1.5  , 2.   , 2.215]])
In [5]:
#Для каждого n определим подачу при которой насос имеет максимальный КПД
Qs_eff = Q_eff * ns / ns[0]
In [6]:
f_pump_n = [] # набор напорных характеристик для разных частот тока статора электродвигателя
for i in range(ns.shape[0]):
    f_pump_n.append(interp1d(Qs_n[i], Hs_n[i], kind='cubic'))

#Набор значений подачи для построения графика для каждого n (int - interpolation, точки для интерполяции)
Qs_n_int = np.linspace(Qs_n[:, 0],Qs_n[:, -1], 51)
In [7]:
#Легенда для графика
legends = list(map(lambda x: str(x) + ' Гц', ns))
legends.append('Макс. КПД')
In [14]:
import matplotlib.pyplot as plt #библотека для построения графиков
plt.rcParams['figure.figsize'] = [23*0.7, 10*0.7]
plt.rcParams.update({'font.size': 16})
for i in range(ns.shape[0]):
    plt.plot(Qs_n_int[:,i], f_pump_n[i](Qs_n_int[:,i]))
for i in range(ns.shape[0]):
    plt.plot(Qs_eff[i], f_pump_n[i](Qs_eff[i]), 'ob')
plt.title("Напорные характеристики насоса при различных значениях\n" +
          "частоты переменного тока статора " +
          "асинхронного электродвигателя")
plt.xlabel('$Q, м^3/ч$')
plt.ylabel('$H, м$')
plt.xlim(Qs[0],Qs[-1]); plt.ylim(Hs[-1],Hs[0])
plt.xlim(0, 4.6); plt.ylim(0, 20)
plt.xticks(np.arange(0, 4.61, 0.2)); plt.yticks(np.arange(0, 21, 2))
plt.legend(legends); plt.grid()