2013-10-19 35 views
10

Simulink'te yaptığım gibi bazı temel sistem simülasyonları için Yampa'yı kullanmaya çalışıyorum. Bu durumda, this simulink tutorial tarafından tanıtılan bir yay ve amortisör sistemini simüle etmek istiyorum.Yampa'da bir yay/amortisör sistemini simüle etme

system = time >>> force >>> displacement 

force = constant (m * g) 

displacement = feedback (-) (velocity >>> integral) (gain $ k/m) 0 
velocity  = feedback (-) integral    (gain $ c/m) 0 

feedback işlevi basic feedback loop oluşturur ve bunun gibi uygulanır:

feedback op a b b0 = loopPre b0 inner 
    where inner = arr (uncurry op) >>> a >>> (identity &&& b) 

Oh, ve: Ben sistemini temsil etmek şu sinyal fonksiyonları yazdım

gain x = arr (*x) 

Hassas pozitif sabitlerle, çılgınca kararsız bir sistem alıyorum:

plot of displacement/time

Ben geribildirim döngüleri inşa veya entegrasyon uyguluyorum şekilde belli ki yanlış bir şey var mı?

cevap

7

Değişim integral spring.hs itibaren imIntegral 0

displacement = feedback (-) (velocity >>> imIntegral 0) (gain $ k/m) 0 
velocity  = feedback (-) (imIntegral 0)   (gain $ c/m) 0 

için:

Yampa

kullanma Simulink'ne:

Simulink

Something komik h İntegral fonksiyonuna başvurmak, imIntegral 0'a değiştirmek, matlabdaki ile aynı eğriyi verir.

Tahminim, Integral'un bir örnekle geciktirilmiş olmasıdır, çünkü bir başlangıç ​​değeri yoktur, döngü davranışını değiştirir.

+0

Mükemmel, bunun için yığınlar teşekkürler! Ben 'integral' ile bazı basit testler yapmıştım, bu yüzden bir sorun olduğunu düşünmedim. 'Ölçek kapalı' olarak mı, yatay eksen mi demek istiyorsunuz? Kodum zamanı değil, her veri noktasının sadece #. –

+0

darn, bununla ilgili olarak, matlab ile simulink'i karşılaştırırken, y ölçeğinde fark yaratan bir şeyim vardı. – MdxBhmt

+1

Simulink'te aktarım gecikmesi eklemek, sistemi bulduğunuz duruma benzer şekilde kararsız hale getirir, bu yüzden olması gerekir. – MdxBhmt