AD采样频率控制

2019-10-15 05:51发布

做了一个AD采样然后把数据保存到SD卡的程序,在定时器中断服务函数里得到AD采样值,缓存到一个数组里,达到80个数据之后存到SD卡,现在的问题是采样频率只有120Hz左右,超过这个频率SD卡里面会丢掉许多的数,是因为我在中断函数里执行的语句太多了吗,还是SD卡在存储时自己丢失了数据呢?有没有人做过类似的程序,把采样值存储起来的情况下,采样频率最高能达到多少呢?请多多指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
lvkanger
1楼-- · 2019-10-15 11:04
这很好找问题啊,你先不要把80个数据存到SD卡里,直接打印出来,不就知道是你采集的问题,还是写SD卡的问题了?
hande
2楼-- · 2019-10-15 12:22
 精彩回答 2  元偷偷看……
lvkanger
3楼-- · 2019-10-15 13:38
hande 发表于 2017-1-23 15:03
我查了一下,好像是中断函数运行时间太长了,有什么办法可以解决这个问题吗

你中断里都干嘛了?为啥会运行时间太长?贴下代码吧
hande
4楼-- · 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  );          
                }
}
这个就是中断函数
lvkanger
5楼-- · 2019-10-15 21:16
hande 发表于 2017-1-23 16:20
void TIM3_IRQHandler(void)   
{
        static float temp;

你在中断里做这么多事儿肯定时间长啊,你用定时器中断置标志就好了,把ADC采样和写SD卡都放到外边去!
hande
6楼-- · 2019-10-16 01:29
把SD卡存储的程序放主函数中,定时器中断执行的次数是对的,但SD卡里存的数据还是少了一些

一周热门 更多>