電機AB相編碼器測速


控制任務

檢測編碼器的脈沖並測速

電路設計

                      

圖1 直流電機帶減速器和編碼器

 

圖2  編碼器接線定義

編碼器接線定義如下

M1:電機電源接口,綠色的

GND:編碼器電源負極輸入口,橙色的

C1:編碼器A相輸出,黃色的,接Arduino控制板2號引腳

C2:編碼器B相輸出,白色的,接Arduino控制板3號引腳

3.3V:編碼器電源正極輸入口(兼容3.3V、5V),紅色的

M2:電機電源接口,黑色的,

程序設計

 1 int motor_c_ENA=6;   //控制板與驅動板的引腳連接
 2 int motor_c_IN1=8;
 3 int motor_c_IN2=7;
 4 
 5 #define ENCODER_A_PIN  2     //編碼器A相接控制板2號引腳,對應0號外部中斷
 6 #define ENCODER_B_PIN  3     //編碼器B相接控制板3號引腳,
 7 long pulse_number=0;   // 脈沖計數
 8 int rpm;
 9 
10 #include <MsTimer2.h>        //定時器庫的頭文件  
11 
12 void setup() 
13 {
14      pinMode(motor_c_ENA,OUTPUT);  //電機C使能和PWM調速口
15     pinMode(motor_c_IN1,OUTPUT);   //電機C控制口
16     pinMode(motor_c_IN2,OUTPUT);   //電機C控制口
17 
18     MsTimer2::set(500, send);     // 中斷設置函數,每 500ms 進入一次中斷 
19     MsTimer2::start();            //開始計時    
20 
21     pinMode(ENCODER_A_PIN, INPUT);
22      pinMode(ENCODER_B_PIN, INPUT);
23      attachInterrupt(0, read_quadrature, FALLING);   //EN_A腳下降沿觸發中斷
24     Serial.begin(9600);    //初始化Arduino串口
25 }
26 
27 void loop() 
28 {
29 //C加速正轉
30    digitalWrite(motor_c_IN1,0);   
31     digitalWrite(motor_c_IN2,1);
32     for (int a=100;a<=255;a++)  
33      {
34         analogWrite(motor_c_ENA,a);
35         delay(200);
36      }
37 
38 //C減速正轉
39    digitalWrite(motor_c_IN1,0);    
40     digitalWrite(motor_c_IN2,1);
41     for (int a=255;a>0;a--)  
42     {
43         analogWrite(motor_c_ENA,a);
44         delay(200);
45      } 
46 }
47 
48 void send()     //速度串行傳送
49 {
50      rpm=int(pulse_number/37.4); 
51 //編碼器精度為224線,減速器減速比為1:20,故系數=(224/(60/0.5))*20=37.4
52      Serial.print("rpm: ");
53      Serial.println(rpm, DEC);
54      pulse_number = 0;
55 }
56 
57 void read_quadrature()    //編碼器脈沖計數中斷函數
58 {  
59   if (digitalRead(ENCODER_A_PIN) == LOW)     
60   {   
61     if (digitalRead(ENCODER_B_PIN) == LOW)    // 查詢EN_B的電平以確認正轉
62     { pulse_number ++; }    
63     if (digitalRead(ENCODER_B_PIN) == HIGH)     // 查詢EN_B的電平以確認反轉
64     { pulse_number --; }
65   }
66 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM