• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

怎样解决AD同时采样

我用的单片机有多路模拟(大于8)输入,我想在同一个时刻(一个定时器控制采样速度)至少采样5路信号,可以实现吗?
那位大侠有过这方面的经验?我的考虑是在AD中断中通过交叉编译改变输入端口实现,是否可以?
全部回复(22)
正序查看
倒序查看
dianji002
LV.2
2
2006-04-07 12:49
你用的是什么单片机?很多单片机可以同时同步采样的,如AVR的,还有DSP,
0
回复
sdjufeng
LV.6
3
2006-04-07 13:07
不好办,多路采样利用的都是同一个转换器,分时利用,如果想多路同时转换,那就需要多个转换器,一般单片机是不支持这种结构的.
0
回复
2006-04-07 14:01
@dianji002
你用的是什么单片机?很多单片机可以同时同步采样的,如AVR的,还有DSP,
我用的是C8051F系列的单片机,可以吗?
0
回复
2006-04-07 14:06
@sdjufeng
不好办,多路采样利用的都是同一个转换器,分时利用,如果想多路同时转换,那就需要多个转换器,一般单片机是不支持这种结构的.
我认为在中断中可以改变AD的选择的通道,但是不知道速度会怎样,我认为可以实现.
0
回复
sdjufeng
LV.6
6
2006-04-07 14:39
@xinhua.liu
我认为在中断中可以改变AD的选择的通道,但是不知道速度会怎样,我认为可以实现.
哦,愿听指教,咱们先不管速度如何,看看如何实现5路AD同时进行采样转换,看一看一个姑娘如何嫁给五个婆家!
0
回复
2006-04-07 17:31
@sdjufeng
哦,愿听指教,咱们先不管速度如何,看看如何实现5路AD同时进行采样转换,看一看一个姑娘如何嫁给五个婆家!
可以的.不信你可以

void ADC0_ISR (void) interrupt 15 using 3
{
  static unsigned char num_samples = 0;        // ADC0采样计数器
  AD0INT = 0;                             // 清除ADC0转换结束标志
AMX0SL = 0x00;
  Samples0[num_samples] = ADC0;            // 读和存储ADC0值
AMX0SL = 0x01;
  Samples1[num_samples] = ADC0;            // 读和存储ADC0值

AMX0SL = 0x02;
  Samples2[num_samples] = ADC0;            // 读和存储ADC0值

AMX0SL = 0x03;
  Samples3[num_samples] = ADC0;            // 读和存储ADC0值

AMX0SL = 0x04;
  Samples4[num_samples] = ADC0;            // 读和存储ADC0值

  num_samples++;                          // 更新采样计数器
  if (num_samples == NUM_SAMPLES)
    {
num_samples = 0;                     // 复位采样计数器
     EIE2 &= ~0x02;                       // 禁止ADC0中断
     ADC0_DONE = 1;                       // 设置DONE标志
    }
}
0
回复
sdjufeng
LV.6
8
2006-04-07 17:52
@xinhua.liu
可以的.不信你可以voidADC0_ISR(void)interrupt15using3{  staticunsignedcharnum_samples=0;        //ADC0采样计数器  AD0INT=0;                            //清除ADC0转换结束标志AMX0SL=0x00;  Samples0[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x01;  Samples1[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x02;  Samples2[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x03;  Samples3[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x04;  Samples4[num_samples]=ADC0;            //读和存储ADC0值  num_samples++;                          //更新采样计数器  if(num_samples==NUM_SAMPLES)    {num_samples=0;                    //复位采样计数器    EIE2&=~0x02;                      //禁止ADC0中断    ADC0_DONE=1;                      //设置DONE标志    }}
哦,这就叫做五次采样啊?
你用的这种单片机是属于C8051系列的,是吧,这种器件我没有用过,但都差不多.应该看到,上面的这个过程是一次ADC采样完成后的中断过程,硬件电路只能给出一个结果,你把他分别传送到五个数组的某个位置,得到五个结果,那你不是浪费了四个数组的单元吗?
0
回复
sdjufeng
LV.6
9
2006-04-07 18:16
@xinhua.liu
可以的.不信你可以voidADC0_ISR(void)interrupt15using3{  staticunsignedcharnum_samples=0;        //ADC0采样计数器  AD0INT=0;                            //清除ADC0转换结束标志AMX0SL=0x00;  Samples0[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x01;  Samples1[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x02;  Samples2[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x03;  Samples3[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x04;  Samples4[num_samples]=ADC0;            //读和存储ADC0值  num_samples++;                          //更新采样计数器  if(num_samples==NUM_SAMPLES)    {num_samples=0;                    //复位采样计数器    EIE2&=~0x02;                      //禁止ADC0中断    ADC0_DONE=1;                      //设置DONE标志    }}
改变通道以后,不用启动和等待就可以直接取结果啊?
五通道同时测量的意思是说转换过程时间比较长,为了节省时间,让它们的转换过程同时进行,如果像你上面的做法,即便是改变通道后能得到结果,那也是分时得到的,不是吗?
0
回复
小雨
LV.5
10
2006-04-07 20:13
@xinhua.liu
可以的.不信你可以voidADC0_ISR(void)interrupt15using3{  staticunsignedcharnum_samples=0;        //ADC0采样计数器  AD0INT=0;                            //清除ADC0转换结束标志AMX0SL=0x00;  Samples0[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x01;  Samples1[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x02;  Samples2[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x03;  Samples3[num_samples]=ADC0;            //读和存储ADC0值AMX0SL=0x04;  Samples4[num_samples]=ADC0;            //读和存储ADC0值  num_samples++;                          //更新采样计数器  if(num_samples==NUM_SAMPLES)    {num_samples=0;                    //复位采样计数器    EIE2&=~0x02;                      //禁止ADC0中断    ADC0_DONE=1;                      //设置DONE标志    }}
建议用外部多路硬件采样保持电路解决这个问题.
0
回复
xinhua.liu
LV.5
11
2006-04-08 23:08
@sdjufeng
改变通道以后,不用启动和等待就可以直接取结果啊?五通道同时测量的意思是说转换过程时间比较长,为了节省时间,让它们的转换过程同时进行,如果像你上面的做法,即便是改变通道后能得到结果,那也是分时得到的,不是吗?
我知道我的问题了,谢谢你们提醒!
0
回复
njyd
LV.8
12
2006-04-09 14:50
  这要看你用几个A/D转换器.
  如果每路都用单独一个A/D是可以的,这样有几路就要用几个.如果用一个A/D分路采样就不可能进行事实上的同时采样,因为一个A/D转换器只能顺序多次采样而不可能并行多次采样.
  但是,有些A/D转换器转换速度较快,比如AD1674只用十几uS,加上读写时间也就是二、三十uS,如果你的采样速率不是非常高可认为是同时采样.
0
回复
xinhua.liu
LV.5
13
2006-04-10 09:42
@njyd
  这要看你用几个A/D转换器.  如果每路都用单独一个A/D是可以的,这样有几路就要用几个.如果用一个A/D分路采样就不可能进行事实上的同时采样,因为一个A/D转换器只能顺序多次采样而不可能并行多次采样.  但是,有些A/D转换器转换速度较快,比如AD1674只用十几uS,加上读写时间也就是二、三十uS,如果你的采样速率不是非常高可认为是同时采样.
我认为速度再快也不能说明同步采样,所以还是用每路多有独立的AD,即在同一个脉冲下,把所要采样的值都保存,然后在一次读取.
有没有比较便宜的多路同步采样AD,大家推荐一块,要求至少要12位哦.
0
回复
sdjufeng
LV.6
14
2006-04-10 11:07
@xinhua.liu
我认为速度再快也不能说明同步采样,所以还是用每路多有独立的AD,即在同一个脉冲下,把所要采样的值都保存,然后在一次读取.有没有比较便宜的多路同步采样AD,大家推荐一块,要求至少要12位哦.
ADuC812=50几元,12AD
0
回复
njyd
LV.8
15
2006-04-10 21:13
@xinhua.liu
我认为速度再快也不能说明同步采样,所以还是用每路多有独立的AD,即在同一个脉冲下,把所要采样的值都保存,然后在一次读取.有没有比较便宜的多路同步采样AD,大家推荐一块,要求至少要12位哦.
  这要看你在干什么.
  大部分情况下没有必要追求事实上的同时采样.而且事实上也做不到.
  即使你用多个A/D同是启动,严格地说导线的长度和器件的细微差别也会造成微小的不同步.
0
回复
xinhua.liu
LV.5
16
2006-04-10 23:21
@njyd
  这要看你在干什么.  大部分情况下没有必要追求事实上的同时采样.而且事实上也做不到.  即使你用多个A/D同是启动,严格地说导线的长度和器件的细微差别也会造成微小的不同步.
你没有用到要同步采集的场合吗?我要用的是两个波形相位差,不知道还有其他办法没有?
0
回复
sdjufeng
LV.6
17
2006-04-10 23:32
@njyd
  这要看你在干什么.  大部分情况下没有必要追求事实上的同时采样.而且事实上也做不到.  即使你用多个A/D同是启动,严格地说导线的长度和器件的细微差别也会造成微小的不同步.
说得对!
0
回复
njyd
LV.8
18
2006-04-11 21:48
@xinhua.liu
你没有用到要同步采集的场合吗?我要用的是两个波形相位差,不知道还有其他办法没有?
  这要看你的波的频率和精度要求.
0
回复
sdjufeng
LV.6
19
2006-04-11 21:56
@xinhua.liu
你没有用到要同步采集的场合吗?我要用的是两个波形相位差,不知道还有其他办法没有?
这样的电路,我以前曾经设计过,如果你的波形是50Hz,用单片机连续采样速度已经足够了,如果频率很高,可以采用单片机的捕捉功能,或者外电路整形成方波以后,通过中断来实现检测.
0
回复
njyd
LV.8
20
2006-04-12 16:07
@sdjufeng
这样的电路,我以前曾经设计过,如果你的波形是50Hz,用单片机连续采样速度已经足够了,如果频率很高,可以采用单片机的捕捉功能,或者外电路整形成方波以后,通过中断来实现检测.
  中断如果路数太多或频率太高可能也不行,不能保证在第一时间响应中断.
  如果有一种电路能在上升沿信号来时自动记下当时时间,然后再等待中断响应.
0
回复
sdjufeng
LV.6
21
2006-04-12 16:28
@njyd
  中断如果路数太多或频率太高可能也不行,不能保证在第一时间响应中断.  如果有一种电路能在上升沿信号来时自动记下当时时间,然后再等待中断响应.
捕捉就是这样的啊,外边沿的瞬间另存计数器的数值(捕捉),这个过程是由硬件完成的,同时发出中断,CPU可以稍后来处理已经保存了的数据.它的处理精度与机器周期是同一个数量级.
0
回复
wwj2124
LV.1
22
2006-08-24 19:25
@sdjufeng
说得对!
急需八位模数并行转换芯片,请指教,八位模数并行转换芯片的型号,!!!!!!!!,请把相应型号(最好有使用方法)发至wwjhqy@163.com.net


先谢谢了!!!!!!!!!!!!!!11
0
回复
sdjufeng
LV.6
23
2006-08-24 23:46
@wwj2124
急需八位模数并行转换芯片,请指教,八位模数并行转换芯片的型号,!!!!!!!!,请把相应型号(最好有使用方法)发至wwjhqy@163.com.net先谢谢了!!!!!!!!!!!!!!11
独立的转换器件已经很少使用,一般都是采用单片机自带的.
0
回复