如果没接负端参考源(GNDREF)--你的ADC将会怎样?
0赞这几天在使用ADUC7026做一款无刷电机驱动器,一切就绪,PCB打板后开始调试,可是在单独调试ADUC7026的ADC时出现以下现象:
1.输入电压0~0.5V左右,转换结果为0;
2.输入电压为0.5~2.5V,转换结果随输入电压变化,但有较大误差。
解决的办法:
(1)由于是手工焊接,对于80引脚的指甲大小的芯片心里也没底啊,难道是焊接时坏掉了?解决方案最先是换一个通道测试(ADUC7026有一个ADC,通过MUX分成16个AD采样通道),但各通道都是一样。 焊接的几块PCB板的AD转换都有这个问题,基本可以排除不规范焊接引起的损坏;
(2)由于调试时使用内部参考源,所以测一下VREF引脚电压吧!结果示波器测量VREF引脚对地电压为稳定的2.5V。
(3)调试其他功能,结果其他功能(DAC/PWM/GPIO等)都调试正常,看来真的不像是焊接损坏啊。
(4)用已调试好的板板跑一遍程序,结果调试程序在ADI提供的ADUC7026迷你开发板上调试正常。
痛定思痛,开始仔细检查电路,结果就如标题所示: 如果没接负端参考源(GNDREF)--你的ADC将会怎样?
答案是上面描述的现象~~~~~~~~
附错误的(GNDREF没有接地)原理图

附:调试程序
调试程序:
#include<ADuC7026.h>
int input1 = 0;
void Delay(int time)
{
while(time>0)
time--;
return;
}
void senddata(int to_send)
{
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = 0x0A; // output 0A
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = 0x0D; // output 0D 标志值
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = ((to_send >> 8) & 0x0F); // 输出8到11位
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = ((to_send) & 0x0FF); // 输出0到7位
}
void ADCpoweron(int time)
{
ADCCON = 0x20; // power-on the ADC
while (time >=0) // wait for ADC to be fully powered on
time--;
}
void main()
{
GP4DAT = 0x04000000;
//ADC充分上电,参考电压2.5V
ADCpoweron(2000);
REFCON = 0x01;
GP1CON = 0x011; //设置串口接收发送端
//设置波特率9600
COMCON0 = 0x80;
COMDIV0 = 0x88;
COMDIV1 = 0x00;
COMCON0 = 0x07;
while(1)
{
ADCCON = 0x7A4;
ADCCP = 0x01; //使能ADC1
while (!ADCSTA) {}
input1 = (ADCDAT >> 16);
senddata(input1);
Delay(1000000);
}
}
