Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Bascom AVR Pomiar przesunięcia fazowego

piwek9 07 Jan 2017 17:55 2241 48
Tespol
  • #1
    piwek9
    Conditionally unlocked
    Witam serdecznie .
    Nie pisałem w Bascom kilka lat, a właściwie nie pisałem kilka lat w niczym
    Mam problem niby prosty ale jednak nie mogę go przeskoczyć.
    potrzebuję zrobić pomiar przesunięcia fazy , sygnał to prostokąt 8kHz . nabazgrałem coś takiego ale nie działa prawidłowo.
    Mogę prosić o jakąś podpowiedź
    Bardzo dziękuję .
    Code: vbnet
    Log in, to see the code
  • Tespol
  • #3
    piwek9
    Conditionally unlocked
    Ten błąd już wyłapałem, chciałbym aby mierzyć czas
    INT0 start
    INT1 stop lub odwrotnie
    ale nic nie wychodzi pomiar pływa choć przesunięcie jest widoczne na oscyloskopie 90 st.
    testowałem już setki rozwiązań , ciągła porażka .
    Może idę w złym kierunku, liczyć jakąś zmienną ?
    brak mi pomysłów
    Dziękuję serdecznie za odzew .
  • Tespol
  • #5
    piwek9
    Conditionally unlocked
    Chyba znalazłem problem, powoli sobie zaczynam przypominać po latach, jednak analfabetyzm wsteczny zrobił swoje .Jestem na etapie nauki .Proszę o opinie czy dobrze kombinuję :
    mam kwarc 8Mhz
    pomiar robię na 8 kHz
    8 000 000 / 8 = 1 000 000 /8 000 =125
    Licznik zdąży zliczyć do 125 ?
    a chcę liczyć przesunięcie +- 90 st. więc lipa ?
    Może większy kwarc lub inny procek ?
    dziś na 1 Khz coś sensownego pokazywał , 57 wyświetlał stan timer1 a podawałem na INT0 i INT1 prostokąt i czytałem start na narastającym zboczu, stop na opadającym .Zmiana prescalera na 1 przy 8Khz pokazywał głupoty .

    Code: vbnet
    Log in, to see the code
  • #7
    piwek9
    Conditionally unlocked
    Wielkie dzięki zaraz sprawdzę, co z tego wyjdzie i napiszę . Proszę o podpowiedź czy idę w dobrym kierunku, czy te wypociny mogą działać ?
  • #8
    atom1477
    Level 43  
    Jeżeli częstotliwość impulsów jest stała to tak.
    Jeżeli nie to trzeba też mierzyć okres przebiegu.
    Dodatkowo jak chcesz mierzyć przesunięcia i dodatnie i ujemne to trzeba trochę zmodyfikować pomiar.
    Jeżeli na pewno będzie ono wewnątrz zakresu -90...+90*, to wystarczy jedno z przerwań INT zamienić z Rising na Falling. Wtedy sposobu pomiaru nie trzeba będzie zmieniać a jedynie trzeba będzie odpowiednio przeliczać wynik.
  • #9
    piwek9
    Conditionally unlocked
    Częstotliwość jest stała, zmienia się jedynie amplituda, i przesunięcie w fazie .
    Mógłbyś napisać w kodzie co i jak o ile to nie problem , nie chcę zwalać roboty na kogoś , ale męczę się od 2 tygodni i dopiero dziś coś ,cokolwiek zaczęło wychodzić .
    Przeliczenia do sensownego wyświetlania to już nie problem
    Pozdrawiam serdecznie .
  • #10
    User removed account
    User removed account  
  • #11
    piwek9
    Conditionally unlocked
    Korzystając z podpowiedzi , namalowałem coś takiego :
    Dla wygody dopisałem generator PWM w możliwością przesuwania fazy, ułatwiło mi to prace na płycie testowej . Pomiar działa Ok jest jeszcze problem z prawidłowym wyświetlaniem wyniku,na razie brak mi pomysłu jak sobie z tym poradzić , zastanawiam się jak wymyślić sensowny start pomiaru w odpowiedniej chwili, bo problemy z odczytem zaczynają się jak przesunięcie przeskoczy o 270st. Może nie tak może popracuję na właściwym układzie. Obecnie opieram się na przesuwniku na PWM i chyba go nie dopracowałem jeszcze . Tak czy siak przedstawiam swoje wypociny i proszę o opinię i Podpowiedzi co jeszcze zmienić .
    Code: vbnet
    Log in, to see the code
  • #12
    User removed account
    User removed account  
  • #13
    piwek9
    Conditionally unlocked
    Więc mam po prostu niedopracowane Zmienna i zmienna1 , ale to pomijam bo to napisane tak tylko dla wygody testowania. Generalnie Chyba będzie działać . Rozdzielczość 2 st. chyba mi wystarczy, nie wiem jeszcze jak zwiększyć rozdzielczość ale, ale .
    Chyba będzie działać ?
    testowałem od 5 do 10 khz jakoś się sprawia .
    Za wcześnie się chyba wychylam problem zaczyna się jak przesunie się faza przed zbocze fali rozpoczynającej pomiar . Może trzeba zrobić pomiar co 2 impulsy ? nie wiem jak to ogarnąć .
    W momencie rozpoczęcia pomiaru mam przesunięcie 90 st fala przesuwa się w prawo lub lewo , może odwrócić fazę jeszcze o 270st i rozpoczęcie pomiaru będzie rozpoczynać się od przesunięcia 360 st , czy to coś da ?
    Jakoś nie mogę sobie tego zobrazować .
  • #14
    kamyczek
    Level 38  
    To jeden z tych tematów ,który wygląda prosto ale w rzeczywistości nie jest taki banalny jak by się wydawało . Przede wszystkim to musi kolega napisać czy przebiegi dostarczone są z zewnętrznego generatora i jaki mają sygnał przypuszczam że sinus z generatora zewnętrznego . Inaczej się mierzy przesunięcie jak się generuje sygnał inaczej jak otrzymuje się dwa sygnały wejściowe normalny i przesunięty . To typowy układ pomiarowy technologii mieszanej analogowo-cyfrowy. Na moje oko założenia w programie są zupełnie nie trafione .
  • #15
    atom1477
    Level 43  
    piwek9 wrote:
    testowałem od 5 do 10 khz jakoś się sprawia .

    A to jednak częstotliwość ma być zmienna?

    piwek9 wrote:
    Za wcześnie się chyba wychylam problem zaczyna się jak przesunie się faza przed zbocze fali rozpoczynającej pomiar .

    Gdy się przesunie przed zbocze to powinno przewinąć wynik do 0 i liczyć od nowa.
    A u Ciebie co się dzieje?
  • #16
    piwek9
    Conditionally unlocked
    Przebiegi to prawie idealny prostokąt, chociaż wolał bym by pomiar robić na sinus.
    Częstotliwość będzie stała ,testowałem tylko z kilkoma częstotliwościami , by się upewnić czy program wyrabia .
    Może i racja jutro protestuję z właściwym sygnałem zobacz co się dzieje, generowanie i mierzenie sygnału na jednym procesorze może i nie najlepszy pomysł , ale gdy przesuniecie mieści się w przedziale od 0 do 90 wskazana są prawidłowe , jak przeskoczy kąt przesunięcia drastycznie się zwiększa , nie mogę wyłapać tego momentu ale z obserwacji oscyloskopu wynika że pokazuje dobre przesunięcie . teraz jak sensownie wyświetlić przesunięcie na plusie i minusie
    Może zliczać do 2 i wtedy pomiar , nie chce niepotrzebnie obciążać procka .
    Jak policzyć do ilu zliczy timer przy częstotliwości 8Khz ?
  • #17
    atom1477
    Level 43  
    Przeskakuje bo nie potrafi mierzyć ujemnego.
    Pisałem o tym.
    On po prostu mierzy wtedy dodatnie ale dużo większe. Traktuje impuls nie jako ujemny, tylko jako kolejny impuls ale dodatni). Tzn nie jest w stanie zmierzyć impulsu który wystąpił wcześniej. Taki impuls zostanie po prostu zmierzony we wcześniejszym cyklu. Narysuj sobie przebiegi na kartce to zrozumiesz.
    Czyli ostatecznie to mierzy dodatnie przesunięcia od 0 do 90*.
    A ujemne mierzy jako dodatnie od 270 do 360*.
    Więc musisz po prostu zakres 270...360 wyświetlać jako -90...0.
    Albo zmienić jedno z przerwań z Rising na Falling*, i wtedy będzie Ci mierzyło w jednym zakresie 90...270.
    Więc od wyniku trzeba będzie odjąć 180 i wtedy wyjdzie wynik w zakresie -90...90.

    *Przy czym mała uwaga że zadziała to poprawnie tylko dla przebiegów o wypełnieniach równo po 50%.
  • #18
    piwek9
    Conditionally unlocked
    Ok teraz zrozumiałem , nie ukrywam że wolał bym mierzyć na sinus, a jakby dorobić układ do pomiaru przejścia przez zero, nie to głupi pomysł , czy INT będzie chodził na sinus o amplitudzie minimalnej 2V ?
  • #20
    kamyczek
    Level 38  
    Podstawowa sprawa licznikiem to można sobie zmierzyć czas opóźnienia i to tyle . Nie znasz dokładnie okresu przebiegu to wartość nie mówi zbyt wiele ... Przede wszystkim to piszemy sobie wzory co od czego i jak zależy z tego wynika to co musimy pomierzyć żeby zrobić obliczenia . Przesunięcie fazowe to jedna z tych wartości ,którą najłatwiej zmierzyć oscyloskopem lub miernikiem RLC . Jeśli mamy ją mierzyć w układzie na podstawie przebiegów oscyloskopowych tj np. podłączając do generatora obwód RLC i biorąc sobie przebieg z generatora i zza obwodu to ja się cieszę jak mam to zrobić oscyloskopem ...
  • #22
    kamyczek
    Level 38  
    No to temat się znacznie upraszcza , pozostaje tylko dopieścić metodę pomiaru dla potrzeb autora bascom i atmega pewnie wystarczy żeby zaspokoić potrzeby autora tematu .
  • #23
    piwek9
    Conditionally unlocked
    Dopieścić m dobre słowo , lubię dopieszczać , ale Bascoma to nie potrafię zbytnio , pocę się już 2 tygodnie i dopiero dziś po sugestiach kolego coś wydłubałem.
    A może jak bym przepuścił SIN-us przez 2 klucze otwierane z przesuniecie 90 st. zrobił pomiar napięcia , napisał tablicę X i Y i na tej podstawie stwierdzał przesunięcie ? ale następny temat nie do przejścia pomiar napięcia zmiennego na ADC . Już to ćwiczyłem okazuje się że gdy brak przesunięcia trzeba mierzyć napięcie zmienne 0.4V VPP jak faza się przesunie wtedy jest co mierzyć i można by pokosić się o wyprostowanie tego napięcia ale co z niższym napięciem ?
    Chyba nie da się zmierzyć na ADC tak niskiego napięcia zmiennego, mi pływa jak szalone , nie potrafię ,
  • #24
    kamyczek
    Level 38  
    Niektóre zagadnienia są łatwiejsze w realizacji oscyloskopowo lub analogowo trzeba sobie więc przesunąć o -90 stopni i będzie łatwiej mierzyć przesunięcie bo wszystko będzie na plusie ;)
  • #25
    piwek9
    Conditionally unlocked
    Przesunąć to żaden problem, zauważyłem że im niższa częstotliwość to łatwiejszy pomiar .
    Przesunięcie od 0 do 180 st. tan kod mierzy doskonale , teraz przetestowałem z pływająca częstotliwością od 4 do 8 khz ,zachowuje się bardzo przyzwijcie, sygnał był przesunięty 90st , wyświetlał 88st do 90 st .
    Problem że mierzy co 2 st. nie mogę zrozumieć dlaczego , nie powiem tyle mi wystarczy ale ciągnie do poprawy kodu lecz brak weny.
  • #26
    kamyczek
    Level 38  
    Czym większa częstotliwość sygnału tym mniejszy dzielnik dla licznika to jedno . Rozdzielczość pomiaru jest proporcjonalna do stosunku częstotliwości taktowania mikrokontrolera a odwrotnie proporcjonalna do częstotliwości przebiegu. Jednym słowem żeby się trzymać cały czas w jakimś zakresie dokładności i rozdzielczości w pomiarze trzeba zmieniać częstotliwość w takim kroku jak dzielnik licznika...
  • #27
    piwek9
    Conditionally unlocked
    Teraz zrozumiałem . Dzięki
    Pytanie ?
    Czy można zrobić pomiar napięcia zmiennego , małego napięcia na ADC procka ?
    Mam zamiar z tym powalczyć .
  • #28
    kamyczek
    Level 38  
    Oczywiście że można tylko najlepiej zacząć od wyprostowania go i uśrednienia układem rc . Rozdzielczość to 1024 kroki dla zakresu od 0 do VREF jednak najmłodszy bit to bym sobie podarował i bazował na 512 krokach ...
  • #29
    atom1477
    Level 43  
    Pytanie co chcesz zrobić bo teraz kombinujesz jak koń pod górkę.
    To co chcesz teraz zrobić (te przesuwania sinusoid i mierzenie ich ADCkiem) jest dobre do zabawy czy nauki. Ale to dużo roboty a efekty będą kiepskie.
    A wszystko przez to że taki pomiar będzie wrażliwy na amplitudę tych sinusów.
    Jeżeli naprawdę chcesz mierzyć tylko przesunięcia, a nie bawić się czy uczyć, to zrób jak napisałem czyli przerób te sinusy na prostokąty.
    Do tego wystarczą proste układy na wzmacniaczach operacyjnych. Takie układy z histerezą (małą, rzędu 10...20mV).
  • #30
    piwek9
    Conditionally unlocked
    Tak też robię przerabiam na prostokąt i napisze jak sprawuje się pomiar. Ale lubię eksperymentować i mieć jakaś alternatywę stąd też pytania może głupie i trochę dziwne, może się kiedyś zdarzyć że w procesorze zostanie wolne tylko ADC a będzie potrzebny taki pomiar .
    Czy np. wzmocnienie małych napięć i pomiar międzyfazowy nie dał by informacji o przesuwani się fazy ?