logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak aktywować sygnał sinusoidalny w Simulink za pomocą bloku If?

ilonan 11 Cze 2007 09:14 2715 5
REKLAMA
  • #1 3973049
    ilonan
    Poziom 12  
    Posty: 49
    Pomógł: 1
    Ocena: 6
    Witam,

    Mam problem w Simulinkiem, otóż próbuje aktywować sygnał sinusoidy poprzez stan "0" na wejściu. Zrobiłem układzik warunkowy który daje mi "1" lub "0" (VisualNastran + bloczek "compare to constant") i tu zaczeły się schody. Rozdzieliłem sygnał na ten co ma być tym trigerem dla sinusoidy i na Blok iF z grupy Bloki i Procesy w Bibliotece Simulinka ponieważ Blok If ponoć współpracuje tylko z Action Block więc i jego podłączyłem w sposób następujący. Wyjście z If Blocka na wejscie Action wejście Input1 wykasowałem z podsystemu zastępując go generatorem sinusoidy z wyjściem na Output1 we właściwościach Action (wewnątrz bloku Action) dałem z Hold na reset (ponieważ chce aby sisnusoida po przejściu sygnału sterowania z 1 na 0 zaczynała się od t=0). Puściłem to wszystko i wyskakuje błąd że wyjście z Action block nie może być bodajże o ile pamiętam continous. Próbowałem wywalić sinusoide poza układ action (teoretycznie nie powinien działac wtedy reset z action block) i wpiąć jako inpit i też nie działa. Czy ktoś ma jakies inne propozycje? próbowałem też z blokami Trigered i Enable Subsystem ale też nie działa :(.

    Dla tych co myślą językiem drabinki to problem sprowadza się do aktywacji Timera2 (działającego od t=0) na jednym szczeblu wydażeniem działającym w takcie Timera1 (tu akurat 1 lub 0) z innego szczebla drabinki.

    Dla wzrokowców rysunek (sorry na painta ale nic nie miałem pod ręką)

    Dla dociekliwych to jeszcze do kupy jest połączone selektorem gdzie to 1/0 jest sygnałem do wyboru jednego z dwóch wspomniany sin lub inny sygnał

    Sprawdziłem w sinulinku nazwy i małe sprostowanie:
    1. Nie biblioteka Bloków i Procesów ale Biblioteka "Subsystems"
    2. Nie Blok If ale "Switch Case"
    3. Nie Action Block ale "If Action Subsystem"

    Pozdrawiam,

    Ilonan
    Załączniki:
    • Jak aktywować sygnał sinusoidalny w Simulink za pomocą bloku If? untitled1.JPG (12.84 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 4021480
    Srubol
    Poziom 13  
    Posty: 52
    Pomógł: 4
    Ocena: 4
    Nie wiem czy dobrze rozumiem chodzi Ci o to ze gdy na wejściu do bloczka masz stan "0" to na wyjściu z niego masz mieć sinusoidę zaczynającą sie od 0.
    Jeśli tak to czy ten stan "0" jest wywoływany jednorazowo podczas symulacji i zawsze w tym samym czasie czy niezależny od czasu.
  • REKLAMA
  • #3 4025983
    ilonan
    Poziom 12  
    Posty: 49
    Pomógł: 1
    Ocena: 6
    Już myślałem że nikt nie odpowie, dzięki za zainteresowanie.

    Generalnie ta sinusoida startuje w czasie gdy zdarzenie do pliku symulacji zmienia sie z 0 na 1 lub odwrotnie bo to akurat mogę sobie dobrać używając bloczka AND albo NAND. Zdarzenie nie jest w określonym czasie i może wystąpić kilka razy (inny sygnał wejściowy do symulacji ma resetować/wstrzymywać generacje sinusoidy). Chyba wiem co miałeś na myśli z tym stałym czasem rozpoczęcia generowania sinusoidy, bo wtedy można by zadać generowanie jej z określonym opóźnieniem. Zakładając że cała symulacja działa w takcie timera 1 potrzebuje uruchomić zmianą stanu lini sterowania blok idący w takt timera 2 niezależnego od Timera 1.

    Całość można porównać do samochodu który idzie "swoim rytmem" i wycieraczek samochodowych które zaczynają ruch zawsze od określonej pozycji (stąd wymaganie że timer 2 zawsze idzie od zera -> sinusoida jest generowana zawsze począwszy od kąta 0 stopni) i można je w dowolnym czasie wyłączyć a kiedy je znów włączysz w ściśle nieokreślonym czasie znów zaczną prace od ustalonego miejsca.

    Prostsze porównanie nie przychodzi mi do głowy.

    Pozdrawiam

    Ilonan
  • REKLAMA
  • Pomocny post
    #4 4027104
    Adoxxyz
    Poziom 12  
    Posty: 38
    Pomógł: 2
    Moze to ci pomoze. Integratory na schemacie posiadaja wejscie "external reset", warunki poczatkowe:
    Integrator 1: IC = 1
    Integrator 2: IC = 0

    Threshold w Switch: 0.5

    Za pomoca Gain regulujesz czestotliwosc.

    Zalaczone wyniki symulacji.
    Sinusoida zawsze startuje od 0 gdy Pulse Generator da zbocze opadajace i utrzyma niski poziom.
    Załączniki:
    • Jak aktywować sygnał sinusoidalny w Simulink za pomocą bloku If? sch.png (2.75 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Jak aktywować sygnał sinusoidalny w Simulink za pomocą bloku If? sim.png (5.47 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #5 4033006
    Srubol
    Poziom 13  
    Posty: 52
    Pomógł: 4
    Ocena: 4
    Widzę ze rozwiązanie Adoxxyz jest dość dobre, ja myślałem bardziej o napisaniu S-funkcji w C.
  • #6 4043854
    ilonan
    Poziom 12  
    Posty: 49
    Pomógł: 1
    Ocena: 6
    Witam,

    Chyba coś sknociłem, bo u mnie działa to bynajmniej dziwnie. Przy sygnale 0 zaczyna sie rysować krzywa ale nie "nadąża" nawet wyrysować się do końca kiedy 0 schodzi na 1, w efekcie wygląda to trochę jak sygnał piłokształtny z przerwami przy sterowaniu na 1 - chyba nie wiem czemu to tak działa. Jednakże wykorzystałem koncepcje Adoxxyz do wygładzenia sinusoidy którą zrobiłem w podsystemie typu enabled z generatora sygnału o zewnętrznym samplowaniu z zegara cyfrowego. Jak naprawie swojego memorysticka lub kupie nowego (soon) to spróbuje zamieścić wykres tego co mi wyszło z koncepcji Adoxxyz i schemat tego jak ja to rozwiązałem.

    PS: mam chyba inną wersje simulinka bo u mnie w bloku 1/s jest jeszcze wejście na zewnętrzny warunek początkowy xo.

    Pozdrawiam,

    ilonan
REKLAMA