链接CSND博客编码器:
    编码器的主要计算公式:
    转速=时间t内测出有n个脉冲 / (单位时间发出的脉冲数 减速比 t )
    这也就是利用编码器测得电机的实际速度。
    获得编码器的实际speed之后,
    所以接下来就需要使用PID控制代码了。

    简单解释一下,编码器如果转一圈呢是11个脉冲。但是电机外有个减速器,而且减速比是34:1,那么就是电机输出轴转1圈,输入轴就要转34圈。
    即电机输出轴转1圈,编码器就要输出11x34=374个脉冲。那么就是如果我们在时间t内测出一相有n个脉冲,那么
    转速=n/(374xt)


    代码:*
    /
    描述: 电机测速/
    /
    两相/
    const int d_time=100;//设定单位时间
    int flagA=0;
    int flagB=0;//标志位设定
    /
    —————设定引脚接口但是我不知道接口————————/
    int AM1=a;
    int BM1=b; //A相B相输入引脚的定义
    int AIN1=c;
    int AIN2=d;
    int PWMA=e; //AIN1、2和PWMA是电机输出引脚的定义
    /
    ——————————————————————————————*/
    int valA=0;
    int valB=0;//用来储存A相B相记录的脉冲数
    double n;//存储转速的变量
    unsigned long times;
    unsigned long newtime;//时间变量

    void setup()
    {
    //Serial.begin(9600);//串口初始化,可能会用到
    pinMode(AIN1,OUTPUT);
    pinMode(AIN2,OUTPUT);
    pinMode(PWMA,OUTPUT);//AIN1、2和PWMA引脚的输出方式
    pinMode(AM1,INPUT);
    pinMode(BM1,INPUT);//AM1、BM2引脚的输入方式
    }

    void loop()
    {
    //这里要调用一个函数,电机运动的函数,但是时间太晚了,还没找
    newtime=times=millis();//获得从当前程序运行开始的毫秒数
    while((newtime-times) {
    if(digitalRead(AM1)==HIGH && flagA==0)
    {
    valA++;
    flagA=1;
    }
    if(digitalRead(AM1)==LOW && flagA==1)
    {
    valA++;
    flagA=0;
    }
    if(digitalRead(BM1)==HIGH && flagB==0)
    {
    valB++;
    flagB=1;
    }
    if(digitalRead(BM1)==LOW && flagB==1)
    {
    valB++;
    flagB=0;
    }
    newtime=millis();
    }//计算AB两相的脉冲数
    n=(valA+valB)/(1.496*d_time);//计算转速
    Serial.print(n);
    Serial.println(“rad/s”);//输出转速数值
    valA=valB=0;//清零储存脉冲数的变量
    }

    void loop()
    {
    go(255);//调用go()子函数
    newtime=times=millis();
    while((newtime-times) {
    if(digitalRead(AM1)==HIGH)
    {
    valA++;
    }
    if(digitalRead(BM1)==HIGH )
    {
    valB++;
    }
    newtime=millis();
    }//计算AB两相的脉冲数
    n=(valA+valB)/(1.496*d_time);//计算转速
    Serial.print(n);
    Serial.println(“rad/s”);//输出转速数值
    valA=valB=0;//清零储存脉冲数的变量
    }