форкнуто от main/python-labs
Родитель
7d3defa707
Сommit
d0c4d471a1
@ -0,0 +1,2 @@
|
|||||||
|
import MM2
|
||||||
|
print('y=',MM2.vyhod)
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
def usilitel(xt, k):
|
||||||
|
"""
|
||||||
|
Усилитель (пропорциональное звено)
|
||||||
|
xt - входной сигнал
|
||||||
|
k - коэффициент усиления
|
||||||
|
"""
|
||||||
|
return k * xt
|
||||||
|
|
||||||
|
def realdvig(xt, k, T, y_prev, yin_prev):
|
||||||
|
"""
|
||||||
|
Реальный двигатель (апериодическое звено 1-го порядка)
|
||||||
|
xt - входной сигнал
|
||||||
|
k - коэффициент передачи
|
||||||
|
T - постоянная времени
|
||||||
|
y_prev - предыдущее значение выходного сигнала
|
||||||
|
yin_prev - предыдущее значение внутренней переменной
|
||||||
|
Возвращает [y_current, yin_current]
|
||||||
|
"""
|
||||||
|
# Дискретная реализация апериодического звена
|
||||||
|
# Принимаем dt = 1 для простоты
|
||||||
|
dt = 1.0
|
||||||
|
yin_current = yin_prev + (xt - yin_prev) * dt / T
|
||||||
|
y_current = k * yin_current
|
||||||
|
return [y_current, yin_current]
|
||||||
|
|
||||||
|
def tahogen(xt, k, y_prev):
|
||||||
|
"""
|
||||||
|
Тахогенератор (интегрирующее звено)
|
||||||
|
xt - входной сигнал (скорость вращения)
|
||||||
|
k - коэффициент передачи
|
||||||
|
y_prev - предыдущее значение выходного сигнала
|
||||||
|
"""
|
||||||
|
# Дискретная реализация интегратора
|
||||||
|
dt = 1.0
|
||||||
|
y_current = y_prev + k * xt * dt
|
||||||
|
return y_current
|
||||||
|
|
||||||
|
def nechus(xt, Xm):
|
||||||
|
"""
|
||||||
|
Звено "зона нечувствительности"
|
||||||
|
xt - входной сигнал
|
||||||
|
Xm - половина ширины зоны нечувствительности
|
||||||
|
"""
|
||||||
|
if abs(xt) <= Xm:
|
||||||
|
return 0.0
|
||||||
|
elif xt > Xm:
|
||||||
|
return xt - Xm
|
||||||
|
else:
|
||||||
|
return xt + Xm
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
|
||||||
|
k1=float(znach[0])
|
||||||
|
T=float(znach[1])
|
||||||
|
k2=float(znach[2])
|
||||||
|
Xm=float(znach[3])
|
||||||
|
A=float(znach[4])
|
||||||
|
F=float(znach[5])
|
||||||
|
N=int(znach[6])
|
||||||
|
|
||||||
|
import math
|
||||||
|
vhod=[]
|
||||||
|
for i in range(N):
|
||||||
|
vhod.append(A*math.sin((2*i*math.pi)/F))
|
||||||
|
|
||||||
|
import MM1 as mod
|
||||||
|
yi1=0;yin1=0;yi2=0
|
||||||
|
vyhod=[]
|
||||||
|
for xt in vhod:
|
||||||
|
xt1=xt-yi2 #отрицательная обратная связь
|
||||||
|
[yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1)
|
||||||
|
yi2=mod.tahogen(yin1,k2,yi2)
|
||||||
|
yt=mod.nechus(yin1,Xm)
|
||||||
|
vyhod.append(yt)
|
||||||
|
После Ширина: | Высота: | Размер: 60 KiB |
Загрузка…
Ссылка в новой задаче