encoder
Embed:
(wiki syntax)
Show/hide line numbers
encoderarduino.cpp
00001 #include "mbed.h" 00002 00003 #define PinA1 A0 //外部中断0 00004 #define PinZ1 A2 //外部中断1 00005 #define PinB1 A1 //编码器的OUT_B信号连接到数字端口8 00006 #define T 30 //定义采集时间周期单位ms 00007 #define LOW 0 00008 #define HIGH 1 00009 00010 00011 unsigned long time1 = 0; // 时间标记 00012 volatile long PulSum_CW = 0; //定义长整型不可修改脉冲数 00013 volatile long PulSum_CCW = 0; 00014 00015 00016 long PulSum_CW_t0 = 0; //定义记录顺时针方向 t0 时刻脉冲数变量 00017 long PulSum_CW_t0_T = 0; //定义记录顺时针方向 t0+T 时刻脉冲数变量 00018 00019 00020 float Rad_CW_Speed = 0.000; //定义顺时针角速度 00021 float Rad_CCW_Speed = 0.000; //定义逆时针角速度 00022 00023 00024 long PulSum_CCW_t0 = 0; //定义记录逆时针方向 t0 时刻脉冲数变量 00025 long PulSum_CCW_t0_T = 0; //定义记录逆时针方向 t0+T 时刻脉冲数变量 00026 00027 // 记录角度 00028 int Rad = 180; 00029 00030 00031 DigitalIn a11(PinA1); 00032 DigitalIn a12(PinB1); 00033 DigitalIn a13(PinZ1); 00034 00035 void loop() 00036 { 00037 // 角度计算程序 00038 Rad = int((PulSum_CW - PulSum_CCW)/6) % 360; 00039 if (Rad >= 180) { 00040 Rad = Rad - 360; 00041 } 00042 00043 PulSum_CW_t0 = PulSum_CW; 00044 PulSum_CCW_t0 = PulSum_CCW; //采集t0时刻的脉冲数 00045 wait(T); //等待一个T时间 00046 PulSum_CW_t0_T = PulSum_CW; 00047 PulSum_CCW_t0_T = PulSum_CCW; //采集t0+T时刻的脉冲数 00048 wait(T); //等待一个T时间 00049 00050 // 如果检测到正向角速度,那么就打印角速度,以及累计的角度 00051 if (PulSum_CW_t0_T - PulSum_CW_t0 != 0){ 00052 Rad_CW_Speed = (PulSum_CW_t0_T - PulSum_CW_t0); // 00053 // 显示正向(CW)角速度 Rad_CW_Speed---> //打印出来速度 00054 //Serial.print("AS:"); //打印出来速度w 00055 printf("%f", Rad_CW_Speed); 00056 printf(":"); 00057 //Serial.print("/A:"); 00058 printf("%d",Rad); 00059 printf("\n"); 00060 } 00061 00062 // 如果检测到反向角速度,那么就打印角速度,以及累计的角度 00063 if (PulSum_CCW_t0_T - PulSum_CCW_t0 != 0){ 00064 Rad_CCW_Speed = (PulSum_CCW_t0 - PulSum_CCW_t0_T); 00065 //Serial.print("AS:"); 00066 printf("%f", Rad_CCW_Speed); 00067 printf(":"); 00068 //Serial.print("/A:"); 00069 printf("%d",Rad); 00070 printf("\n"); 00071 } 00072 00073 00074 00075 } 00076 //void Encode() 00077 //当编码器码盘的OUTA脉冲信号下跳沿每中断一次, 00078 // if ((millis() - time1) > 5) 00079 // { 00080 // if ((a11 == LOW) && (a12 == HIGH)) 00081 // {PulSum_CW ++;} 00082 // else 00083 // {PulSum_CCW ++;} 00084 // } 00085 // time1 = millis(); 00086 //}
Generated on Tue Aug 16 2022 00:54:33 by
1.7.2