Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Simulink i sinusoida

11 Cze 2007 09:14 2280 5
  • Poziom 11  
    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
  • Poziom 13  
    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.
  • Poziom 11  
    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
  • Pomocny post
    Poziom 12  
    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.
  • Poziom 13  
    Widzę ze rozwiązanie Adoxxyz jest dość dobre, ja myślałem bardziej o napisaniu S-funkcji w C.
  • Poziom 11  
    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