2022年AD转换例程[定 .pdf

上传人:C****o 文档编号:39697831 上传时间:2022-09-07 格式:PDF 页数:9 大小:151.69KB
返回 下载 相关 举报
2022年AD转换例程[定 .pdf_第1页
第1页 / 共9页
2022年AD转换例程[定 .pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《2022年AD转换例程[定 .pdf》由会员分享,可在线阅读,更多相关《2022年AD转换例程[定 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、A/D 转换模块详解1、A/D 转换原理A/D 转换的过程是模拟信号依次通过取样、保持和量化、编码几个过程后转换为数字格式。a)取样与保持一般 取样与保持 过程是同时完成的,取样-保持电路的原理图如图16 所示,由输入放大器 A1、输出放大器A2、保持电容CH和电子开关S组成,要求 AV1*AV2=1。原理是:当开关S闭合时,电路处于取样阶段,电容器充电,由于 AV1*AV2=1,所以输出等于输入;当开关S断开时,由于A2输入阻抗较大而且开关理想,可认为CH没有放电回路,输出电压保持不变。图 16 取样-保持电路取样-保持以均匀间隔对模拟信号进行抽样,并且在每个抽样运算后在足够的时间内保持抽样

2、值恒定,以保证输出值可以被A/D 转换器精确转换。b)量化与编码量化的方法,一般有舍尾取整法和四舍五入法,过程是先取顶量化单位,量化单位取值越小,量化误差的绝对值就越小,具体过程在这里就不做介绍了。将量化后的结果用二进制码表示叫做编码。2、A/D 转换器的技术指标a)分辨率分辨率说明A/D 转换器对输入信号的分辨能力,理论上,n 位 A/D 转换器能区分的输入电压的最小值为满量程的1/2n。也就是说,在参考电压一定时,输出位数越多,量化单位就越小,分辨率就越高。S12 的 ATD 模块中,若输出设置为8 位的话,那么转换器能区分的输入信号最小电压为19.53mV。b)转换时间名师资料总结-精品

3、资料欢迎下载-名师精心整理-第 1 页,共 9 页 -A/D 转换器按其工作原理可以分为并联比较型(转换速度快ns 级)、逐次逼近型(转换速度适中us 级)、双积分型(速度慢抗干扰能力强)。不同类型的转化的A/D 转换器转换时间不尽相同,S12 的 ATD 模块中,8 位数字量转换时间仅有6us,10 位数字量转换时间仅有7us。S12 内置了 2 组 10 位/8 位的 A/D 模块:ATD0 和 ATD1,共有 16 个模拟量输入通道,属于逐次逼近型A/D 转换器(这个转换过程与用天平称物的原理相似)。1、功能结构图图 17 A/D 模块功能结构图图 17 所示的是A/D 模块的功能结构,

4、这个功能模块被虚线划分成为图示所示的虚线所隔离的三个部分:IP 总线接口、转换模式控制/寄存器列表,自定义模拟量。IP 总线接口负责该模块与总线的连接,实现A/D 模块和通用I/O 的目的,还起到分频的作用;转换模式控制寄存器列表中有控制该模块的所有的寄存器,执行左右对齐运行和连续扫描。自定义模拟量负责实现模拟量到数字量的转换。包括了执行一次简单转换所需的模拟量和数字量。2、HCS12 中 A/D 转化模块特点8/10 位精度;7 us,10-位单次转换时间.;采样缓冲放大器;可编程采样时间;左/右对齐,有符号/无符号结果数据;外部触发控制;转换完成中断;模拟输入8 通道复用;模拟/数字输入引

5、脚复用;1 到 8 转换序列长度;连续转换模式;多通道扫描方式。ATD 模块有模拟量前端、模拟量转换、控制部分及结果存储等四部分组成。其中模拟前端包括多路转换开关、采样缓冲器、放大器等,结果存储部分主要有8 个 16 位的存储器和反映工作状态的若干标志位。A/D 转换应用实例要让 ATD 开始转换工作,必须经过以下三个步骤:1.将 ADPU 置 1,使ATD 启动;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 9 页 -2.按照要求对转换位数、扫描方式、采样时间、时钟频率及标志检查等方式进行设置;3.发出启动命令;如果上电默认状态即能满足工作要求,那么只要将ADPU 置 1,然

6、后通过控制寄存器发出转换命令,即可实现转换。程序描述:由通道ATD0 进行单通道A/D 转换,转换值在B 口显示。程序如下:程序一:#include /*common defines and macros*/#include derivative.h/*derivative-specific definitions*/byte ad_value;/AD 转换结果void Delay(int i)/延时程序int j;for(;i0;i-)for(j=500;j0;j-);/*-初始化程序-*/void InitBusClk(void)CLKSEL=0X80;/PLLSEL 1:Bus Cloc

7、k=PLLCLK/2/0:Bus Clock=OSCCLK/2 PLLCTL_PLLON=1;/开启 PLL SYNR=0;REFDV=0X03;/OSCCLK=16MHz/PLLCLK=2*OSCCLK*(1+SYNR)/(1+REFDV=32/4=8MHz while(!(CRGFLG_LOCK=1);/直到 LOCK=1,when PLL is ready,退出循环CLKSEL_PLLSEL=1;/PLLSEL 1:Bus Clock=PLLCLK/2=8MHz/2=4MHz/0:Bus Clock=OSCCLK/2=16M/2=8MHz void InitAD(void)ATD0CTL

8、2=0XC0;/1100 0000 启动 A/D,快速清除标志位名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 9 页 -/无等待模式,外部触发禁止(bit2=0),中断禁止(bit1=0)ATD0CTL3=0X0C;/0 0001 1 00 转换序列为1、FIFO 模式启动,冻结模式下继续转换ATD0CTL4=0XE1;/1 11 00001 8 位精度,16AD 采样时间/总线(1+1)*2=4 分频,AD 时钟=1MHz ATD0CTL5=0X27;/0 0 1 0 0 111 右对齐,无符号,连续转换,单通道,起始通道ATD7/DJM DSGN SCAN MULT 0 C

9、C CB CA/DJM:1-Right justified 0-Left justified/DSGN:1-Signed data 0-Unsigned data/SCAN:1-Continuous 0-Single conversion/CC CB CA:Analog Input Channel Select Code ATD0DIEN=0X00;/数字输入disabled /*-主程序-*/void main(void)/*put your own code here*/_DISABLE_COP();/关看门狗InitBusClk();InitAD();DDRB=0XFF;/设 PORTB

10、 为输出口PORTB=0 x00;EnableInterrupts;/开放总中断for(;)while(!ATD0STAT2L_CCF7);/等待转换结束,退出循环ad_value=(byte)ATD0DR7H;/左对齐,右对齐时转换结果都先存储在ATD0DRxH,后存储在ATD0DRxL.Delay(200);/延时PORTB=ad_value;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 9 页 -/PORTB 输出 AD 转换结果,并用8 个 LED 发光二极管显示/_FEED_COP();/*feeds the dog*/*loop forever*/*please m

11、ake sure that you never leave main*/程序二:(用指针实现AD转换)#include /*common defines and macros*/#include derivative.h/*derivative-specific definitions*/byte AD_Value;/AD 转换结果void Delay(int i)/延时程序int j;for(;i0;i-)for(j=500;j0;j-);/*-初始化程序-*/void InitBusClk(void)CLKSEL=0X80;/PLLSEL 1:Bus Clock=PLLCLK/2/0:Bu

12、s Clock=OSCCLK/2 PLLCTL_PLLON=1;/开启 PLL SYNR=0;REFDV=0X03;/OSCCLK=16MHz/PLLCLK=2*OSCCLK*(1+SYNR)/(1+REFDV=32/4=8MHz while(!(CRGFLG_LOCK=1);/直到 LOCK=1,when PLL is ready,退出循环CLKSEL_PLLSEL=1;/PLLSEL 1:Bus Clock=PLLCLK/2=8MHz/2=4MHz/0:Bus Clock=OSCCLK/2=16M/2=8MHz void InitAD(void)ATD0CTL2=0XC0;/1100 00

13、00 启动 A/D,快速清除标志位/无等待模式,外部触发禁止(bit2=0),名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 9 页 -中断禁止(bit1=0)ATD0CTL3=0X0C;/0 0001 1 00 转换序列为1、FIFO 模式启动,冻结模式下继续转换ATD0CTL4=0XE1;/1 11 00001 8 位精度,16AD 采样时间/总线(1+1)*2=4 分频,AD 时钟=1MHz ATD0CTL5=0X27;/0 0 1 0 0 111 右对齐,无符号,连续转换,单通道,起始通道ATD7/DJM DSGN SCAN MULT 0 CC CB CA/DJM:1-R

14、ight justified 0-Left justified/DSGN:1-Signed data 0-Unsigned data/SCAN:1-Continuous 0-Single conversion/CC CB CA:Analog Input Channel Select Code ATD0DIEN=0X00;/数字输入disabled /*-读取 AD 转换结果-*/void AD_GetValue(word*AD_Value)*AD_Value=ATD0DR0;void main(void)/*put your own code here*/_DISABLE_COP();/关看门

15、狗InitBusClk();InitAD();DDRB=0XFF;/设 PORTB 为输出口PORTB=0 x00;EnableInterrupts;for(;)while(!ATD0STAT2L_CCF7);/等待转换结束,退出循环AD_GetValue(&AD_Value);/读取转换结果Delay(400);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 9 页 -PORTB=AD_Value;/转换结果在B 口显示_FEED_COP();/*feeds the dog*/*loop forever*/*please make sure that you never lea

16、ve main*/程序三:(用中断实现AD 转换)#include /*common defines and macros*/#include derivative.h/*derivative-specific definitions*/#include byte AD_Data=0;/*void Delay(int i)int j;for(;i0;i-)for(j=500;j0;j-);/*/*-初始化程序-*/void InitBusClk(void)CLKSEL=0X80;/PLLSEL 1:Bus Clock=PLLCLK/2/0:Bus Clock=OSCCLK/2 PLLCTL_P

17、LLON=1;/开启 PLL SYNR=0;REFDV=0X03;/OSCCLK=16MHz/PLLCLK=2*OSCCLK*(1+SYNR)/(1+REFDV=32/4=8MHz while(!(CRGFLG_LOCK=1);/直到 LOCK=1,when PLL is ready,退出循环CLKSEL_PLLSEL=1;/PLLSEL 1:Bus Clock=PLLCLK/2=8MHz/2=4MHz/0:Bus Clock=OSCCLK/2=16M/2=8MHz void InitAD(void)ATD0CTL2=0XC3;/110 000 11 启动 A/D,快速清除标志位,无等待模式,

18、外部触发禁止(bit2=0)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 9 页 -/中断开放(bit1=1,bit0=1)/bit1:ATD Sequence Complete Interrupt Enable/bit0:ATD Sequence Complete Interrupt Flag ATD0CTL3=0X0C;/0 0001 1 00 转换序列为1、FIFO 模式启动,冻结模式下继续转换ATD0CTL4=0XE1;/1 11 00001 8 位精度,16AD 采样时间/总线(1+1)*2=4 分频,AD 时钟=1M ATD0CTL5=0XA7;/1010 0111

19、 右对齐,无符号,连续转换,单通道,起始通道ATD7 ATD0DIEN=0X00;/数字输入disabled /*-主程序-*/void main(void)/*put your own code here*/DisableInterrupts;/关中断InitBusClk();InitAD();DDRB=0XFF;/设 B 口为输出口PORTB=0X00;EnableInterrupts;/开中断for(;)/while(!ATD0STAT2L_CCF7);PORTB=(byte)AD_Data;/B 口显示转换结构 /*-中断服务程序-*/#pragma CODE_SEG NON_BANKED void interrupt 22 IntAD(void)/AD 转换的中断向量号为33 DisableInterrupts;/关中断/while(!ATD0STAT2L_CCF7);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 9 页 -AD_Data=ATD0DR0H;/读取 AD 转换结果EnableInterrupts;/开中断#pragma CODE_SEG DEFAULT 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 9 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁