打印

430采样与定时器的问题

[复制链接]
1082|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lefeng|  楼主 | 2017-11-28 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
项目需要一个定时器10us一次中断计时间,然后定时器里判断时间,每250us adc采样一次(单通道单次采样),这个方式下,原本采样完8000次,用时应该是2s(250*8000us),结果自己掐表8s多,是否由于定时器中断太多,导致采样耗费时间了,将定时器中断改成50us的话,再测试采样那么多数据,掐表2s多,这个暂时认为比较准确,但是定时器的50us,时间太长,需要10us精度的计时,不知道有没有什么更好的办法控制adc采样,又不耽误计时。10us计时下开adc的中断,由于定时器中断优先级高,次数又太快,adc中断无法进入。照理来说adc最少需要3+13个ADC时钟,不会达到10us这么长时间的呀?求指教。单片机是MSP430FR5949,内部16MHz的DCO作为时钟。
下面是直接在定时器里去采样的,没有用ADC中断的方式。
定时器配置。
void TimerB0_Init(uint16_t t)
{      
  TB0CCTL0 = CCIE;                          // TBCCR0 interrupt enabled
  TB0CCR0 = 160;                             //  10us  
  TB0CTL = TBSSEL__SMCLK | MC__UP;          // SMCLK, 16M UP mode
}
复制代码


定时器中断
/*定时器B0中断服务函数*/
#pragma vector = TIMER0_B0_VECTOR
__interrupt void Timer0_B0_ISR(void)
{
      RealTime.u10us++;         //10US
      
      if(RealTime.u10us==100000)
      {
          RealTime.u10us=0;
          RealTime.usec++;
          if(RealTime.usec==60)
          {
              RealTime.usec=0;
              RealTime.umin++;
              if(RealTime.umin==60)
              {
                  RealTime.umin=0;
                  RealTime.uhour++;
                  if(RealTime.uhour==24)
                  {
                      RealTime.uhour=0;
                  }
              }
          }
         
      }
      if(RealTime.u10%25==0)//250us采样一次
      {  
        A9_sample_start();
      }

}


ADC配置
void ADC_Init(void)
{
  

  while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT
  REFCTL0 |= REFVSEL_2 | REFON;             // Select internal ref = 2.5V
                                            // Internal Reference ON
  // Configure ADC12
  //ADC12CTL0 = ADC12ON | ADC12SHT0_2;        // Turn on ADC12, set sampling time
  ADC12CTL0 |= ADC12ON + ADC12SHT0_2+ADC12SHT1_2;
  //ADC12CTL1 = ADC12SHP;
  ADC12CTL1 = ADC12SHP | ADC12SSEL_3 ;       // Use sampling clock SMCLK 16M;

  ADC12CTL3 &= 0xFFE0;
  ADC12CTL3 |= ADC12CSTARTADD_9;
  ADC12MCTL9 = ADC12INCH_9 | ADC12VRSEL_1;
  
  ADC12CTL0 |= ADC12ENC;
  
  //ADC12IFGR0 = BIT9;

}



ADC采样
void A9_sample_start(void)
{
      //while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT
      //REFCTL0 |= REFVSEL_2 | REFON;             // Select internal ref = 2.5V
                                                // Internal Reference ON
      // Configure ADC12
      //ADC12CTL0 = ADC12ON | ADC12SHT0_2;        // Turn on ADC12, set sampling time
      //ADC12CTL1 = ADC12SHP;
      //ADC12CTL1 = ADC12SHP | ADC12SSEL_3 ;       // Use sampling clock SMCLK 8M;

      //ADC12CTL3 &= 0xFFE0;
      //ADC12CTL3 |= ADC12CSTARTADD_9;
      //ADC12MCTL9 &= 0xFFE0;//先清空原来的值
      //ADC12MCTL9 |= ADC12INCH_9 | ADC12VRSEL_1;
      ADC12CTL0 |= ADC12SC;
      
      while (!(ADC12IFGR0 & BIT9));
      __data20_write_short(Cur_Addr+position,ADC12MEM9);
      //ADC12CTL0 &=~ (ADC12ENC + ADC12SC);
      position+=2;
      if(position==0x4000)
        position=0;
}

相关帖子

沙发
CaLipton| | 2017-11-28 10:31 | 只看该作者
““定时器中断太多,导致采样耗费时间了””很明显中断函数你写的不合理,中断失去意义了。

使用特权

评论回复
板凳
Rospiers| | 2017-11-28 10:42 | 只看该作者
设置啥都没说,型号也不说,G2系列,最少需要4+13 ADCLK,就拿13来算吧,13X0.2us=2.6us,在10内啊,更加说明你的中断写的不合理了

使用特权

评论回复
地板
Lewisnx| | 2017-11-28 10:50 | 只看该作者
这么极限的时间,能保证准确率不

使用特权

评论回复
5
CCompton| | 2017-11-28 11:00 | 只看该作者
AD时间是16+13=29,29X0.2=5.8us,你的系统主时钟是1M的,那中断肯定就不行了,看注释,猜是16M的,那应该没啥问题

使用特权

评论回复
6
updownq| | 2017-12-2 22:41 | 只看该作者
直接使用DMA。

使用特权

评论回复
7
sanfuzi| | 2017-12-2 22:42 | 只看该作者
在定时器中断采集数据

使用特权

评论回复
8
gygp| | 2017-12-2 22:42 | 只看该作者
建议使用外部的ADC

使用特权

评论回复
9
chenci2013| | 2017-12-2 22:43 | 只看该作者
单片机集成的ADC肯定需要转换时间。

使用特权

评论回复
10
biechedan| | 2017-12-2 22:43 | 只看该作者
ADC的转换时间没有这么长的

使用特权

评论回复
11
wangdezhi| | 2017-12-2 22:44 | 只看该作者
换个高频的ADC。

使用特权

评论回复
12
isseed| | 2017-12-2 22:44 | 只看该作者
推荐使用DSP芯片

使用特权

评论回复
13
xietingfeng| | 2017-12-2 22:44 | 只看该作者
能够达到10us的时间间隔

使用特权

评论回复
14
suzhanhua| | 2017-12-2 22:45 | 只看该作者
外部的高度ADC。

使用特权

评论回复
15
mituzu| | 2017-12-2 22:45 | 只看该作者
定时器里面采样不能实现吗?

使用特权

评论回复
16
updownq| | 2017-12-2 22:45 | 只看该作者
DMA减少了数据操作的。

使用特权

评论回复
17
sanfuzi| | 2017-12-2 22:45 | 只看该作者
楼主对采样速要求这么大吗吗?

使用特权

评论回复
18
gygp| | 2017-12-2 22:45 | 只看该作者
外部的并口ADC能够满足要求。

使用特权

评论回复
19
chenci2013| | 2017-12-2 22:45 | 只看该作者
具体的转换时间在datasheet里面有。

使用特权

评论回复
20
biechedan| | 2017-12-2 22:45 | 只看该作者
你需要多大的采样时间?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

200

主题

1087

帖子

0

粉丝