没有合适的资源?快使用搜索试试~ 我知道了~
首页霍尔编码器原理及测速–PID—arduino
标题 本人目前是一个大一菜鸟,零基础学的编码器方面,希望我的经验对你有些帮助。 分享一下霍尔编码器电机的使用与测速,我用的是25GA-310直流减速电机。先来看一下最基本的 接线方法——- ——S1与S2连接单片机上的S(我这里用的2号和3号,是中断引脚); ——G与V连接单片机上的G与V(对着接就行); ——VM与GM接航模电池的正极与负极; 测速原理 这里需要用到一些基本函数,大家可以去相关网站去找一下,重要的是定时器函数和中断函数 我用的这个电机脉冲数双相300个,单相150个。(电机的型号不同可能会不一样,如果店家那没有的话可以抠出来下面一部分程序测)
资源详情
资源评论
资源推荐

霍尔编码器原理及测速霍尔编码器原理及测速–PID—arduino
标题标题
本人目前是一个大一菜鸟,零基础学的编码器方面,希望我的经验对你有些帮助。
分享一下霍尔编码器电机的使用与测速,我用的是25GA-310直流减速电机。先来看一下最基本的
接线方法接线方法
——-
——S1与S2连接单片机上的S(我这里用的2号和3号,是中断引脚);
——G与V连接单片机上的G与V(对着接就行);
——VM与GM接航模电池的正极与负极;
测速原理测速原理
这里需要用到一些基本函数,大家可以去相关网站去找一下,重要的是定时器函数和中断函数
我用的这个电机脉冲数双相300个,单相150个。(电机的型号不同可能会不一样,如果店家那没有的话可以抠出来下面一部分程序测)
具体思路:首先使用定时器定时一个时间,我这里用的是50ms。编码器转一圈会发送脉冲,一个脉冲可以产生一个中断,在中断函数里令一个变量自加,
每产生一个脉冲该变量就加1。所以该变量就是脉冲数。
通过50ms内产生得脉冲数就可以算出速度了(这里是角速度,如果要具体算速度的话乘以轮子半径即可)。用脉冲数/150( 这里用单相或者双相都一样,
我用的单相得)即可得到在这50ms内电机转动得圈数。再乘以20就是一秒内转的圈数,再乘以60就是一分钟转的圈数。下面是代码
#include
float v;
volatile long counter_val0=0;
volatile long counter_val1=0; //该变量用于存储编码器的值,所以用类型修饰符volatile;
int j=0; //定时器标志;
void setup()
{
delay(2000);
pinMode(2, INPUT);
pinMode(3, INPUT); //设置为输入模式,并且2,3号引脚是中断口0,1;
Serial.begin(115200); //初始化波特率为115200
attachInterrupt(0, counter0, RISING);//设置编码器A相位上升沿中断
attachInterrupt(1, counter1, RISING);//设置编码器B相位上升沿中断
Timer1.initialize(50000); // 设置定时器中断时间,单位微秒 ,这里是50毫秒
Timer1.attachInterrupt( timerIsr ); // 打开定时器中断
interrupts(); //打开外部中断
}
void loop()
{
long lTemp = 0; //定义临时存储数据变量
if(j==1) //判断是否发生定时器中断,这里是50ms发生一次
{
j=0; //清除标记
}
}
//外部中断处理函数
void counter0()
{
counter_val0++; //每一个中断加一
}
void counter1()
{
counter_val1++; //每一个中断加一
}
//定时器中断处理函数
void timerIsr()



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1