微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于软件数字滤波的疑问

关于软件数字滤波的疑问

时间:10-02 整理:3721RD 点击:

我用单片机采集热电偶温度,由于采集到的数据不稳定,就编写了一个中位值平均滤波程序,程序如下,但在KEIL C 51中编译不能生成HEX文件,提示“Target not created”,如果不加入该滤波程序,编译正常,求高手指点。
if(readtempflag==1)               // 計時器中斷到

  {

  readtempflag=0;                  // 計時器標誌清0

   tempnum[number]=readtemp();     //  讀取1个溫度數據

//*對一維數組tempnum[10]排序*//

        for(j=0;j<9;j++)               

         for(k=0;k<9-j;k++)            

         {

          if(tempnum[k]>tempnum[k+1])

          {

           count=tempnum[k];

           tempnum[k]=tempnum[k+1];

           tempnum[k+1]=tempnum[k];

           }

          }

//*選取排好序的數組中的中間6個值求平均*//

         for(n=2;n<8;n++)

         {

          sum=sum+tempnum[n];

          sum=sum/(n-1);

          }

        number++;

  if(number==10)

  {

   number=0;

   }

照你的程序流程,每读一次AD值就要排一次序,并计算一次平均值。
改下流程:先读完10次值,再数字滤波。

是这样的;
但是采样10次再滤波温度就会出现跳变啊,我需要每次采集一个数据放在队尾,把队首的温度丢掉,
我将里面的一段程序改了还是一样的效果;
for(n=2;n<8;n++)
{
sum=sum+tempnum[n];
sum=sum/(n-1);
}
改为
mean=(tempnum[2]+tempnum[3]+tempnum[4]+tempnum[5]+tempnum[6]+tempnum[7]+)/6;
但还是和原来一样的提示 Target not....

顶    加油   我也是新手

你贴的程序是放在主函数中吗?
并且你是用定时中断来确定读取数据的时间,如果每次先读10个值,再滤波,效果应该也差不多吧

没有其他的错误提示吗?只有一个target not created?

你说采样10次在滤波温度会跳变,是测试过确实这样,还是你自己想当然的?
你程序里采集数据是根据定时器定时时间的,这个定时时间有多长?在定时器未溢出的过程中,你要测试的温度会不会跳变?

谢谢你,我刚刚试出来什么原因了,是由于RAM不足导致的。定义了太多的浮点数。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top