打印

LPC2114 AD采样速率问题

[复制链接]
2661|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hruid|  楼主 | 2010-8-23 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾,帮小弟看看问题出在在哪里?我用LPC2114自带的AD进行采样,再用max5306原样输出,当输入的频率达到1k以上以后,输出波形就失真很严重了,LPC2114自带的AD不可能那么差吧,程序在下面,希望各位大虾能帮忙看看

AD采样程序
AD程序初始化
void  IntADInitialization(void)
{
//uint32 tmp1;

#if 0   // 复位即AD态
PINSEL1 = ( PINSEL1 & 0xFF3FFFFF ) | ( 0x01 << AD0 ); // P0.27 设为AD0口
PINSEL2 = ( PINSEL2 & 0xFFFFFFCF ) | ( 0x03 << 4);    // 设置PINSEL[5:4]为11
PINSEL2 = ( PINSEL2 & 0xFF9FFF3F ) | ( 0x01 << AD4 ) | ( 0x01 << AD5 ) |  ( 0x01 << AD6 ) |( 0x01 << AD7 );
   #endif
   
   
    /* 进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延) */
    ADCR =   (1<<0)                     |  // SEL = 1 ,选择通道0
           (((Fpclk / 1000000 - 1)) << 8) |   // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
           (0 << 16)                    |  // BURST = 0 ,软件控制转换操作
           (0 << 17)                    |   // CLKS = 0 ,使用11clock转换
           (1 << 21)                    |   // PDN = 1 , 正常工作模式(非掉电转换模式)
           (0 << 22)                    |   // TEST1:0 = 00 ,正常工作模式(非测试模式)
           (1 << 24)                    |   // START = 1 ,直接启动ADC转换
           (0 << 27);       // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
    DelayNS(10);        
   
   ADDataA = ADDR;       // 读取ADC结果,并清除DONE标志位

}

采样的程序
uint32 IntADSimple (uint8 Channel)
{
uint8 i;
uint8 tChannel;
uint32 ADC_Data;

tChannel=Channel;
ADCR = ( ADCR & 0x003EFF00 ) | tChannel | ( 1 << 24 ); // 设置第Channel通道,并进行第一次转换
while( ( ADDR & 0x80000000 ) == 0 ); // 等待转换结束

ADC_Data = ADDR;       // 读取ADC结果
ADC_Data = ( ADC_Data>>6 ) & 0x3FF;         // 提取AD转换值



return ADC_Data;  
}


max5306 DA 程序
/*************************************************
名    称:5306输出数据
描    述:
命令字2=第1通道送数据; 命令字3=第2通道送数据;命令字4=第3通道送数据; 命令字5=第4通道送数据;  
命令字6=第5通道送数据; 命令字7=第6通道送数据;命令字8=第7通道送数据; 命令字9=第8通道送数据;
命令字0x0A=第1~4通道同时送数据;  命令字0x0B=第5~8通道同时送数据?
修    改:
*************************************************/
void Max5306_Output(uchar Command,uint OutputData)
{
uchar i;
uint intbuf;
Command=Command&0x0f;
OutputData=OutputData&0x0fff;
intbuf=Command;
intbuf=intbuf*0x1000;
intbuf=intbuf&0xf000;
intbuf=intbuf+OutputData;
//Pin_5306_SCLK=1;
//Pin_5306_CS=0;

IO0SET=IO0SET |(1<<12);
IO1CLR=IO1CLR |(1<<22);
//DelayNS1(1);
//for(i=0; i<500; i++);
for (i=0;i<16;i++)
{
  if((intbuf&0x8000)>>15)
  
   {
   IO0SET=IO0SET |(1<<13);
  
   }
  else
  IO0CLR=IO0CLR|(1<<13);


  IO0CLR=IO0CLR |(1<<12);

  IO0SET=IO0SET |(1<<12);
   
  
  intbuf<<=1;
}
IO1SET=IO1SET |(1<<22);

}

主函数
main()


{
Max5306_Output(0x01,IntADSimple(0x01));

}
当采样的频率超过1k以后,波形输出就严重失真了!

相关帖子

沙发
hruid|  楼主 | 2010-8-24 23:17 | 只看该作者
问题已经发现,AD采样的速率是足够快的,主要还是在DA芯片MAX5306,由于是串口,耗费的时间太多

使用特权

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

本版积分规则

个人签名:在电子的世界里,是煎熬,还会遨游呢?

10

主题

56

帖子

0

粉丝