EF2的ADC使用比较简单,例化一个原语,然后给时钟,给SOC信号,等12个周期后EOC有效,出来的就是数据啦!也可以参考下面这篇帖子使用IP生成器生成ADC的IP。
安路TangDynasty(TD)创建和使用ADC IP模块
ELF2 系列芯片中内嵌有两个 SAR 型 8 通道 ADC 模块 1:一个普通 ADC 模块和一个 ADCT 模块。 ADCT模块是由一个温度传感器模块和 ADC 模块组合而成的, ADCT 模块的温度传感器和 ADC1 的通道 7 相连。 ADC 模块需要独立的 3.3V 模拟工作电压和模拟地以及一个独立的 VREF 电压接入。 8 个输入通道和GPIO 复用,当用户使用 ADC 却未使用其中的若干通道时,未使用通道可以作为普通的 I/O 使用。
module EF2_PHY_ADC(clk, pd, s, soc, eoc, dout);
input clk; // clock
input pd;/ // power Down signal.
input [2:0] s; // channel Select Signal.
input soc; // start of Conversion.
output eoc; // end of Conversion.
output [11:0] dout; // AD conversion results
parameter TEMPERATURE = "DISABLE" ;
parameter CH0 = "DISABLE" ;
parameter CH1 = "DISABLE" ;
parameter CH2 = "DISABLE" ;
parameter CH3 = "DISABLE" ;
parameter CH4 = "DISABLE" ;
parameter CH5 = "DISABLE" ;
parameter CH6 = "DISABLE" ;
parameter CH7 = "DISABLE" ;
parameter VREF = "DISABLE" ;
用户可根据自身需要选择需要采样的通道和 VREF,通过 IP generate 的方法使用 ADC 模块,如图所示。
ADCT 模块说明
ADCT 模块是在 ADC 模块之上增加了温度传感器,可以用在精度不高的环境下进行温度的测试。用户可通过 IP generate 的方式使用 ADCT,如图 4 所示。
图 4 ADCT 模块使用
当前,软件不支持 ADC 的位置约束,即如果使用 TD 软件中的 ADC IP 调用的 ADC 模块默认为ADC0,而使用 ADCT IP 调用的则为 ADC1。如果重复调用 ADC IP 生成的模块,则会出现位置重叠,导致布局布线无法通过的问题。
ADC 模拟部分供电
ADC 模块的模拟部分,建议使用独立 LDO 电源,或者共用 VCCAUX 电源但要通过磁珠隔离、 滤波后再连接到 ADC_VDDA、 ADC_VSSA, 尽量减小模拟电源、地的纹波。ADC 模块的 ADC_VREF 需要选用高精度参考电压源,否则会影响采样精度。
逻辑接口的时序控制
当前 TD 软件没覆盖 Fabric 和 ADC 模块之间的时序路径,考虑到 ADC 接口时钟频率很低(最高16MHz), 为保证时序关系, 在实际应用中逻辑代码的设计建议如下:
➢ SOC 由时钟上升沿驱动,一个周期宽度。
➢ EOC、 B[11:0]由时钟上升沿采样。
➢ 时钟取反后送到 ADC 模块。
采样间隔不能过大
建议 SOC 间隔不能过大,建议不要大于 10us,即采样频率不要低于 100Khz; 若需要大间隔的采
样,需要在 SOC 到来 5 个时钟周期前拉高一下 pd 脚之后再进行采样。
检测信号幅度小于 Vref
不用分压, 用一个阻容电路连接到 ADC 输入通道。 注意串阻 Rs 不能过大,建议 100 欧。
检测信号幅度大于 Vref
需要电阻分压,然后再通过一个阻容电路连接到 ADC 输入通道。注意串阻 Rs 不能过大,建议100 欧。
注意,对于EF2L15LG100B(PotatoPie V2.1)和EF2L45LG144B(PotatoPie V3.0) 的ADC_VDDD和ADC_VDDA都是连在芯片内部与VCCAUX固定连接了,这个在EF2的datasheet文档中有描述。