AD采样频率控制

2019-10-15 05:51发布

做了一个AD采样然后把数据保存到SD卡的程序,在定时器中断服务函数里得到AD采样值,缓存到一个数组里,达到80个数据之后存到SD卡,现在的问题是采样频率只有120Hz左右,超过这个频率SD卡里面会丢掉许多的数,是因为我在中断函数里执行的语句太多了吗,还是SD卡在存储时自己丢失了数据呢?有没有人做过类似的程序,把采样值存储起来的情况下,采样频率最高能达到多少呢?请多多指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
hande
2019-10-15 19:25
lvkanger 发表于 2017-1-23 16:02
你中断里都干嘛了?为啥会运行时间太长?贴下代码吧

void TIM3_IRQHandler(void)   
{
        static float temp;
        static UINT bw;         /* ????????????? */                       
        static FRESULT ress;
        static FIL file;
  static unsigned char buf[482]="";
        static char zh[6];                                       
  static u8 i=0;

        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  
                {
               
                temp=(float)ADC_ConvertedValue*(3.3/4096);
                printf("%.3f ",temp);

                sprintf(zh,"%.3f",temp);  
                strcat(buf,zh);                          
                strcat(buf," ");                          

                i++;
                if(i>=80){
                 ress = f_open(&file, "0:/data.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE );  
          if ( ress == FR_OK )
                  {
                       ress = f_lseek(&file,file.fsize);
                                  ress = f_write(&file, buf, sizeof(buf), &bw);
                      f_close(&file);
                                        i=0;
            }
                memset(buf,0,sizeof(buf));         
                        }
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );          
                }
}
这个就是中断函数

一周热门 更多>