现在在做一款冰淇淋机,电机的转速通过霍尔传感器,在外部中断检测脉冲,转速求出来比如是340/分钟,当电机转速是330转的时候要求是显示%80,这个是起始百分比没啥问题,当电机转速达到325转是百分比显示要求达到%99,也就是说,在这五转的时间内要显示从%80到%99,中间不能有跳跃,只能是80,81,82这样加上去,经过计算一个百分比变化大概需要0.26转,0.26转的时间也能求出,在外部中断中是检测一转的时间,然后保存这一转的时间到一个全局变量中,测得一转的时间就把原来的时间清零。然后拿现在的一转时间与起始的时间做一个差值,差值再除以相差的19个百分点,但是这样根本就没法从81,82,83这样累加上去,结果是81,84,86等跳变。搞死人了,望大神指点一下好的方法。先上个程序。
void Extern_Int1(void) interrupt 2 //外部中断1 用于检测转速
{
if(OKbit0==0) //标志位初始为零
{
if (SpeedFinshedFlag==1)
{
timeCount2=TimeCount1; //转速周期 TimeCount2是保存一转时间的全局变量,TimeCount是在定时器中断里面自加,定时器是0.1ms中断
OKbit0=1; //在主程序里面已经清零
}
else
{
TimeCount1=0;
SpeedFinshedFlag=1; //在主程序清零
}
}
}
//下面这段程序是300ms测一次转速
if(start_bit==1&&OKbit0==1){
TransRun=600000/TimeCount2; //测得的转速
OKbit0=0;
SpeedFinshedFlag=0;
T20ms=0;
}
else{if(T20ms==15){TransRun=0;}} //300毫秒计算一次转速
//下面这个是计算 转速与百分比的关系
if(TransRun>(341-canshu[4])) //canshu[4]是一个修正值,不用管他,只需要知道341-canshu[4]是起始转速
{
bili=80; //当转速>起始转速时百分比为%80,转速越往下降,比例值就往上加
}
else
{
bili= 80+((TimeCount2-600000/(341-canshu[4])))*10/14;//时间差值扣大十倍*10
}
最终结果就是我上面说的,不是81,82,83这样累加上去 ,很急,望大神赐教!
这个就是单位时间内检测到的脉冲数换算成转速,再和标准值进行比较
一周热门 更多>