第10章 SPI与模拟量转换

上传人:达2 文档编号:172243173 上传时间:2022-12-02 格式:DOCX 页数:33 大小:321.34KB
返回 下载 相关 举报
第10章 SPI与模拟量转换_第1页
第1页 / 共33页
第10章 SPI与模拟量转换_第2页
第2页 / 共33页
第10章 SPI与模拟量转换_第3页
第3页 / 共33页
点击查看更多>>
资源描述
第10章SPI与模拟量转换SPI( 串行外设接口)是 Freescale 公司推出的一种同步串行通信接口,用于 MCU 和 外围扩展芯片之间的串行连接,现已发展成为一种工业标准。目前,各半导体公司推出 了大量的带有 SPI 接口的芯片,如 RAM、EEPROM、Flash ROM、A/D、D/A 转换、 LED/LCD驱动、I/O接口、实时时钟等。本章首先讨论SPI及编程方法。计算机只能处理数字量,对于温度、压力、速度和流量等模拟量必须经过 A/D 转 换才能为计算机所处理。计算机要干预对外部需要模拟量进行控制的装置,需要通过 D/A转换。GP32内部有8路8位A/D转换,没有D/A转换。本章给出GP32内部A/D 转换的编程方法。本章随后给出利用MCU的SPI进行12位A/D转换芯片TLC2543及10位D/A芯 片的扩充,并给出具体实例。所给出 A/D 实例,包含的基本的滤波方法,可以直接应 用于实际工程。对常见传感器的简介,有助于初学者对 A/D 转换的理解与实践。作为 知识积累,还对常用传感器进行了介绍。10.1 SPI的基本工作原理10.1.1 SPI概 述串行外设接口 (SPI, Serial Peripheral Interfac)是Freescale公司推出的一种同步串行 通信接口,用于微处理器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准。目前,各半导体公司推出了大量的带有 SPI 接口的具有各种各样功能的芯片,如 RAM、EEPROM、Flash ROM、A/D 转换器、D/A 转换器、LED/LCD 显示驱动器、I/O 接口芯片、实时时钟、UART收发器等,为用户的外围扩展提供了极其灵活而价廉的选 择。Freescale 08系列MCU中含有串行外设接口模块,它是MCU与外界联系的重要方 式之一。SPI 特性描述如下: 全双工。 主、从工作方式。 发送和接收的数据寄存器相互独立从而实现双缓存操作。 主机可以设定4种工作频率(最大可达总线频率的二分之一)。 从机最大工作频率等于总线频率。 发送结束、接收结束、工作方式错误和溢出错误四种中断标志。 一个主控MCU和几个从控MCU相互连接。 几个 MCU 相互连接构成一个多主机系统。 一个主控MCU和一个或多个从属外设相互连接。SPI系统最常见的应用是一个主控MCU做主机,主机发起并控制数据的传送和流 向,只有在主机发出通知后,从设备才能从主机读取数据或向主机发送数据。10.1.2 SPI的数据传输利用SPI进行MCU之间的数据传输时,有个主机(master)和从机(slave)的概念,主 机的程序控制着数据传输,从机的程序必须配合主机工作,完成传输过程。在MCU扩 展外设结构中,仍使用主机-从机(master-slave)概念,那么MCU必须工作于主机方式, 外设处于从机方式。图10-1是SPI的主-从连接示意图,参与数据传输的有三个引脚,它们是:时钟引 脚SPSCK、主入从出引脚MISO、主出从入引脚MOSI。下面一节将对它们作详细的说 明,这里仅说明其数据传输过程:图中的移位寄存器为 8 位,所以每一工作过程相互传 送8位数据,工作从主机CPU发出启动传输信号开始,此时要传送的数据装入8位移 位寄存器,同时产生8个时钟信号从SPSCK引脚依次送出,在SPSCK信号的控制下, 主机中8位移位寄存器中的数据依次从MOSI引脚送出,到从机的MOSI引脚送入它的 8位移位寄存器,在此过程中,从机的数据也通过MISO引脚到主机中。所以,我们称 之为全双工主-从连接(Full-Duplex Master-Slave Connections)0其数据的传输格式是高位 (MSB)在前,低位(LSB)在后。图10-1是一个主MCU和一个从MCU的连接,也可以一个主MCU与多个从MCU 进行连接形成一个主机多个从机的系统;还可以多个MCU互联构成多主机系统;另外 也可以一个MCU挂接多个从属外设。但是,SPI系统最常见的应用是利用一个MCU 作为主机,其它处于从机地位,这样,主机的程序启动并控制数据的传送和流向,在主 机的控制下,从属设备从主机读取数据或向主机发送数据。至于传送速度、何时数据移入移出、一次移动完成是否中断、如何定义主机从机等 问题,可通过对寄存器编程来解决,随后会阐述这些问题。10.1.3 SPI模块的时序SPI是在同步信号SPSCK的控制下完成数据的传输,根据控制位CPHA和CPOL 的不同,数据线和时钟线产生4种可能的时序。图10-2、图10-3、图10-4和图10-5 给 出了数据线与SPSCK之间的关系。从时序图上可以看出,CPOL为1或0时,时钟信 号SPSCK的出现正好是反相关系,CPHA用来选择两种不同的定时协议中的一种,以 对允许SPI系统与各种同步外设通信。主机和从机必须使用同样的时序模式,才能正常 通信。从图10-2可以看出,当CPHA=0, CPOL=0时,MISO引脚上的数据在第一个SPSCK 沿跳变之前已经上线了,而为了保证正确传输,MOSI引脚的MSB位必须与SPSCK的 第一个边沿同步,在SPI传输过程中,首先将数据上线,然后在同步时钟信号的上升沿 时, SPI 的接收方捕捉位信号,在时钟信号的一个周期结束时(下降沿),下一位数据信 号上线,再重复上述过程,直到一个字节的 8 位信号传输结束。图10-3是当CPHA=0,CPOL=1时的数据线和时钟线的时序,与图10-2唯一不同 之处只是在同步时钟信号的下降沿时捕捉位信号,上升沿时下一位数据上线。点八、图10-2 CPHA=0, CPOL=0时的数据/时钟时序图SPSCK周期SPSCK; CPOL =1MOSIFROM MASTERMISOFROM SLAVES5; TO SLAVE信号捕捉图10-3 CPHA=0, CPOL=1时的数据/时钟时序图123:MSBBIT 6(BITSBIT 2从图10-4可以看出,在CPHA=1,CPOL=0时,MISO引脚和MOSI引脚上的数据 的MSB位必须与SPSCK的第一个边沿同步,在SPI传输过程中,在同步时钟信号周 期开始时(上升沿)数据上线,然后在同步时钟信号的下降沿时, SPI 的接收方捕捉位信 号,在时钟信号的一个周期结束时(上升沿),下一位数据信号上线,再重复上述过程,直到一个字节的 8位信号传输结束。图 10-5 是当 CPHA=1, CPOL=1 时的数据线和时钟线的时序,与图 10-4 唯一不同 之处只是在同步时钟信号的上升沿时捕捉位信号,下降沿时下一位数据上线。图10-4 CPHA=1 , CPOL=0时的数据/时钟时序图SPSCK周 期SPSCK; CPOL = 0MOSI FROM MASTERMISO FROM SLAVESS; TO SLAVE信号捕捉图10-5 CPHA=1 , CPOL=1时的数据/时钟时序图10.2 GP32的SPI模块编程基础10.2.1 SPI模块的引脚SPI模块通常引出4个引脚,分别为:SS、MISO、MOSI、SPSCK,下面分别介绍 它们的含义。1 .从机选择引脚SS (Slave Select)若一个MCU的SPI工作于主机方式,置罷为高电平。若一个MCU的SPI工作于 从机方式时,当罷=0时,表示主机选中了该从机,反之则未选中该从机。对于单主单 从(One master and one slave)系统,可以采用图10-1的接法。对于一个主MCU带多个 从属MCU的系统,主机MCU的SS接高电平,每一个从机MCU的SS接主机的I/O输 出线,由主机控制其电平高低,以便主机选中该从机。2. 主出从入引脚 MOSI(Master Out/Slave In)主出从入引脚MOSI,是主机输出、从机输入数据线。对于MCU被设置为主机方 式,主机送向从机的数据从该引脚输出。对于MCU被设置为从机方式,来自主机的数 据从该引脚输入。3. 主入从出引脚 MISO(Master In/Slave Out)从机的数据从该引脚输入主机,对于MCU被设置为从机方式,送向主机的数据从 该引脚输出。4. SPI 串行时钟引脚 SPSCK(SPI Serial Clock)SPI 串行时钟引脚 SPSCK 用于控制主机与从机之间的数据传输。串行时钟信号只 能由主机发出,经主机的SPSCK引脚输出给从机的SPSCK引脚,控制整个数据传输 过程。在主机启动一次传送过程中,自动产生8个时钟周期信号从SPSCK引脚输出, SPSCK 信号的一个跳变进行一位数据移位过程。10.2.2 SPI模块的寄存器从程序员角度看,SPI模块有3个8位寄存器,只要理解和掌握了这3个寄存器的 用法,就可以进行SPI编程。下面分别阐述这些寄存器的功能及用法。1. SPI数据寄存器(SPI Data Register, SPDR)SPI数据寄存器SPDR的地址是:$0012。写入时,为要发送的8位数据,记为: T7T0;读出时,为接收的8位数据,记为:R7R0。它们的特点与SCI数据寄存器 相似。在实际内部结构上,SPDR由两个独立的数据寄存器组成,即只能写入的发送数 据寄存器和只能读出的接收数据寄存器,它们共用一个地址。2. SPI控制寄存器(SPI Control Register, SPCR)SPI控制寄存器一般情况下只能复位时写一次,以后不再对其写入,不再更改对SPI 的设置。SPCR的地址:$0010,定义为:数据位定义D7D6D5D4D3D2D1D0SPRIEDMAS SPMSTR CPOLCPHA SPWOMSPESPTIE复位D7 SPRIE 位:SPI 接收中断允许位(SPI Receiver Interrupt Enable Bit), SPRIE=1, 允许SPI接收中断;SPRIE=0,不允许SPI接收中断。当收到一个字节的数据时,状态 及控制寄存器SPSCR(下面将介绍该寄存器)的SPRF 位(SPI接收器满标志位)被置1,此 时,若SPCR寄存器的SPRIE=1,贝I产生SPI中断。通常情况下SPRIE=0,即收到数据 不产生中断。D6 DMAS 位:DMA选择位(DMA Select Bit)。目前没用,为 0。D5 SPMSTR 位:SPI 主机位(SPI Master Bit),该位决定 SPI 工作方式,SPMSTR =1,主机方式;SPMSTR=0,从机方式。D4 CPOL位:时钟极性选择位(Clock Polarity Bit),该位决定SPSCK引脚空闲 时的极性。此位对数据的传输格式没有影响。CPOL=1,SPSCK空闲时为高电平; CPOL=0,SPSCK空闲时为低电平。时钟极性选择位CPOL与时钟相位位CPHA配合 使用。D3 CPHA位:时钟相位位(Clock Phase Bit),该位控制串行时钟与SPI数据的 时序关系。见图10-6。CPHA=1,从机以SPSCK的第一次沿跳变为移位开始信号,在 多个字节的连续传送过程中,从机的氣引脚信号可始终保持为低电平;CPHA=0,从机 以氣的下降沿作为移位开始信号,在_SPSCK的第一次沿跳变启动第一次数据采样,在 多个字节的连续传送过程中,从机的氣引脚信号需要不断地恢复为高电平,来为每一 个字节的传送产生移位开始信号(在氣的下降沿)。一般情况下设置CPHA=1,复位时 CPHA=1。MISO/MOSIBYTE 1BYTE 2BYTE 3MASTER 岳 _SLAVE SS CPHA = 0SLAVE SS =CPHA 二 1图 10-6 CPHA/SS 时序D2 SPWOM位:SPI线或模式位(SPI Wired-OR Mode Bit)。该位决定三个引脚 SPSCK、MOSI、MISO是否有内部上拉电阻,因而成为开漏输出(open-drain output)。 SPWOM=1,设置 SPSCK,MOSI 和 MISO 引脚为线或模式;SPWOM=0,设置 SPSCK, MOSI和MISO引脚为普通推拉(push-pull)模式。D1 SPE位:SPI允许位(SPI Enable)。该位决定是否允许SPI。SPE=1,允许SPI ; SPE=0,不允许SPI,相应引脚成为普通I/O引脚。D0 SPTIE 位:SPI 发送中断允许位(SPI Transmit Interrupt Enable)。SPTIE=1, 允许SPI发送中断;SPRIE=0,不允许SPI发送中断。当一个字节的数据发送完毕时, 状态及控制寄存器SPSCR(下面将介绍该寄存器)的SPTE位(SPI发送器空标志位)被置 1,此时,若SPCR寄存器的SPTIE=1,则产生SPI中断。通常情况下SPTIE=0,即发 送数据完成不产生中断。(请类比本寄存器的SPI接收中断允许位SPRIE的功能)。3. SPI状态和控制寄存器(SPI Status and Control Register, SPSCR)SPSCR 的地址: $0011,定义为:数据位D7D6D5D4D3D2D1D0定义SPRFERRIEOVRFMODFSPTEMODFENSPR1SPR0复位00001000D7 SPRF位(只读):SPI接收器满标志位(SPI Receiver Full Bit)。当收到一个字 节的数据时,PRF位被置1,程序读取该位得知此位为1后,可以通过数据寄存器SPDR 读取收到的数据,读取数据后SPRF位被自动清零。D6 ERRIE 位:错误中断允许位(Error Interrupt Enable Bit)。ERRIE=1,允许 MODF和OVRF产生CPU中断请求;ERRIE=0,禁止MODF和OVRF产生CPU中断 请求。D5 OVRF位(只读):溢出标志位(Overflow Bit)。当接收数据寄存器中的数据 还没有被读取时,若有新的数据进入移位寄存器,OVRF位被置1。OVRF被置1后, 读SPSCR寄存器及接收数据寄存器后,OVRF位被自动清零。D4 MODF位(只读):模式错误标志位(Mode Fault Bit)。若本寄存器的 MODFEN=1,在数据传输过程中,若在从机方式,ss引脚为高电平,或在主机方式SS 引脚为低电平,说明Ss引脚逻辑发生错误(与图10-6相违背),MODF被置1。MODF 被置成1后,若读SPSCR寄存器后再对SPDR进行写操作,MODF位被自动清零。D3 SPTE位(只读):SPI发送器空标志位(SPI Transmitter Empty Bit)。当发送数 据寄存器的数据进入移位寄存器中,SPTE被置1,表示发送结束。SPTE被置成1后, 若又向发送数据寄存器中写入新的数据,SPTE位被自动清零。D2 MODFEN位:模式错误标志允许位(Mode Fault Enable Bit)。MODFEN=1, 允许MODF标志的置位,MODFEN=0,禁止MODF标志的置位。但如果MODF位已 经被置1,将MODFEN清零,并不会使MODF位也清零。对于主机而言,如果MODFEN 为0, Ss引脚就可以作为一般的I/O引脚。D1、D0 SPR1、SPR0 位:SPI 波特率选择位(SPI Baud Rate Select Bits)。当 MCU 处于主机模式下,这两位控制串行时钟SPSCK的频率。在从机模式下,这两位没有意 义。计算公式为:SPI的波特率=CGM UT2 BD上式中:CGMOUT为时钟产生模块CGM的基准时钟输出。BD是分频系数,由SPR1、SPR0 位决定:SPR1、 SPR0=00, BD=2=01, BD=8=10, BD=32=11, BD=12810.2.3 SPI编程基本方法在进行SPI编程时,首先在程序初始化部分必须进行SPI系统初始化。SPI的初始 化,主要是对SPI控制寄存器SPCR进行写入,以便定义工作方式、时钟的空闲电平、 是否允许SPI等。同时,还要对SPI控制和状态寄存器SPSCR的控制位部分写入,例 如通过对SPR1、SPR0位的写入确定SPI的波特率。本小节给出最基本的用法,以作为 GP32 单片机的 SPI 的编程入门。1. SPI初始化对 SPI 初始化,一般需要两步:第一步:写控制字到SPCR,确定是否允许SPI接收中断、SPI的工作方式、时钟 极性、时钟相位、是否允许 SPI 等。例如:LDA #%00100010 不产生中断、主机方式、时钟空闲低电平STASPCR第二步:写控制字到SPSCR,确定SPI的波特率:LDA #%00000001 8 分频STA SPSCR2. 发送一个数据与接收一个数据要通过SPI发送一个数据,同时通过SPI接收一个数据,作为主机方,只要将数据 送入SPDR,然后检查SPSCR的SPTE位(位3),如果该位为1,表示数据已经送出。 若同时接收对方送来的数据,则接着检查SPSCR的SPRF位(位7),如果该位为1,表 示要接收的数据已经进入数据寄存器,可以取出。例如:下列程序发送A中数据,同 时接收对方数据放入 A 中:STASPDR送入SPDRNOP适当延时NOPBRCLR 3,SPSCR,. 为0等待,即等待SPTE(位3)为1,发送完毕BRCLR 7,SPSCR,. 为0等待,即等待SPRF(位 7)为1,接收完毕LDA SPDR取收到的数据到寄存器A中10.3 A/D和D/A转换的基本问题在过程控制和仪器仪表中,多由嵌入式计算机进行实时控制及实时数据处理,计算 机所加工的信息总是数字量,而被检测的对象却往往是一些连续变化的模拟量 (如,温 度、压力、速度和流量等),因此需要将模拟量转化为数字量,以便在计算机中进行运 算处理,此过程称为模数(A/D)转换,A/D转换过程通常分成三个步骤:采样保持、量 化与编码。由计算机进行加工处理的数字量往往也需要转换成为模拟量,以便对某些特 征量进行实时控制,这一过程称为数模(D/A)转换,它是A/D的逆转换。A/D和D/A转 换技术是数字测量和数字控制领域中必不可少的组成部分,一个数字控制系统框图如图 10-7 所示。数据转换往往不是最终目的,而是达到测量、采集、处理和控制等目的的 一种手段。可见,没有A/D、D/A转换技术的发展,就无法更好地发挥嵌入式计算机的 功能,也就制约着产品在更高品质上的应用。1. A/D转换A/D转换模块(Analog To Digital Convert Module)即模/数转换模块,其功能是将电压 信号转换为对应的数字信号。实际应用中,这个电压信号可能由温度、湿度、压力等实 际物理量经过传感器和相应的变换电路转化而来。经过A/D转换后,MCU就可以处理 这些物理量。进行 A/D 转换,应该了解以下一些基本问题:第一,采样精度是多少? 第二,采样速率问题?第三,滤波问题;第四,物理量回归等。图10-7 数字控制系统框图(1) 采样精度采样精度就是指数字量变化一个最小量时模拟信号的变化量,即我们通常所说的采 样位数。通常在MCU中采样位数为8位,某些增强型的可达到10位,而专用的A/D 采样芯片则可达到12位,14位,甚至16位。设采样位数为N,则最小能检测到的模 拟量变化值为1/2W例如以GP32为例,其采样精度最高为8位,参考电压为5V,则 检测到的模拟量变化为 5/28=0.0195313V。(2) 采样速率采样速率是指完成一次A/D采样所要花费的时间。在多数的MCU中要花费1520 个指令周期,因而此速率和所选器件的工作频率有很大关系。(3) 滤波为了使采样的数据更准确,必须对采样的数据进行筛选去掉误差较大的毛刺。通常 我们采用中值滤波和均值滤波来提高采样精度。中值滤波是取三次采样的中间值,均值 滤波是取多次采样的算术平均值。若要得到更高的精度,可以通过建立其他误差模型分 析方式来实现。(4) 物理量回归在实际应用中,得到稳定的A/D采样值以后,还需要把A/D采样值与实际物理量对 应起来,这一步称为物理量回归A/D转换的目的是把模拟信号转化为数字信号,供计 算机处理,但必须知道A/D转换后的数值所代表的实际物理量的值,这样才有实际意义。 例如,利用MCU采集室内温度,A/D转换后的数值是126,它代表多少温度呢?如果当 前室内温度是25.1 ,贝lA/D值的126就代表实际温度25.1 T。有多种方法完成这种对应 关系,本书不做详细介绍。2. D/A转换(1) D/A转换器的转换精度D/A 转换器的转换精度有两种衡量方法:分辨率:D/A转换器在理论上可达到的精度。其定义是,电路所能分辨的最小输出电压Vlsb(输入的n位数字代码最低有效位LSB为1,其余各位都为0)与最大输出电LSB压vm(此时输入数字代码所有各位全为1)之比,即VV分辨率一卄Vm REF2 n1V 2n 1 REF (2 n 1)2n上式说明,输入数字代码的位数n越多,分辨率越小,分辨能力越高。例如:10位D/A 转换器的分辨率为:1/(21-1)=1/1023.000978。转换误差:D/A转换器实际上能达到的转换精度。转换误差可用输出电压满度值 的百分数表示,也可以用LSB的倍数来表示。例如,转换误差为0.5LSB,是表示输出 模拟电压的绝对误差等于输入数字量的LSB=1、其余各位均为0时输出模拟电压的一 半。转换误差又分静态误差和动态误差。产生静态误差的原因是基准电源 vREF 的不稳REF 定、运放的零点漂移、模拟开关导通时的内阻和压降及电阻网络中阻值的偏差等。动态 误差则是在转换的动态过程中产生的附加误差。它的产生是由于电路中的分布电容和分 布电感使各位的电压信号到达电阻网络输出端的时间不同,并可在输出端产生干扰信 号。(2) D/A转换器的转换速度D/A 转换器的转换速度有两种衡量方法: 建立时间t是在输入数字量各位由全0变为全1或由全1变为全0时,输出电set 压达到某一规定值(例如取 1/2LSB 或满度值的 0.01%)所需要的时间。目前,在某些集 成D/A转换器中,t 0.由;在内部包含有基准电源和求和运算放大器的集成D/A转set换器中,最短的建立时间可达到1.5阴。 转换速率SR是在大信号工作时,即输入数字量的各位由全0变为全1或由全1R变为全0时,输出电压uo的变化率。D/A转换器完成一次转换所需的时间应包括建立 时间t和输出电压uo的上升或下降时间,即最大转换时间为:setT = t + V / STR maxseto max R上式中V 是输出模拟电压的最大值。o max10.4 MC908GP32内部A/D转换模块MC908GP32单片机B 口的8根引脚与8路A/D转换模块的引脚复用,在422小 节已讨论过B 口作为通用I/O 口的功能,并在4.3节举例说明了 I/O 口的编程方法。这 里讨论 8 路 A/D 转换器时的编程方法。A/D转换有个参考电压问题,在B 口有引脚作为A/D转换器的输入引脚时,芯片 的VREFH、vrefl引脚分别必须接参考电压的正、负,通常就是接电源的正、负端。REFH REFLB 口引脚作为A/D转换引脚时,也叫作AD7 pinAD0 pin。它们是8位A/D转 换,正常A/D转换要求提供1MHz的ADC时钟频率,一次一路A/D转换时间一般为 16到17个ADC时钟周期,所以一般A/D转换时间为1617M。10.4.1 GP32 A/D转换模块寄存器GP32的A/D转换模块有3个寄存器,它们是:A/D转换状态和控制寄存器(ADSCR)、 A/D转换数据寄存器(ADR)、A/D转换输入时钟寄存器(ADCLK)。通过这3个寄存器的编 程,就可以获取A/D转换数据。1. A/D转换状态和控制寄存器ADSCR (Analog-to-Digital Status and Control Register)ADSCR主要功能是:选取要转换的通道、决定转换结束数据获取的方式、设置是 连续转换还是一次转换。ADSCR的地址是:$003C,定义为:数据位D7D6D5D4D3D2D1D0定义COCOAIENADCOADCH4ADCH3ADCH2ADCH1ADCH0复位00011111D7COCO:转换完成(Conversions Complete)0 当 D6(AIEN)=0 时,即转换结束不 产生中断,COCO是只读位,COCO=1,转换完成;COCO=0,转换未完成。当再次向 ADSCR写数据或读ADR寄存器数据内容时,COCO位自动清0。当AIEN=1时,即转 换结束产生中断,COCO是可读写位,应该写COCO=0oD6AIEN: A/D 转换中断允许标志位(ADC Interrupt Enable Bit)。AIEN =1,转换 结束产生中断;当再次向ADSCR写数据或读ADR寄存器数据内容时,A/D转换中断 请求信号自动撤消。AIEN =0,转换结束不产生中断,通过软件查询COCO得知转换结 束。D5ADCO:连续转换控制位(ADC Continuous Conversion Bit)。ADCO=1,连续 ADC转换,即连续进行采样并转换更新ADR; ADCO=0, 次ADC转换。D4D0: ADCH4ADCH0,通道选择(ADC Channel Select Bits)。ADCH4ADCH0=00000-00111: AD0 引脚AD7 引脚 ADCH4ADCH0=01000-11100:未用ADCH4ADCH0=11101: VREFHADCH4ADCH0=11110: VREFLADCH4ADCH0=11111 关闭 ADC 电源2. A/D转换数据寄存器ADR (Analog-to-Digital Data Register)ADR存放A/D转换的8位结果,每次A/D转换结束更新该寄存器。编程从该寄存器 读取A/D转换结果。该寄存器地址为:$003D,为只读寄存器,复位时为$00。3. A/D转换输入时钟寄存器ADCLK (Analog-to-Digital Input Clock Register)该寄存器决定A/D转换的时钟频率来源、分频系数值,芯片内的A/D转换器要求ADC时钟频率为1 MHz左右。ADCLK 的地址是:$003E,定义为:数据位D7D6D5D4D3D2D1D0定义ADIV2ADIV1ADIV0ADICLK未定义未定义未定义未定义复位00000000D7D5: ADIV2ADIV0,ADC时钟分频系数选择位(ADC Clock Prescaler Bits)。 设ADC时钟输入时钟源频率为f,由ADIV2ADIV0定义的分频系数为n,则ADC时钟 入频率=f /n0 n与ADIV2ADIV0的关系是:入ADIV2ADIV0=000n=1=001n=2=010n=4=011n=8=1xx n=16D4: ADICLK,ADC输入时钟源选择位(ADC Input Clock Select Bit)。ADICLK =1, 选择内部总线时钟;ADICLK =0,选择外部时钟(CGMXCLK)。D3D0:未用ADC时钟要求:ADC时钟频率1MHz。具体编程时根据A/D转换的时钟频率来源 确定分频系数值,确保芯片内的A/D转换器时钟频率为1MHz左右即可。10.4.2 A/D转换模块的基本编程方法A/D 转换编程主要 涉及输入时钟 寄存器 ADCLK($003E)、 状态和控制寄 存器ADSCR($003C)、数据寄存器 ADR($003D)o1. A/D转换初始化在程序初始化时就应对A/D转换输入时钟寄存器ADCLK写入控制字节,决定时钟 输入源是内部总线还是外部晶振,决定分频系数,使ADC时钟频率达1MHz,设使用内 部总线时钟,且fBU=2.4576MHz,则初始化程序为:LDA #%00110000 /使用内部总线时钟,2分频STA ADCLK/送入寄存器ADCLK2. 启动A/D转换对A/D转换状态和控制寄存器ADSCR写入控制字节,选取要转换的通道、决定转 换结束数据获取的方式、设置是连续转换还是一次转换,此时就开始了一路A/D转换, 例如:LDA #%00000000 /0通道,转换结束不产生中断,一次A/D转换 STA ADSCR /并启动0通道转换3. 获A/D转换结果若是中断方式,在A/D中断程序中取得,若是查询方式,通过A/D状态和控制寄存 器ADSCR的第7位(COCO位)取得,当COCO =1时,可从A/D数据寄存器ADR中取数。上 述是查询方式,紧接上述程序:BRCLR 7, ADSCR,./COCO位=0则等待COCO位=1LDAADR转换结束,转换结果送入A中10.5 GP32 MCU A/D转换编程实例本节给出的A/D转换程序,包含了中值滤波与平均值滤波的复合滤波方式,因为不 含软件滤波的A/D转换程序很少能够实际应用的。本程序中的中值滤波,就是对三次采 样值比较大小,取中间的一个。所谓平均值滤波,就是N个采样值求平均。而中值滤波 与平均值滤波的复合滤波方式,就是先进行中值滤波,再进行平均值滤波。10.5.1 A/D转换08C语言编程实例以下给出GP32的A/D模块编程实例。表10-1列出了该例程的所有程序文件,下 面逐一介绍这些程序。表 10-1 模数转换 08C 工程文件工程文件名AD.prj所在路径MC08Ex2007GP32GP32CC04 AD模数转换文件类型文件名功能简述讲解章节头文件GP32C.hGP32 MCU映像寄存名定义头文件08C工程文件组织5.3EnDisInt.h开放或禁止MCU各模块中断 头文件08C工程文件组织5.3Type.h类型别名定义头文件08C工程文件组织15.3Includes.h总头文件08C工程文件组织15.3ADC.hA/D转换头文件本章SCI.h串行诵信头文件串行诵信子函数7.5.1C语言 子函数文件MCUinit.c芯片初始化文件初始化及PLL编程实例14.2.5SCI.c串行诵信文件串行诵信子函数7.5.1ADC.cA/D转换文件本章C语言主函数Main.c主函数文件本章A/D转换有关头文件ADC.h/ADC.hA/D转换头文件/头文件#include GP32C.h/GP32 MCU 映像寄存器名定义#include Type.h/类型别名定义/转换完成标志位宏定义#define COCOBit 7/函数声明void ADCinit(void);/A/D 转换初始化INT8U ADCvalue(INT8U channel);/1 路 A/D 转换函数INT8U ADCmid(INT8U channel);/1 路 A/D 转换函数(中值滤波)INT8U ADCave (INT8U channel. INT8U n):/1 路 A/D 转换函数(均值滤波)(2) A/D转换有关C语言子函数ADC.C/ADC.cA/D转换*/本文件包含:*/(1)ADCinit:A/D 转换初始化*/(2)ADCvalue:获取1路A/D转换结果*/(3)ADCmid:获取中值滤波后的A/D转换结果*/(4)ADCave:获取均值滤波后的A/D转换结果*/硬件连接:*/PTB0/AD0 接模拟量输入端*/*/头文件#include ADC.h/ADCinit:A/D转换初始化*/功能:设置A/D转换时钟频率为1MHz*/参数: 无*/返回: 无*/*void ADCinit(void)ADCLK = 0b00110000;/|不用/|选择内部总线时钟/|分频系数为2/ADCave: 1路A/D转换函数(均值滤波)*/功能:诵道channe进行n次中值滤波.求和再作均值.得出均值滤波结果*/参数:channel =通道号,n =中值滤波次数/返回:该通道均值滤波后的A/D转换结果/内部调用:ADCmid/INT8U ADCave(INT8U channel, INT8U n) INT8UINT16Uj =fori; j;*0;(ij += ADCmid(channel); j/n;= 0; i (k i)ifif (k j) tmp = j; elsetmp = k; elsetmpi;return tmp;/ADCvalue:1 路A/D转换函数*/功能:获取通道channe l的A/D转换结果*/参数:channel =通道号*/返回:该通道的A/D转换结果*/*INT8U ADCvalue(INT8U channel)INT8U tmp;/1.选取通道号ADch4-ADch0 = 00000-00111:AD0引脚 - AD7引脚 channel &= 0b00011111;/取通道号变量的低五位(实际通道号)tmp = ADSCR & 0b11100000;/取ADSCR的高三位(取上电复位默认值000)ADSCR = tmp | channel;/合并上述8位/2.取A/D转换结果while (ADSCR & (1COCOBit) = 0); return ADR;(3) A/D转换08C测试实例主函数mai n.c/*/工程名:ADC.prj*/硬件连接:*/(1)PTB0/AD0接模拟量输入端(见ADC.c文件)*/(2)MCU的串口与PC方的串口相连(见SCI.c文件)*/程序描述:获取1路A/D转换结果,并滤波,通过串口发送出去*/目 的:掌握A/D转换的基本编程方法*/注意:用MD-IDE实验板测试时,把液晶拔出,否则可能影响结果*/清华2007版嵌入式技术基础与实践实例*/总头文件#include Includes.h/主程序void main(void)DisableMCUint(); /禁止总中断/1. 芯片初始化MCUinit();/2. 模块初始化SCIinit();/(1) 串行口初始化ADCinitO;/(2) A/D 转换初始化while (1)/在通道0做A/D转换,200次中值滤波,串口发送均值滤波结果 SCIsend1(ADCave(0, 200);10.5.2 A/D转换汇编语言编程实例A/D转换汇编程序和08C程序相似,这里仅给出工程列表,如表10-2所示,具体 内容参见程序文件夹。表10-2模数转换汇编工程文件工程文件名 AD.pr所在路径 MC08Ex2007GP32GP32SS04 AD模数转换文件类型文件名功能简述讲解章节头文件GP32ASM.h芯片头文件汇编工程文件组织14.3Includes.h总头文件汇编工程文件组织4.3AD.hA/D转换头文件本章SCI.h串行通信头文件参见本工程实例汇编语言 子程序文件MCUinit.s芯片初始化文件初始化及PLL编程实例14.2.5Vectors08.s中断处理子程序与中断向 量表文件本章EnDisInt.s开放或禁止MCU各模块 中断头文件本章SCI.s串行通信文件参见本工程实例AD.sA/D转换文件本章汇编语言主程序文件Main.s主程序文件本章*10.6利用SPI进行高位A/D芯片的扩展10.6.1 A/D 芯片 TLC2543概述目前,高分辨率 A/D 转换器的价格已经较低,采用新出现的高分辨率、性能价格 比较优的A/D转换器进行模拟量采集电路设计是新型A/D数据采集系统的基本要求。 具有 11 个输入端的 12 位模数转换器 TLC2543 是美国德州仪器公司 TI(TEXAS INSTRUMENTS)于近几年推出的一种性价比较优的12位A/D转换芯片,具有多种封 装形式,并具有民用级、工业级、军用级产品。在产品型号、规格、封装形式、适用范 围等方面,已形成一个系列。从1998年开始在我国推广使用。就12位A/D转换器来 说, TLC2543 具有转换快、稳定性好、与微处理器接口简捷、编程价格低等优点,在 嵌入式测控领域使用较多。1. TLC2543的引脚说明TLC2543是12位开关电容逐次逼近模数转换器,有多种封装形式,其中DB、DW 或N封装的管脚图见图10-8。TLC2543有20根引脚,其它封装形式、引脚数及引脚功 能相同。引脚的简要说明见表 10-3。表 10-3 TLC2543 芯片输入输出引脚分类与基本接法引脚类别引脚名及引脚号中文含义简要说明电源类Vcc(20)、GND(10)REF+(14)、REF-(13)电源、地 参考电压一般使用5V一般使用5V控制类CS( 15)EOC(19)I/O CLOCK(18)片选端 转换结束端 时钟输入由高到低有效,由外部输入 转换结束时,向外部输出高 控制I/O的时钟,由外部输入模拟输入AIN0 AIN10(1 9、11、12)模拟输入端输入范围:0.3VVcc+0.3V控制输入DATA INPUT(17)控制字输入端选择通道及输出数据格式的控制字由此 输入数据输出DATA OUT(16)转换结果输出A/D转换结果输出的3态串行输出端AIN0 120VccAIN1 219EOCAIN2 AIN3 318I/O CLOCK DATA417A1N4 516INPUTA1N5 615DATA OUTAIN6 714csATN7 813REF+ATN8 912-REF-AIN9 1011AIN 10图10-8 TLC2543的封装管脚(本图错,正确见第 1 版)2. TLC2543的编程要点(1) 控制字的格式控制字为从 DATA INPUT 端串行输入 TLC2543 芯 片内部的8位数据,它告诉TLC2543要转换的模拟量通 道、转换后的输出数据长度、输出数据的格式。其中高 4位(D7D4)决定通道号,对于0通道至10通道,该4 位分别为0000、 0001、 1010,该4位为其它数字时 的功能,用于检测校正,这里不作具体介绍。低 4位决 定输出数据长度及格式,其中 D3、 D2 位决定输出数据长度,TLC2543的输出数据长度有8位、12位、16位,但由于TLC2543为12位A/D 转换芯片,经过分析可以看出,8位、16位输出对TLC2543的应用意义不大,宜定在12位输出,D3、D2两位为00即可。但是有时16位输出是为了接口数据传输的需要,必须定义为16位输出格式,此时D3、D2两位为11。D1位决定输出数据是高位先送 出,还是低位先送出,若为高位先送出,该位为0,反之为1。D0位决定输出数据是单 极性(二进制)还是双极性(2 的补码),若为单极性,该位为 0,反之为 1。举例说明:设采集第6通道、输出数据为12位、高位先送出、输出数据的格式为 二进制,则控制字为:0110 0000,用十六进制表示即为60H,这里基于此格式说明转换过程。(2) TLC2543的内部寄存器从编程角度看, TLC2543 内部寄存器有输入数据寄存器与输出数据寄存器。输入 数据寄存器存放从 DATA INPUT 端移入的控制字。输出数据寄存器存放转换好的数据以供从 DATA OUT 端移出。(3) 转换过程上电后,片选CS必须从高电平变为低电平,才能开始一次工作周期,此时EOC为 高,输入数据寄存器被置为0,输出数据寄存器的内容是随机的。开始时,片选CS为高,I/O CLOCK、DATA INPUT被禁止,DATA OUT呈高阻状 态,EOC为高。使CS变低,I/O CLOCK、DATA INPUT使能,DATA OUT脱离高阻状 态。12个时钟信号从I/O CLOCK端依次加入,随着时钟信号的加入,在时钟信号的上 升沿时控制字从DATA INPUT 一位一位地被送入TLC2543(高位先送入),同时上一周 期转换的 A/D 数据,即输出数据寄存器中的数据从 DATA OUT 一位一位地移出。 TLC2543收到第4个时钟信号后,通道号也已收到,因此,此时TLC2543开始对选定 通道的模拟量进行采样,并保持到第12个时钟的下降沿。在第12个时钟下降沿, EOC变低,开始对本次采样的模拟量进行A/D转换,转换时间约需10卩s,转换完成EOC变 高,转换的数据在输出数据寄存器中,待下一个工作周期输出。此后,可以进行新的工作周期。3. TLC2543与MCU的接口方法E丽血分有五个引脚,分别是:时钟输入(I/O CLOCK)、 )、片选输:入ECS )、ATLC2543与微处理器芯片的:MOSI data input接口部串行控制字输入(OUTPUT)、转换结束电平输出( 计转换结束,免去TLC2543与具有SPI或相同EO换串行数据输出(DATA 的工作时序,可以通过软件估EOC接线。口能MCU可以通过软件编程合成SPI操作二I经分析TLC2543TLC2543l::C 1 片)_A N0力的mcu可以直接连接,对于没有spi接口的DArAINKUT :LO CLOCK AINIO *10.6.2 SPI模块与TLC2543的接口扩展本小节给出基于SPI扩展高位A/D转换实例。图10-9 SPI与12位AD转换芯片TLC2543的接口方法1.扩展电路设计图10-9给出了利用SPI及MCU的PTC 口的PTC0-PTC1扩展两片TLC2543的电 路原理。其中第0片TLC2543的片选接MCU的PTC0、第1片TLC2543的片选接MCU 的PTC1,每片TLC2543可接11路模拟量输入,这样图10-9电路可外接22路模拟量。 当有更多路数模拟量需要输入时,可以按此方法继续扩展。该电路适用于模拟量路数较 多、且对实时性要求不是太高的数据采集系统。2编程方法下面给出基于上述电路的A/D采集子程序,程序实例所在的路径: MC08Ex2007GP32GP32CC05_2543。(1) ADC.h/ADC.h:AD采集驱动头文件/头文件/GP32 MCU映像寄存器名定义/类型别名定义#include GP32C.h/宏定义#define SPICR SPCR #define SPIDR SPDR #define SPISCR SPSCR #define ReFullBit 7 #define SendEmyptBit 3 #define CS_P PTC #define CS_D DDRC#include Type.h/SPI控制寄存器/SPI数据寄存器/SPI状态和控制寄存器/SPI接收器满标志位/SPI发送器空标志位/C 口作为TLC2543的片选信号输出口/函数声明void SPIinit(void);/SPI 初始化void ADCaverage(INT8U ch, INT8U n, INT16U *value);/2 片 2543 22 路 AD 采集void TLC2543 (INT16U cs. INT16U channel. INT16U *value): /TLC2543芯片A/D转换(2) ADC.C/ADC.cAD采集驱动*/本文件包含:*/(1)SPIinit:SPI 初始化*/(2)ADCaverage:某一路A/D转换平均值子程序*/(3)TLC2543:TLC2543 芯片
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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