电子说
AD9220为新代高性能、12位模数转换器,采用单电源供电。具有真12位线性度和温度漂移性能,以及11.5位或更佳的交流性能。
AD9220采用高速、低成本的单CMOS工艺及新颖的架构,分辨率和速度均达到现有混合单芯片方案的水平,而功耗与成本却低得多。内置片内高性能、低噪声采样保持放大器,选用外部基准电压,以满足应用的直流精度与温度漂移要求。器件采用多级差分流水线架构,内置数字输出纠错逻辑,在额定数据速率时可提供12位精度,并保证在整个工作温度范围内无失码。适用于IF下变频的通讯系统。
特性参数
模块应用

VINB:模拟输入引脚(-),输入差分信号。下面的焊盘是选择单端输入还是差分输入,默认单端输入。
REF:外部基准输入。下面的焊盘是选择外部基准输入和内部基准输入,默认内部基准输入。
AD9220采用同步并行接口通讯方式,通讯完全依赖“时钟驱动”,每一个时钟周期完成:模拟采样,内部转换,数据输出。
时序工作流程:
下图为时序时间和时序图:
AD9220输出12位数据,D0到D11,D11为最高位,D0位最低位。AD9220支持单端输入和差分输入,模块默认使用单端信号输入。
单端输入范围[Vref - Vref,Vref + Vref],以基准电压Vref为中点,输出二进制格式如下:
| 输入 | 输出 |
|---|---|
| Vref - Vref | 0000 0000 0000 |
| Vref(中点) | 1000 0000 0000 |
| Vref + Vref | 1111 1111 1111 |
差分输入范围[-Vref,+Vref],0V为中点,输出二进制格式如下:
| 输入 | 输出 |
|---|---|
| -Vre | 0000 0000 0000 |
| 0V(中点) | 1000 0000 0000 |
| +Vref | 1111 1111 1111 |
数据读取:
AD9220的数据不是连续流,而是每个时钟周期更新一次,读取数据需在CLK上升沿到Pipeline Delay延迟内读取。注意:并行数据读取时,12条数据线同时采样,避免IO延迟不一致,布线长度不等。
数据对齐:
由于有Pipeline 延迟,输入信号 ≠ 当前输出数据,实际关系:当前输出 = N个周期前的输入。
其中,转换电压的换算公式:Vol = (采样值 / 4096)* Vref。
STM32F103ZET6开发板,AD9220高速AD数据采集模块,导线若干。
| STM32F103ZET6 | AD9220 |
|---|---|
| PA4 | CLK |
| PC0 | D1 |
| PC1 | D2 |
| PC2 | D3 |
| PC3 | D4 |
| PC4 | D5 |
| PC5 | D6 |
| PC6 | D7 |
| PC7 | D8 |
| PC8 | D9 |
| PC9 | D10 |
| PC10 | D11 |
| PC11 | D12 |
| PC12 | D0 |

AD9220.c
#include "AD9220.H"
void AD9220_IO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure ;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE); //使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC ,&GPIO_InitStructure) ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA ,&GPIO_InitStructure);
}
uint16_t AD9220ReadData(void)
{
uint16_t data;
DAC902_CLK = 0;
data = GPIO_ReadInputData(GPIOC)&0X1FFF;
data = GPIO_ReadInputData(GPIOC)&0X1FFF;
data = GPIO_ReadInputData(GPIOC)&0X1FFF;
data = GPIO_ReadInputData(GPIOC)&0X1FFF;//增加延时
data = ((data< < 1)&0X1FFF)|(data > >12);//对管脚数据重新排序,详细对应关系查看AD9220.H中定义
DAC902_CLK = 1;
return (data&0X0FFF);
}
main.c
#include "sys.h"
#include "ad9220.h"
#include "delay.h"
#include "usart.h"
volatile uint16_t AD_Data = 0;
#define FIFOLEN 8
volatile uint16_t fifoPtr = 0;
int32_t int_sampleVol[8];
#define VREF_mV 2500
int main(void)
{
char showLcd[30];
AD9220_IO_Init();//AD9220初始化
SystemInit();
delay_init(); //延时初始化
usart_Init(115200); //串口初始化
delay_ms(100);
while(1)
{
AD_Data = AD9220ReadData(); //AD数据读取
int_sampleVol[fifoPtr++] = ((int32_t)5000)*((float)((short)AD_Data)/4096); //单端
// int_sampleVol[fifoPtr++] = (int32_t)(((float)(AD_Data - 2048) / 2048.0f) * VREF_mV); //差分
fifoPtr %= FIFOLEN;
sprintf(showLcd, "AD9220 Vol = %04dmV", int_sampleVol[0]);
usart_SendString(showLcd);
usart_SendString("rn");
delay_ms(100);
}
}
单端输入
差分输入,注意:要P4下面焊盘要短接右边焊盘。
注意事项
(1) 模块为低功耗模块,供电电源不超过6V,信号输入电压不可超过5.5V。
(2) 由于模块是高精度器件,为了避免不必要的干扰,建议使 用线性电源供电。
(3) 输出信号线建议尽量短,模块接口为SMA,建议使用同轴线SMA接口的线材。接触不良或劣质的线材可能导致信号衰减或者噪声过大。
(4) 配送的代码仅为配套主控板使用,不提供单片机教程,宝贝详情展示以外的功能需要自行开发。
(5) 如需简单测试模块功能,建议搭配本店控制板使用,正确接线后给控制板供电即可实现信号采集显示。
常见问题
Q:AD9220配合本店主控板能到多少采样率?
A:由于单片机的主频和IO速度不够,我们没有做主控板的最高速度测试,如需达到10MSPS采样率,一般需要用到FPGA等高速逻辑器件。
Q:我想将AD9220的12位分辨力用到1-3V的采集,需要怎么做?
A:根据原理图,AD9220采集的电压范围是Vin=Vb±Ref,即是说需要将Vb=2V,Vref=1V即可。
Q:我用STC51单片机采集的数据怎么不对,有较大跳动,是什么原因?
A:一般来说有两种可能,一是信号本身抖动就比较大,二是通讯电平不兼容,AD9220是3.3V通信电平,用5V-TTL的话会对模块有干扰。
Q:使用AD9220和配套的主控板,AD9220使用5V供电,无法采集到 5V的电压?
A:首先AD9220和主控板之间的电源是需要共地,否则AD9220无法接收和返回正常的信号。这样就无法采集,其次是AD9220做了电源的反接保护,需要采集到5V电压建议供电5.3V左右。但是不可超过5.8V,这样就可以采集到5V的电压。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !