智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2467|回复: 4
打印 上一主题 下一主题

[光电] AD 采集

[复制链接]

17

主题

240

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2743
威望
1279
贡献
832
兑换币
711
注册时间
2012-10-19
在线时间
316 小时
跳转到指定楼层
1#
发表于 2013-3-27 21:02:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD采集时间超长!!!    5ms中断,开始处 AD采集五次平均还好,换成十次程序就会出错     而除了采集,其余在1ms内就能控制完成
大家帮忙看下哪儿出错了。    这样子主程序连OLED显示程序都运行不了   
void AD_Init(void)  //AD初始化
{
  //ATD0CTL0=0x08;  //后四位WRAP[3:0]回绕通道选择位,选择转换那一通道后绕回AN0  默认0000为保留
  ATD0CTL1|=0x40;   //ETRIGSEL SRES1 SRES0 SMP_DIS ETRIGCH3 ETRIGCH2 ETRIGCH1 ETRIGCH0
                    //  0        1     0        0      0         0        0        0  
                    //SRES1=0、SRES0=0选择 8位 01 选择10位 10选择12位  11保留
  ATD0CTL2=0x40;    // 0 AFFC AWAl ETRIGLE ETRIGP ETRIGE ASCIE ASCIF
                     // 0  1    0    0       0       0     0       0
                    //AFFC=0 标志位手动清0 =1 自动清0
                    //AWAI=1 等待模式下可转换 =0 等待模式下禁止转换
                    //ETRIGLE、ETRIGP 触发方式选择
                    //ASCIE 顺序完成中断使能   ASCIF  比较中断使能
  ATD0CTL3=0xb0;    // DJM S8C S4C S2C S1C FIFO FRZ1 FRZ0
                    //  1  0    1   1  0    0    0    0
                    //DJM=0 左对齐存放在结果寄存器中 先存入ATD0DR0H(高位)
                    //DJM=1 右对齐                   先存入ATD0DR0L(低位)
                    // S8C~~S1C 转换序列长度 即要转换的通道数 这里是6
                    //FIFO=0, 结果寄存器映射到转换序列   即依次把数据存入ATD0DR0~ATD0DRn
                    //FIFO =1  则没有 即ANn通道数据存入ATD0DRn
                                   //同时依次把数据存入ATD0DR0~ATD0DRn
  ATD0CTL4=0x03;    //  SMP2 SMP1 SMP0   PRS4~~PRS0  
                    //  0     0     0      00011
                    //采样周期选择 T=(1/Fad)*4     
                    // AD时钟频率Fad=Fbus/2/(PRS+1)=64M/2/16=2M
                    // 最大A/D时钟=2.0MHz(最小A/D CLOCK=0.5MHz)
  ATD0CTL5=0x30;    //  0 SC  SCAN MUIT CD CC CB CA
                    //  0  0   1    1    0 0  0  0   
                    //SC=0 CD~CA用于选择0~15号通道 即起始转换通道选择
                    //SC=1选择特殊通道
                    //SCAN=1 单次转换 =0 多次连续转换
                    //MUIT=1 多通道转换 =0 单通道转换
  ATD0DIEN=0xf000;  //数字输入使能 这里禁止输入
// ATD0STAT0       SCF 0 ETORF FIFOR CC3 CC2 CC1 CC0
                 //SCF 转换序列完成标志 完成转换则置1
                 //CC[3:0] 转换计数器 4-位计数器指向下一个将要转换的通道
// ATD0STAT2       CCF15~~CCF0  独立通道转换完成标志位  
                 // 每个相应的通道转换结束后置位
                 //当相应的A/D结果寄存器被读出时,清零
}

/************************************************************************************
  --------------------------------- 中断子函数 ------------------------------------
*************************************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
void interrupt 67 PIT1(void)
{
   GetSpeed();
   j=ATD0DR5;
   while(i)
   {
      while((!(ATD0STAT2&0x0001))||(!(ATD0STAT2&0x0002))); //等待转换完成
      i--;
      c=ATD0DR0;
      d=ATD0DR1;
      a+=c/5;
      b+=d/5;
    }
    i=5;
    VOLTAGE_GRAVITY=b;
    VOLTAGE_GYRO=a;
   
    AngleCalculateControl();
    PwmControl();
    a=0;
    b=0;
    PITTF|=0x02; //清中断标志位
}
#pragma CODE_SEG DEFUALT

0

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
威望
260
贡献
126
兑换币
167
注册时间
2013-1-5
在线时间
39 小时
2#
发表于 2013-3-27 21:40:34 | 只看该作者
ATD0CTL4=0x03;    //  SMP2 SMP1 SMP0   PRS4~~PRS0  
                    //  0     0     0      00011
                    //采样周期选择 T=(1/Fad)*4     
                    // AD时钟频率Fad=Fbus/2/(PRS+1)=64M/2/16=2M
                    // 最大A/D时钟=2.0MHz(最小A/D CLOCK=0.5MHz)
这个频率有点大,改小点,我上次也是用2M,出来结果一点不正确
回复 支持 反对

使用道具 举报

17

主题

240

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2743
威望
1279
贡献
832
兑换币
711
注册时间
2012-10-19
在线时间
316 小时
3#
 楼主| 发表于 2013-3-28 07:41:41 | 只看该作者
云雾高速公路 发表于 2013-3-27 21:40
ATD0CTL4=0x03;    //  SMP2 SMP1 SMP0   PRS4~~PRS0  
                    //  0     0     0      0001 ...

      嗯,注释是2M   实际应该是8M。不过这样子采集的数据没问题 。问题是即使这样子,AD采集数据那块还是占了好长时间!按资料上说转换都是微秒级的   但我这程序里采集几组数据就能占到级ms     崩溃啊!死活找不出原因
回复 支持 反对

使用道具 举报

6

主题

67

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1600
威望
746
贡献
464
兑换币
490
注册时间
2012-12-9
在线时间
195 小时
4#
发表于 2013-4-12 19:31:09 | 只看该作者
jianpeng 发表于 2013-3-28 07:41
嗯,注释是2M   实际应该是8M。不过这样子采集的数据没问题 。问题是即使这样子,AD采 ...

我的也是,不知道什么原因。
回复 支持 反对

使用道具 举报

0

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
588
威望
288
贡献
156
兑换币
191
注册时间
2013-3-28
在线时间
72 小时
毕业学校
黑龙江八一农垦大学
5#
发表于 2013-7-15 16:33:47 | 只看该作者
学习了,
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-8 22:41 , Processed in 0.137289 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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