这个程序是很好,但是对于测试要转速在3--10000转每分钟来说,精确度低了,范围小了,
我想通过计数器的值来测出一个转速脉冲的所用的指令条数,然后用1s(或者一分钟) CPU可以执行的条数,来求出转速。
这个方法可行吗?如何测出这个转速脉冲的计数器的值呢?谢谢各位支援
引用 2 楼 guetcw 的回复:
乱七八糟的,试试这个
C/C++ code
volatile unsigned int Tick;
volatile unsigned char IrqTimes;
bit Falg_TimeOut;
void Time0_IRQ() interrupt 1 using 1
{
TH0 = 0x3C;
TL0 = 0xB0;//50mS
if(++IrqTimes >= 10)
{
IrqTimes = 0;
Flag_TimeOut = 1;
}
}
void INT0_IRQ() interrupt 0
{
if(! Flag_TimeOut)
{
Tick++;
}
}
void Regi…
引用: 引用楼主 longhaluo 的帖子:
我想通过计数器的值来测出一个转速脉冲的所用的指令条数,然后用1s(或者一分钟) CPU可以执行的条数,来求出转速。
你这个方法精度更低,除非你用FPGA。你可以算算10000转的时候,每转周期是100uS,以12M晶振来算,一个机器周期是1uS,中断响应大概10uS左右,你算算这个误差是多大。正确方法是,高频段用定时一定的时间(51的定时器最长只能定时60多ms,12M晶振,可以重复多次从而获得更长的定时时间),在这个时间里去对中断脉冲计数。这种方法误差一般不会超过2Hz,但在频率很低的时候误差就大了,这时候可以加大定时时间,只要处理好定时精度和益出处理,误差基本为0,我在学校的时候做1Hz-100KHz的误差不会超过1Hz,当然实际处理要复杂些。
如果你想要高频低频都测得比较准,建议你用AVR单片机做,用它的定时器捕获功能,测占空比都可以达到比较高的精度。
我曾经用AVR的单片机测1-1MHz误差都不会超出1Hz。
是10000/分钟哈,频率在160HZ低频就低了,在0.05HZ左右,如何把中断设置成上升沿触发呢,看到的都是下降沿触发
转速在3--10000转每分钟
如果换成脉冲的话那就是:
10000Hz哈
也就10K
用快点的单片机
26M
26 000 000 / 10 000 == 2 600
如果单片机够快,是完全没有问题的
这个容量大
呵呵