Elektroda.pl
Elektroda.pl
X

Search our partners

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

Problem z przerwaniami w ESP32 pochodzącymi z transoptora PC817C

endriuh28 19 Apr 2021 20:34 564 12
  • #1
    endriuh28
    Level 9  
    Witam, jak w temacie, mam problem z wykrywaniem przerwań od transoptora PC817C.
    Napięcie to 3.3V a emiter transoptora (nóżka nr. 3) mam podłączoną do ESP32 z pinem GPIO35,
    z zewnętrznym pulldownem w postaci rezystora 10K Ω podłączonym do GND.
    Ustawiłem ten pin jako INPUT a tryb przerwania jako FALLING.
    ESP32 wykrywa przerwanie ale nie jest synchroniczne, i w większości wykrywa podwójnie.

    Moje ESP32 to DevKitC ESP-WROOM-32U.

    Z Arduino UNO nie ma problemów, wykrywa prawidłowo,
    ale ESP32 ma chyba szybsze próbkowanie o większej częstotliwości niż Arduino UNO.

    Myślę że napięcie ESP32 pinów 3.3V nie jest problemem, bo Arduino UNO ma napięcie pinów 5V.

    Testowałem na moim małym oscyloskopie i przy 2V i 10ms sygnał jest prostokątny i wacha się od 0,16V do 3,2V,
    a gdy zmniejszam czas to coraz bardziej sygnał przypomina sinusoidę,
    gdy dam większy rezystor to sygnał się wyostrza ale dolny pułap napicia znacznie się podnosi,
    a gdy zmniejszam rezystancje to sygnał się zaokrągla i bardziej przypomina sinusoidę.



    W funkcji wywołanej poprzez przerwanie dodałem sprawdzenie czy na pinie jest stan niski:
    Code: c
    Log in, to see the code

    Spowodowało to że już nie wykrywa mi przerwania podwójnie, ale nadal nie są synchroniczne.

    Doraźnie problem rozwiązałem softowo za pomocą takiego kodu:
    Code: c
    Log in, to see the code


    Czy można jakoś poprawić sygnał aby przy większych częstotliwościach próbkowania czyli mniejszym czasie był bardziej prostokątny, i aby nie było problemów z wykryciem przerwania w trakcie opadania?
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • #2
    yego666
    Level 33  
    Wydaje mi się, że bardzo byś sobie pomógł wstawiając jakąś prostą bramkę ( inverter ) z wejściem Schmidta pomiędzy transoptor a wejście ESP. To powinno poprawić kształt sygnału z transoptora.
    Transoptory generalnie są bardzo powolne w porównaniu z procesorami i innymi nowoczesnymi układami, więc można się spodziewać dobrych efektów po takim zabiegu.
  • #3
    endriuh28
    Level 9  
    yego666 wrote:
    Wydaje mi się, że bardzo byś sobie pomógł wstawiając jakąś prostą bramkę ( inverter ) z wejściem Schmidta pomiędzy transoptor a wejście ESP. To powinno poprawić kształt sygnału z transoptora.


    A czy mógłbyś mi podać jakiś schemat, jak to podłączyć i jaki model bramki dać?
    Oraz czy zostawić ten rezystor?
  • Helpful post
    #4
    khoam
    Level 41  
    Wejścia GPIO w ESP32 nie mają na wejściu bramki Schmitta (jak AVR), więc jakiekolwiek fluktuacje napięcia na wejściu w obszarze pomiędzy stanem wysokim i niskim mogą powodować efekt, który opisałeś i przypadkowe generowanie przerwań.

    endriuh28 wrote:
    Doraźnie problem rozwiązałem softowo za pomocą takiego kodu:

    Napisałeś coś w rodzaju programowego przerzutnika Schmitta :) Lepiej jednak użyć zewnętrznego układu jeżeli chcesz osiągnąć większe szybkości próbkowania.

    Dodano po 1 [minuty]:

    endriuh28 wrote:
    Oraz czy zostawić ten rezystor?

    Ten rezystor można zostawić. GPIO35 nie ma wewnętrznego pull-up czy pull-down.
  • Helpful post
    #5
    yego666
    Level 33  
    Proszę bardzo :)

    Użyłbym układu n.p. 74HC14 , która ma wejścia Schmidta i działa już od 3V zasilania.
    Pojedyncza kostka ma aż sześć inverterów, więc możesz ich użyć też do innych celów.

    Poszukaj w necie "74HC14 pdf" . Znajdziesz opis i układ nóżek tej kostki. Koszt poniżej 1 Pln.
  • #6
    endriuh28
    Level 9  
    Kurcze, na płytce mam już mało miejsca a nie chce jej powiększać bo do obudowy mi się nie zmieści.
    Czy jest może w mniejszej wersji ten układ 74HC14, z jednym inputem i outputem?

    khoam wrote:
    Ten rezystor można zostawić. GPIO35 nie ma wewnętrznego pull-up czy pull-down.

    Tak wiem, już to sugerowałem tym że mimo jest INPUT_PULLUP to jest INPUT.
  • Helpful post
    #7
    yego666
    Level 33  
    Są pojedyncze bramki n.p. tu: Link , ale trzeba kupić min. 5 szt po 1.25pln/szt. Trochę drogo.
  • #8
    endriuh28
    Level 9  
    yego666 wrote:
    Są pojedyncze bramki n.p. tu: Link , ale trzeba kupić min. 5 szt po 1.25pln/szt. Trochę drogo.


    Znalazłem na Alegro ten układ za 1zł.
    A jest może w obudowie przewlekanej THT?

    A czy jak użyję tej bramki to gdy będzie teoretycznie stan wysoki czyli jakieś napięcie z PC817
    to za bramką będzie stan niski, dobrze zrozumiałem?
    To jeśli tak to teraz zamiast trybu FALLING muszę ustawić na RISING.

    Oczywiście i tak mam zamiar gdy będę aktualizował płytkę użyć wersji SMD,
    ale aby nie wywalać do kosza tych pięciu płytek które mam, to zrobił bym przejściówkę na płytce uniwersalnej.

    Dziękuję yego666, bardzo mi pomogłeś, bardzo dziękuje wszystkim za udział w tym moim temacie.
  • Helpful post
    #9
    yego666
    Level 33  
    Dobrze kombinujesz z polaryzacją :)
    Niestety wersji tht nie produkują :(
    Prototyp zrób z jednej bramki układu 74hc14 w wersji tht.
    Tak będzie chyba najłatwiej.
    Powodzenia.
  • #10
    endriuh28
    Level 9  
    Ok, w takim wypadku tak zrobię, albo jakoś przylutuje ten układ SMD do płytki uniwersalnej dwustronnej, może się uda spasować.
    Kupię parę sztuk tego z THT i parę sztuk z SMD.

    Jeszcze raz dziękuję za pomoc yego666.
  • #12
    khoam
    Level 41  
    krzbor wrote:
    khoam wrote:
    Wejścia GPIO w ESP32 nie mają na wejściu bramki Schmitta (jak AVR),

    Nie wiedziałem o tym (przyzwyczajenie z AVR). A jak jest w ESP8266?

    Tak samo.
  • #13
    endriuh28
    Level 9  
    Tak, podobny problem miałem z ESP8266 Pro Mini, tylko tam co innego było źródłem sygnału PWM, więc kolega khoam ma racje.
    Wtedy myślałem że problem tkwi w układzie który podłączam.