试了一下
中断计数时有时会数值突变成好几百,或者几千,不准确
多次中断了,设置改一下把 pww999 发表于 2012-7-30 07:51 static/image/common/back.gif
单片机都是单线程的吧?
程序都是由上往下执行?
往往用IF 判断 是否继续写作业 还是水开了要处理一下? ...
中断是具有优先的。和单线程没关系
不管是单片机还是pc
基于硬件的。
系统会自动对当前的寄存器进行堆栈操作,然后跳转到指定的过程,执行之后 会自动恢复堆栈里的数据到寄存器
和IF没关系 工作在二进制层,高级语言部分只需要声明中断就好 具体的代码处理会交给编译以及硬件处理;
说个最简单的例子, 386直到奔四电脑都是单线程的
运行MSDOS或者PCDOS的时候 执行一个程序如果需要中断它 那么你就需要按CTRL+BREAK 那么程序就会被中断,因为键盘硬件的中断响应层级高。然后告诉DOS系统 需要执行“停止当前程序”的功能
中断在单片机还有很多PC的场合都是硬件级的。
PC系统死机之后 很多人选择按住电源8秒实现强制关机 这也是中断,尽管CPU已经死锁(其实就是逻辑死循环)但是这个中断是最高权限的。 勤奋工作 发表于 2013-3-31 16:05 static/image/common/back.gif
楼主的方法在电机低速情况下可用,电机转速一高则无法识别。因为楼主判正转,反转的方法是用延时来识别的, ...
这个编码器主要是用来作为开关用的,不是用来测量电机速度的 ,楼主的代码还加了过滤的代码 3MS以内的记数都会被河蟹成1 谁有更详细的资料啊 很有用,可能会用到。 已亲试,效果不错,且对程序进行了中和:用中断0数脉冲,用digitalread判断方向,节省中断;不过使用的是工业选装编码器,400线的,转速慢还可以,稍高即丢数。
请高人解决! 一个中断就可以实现正反转计数了,另外,两个中断可以读取Z相信号,实现零点定位。#define ONE_CIRCLE 334//pulse counts of one circle
#define GEAR_RATIO 46.8
const int APin = 2;
const int BPin = 3;
long PulseCounts = 0;
long Circles = 0;
float Angle;
boolean Dir;
long OldCounts;
float Speed;
void setup()
{
Serial.begin(9600);
pinMode(APin,INPUT);
pinMode(BPin,INPUT);
attachInterrupt(0,GetPulseCounts,RISING);
}
void loop()
{
Speed = (PulseCounts-OldCounts)*360/15631*2; //334*46.8=15631
OldCounts=PulseCounts;
Angle = (PulseCounts % 15631)*360/15631;
Serial.print(PulseCounts);
Serial.print("---------");
Serial.print(Angle);
Serial.print("-------");
Serial.println(Speed);
delay(500);
}
void GetPulseCounts()
{
int tempAPin = digitalRead(APin);
int tempBPin = digitalRead(BPin);
if(tempAPin != tempBPin)
{
PulseCounts++;
Dir = true;
}
else
{
if(PulseCounts <= 0)
{
PulseCounts += 15631;
}
PulseCounts--;
Dir = false;
}
} 我用pcduino 外部中断测速,稍微快一点点就不行了。。。丢的太厉害了。。。楼主有什么好方法? 小黑 发表于 2012-7-27 18:09 static/image/common/back.gif
有没有计数的中断啊(我也不知道啊 )我看着上面写的那个中断太频繁了
我这pcduino就是外部中断过于频繁,丢的特别多。。 tcsuowk001 发表于 2015-2-4 08:56 static/image/common/back.gif
已亲试,效果不错,且对程序进行了中和:用中断0数脉冲,用digitalread判断方向,节省中断;不过使用的是工 ...
你这测试能最高能到多少? tcsuowk001 发表于 2015-2-4 08:56 static/image/common/back.gif
已亲试,效果不错,且对程序进行了中和:用中断0数脉冲,用digitalread判断方向,节省中断;不过使用的是工 ...
转速达到多少时就丢数?最近也是用到这个 mark.平衡小车的编码器也是这样吗? 另外我也分享一下。刚刚测试没连接电容会乱跳。 后来加了104 电容就稳定多了。 不过 如果CLK (A端)和 DT (B端) 同时都加104电容还是有点不稳定。 之后我只是 在CLK加了电容, DT 不加, 基本上没问题了。 估计是DT加电容时有时导致DT电压时高时低。
页:
1
[2]