|
楼主 |
发表于 2008-7-7 10:58:23
|
显示全部楼层
楼上的兄弟还在搞这个?
我先说一下我是一个业余爱好者,所以对程序的要求不高, 只要有运行就可以了,有时候我的程序语句自己感觉是对的,但就是不能正常运行,我的方法就是把语句拆开写,这样能避免一些我不知道的错误,我也没有对程序的钻研精神,往往对于上述情况程序正常后我就没有找错在什么地方.因为是业余程序,所以有时我尽量用FLOAT或者LONG型数据,这样会避免很多后期调试麻烦.
总之我的做法的目的就是让程序能快些跑起来,对空间效率等问题基本没有考虑.
再说上面的语句.
因为我们用的电感是以uH为单位,很少有电感达到1H的,所以程序在计算时直接用把单位换成uH了,所以有这个常数.不然的话公式算出的数太小,不好显示.
temp3就是temp2的平方啊.我用一个变量程序不能正常运行,如temp2=temp2*temp2,只得另用一个变量,没有深究.
参考下面的公式:
(原文件名:untitled.JPG)
将就老周还在,程序里有个1000000000,弱弱的问,怎么得来的?
void calc_Lx() //测量电感量
{unsigned char temp1;
unsigned long i;
float temp2,Lx,L1,temp3;
temp2=1000000000/((float)F1);//先算F1的平方的倒数,备用.参见L1的计算公式,再乘这个常数,得到的结果为uH,不然F1平方的倒数最后得出的数太小,可能出问题.
temp3=temp2*temp2; //Temp3是temp2的平方
L1=temp3/(39.4784*((float)Ct)); //先算L1,因为后面算Lx要用它.用temp3来算.公式见上面,一样的,只是另外一种表达..
temp2=((float)F1)/((float)F2); //得到L1后开始算Lx,先算出F1/F2比值,后面用.变量类型不知道有没有必要用FLOAT,我不知道,用上先.
temp3=temp2*temp2; //得比值的平方
Lx=(temp3-1)*L1; //看上面的公式,得出了Lx
i=(unsigned long)Lx; //不要小数了,只要整数,不知道变量还是用Lx是不是也可以,可以省点内在,没有时间研究.
display_num(i); //显示
LCD_write_char(0,'u');
LCD_write_char(0,'H');
}
|
|