OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9242|回复: 4

大家好,用STM32采集到的数据如图所示,想在matlab上做波形显示和频谱分析,幅值有了,但时间点不知该从哪里取得?求指教

[复制链接]

13

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-5-8
在线时间
0 小时
发表于 2014-5-12 09:32:59 | 显示全部楼层 |阅读模式
5金钱
大家好,用STM32采集到的数据如下所示,想在matlab上做波形显示和频谱分析,幅值有了,但时间点不知该从哪里取得?求指教


附加信息:28Hz的信号,用定时器实现一周期采集256个点(7.168KHz),ADC的采样频率(转换速率)为72M/6/252=47.619kHz,用DMA发送,串口波特率为115200,如何获得采样的时间点?因为串口得到的一周期的采样个数82个小于256个,所以采样的时间点不知从何处算起?求大神指教,谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-12 14:22:30 | 显示全部楼层
既然一个周期是256个点,为何串口只得到82个?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-5-8
在线时间
0 小时
 楼主| 发表于 2014-5-13 10:20:28 | 显示全部楼层
原子哥,这确实是个问题,我怀疑是不是延时的原因?我改成一个周期采集32个点,分别用查询法和DMA进行发送至串口调试助手,结果在串口调试助手里均不能得到32个周期点。
1、DAM不加延时
while(1)
{
      temp=adcx*100*(3.3/4096);
      SendBuff[0]=temp/100+'0';
      SendBuff[1]=46;
      SendBuff[2]=temp/10%10+'0';
      SendBuff[3]=temp%10+'0';
      SendBuff[4]=32;
      LED0=1;
      USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //使能串口1的DMA发送  
      MYDMA_Enable(DMA1_Channel4);
     if(DMA_GetFlagStatus(DMA2_FLAG_TC4)!=RESET) //判断通道4传输完成
    {
          DMA_ClearFlag(DMA2_FLAG_TC4);//清除通道4传输完成标志
          break; 
     }
    //delay_us(1500);
}


2、DMA加延时1.5ms
while(1)
{
      temp=adcx*100*(3.3/4096);
      SendBuff[0]=temp/100+'0';
      SendBuff[1]=46;
      SendBuff[2]=temp/10%10+'0';
      SendBuff[3]=temp%10+'0';
      SendBuff[4]=32;
      LED0=1;
      USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //使能串口1的DMA发送  
      MYDMA_Enable(DMA1_Channel4);
     if(DMA_GetFlagStatus(DMA2_FLAG_TC4)!=RESET) //判断通道4传输完成
    {
          DMA_ClearFlag(DMA2_FLAG_TC4);//清除通道4传输完成标志
          break; 
     }
    delay_us(1500);
}


得到一周期也只有24个数据左右;
3,用查询的方法发送
u16 adcx;  
u8 SendBuff[6];
void Uart1_PutChar(u8 ch)
{
  USART_SendData(USART1, (u8) ch+'0');
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

void Uart1_PutChar1(u8 ch)
{
  USART_SendData(USART1, (u8) ch);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}

int main(void)
{  
u8 ah,al1,al2= 0;
u16 temp;
LED_Init() ;
delay_init();     //延时函数初始化  
uart_init(38400); 
Adc_Init();   //ADC初始化
Timer3_Configuration();
while(1)
{
temp=adcx*100*(3.3/4096);
ah=temp/100;
Uart1_PutChar(ah);
Uart1_PutChar1(46);
al1=temp/10%10;
Uart1_PutChar(al1);
al2=temp%10;
Uart1_PutChar(al2);
Uart1_PutChar1(32);
LED0=1;
 }
}


得到的数据也只有27个左右。
附加信息:定时器定时1/(28*32)=1116us,串口波特率设为38400bps;

请问原子哥,问题出现在哪里?到底怎样才能在串口调试助手里显示32个数据。谢谢您!



回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-13 23:25:37 | 显示全部楼层
回复【3楼】南方的狼:
---------------------------------
你采集完一次,再统一发送吧...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2014-6-25
在线时间
5 小时
发表于 2015-6-25 09:47:03 | 显示全部楼层
楼主,我看你采样点挺多的,你咋设置的呀,我用F4 ADC,1.4M的采样率去采样11KHz的,结果每个周期只有六个点,不知道咋回事
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 00:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表