串行AD实验预习报告
一.实验目的
学习利用串行模数转换芯片TLC549进行电压搜集和数据处置。
二.实验原理
TLC549是美国德州仪器(TI)公司生产的8位串行逐次比较型A/D转换芯片。通用微处置器通过串行操纵线可实现对该芯片的操纵。该芯片具有4MHz片内系统时钟和软、硬件操纵电路,转换时刻最长17μs, 转换速度为40 000次/s。总失调误差最大为±0.5LSB,典型功耗值为6mW。管脚封装如图1所示:
图1 TLC549管脚封装图
管脚概念为:4、8脚为电源输入和接地;2脚AIN模拟采样电压的输入;5脚-CS为片选信号,当-CS为高时,数据输出DATA_OUT 端处于高阻状态;7脚I/OCLK为时钟信号的输入;6脚DOUT为转换后的串行数据输出;1、3脚为参考电压输入,其中1脚REF+,3脚REF-,一样为保证器件工作良好,REF+电压应高于REF-电压至少1V,为减少误差,建议相差4.75V以上。
TLC549的工作时序如图2所示:
图2 TLC549工作时序图
如上图所示,第一将CS置低,内部电路在测得CS下降沿后,等待ten后自动将前一次转换结果的最高位(D7)位输出到DATA OUT端上。前四个IO_CLOCK 周期的下降沿依次移出第2、3、4 和第5 个位(D6、D5、D4、D3),片上采样维持电路在第4个IO_CLOCK 下降沿开始采样模拟输入。接下来的3个IO_CLOCK 周期的下降沿移出第6、7、8(D2、D1、D0)个转换位。最后,片上采样维持电路在第8个I/O CLOCK 周期的下降沿后,开始A/D转换。第8个IO_CLOCK后,CS 必需为高,或IO_CLOCK维持低电平,这种状态需要维持tconv以等待维持和转换工作的完成。
三.实验设备及器件
PC机,DP-51PROC单片机综合仿真实验仪。
四.实验内容
1. 实验要求
1.1 REF+连基准源的+5V(通过可调电阻调整),CLK、DAT和-CS别离连P10、P11和P12。D2区电位器的输出连ANIN。通过单片机P1口操纵串行AD转换芯片TLC549实现模拟电压信号的搜集,并存入内部数据存储器。记录10组不同的电压转换值,并分析误差。 1.2 利用信号源产生0~+5V区间的正弦波,利用串行A/D转换芯片TLC549实现信号搜集,并利用采样定律分析采样频率与输入信号频率的关系。 2. 实验设计
TLC549在进行本次转换时,所读取的事实上是上次转换的值,这一点在编程时需要注意。另外,由于AD采样时可能会受到噪声的干扰,因此最终的AD转换结果与实际模拟值之间存在必然的误差,只要这一误差足够小且知足误差许诺的范围,那么能够以为AD转换是精准的。在利用采样定律分析采样频率与信号频率的关系时,能够利用按时器产生固定的时刻距离,即采样距离。利用采样取得的数据进行拟合,或用matlab进行频谱分析,就能够够得知波形是不是有失真,进而得知该情形下的采样频率是不是合理。由于可能需要多次测量,因此选定一适合的信号频率,在该信号频率下,采样频率应该知足采样定律,然后上下调整信号频率,如此就免去了每次测量都要修改按时中断的麻烦,因此固定采样频率,调整信号频率,如此就比较简单。假设适合的信号频率为5KHz,那么采样频率定为10.24KHz(采样频率取得稍大),按时器计数值为921.6K/10.24K = 90D,那么计数初值为256-90=166D=A6H,
计数器工作在方式2,且开放中断。 3. 程序流程图
转换函数清零CLK、CS系统初始化启动AD转换延时输出8位数据?读取上次AD转换结果,再次启动转换存储转换结果Y禁止输出,启动下次转换函数返回置位CLK,输出一位数据清零CLKN
图3 实验要求1流程图
中断处理函数主函数系统初始化启动AD转换开启中断、启动定时器等待中断存储上次转换结果、启动下次转换更新地址指针N转换次数满?Y关闭中断、关闭定时器中断返回
图4 实验要求2流程图
4. 电路连接图
图5 AD转换硬件连接图
5. 程序清单
5.1 记录10组不同电压的转换值
CS BIT P1.2 ;概念使能信号CS DAT BIT P1.1 ;概念数据输入管脚 CLK BIT P1.0 ;概念时钟信号 AD_DATA DATA 30H ;AD转换结果缓冲区
ORG 8000H ;伪指令,概念代码寄存开始地址,硬件仿真
LJMP MAIN
ORG 8100H ;伪指令,以下代码从8100H开始寄存
MAIN:
ACALL TLC549_ADC ;第一次启动AD转换 MOV R7, #0FFH ;延时,等待转换终止 DJNZ R7, $
ACALL TLC549_ADC ;读取上次ADC值,再次启动转换 MOV AD_DATA, A ;转换结果送缓冲区 SJMP $
TLC549_ADC:
CLR A ;清零寄放器
CLR CLK ;预备提供上升沿,送出结果
CLR CS ;选中TLC549
MOV R6, #8
TLCAD_L1:
SETB CLK ;送出转换结果的一名 NOP NOP
MOV C, DAT RLC A
CLR CLK ; DAT=0,为读出下一名数据做预备 NOP
DJNZ R6, TLCAD_L1 ;等待8位转换结果全数送出 SETB CS ;禁止TLC549,再次启动A/D转换 SETB CLK ;拉高时钟信号 RET ;函数返回 ; END
5.2 分析采样频率与信号频率的关系
CS BIT P1.2 ;概念使能信号CS DAT BIT P1.1 ;概念数据输入管脚 CLK BIT P1.0 ;概念时钟信号 AD_DATA DATA 30H ;AD转换结果缓冲区首地址
ORG 8000H ;伪指令,概念代码寄存开始地址,硬件仿真
LJMP MAIN
ORG 800BH ;伪指令,存储T0中断的效劳函数入口地址 LJMP INTT0
ORG 8100H ;伪指令,以下代码从8100H开始寄存
MAIN:
MOV R1, #AD_DATA ;取缓冲区首地址
ACALL TLC549_ADC ;第一次启动AD转换
MOV TMOD, #02H ;T0工作在方式2 MOV TH0, #A6H
MOV TL0, #A6H ;设置采样频率,10.24K SETB ET0 ;许诺T0中断 SETB EA ;开放CPU中断 SETB TR0 ;启动T0 SJMP $TLC549_ADC:
CLR A ;CLR CLK ; CLR CS ;MOV R6, #8 TLCAD_L1:
SETB CLK ;NOP NOP
MOV C, DAT RLC A CLR CLK ; DAT=0NOP
DJNZ R6, TLCAD_L1 ;SETB CS ;SETB CLK ;RET ;
ORG 8400H INTT0: ACALL TLC549_ADC ;MOV @R1, A ;INC R1 ;
清零寄放器
预备提供上升沿,送出结果
选中TLC549
送出转换结果的一名 ,为读出下一名数据做预备等待8位转换结果全数送出 禁止TLC549,再次启动A/D转换 拉高时钟信号 函数返回 读取上次转换结果,启动下次转换 将转换结果写入缓冲区 地址指针加1
CJNE R1, #50H, LAST ;20次转换是不是完成 CLR EA ;20次转换完成,禁止中断 CLR TR0 ;T0停止
LAST:
RETI ; END