340 likes | 627 Views
第六章 MC9S12 单片机 AD 模块. 山东大学控制科学与工程学院 2010.7. 模数转换 ATD 模块. A/D 转换的基本概念 模数转换定义: 将时间连续、幅值也连续的模拟信号转换为时间离散、幅值也离散的数字信号. 模数转换精度 模数转换精度是指二进制的位数。 9S12 的 AD 模块有两种精度可选 : 8 位精度( 0—255 ) 10 位精度( 0—1023 ) ( 2 )转换速率:完成一次由模拟转换成数字所需的时间的倒数。 ( 3 )采样时间:两次转换之间的间隔。 采样速率必须小于或等于转换速率。. 9S12 的 A/D 模块主要特性.
E N D
第六章 MC9S12单片机AD模块 山东大学控制科学与工程学院 2010.7
模数转换ATD模块 • A/D转换的基本概念 • 模数转换定义: 将时间连续、幅值也连续的模拟信号转换为时间离散、幅值也离散的数字信号
模数转换精度 模数转换精度是指二进制的位数。9S12的AD模块有两种精度可选: • 8位精度(0—255) • 10位精度(0—1023) • (2)转换速率:完成一次由模拟转换成数字所需的时间的倒数。 • (3)采样时间:两次转换之间的间隔。采样速率必须小于或等于转换速率。
9S12的A/D模块主要特性 大部分的freescale的MCU都带有内置的AD转换模块。 • 8位/10位可选择的转换精度 • 5/256= • 速度快 • 每进行一次10位的转换,仅仅需要7uS • 采样时间可编程 • 左对齐/右对齐的数据格式,有符号/无符号的转换结果; • 转换完毕可产生中断; • 使用PAD7外部触发控制。
转换完毕中断 • 转换队列长度1-8(或1-16) • 不间断转换模式 • 多通道扫描
9S12的A/D模块外部引脚 • AD口。ATD子系统输入或通用输入引脚。复位后默认为通用I/O输入引脚并且只能做输入 • 对应于两个独立的ATD模块:ATDm (m=0或1) 。
VDDA(59)、VSSA(62): • A/D 模块提供电源。实验板上,VDDA接到VCC,VSSA接到GND。单独的供电引脚,可以不受其他模块的影响。 • VRH(60)、VRL(61): • A/D 转换模块的参考高电压和参考低电压。 • 模拟输入信号的电压值在VRH---VRL之间才能得到正确的转换结果 • VRH应大于VRL,且VRH和VRL应在VDDA-VSSA之间。 • AN6/PAD6 - AN0/PAD0(51-57): • 模拟量输入通道6-0,通用数字输入端口。不可以被用作外部触发引脚。 • AN7/ETRIG/PAD7(58): • 模拟量输入通道7,通用数字输入端口。它也可以被配置为A/D 转换的外部触发引脚。
寄存器 • 4个控制寄存器 • ATDCTL2、3、4、5 • 2个状态寄存器 • ATDSTAT0、1 • 8个结果寄存器 • ATDDRx
控制寄存器2—ATDCTL2 • 电源、中断、外部触发 • ADPU:A/D模块的电源管理 • 1=正常模式 • 0=低功耗模式 • AFFC:标志位快速清零。 • 1=对转换结果寄存器访问会自动清除标志位 • 0=正常模式,访问结果寄存器前读状态寄存器1可以清除转换完成标志CCF。
控制寄存器2—ATDCTL2 • AWAI • 1=等待时进入低功耗模式,0=等待时ATD保持运行。 • ETRIGLE、ETRIGP:外部触发的边沿/极性控制。 • ETRIGE:上两位的使能位。允许在PAD7输入外部触发信号,允许在外部触发到来的同时进行采样和AD转换。 • 1=允许,0=禁止。 • 注意:当使用外部触发式,ATD通道7将不能作为AD转换通道来使用
控制寄存器2—ATDCTL2 • ASCIE:A/D队列转换完成中断允许。 • 1=允许,并使标志位ASCIF=1 • 0=禁止。 • ASCIF:A/D 队列转换完成中断标志。 • 如果ASCIE=1,此标志位和SCF拥有相同的含义。 • 此位只能读取到0,写入无效。
控制寄存器3—ATDCTL3 • S8C、S4C、S2C、S1C:定义转换队列的长度。默认长度为4。
控制寄存器3—ATDCTL3 • FIFO:结果寄存器先进先出模式。 • 1=FIFO模式,转换结果是连续存放的 • 0=非FIFO模式,转换结果放在对应的寄存器中。 • FRZ1、FRZ0:背景调试冻结模式允许。这两个控制位就决定了,当遇到断点时,A/D 模块怎样反应。
控制寄存器3—ATDCTL3 • FRZ1、FRZ0:背景调试冻结模式允许。这两个控制位就决定了,当遇到断点时,A/D 模块怎样反应。
控制寄存器4—ATDCTL4 • 转换频率的预分频因子、采样时间和AD转换的精度。 • SRES8:转换精度选择。 • 1=8位精度(0~255) • 0=10位精度(0~1023)
控制寄存器4—ATDCTL4 • SMP1、SMP0:采样时间选择。 • 采样时间分为两个阶段 • 第一阶段长2个AD时钟周期 • 第二阶段由SMP1、SMP0决定
控制寄存器4—ATDCTL4 • PRS4、PRS3、PRS2、PRS1、PRS0: • A/D 时钟分频因子的选择。 • A/D时钟的计算公式如下图。 • 最高可达总线时钟的一半。 • 注意,A/D模块的时钟频率要在500KHz和2MHz之间,所以在选择分频因子时一定要注意。
控制寄存器5—ATDCTL5 • DJM:16位结果寄存器数据的对齐方式。 • 1=右对齐;0=左对齐。 • DSGN:结果寄存器中数据有无符号。 • 1=有符号,0=无符号。 • SRES8、DJM 和DSGN 三位配合起来使用,决定了结果寄存器中数据的格式,一共有8种情况。
控制寄存器5—ATDCTL5 • SCAN:连续转换队列的模式。此位定义了A/D 转换是连续进行还是只进行一次。 • 1=连续队列转换 • 0=单次队列转换。
控制寄存器5—ATDCTL5 • MULT • 0 时:单个通道采样。ATD 的队列控制器只从指定的输入通道进行采样,可以使用ATDCTL5寄存器中的CC、CB 和CA 三位来指定需要采样的模拟量输入通道。 • S8C、S4C、S2C 和S1C 控制位来指定转换次数。 • 1 时:对多个的通道进行采样。每次采样的通道数量由S8C、S4C、S2C 和S1C 控制位来指定,第一个采样通道由CC、CB 和CA 控制位来指定,其它采样通道由通道选择码CC、CB 和CA 的增加来决定。 • 对ATDCTL5进行写操作会终止当前队列的转换,开始一个新的队列转换。
状态寄存器0—ATDSTAT0 • SCF:队列完成标志。 • 置1条件: • 当一个队列转换完毕后置位; • 如果处在SCAN模式,则每次转换完毕都置位。 • 清0条件: • 对此位写1; • 写ATDCTL5,开始一个新的对列; • ATDCTL2的AFFC=1(标志快速清除)且读结果寄存器。
状态寄存器0—ATDSTAT0 • ETORF:外部触发溢出标志。 • 置位条件: • 处于边沿触发模式时,如果第一个边沿触发的队列转换正在进行,而这时却检测到了第二个有效的边沿。 • 清零条件: • 对此位写1; • 写控制寄存器2、3或4,终止当前队列; • 写控制寄存器5,开始一个新队列。
状态寄存器0—ATDSTAT0 • FIFOR:FIFO 溢出标志。1=有FIFO溢出,0=无FIFO溢出。 • 如果转换完成标志(CCF)在没有被清零时结果寄存器被写入新值(覆盖),则置位。 • 清零条件:对此位写1;写控制寄存器5,开始一个新队列。 • CC2、CC1、CC0:转换计数器。 • 代表了哪个结果寄存器将要接收当前转换的结果。 • 非FIFO 模式(FIFO=0),这3 位的初始值为0,计数完成后又会回到初始值。 • FIFO 模式(FIFO=1),转换计数器处于循环计数状态。
状态寄存器1—ATDSTAT1 • CCFx: • 1=完成队列中的第x 个转换;在完成队列转换中的某个AD转换时,相对应的CCFx位就会被置位,结果存储在ATDDRx 中。 0=转换未完成。 • 清零条件: • 写控制寄存器5,开始一个新队列; • AFFC=1,对结果寄存器访问; • AFFC=0,首先读状态寄存器1,然后访问结果寄存器。
输入允许寄存器--ATDDIEN • IENx:通道x 输入数字允许。 • 这8个控制位控制了从输入端口到数据寄存器的数字输入缓冲区。1=缓冲区有效;0=无效。 • 当端口作为模拟量输入端口时,也可以打开数字缓冲区,但是会增加功耗。
数字输入寄存器PORTAD • PTADx:A/D 模块的第x 个通道(ANx)的数字输入。当对应通道的数字输入允许时,此位返回了相应引脚上的电平逻辑值。 • 注意,引脚上的电平必须和VRH或VRL匹配,否则将返回一个不确定的值。 • 如果响应通道的输入缓冲区无效(IENx=0),读取操作只返回1。 • 注意,PORTAD端口模拟量和数字量是可以复用的。当输入模拟量时,会把模拟信号直接送到A/D 转换器;当输入数字量时,会把外部数字信号送到PORTAD 寄存器以供读取。
A/D转换结果寄存器—ATDDRx • ATDDR0—ATDDR7:0—7通道的结果寄存器。A/D转换的结果需要从这几个寄存器中读取。每个16位寄存器可以分成2个8位的寄存器来读取,分别为ATDDRxH和ATDDRxL。 • 注意转换结果在这8个16位寄存器中的存储格式。以10位左、右对齐为例: • 左对齐10位数据 • 右对齐10位数据 • 另外还要注意有符号数据和无符号数据的区别。
A/D模块的中断系统 • ATD模块只有一个中断源--队列转换完毕中断 • ATDCTL2寄存器 • ASCIE:A/D 队列转换完成中断允许。 • SCF:A/D 队列转换完成中断标志。
实例 • 利用MCU的ATD模块进行AD转换实验。ATD通道0接电位器,通过通道0采集模拟量。
unsigned int result; void main(void) { EnableInterrupts; ATD0CTL2=0x80; //使能AD,正常清除标志,不使用外部触发 ATD0CTL3=0x08; //只转换一个通道 ATD0CTL4=0x25; //10位精度,12分频 ATD0CTL5=0xb0; //右对齐,无符号,扫描模式,使用通道 0 for(;;) { while(!ATD0STAT0_SCF); //等待当前队列转换完成 result=ATD0DR0; // 读结果寄存器中的值以便使用 ATD0STAT0_SCF=1; //清除队列完成标志 /*以下是其他代码*/ } }
练习 • 通道15,即ATD1的07通道。 • 练习1:采用查询方式,只转换一个通道,队列长度为1,非FIFO模式,10位精度,12分频,右对齐、无符号、扫描模式不断转换。 • 练习2:采用中断方式,只转换一个通道,队列长度为1,非FIFO模式,8位精度,8分频,右对齐、无符号、扫描模式不断转换。 • 练习3:采用中断方式,只转换一个通道,队列长度为1 ,非FIFO模式, 8位精度,10分频,右对齐,无符号,单次转换队列模式,但是要不断进行AD转换。 • 练习4:采用中断方式,只转换一个通道,队列长度为8,非FIFO模式,8位精度,12分频,右对齐、无符号、扫描模式。将8结果“掐头去尾”求平均。 • 练习5:将练习4的值用数码管显示(十进制)。