Új hozzászólás Aktív témák

  • ecaddsell

    aktív tag

    Van valakinek jól működő prellmentesítő rutinja?

    A jelgenerátoros projektemben eljutottam oda, hogy KY-040-el lehetne szabályozni a frekvenciát.
    Ehhez ESP32-vel az egyik PCNT unit 0. csatornáját használom. Az encoder CLK-ja megy ctrl_gpio_num-ra a DT meg pulse_gpio_num-ra (vagy fordítva, elég sok kombinációt próbáltam).
    A szuper ebben a dologban az lenne, hogy a számláló szépen számlálgat a háttérben a program másik része meg 1-2ms-onként ránéz, és ha van valami (0-tól eltér), akkor változtatja a frekvenciát (ill. alapállapotba teszi a számlálót).
    A prellmentesítésre gondoltam jó lesz, ha valamit beállítok a pcnt_set_filter_value hívásnál.
    Aztán rádöbbentem, hogy a filter csak 10 bites (0-1023) és mivel ABP clock-ban mér (80MHz) a max az kb. 12.5us. Ami édeskevés prellmentesítésre...
    (Ugyanígy akartam használni a nyomogatás részét is, szóval a SW egy másik unitra ment volna).

    Ami kül. bosszantó, hogy a PCNT rém egyszerű megoldás lett volna, majdnem mindent a HW csinál, a felprogramozás után.

    Sajnos a forgatásnál is hibázik (néha a másik irányba ugrik) az SW nyomogató meg totál használhatatlan, mert 0-5 között kellene állítható legyen (ez lenne az encoder frekvencia lépésköze), de egyszer megnyomva a kapott eredmény szinte egy 0-5 közötti véletlen szám.

    Elkezdtem nézni az irodalmat.
    Talán ez a legjobb leírás:
    https://www.best-microcontroller-projects.com/rotary-encoder.html

    Végül-is az állapotugrásos megoldás megoldható (persze ehhez teljesen dobni kell a PCNT-s totál egyszerű megoldást), de így nem lehet megoldani a gombnyomós részét (SW).

    Ott arra gondoltam, hogy az első él után (interrupt) egy ideig nem lenne nézve a gomb (interrupt tilt). Viszont azt is olvastam, hogy a forgatásnál is képes lehet 1 nagyon rövid SW impulzust generálni, szóval jobb lenne azt nézni, hogy mennyi időt tölt el H ill. L szinten. Viszont ez meg amellett, hogy nem egyszerű, nyomogatásnál tolni fogja a megszakításokat és az időmérés meg extra logika miatt az időt is rendesen viszi.

    A furcsa az egészben, hogy a fórumok tele vannak ezzel a problémával és megoldási ötletekkel (van aki a HW-es kondist nyomja,van aki a SW-re esküszik én is jobban kedvelném ezt) de jó megoldást még nem láttam.
    A legbosszantóbb persze, hogy a 10 bites PCNT filter totál meg tönkre vágja azt amit egyébként tudhatna a HW...
    Na most jól kibosszankodtam magam.

Új hozzászólás Aktív témák

Hirdetés