Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Kodifikuesi rrotullues është një komponent elektronik i aftë për të monitoruar lëvizjen dhe pozicionin kur rrotullohet. Kodifikuesi rrotullues përdor sensorë optikë që mund të gjenerojnë impulse kur kodifikuesi rrotullues rrotullohet. Zbatimi i kodifikuesit rrotullues zakonisht si një monitor lëvizës mekanik ose robotik mund të përdoret gjithashtu për përzgjedhjen e menysë në ekran. Kodifikuesi rrotullues ka dy dalje në mënyrë që të mund të bëjë dallimin midis rrotullimit negativ (CW) dhe pozitiv (CCW) dhe gjithashtu ka një buton të vetëm.
Hapi 1: Rrjedha e pulsit të kodifikuesit rrotullues
Rrjedha e pulsit e krijuar nga kodifikuesi rrotullues i mëposhtëm është si fotografia e mësipërme.
Hapi 2: Pinout i Rotary Encoder
Shpjegim:
- GND GND
- + + 5V
- Butoni SW i koduesit rrotullues kur shtypet
- Të dhënat DT
- CLK Të dhënat 2
Një nga kunjat DT ose CLK duhet të lidhet me këmbën e ndërprerjes të Arduino Uno, ose të dyja nga DT dhe CLK janë të lidhura me kunjin e ndërprerjes.
Hapi 3: Skematike
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
Hapi 4: Kodi
Në tutorialin e mëposhtëm, i cili do të përdoret si një ndërprerje është PIN 2 i Arduino Uno, ndërsa PIN 3 përdoret vetëm si një hyrje e rregullt.
#përcakto koduesin0PinA 2 #përcakto koduesin0PinB 3 #përcakto koduesin0Btn 4 int kodues0Pos = 0; void setup () {Serial.begin (9600); pinMode (kodifikuesi0PinA, INPUT_PULLUP); pinMode (kodifikuesi0PinB, INPUT_PULLUP); pinMode (kodifikues0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; lak void () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {
Serial.print ("CCW");
} lastValRotary = valRotary; Serial.println (""); vonesë (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = kodifikues0Pos/2.5; }
Në rreshtin 10 të skicës së mësipërme përdoret për të mundësuar ndërprerjen e pin 2 Arduino Uno. Në funksionin "doEncoder" llogaritet nga koduesi rrotullues. Nëse vlera e DT dhe CLK (ndërprerja e pinit e Arduino Uno) është e njëjtë, atëherë ndryshorja "encoder0Pos" do të rritet / shtohet, përveç asaj gjendjeje, ndryshorja "encoder0Pos" zvogëlohet.
Hapi 5: Shpjegimi
Vlera ValRotary është vlera e numrit të hapave që janë ekzekutuar. Vlera ValRotary merret nga vlera e leximit të koduesit të sensorit rrotullues pjesëtuar me 2.5. Një vlerë prej 2.5 merret nga testi, pasi një hap i koduesit rrotullues mund të kalojë 1, kështu që ndajeni me 2.5 për vlerën e tij sipas perspeptit dhe gjithashtu shtimin e vonesës së leximit.
Ndërsa në linjën 19 - 25 është një program për të përcaktuar nëse kodifikuesi rrotullues rrotullues CW ose CCW. Shpjegimi i rreshtave 19 - 25 është kur leximi aktual i koduesit rrotullues është më i madh se të dhënat e mëparshme rrotulluese të shprehura më pas si CW. Ndërsa nëse leximi aktual është më i vogël se leximi i mëparshëm atëherë ai deklarohet si CCW.
Hapi 6: Dalja
1 = vlera e butonit të fillimit të rrotulluesit kur nuk është shtypur