Სარჩევი:

Rotary Encoder - გაგება და გამოყენება (Arduino/სხვა ΜController): 3 ნაბიჯი
Rotary Encoder - გაგება და გამოყენება (Arduino/სხვა ΜController): 3 ნაბიჯი

ვიდეო: Rotary Encoder - გაგება და გამოყენება (Arduino/სხვა ΜController): 3 ნაბიჯი

ვიდეო: Rotary Encoder - გაგება და გამოყენება (Arduino/სხვა ΜController): 3 ნაბიჯი
ვიდეო: როგორ შევაკეთოთ ერთთავიანი მანქანა სერვო || ინვერტორი DU @hass indoembro 2024, ნოემბერი
Anonim
Rotary Encoder - გაგება და გამოყენება (Arduino/სხვა ΜController)
Rotary Encoder - გაგება და გამოყენება (Arduino/სხვა ΜController)

მბრუნავი კოდირება არის ელექტრომექანიკური მოწყობილობა, რომელიც გარდაქმნის მოძრაობის ციფრულ ან ანალოგურ ინფორმაციას. ის შეიძლება მოტრიალდეს საათის ისრის მიმართულებით ან ისრის საწინააღმდეგოდ. არსებობს ორი სახის მბრუნავი კოდირება: აბსოლუტური და ნათესავი (ინკრემენტალური) კოდირებით.

მიუხედავად იმისა, რომ აბსოლუტური კოდირება გამოსცემს მნიშვნელობას პროპორციულად ამჟამინდელი ლილვის კუთხისა, დამატებითი შიფრატორი გამოაქვს შახტის საფეხური და მისი მიმართულება. (ამ შემთხვევაში ჩვენ გვაქვს დამატებითი კოდირება)

მბრუნავი კოდირები უფრო პოპულარული ხდება, რადგან თქვენ შეგიძლიათ გამოიყენოთ ორი ფუნქცია ერთ ელექტრო მოდულში: მარტივი გადამრთველი ოპერაციების დასადასტურებლად და მბრუნავი კოდირება ნავიგაციისთვის, მაგ. მენიუს საშუალებით.

დამატებითი მბრუნავი კოდირება წარმოქმნის ორ გამომავალ სიგნალს, როდესაც მისი ლილვი ბრუნავს. მიმართულებიდან გამომდინარე, ერთი სიგნალი მიჰყავს მეორეს. (იხილეთ ქვემოთ)

ნაბიჯი 1: გამომავალი მონაცემების გაგება

გამომავალი მონაცემების გაგება
გამომავალი მონაცემების გაგება

როგორც ხედავთ, როდესაც კოდირების ლილვი იწყებს ბრუნვას საათის ისრის მიმართულებით, A გამომავალი პირველი დაეცემა LOW– ზე და B გამოდის მას შემდეგ. საათის ისრის საწინააღმდეგო მიმართულებით ოპერაცია პირიქით ხდება.

ახლა ჩვენ უბრალოდ უნდა განვახორციელოთ ეს ჩვენს μController– ზე (მე გამოვიყენე Arduino Nano).

ნაბიჯი 2: შექმენით წრე

ააშენეთ წრე
ააშენეთ წრე
ააშენეთ წრე
ააშენეთ წრე

როგორც ადრე აღვნიშნე, შედეგები გამოიმუშავებს HIGH და LOW ფლანგს. ΜC კონტროლერის მონაცემთა A და B პინზე სუფთა HIGH მისაღებად უნდა დავამატოთ Pull-Up რეზისტორები. საერთო Pin C მიდის პირდაპირ მიწაზე დაბალი ფლანგისთვის.

შიდა გადამრთველის შესახებ ინფორმაციის მისაღებად (ღილაკზე დაჭერით) ჩვენ გამოვიყენებთ დანარჩენ ორ ქინძისთავს. ერთი მათგანი გადადის VCC– ზე, ხოლო მეორე - μC კონტროლერის მონაცემთა პინზე. ჩვენ ასევე უნდა დავამატოთ Pull-Down Resistor მონაცემთა პინზე, რომ მივიღოთ სუფთა LOW.

ასევე შესაძლებელია გამოიყენოთ თქვენი μController– ის შიდა Pull-Up და Pull-Down რეზისტორები!

ჩემს შემთხვევაში პინუტი ასე გამოიყურება:

  • +3, 3V => +3, 3V (არდუინო) (ასევე შესაძლებელია +5 ვ)
  • GND => GND (არდუინო)
  • A => Pin10
  • B =>

    ჩამაგრება

    11

  • C => GND
  • SW =>

    ჩამაგრება

    12

ნაბიჯი 3: კოდის წერა

int pinA = 10; // შიდა გადამრთველი A int pinB = 11; // შიდა გადამრთველი B int pinSW = 12; // გადართვა (დაჭერილი კოდირება) int encoderPosCount = 0; // იწყება ნულიდან, შეცვალეთ თუ გსურთ

int positionval;

bool switchval; int mrotate ბოლო; int mrotate;

void setup () {

int mrotateLast = digitalRead (pinA); სერიული.დაწყება (9600); დაგვიანება (50); }

void loop () {readencoder (); if (readwitch () == 1) {Serial.println ("გადართვა = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// სახელური ბრუნავს if (digitalRead (pinB)! = mrotate) {// switch A პირველი შეიცვალა -> საათის ისრის მიმართულებით მბრუნავი encoderPosCount ++; Serial.println ("ბრუნავს საათის ისრის მიმართულებით"); } else {// გადამრთველი B შეიცვალა ჯერ-> საათის ისრის საწინააღმდეგო მბრუნავი encoderPosCount--; Serial.println ("ბრუნავს საათის ისრის საწინააღმდეგოდ"); }

Serial.print ("კოდირების პოზიცია:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = მოროტა; encoderPosCount დაბრუნება; } bool readwitch () {

if (digitalRead (pinSW)! = 0) {// გადამრთველი დაჭერილია

while (digitalRead (pinSW)! = 0) {} // გადამრთველი ამჟამად დაჭერილია switchval = 1; } else {switchval = 0;} // switch არის unpressed დაბრუნების switchval; }

ახლა თქვენ შეგიძლიათ ჩართოთ კოდირება და ცვლადი encoderPosCount გამოითვლება, თუ ბრუნავთ საათის ისრის მიმართულებით და ითვლით, თუ ბრუნავთ საათის ისრის საწინააღმდეგოდ.

Ის არის! უბრალოდ და სასარგებლო.

მოგერიდებათ შეცვალოთ და შეასრულოთ კოდი. თქვენ შეგიძლიათ განახორციელოთ იგი თქვენს პროექტში.

მე ასევე ავტვირთავ LED პროექტს, სადაც გამოვიყენე კოდირებით, რომ განვსაზღვრო ჩემი LED- ების სიკაშკაშე.

გირჩევთ: