430中开根号和除法出大问题

2019-08-04 17:35发布

msp430 ADC12进行双通道重复采样,采用定时器中断采样,然后对采样数据进行处理,DAC0832输出,我试验了 ADC采样和DAC输出,两者可以,对采样的波形可以误差很小的DAC复原,

然后问题来了,我将采样数据x和y进行一些算法的处理,输出波形完全乱了。(图3)只添加下面的语句
  其中k1 k2 k3 是系数,x y是双通道采样值,sqrt是math.h中的函数

    Fx=(-k1*y) -(k2*d_x);
    if(Fx>0)  { Ix=(int)sqrt(Fx*x*x/k3);}
      else   { Ix=(int)sqrt(-Fx*x*x/k3);}


情况1当没有   if(Fx>0)  { Ix=(int)sqrt(Fx*x*x/k3);}
                      else   { Ix=(int)sqrt(-Fx*x*x/k3);}
          输出的x y波形如图1,波形很好,也很稳定;
情况2 然后我把sqrt去掉 if(Fx>0)  { Ix=(int)(Fx*x*x/k3);}
                                       else   { Ix=(int(-Fx*x*x/k3);}
      输出的x y波形波形如图2,波形开始震荡,不稳定;
情况3 然后我把除法和开根号都去掉 if(Fx>0)  { Ix=(int)(Fx*x*;}
                                                        else   { Ix=(int(-Fx*x*x);}
      输出的x y波形波形如图1了,很好很稳定
分析其原因,我觉得是msp430 单片机对 除法和开根号没有办法处理,导致程序跑偏了。(我输入的是两路直流电,测的是DAC0832两路输出)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。