DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 130|回复: 0
打印 上一主题 下一主题

MAX194在ARM单片机系统中的应用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 18:49:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                    ?
  ARM(Advanced RISC Machines)处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。更早称作Acorn RISC Machine)。ARM处理器本身是32位设计,但也配备16位指令集。一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。ARM的Jazelle技术使Java加速得到比基于软件的Java虚拟机(JVM)高得多的性能,和同等的非Java加速核相比功耗降低80%.CPU功能上增加DSP指令集提供增强的16位和32位算术运算能力,提高了性能和灵活性。ARM还提供两个前沿特性来辅助带深嵌入处理器的高集成SoC器件的调试,它们是嵌入式ICE-RT逻辑和嵌入式跟踪宏核(ETMS)系列。本文介绍了一种笔者使用后取得良好效果的新型A/D转换芯片-MAX194.另外,由于32位处理器的价格不断下降,用户已可以大量使用,而32位RISC处理器则更是受到青睐,并将在某些领域替代原来的8位单片机。其中,ARM嵌入式微处理器系列处于领先地位。笔者所介绍的数据采集系统中采用的是PHILIPS公司生产的以ARM7处理器作为内核的LPC2104单片机。
  1??? MAX194简介
  MAX194是MAXIM公司推出的一种逐次逼近型模数转换器(ADC),具有高速、高精度、低功耗等特点。MAX194内部设有校准电路,用于保证全温度范围内的线性度,从而维持全量程内的高性能,且不需要外部的调整电路。分开的模拟和数字供电最大程度地减少了数字噪声耦合。MAX194的内部结构如图1所示,其主要特性如下:




  ◇ 14位分辨率,1/2LSB非线性度,82分贝的信噪比;
  ◇ A/D转换时间为9.4 μs;
  ◇ 低功耗,节电模式下仅为10 μA;
  ◇ 内置采样/保持器(T/H);
  ◇ 单极性(0"VREF)或双极性(-VREF"VREF)输入;
  ◇ 3态串行接口输出;
  ◇ 与16位的A/D转换器MAX195引脚兼容、输出数据格式相同,便于升级。
  1.1??? MAX194的主要引脚功能
  ◇ BP/UP/SHDN:三态输入选择端。0 V为关断,+5 V为单极性,浮空为双极性;
  ◇ CLK:转换时钟输入端;
  ◇ SCLK:串行时钟输入端。用于移出数据,可以与CLK异步;
  ◇ DOUT:串行数据输出端。高位先出;
  ◇ EOC:转换结束信号输出端。转换开始时上升,结束时下降;
  ◇ CS:片选输入端。当为低电平时允许三态数据输出;
  ◇ CONV:转换开始输入端。在波形的下降沿开始转换;
  ◇ RESET:复位输入端;
  ◇ REF:参考电压输入端;
  ◇ AIN:模拟量输入端。
  1.2??? 工作模式
  MAX194有两种接口模式。
  ◇ 同步模式:MAX194在转换过程中,每转换完成一个,数据位就输出一位。此时,SCLK应该接地,CLK既作为ADC的转换时钟又作为串行接口的移位输出时钟。
  ◇ 异步模式:单片机只能在MAX194完成一次转换之后才能将转换结果读出,然后再启动下一次转换。这种模式降低了MAX194连续转换的速度。
  1.3??? 硬件接口
  串行接口标准与SPITM、QSPITM兼容。MAX194在进行A/D转换时需要由外部提供时钟信号。图2是MAX194与单片机采用异步模式的硬件连接图。该图中,MAX194进行A/D转换所需的时钟信号由外部晶振分频得到。使用者也可根据需要由单片机提供该时钟信号。时钟信号的最大频率是1.7 MHz,参考电压的范围是0"VDDA+0.3 V.为了防止从AIN端输入的信号损坏ADC,应在信号输入端加电压限幅电路以保护MAX194.图3是其时序图。P3.0产生的START信号与CLK信号相"或"后作为启动转换的CONV信号。CONV的下降沿可以启动转换,开始转换后监测EOC,当它由高电平变低时说明转换已经结束,适当延时后就可以从串口读出转换结果,读数据的最高速率是4.19 Mbps.







  2??? LPC2104芯片简介
  LPC2104基于一个支持实时仿真和跟踪的ARM7TDMI-S CPU,并带有128k字节(kB)嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。由于LPC2104非常小的尺寸和极低的功耗,它们非常适合于那些将小型化作为主要要求的应用,例如访问控制和电子收款机(POS)。带有宽范围的串行通信接口片内多达64k字节的SRAM,由于具有大的缓冲区规模和强大的处理能力,它们非常适合于通信网关和协议转换器、软件调制解调器、声音识别以及低端的图像处理。而多个32位定时器、PWM输出和32个GPIO使它们特别适用于工业控制和医疗系统。
  3??? MAX194与LPC2104接口设计
  3.1??? 硬件接口
  MAX194和LPC2104都带有标准的SPI接口,可以非常方便地实现它们的硬件和软件接口。其硬件接口如图2所示。SPI 是一个全双工的串行接口,它被设计成用于处理在一个给定总线上多个互连的主机和从机。在一定数据传输过程中,接口上只能有一个主机和一个从机通信。在一次数据传输中,主机总是向从机发送一个字节数据,而从机也总是向主机发送一个字节数据。
  在该系统中,LPC2104设置为主机,MAX194设置为从机主机操作。
  3.1??? 软件实现
  软件的流程图如图4所示。主要分为三大部分。




  1、SPI配置部分:首先,配置LPC2104的SPI引脚模块;随后,设置SPI_SPCCR和SPI_SPCR,并将LPC2104的SPI模块设置为主模式,MSB(最高位)先传输,禁止SPI中断,SPI接口速率为1 MHz,CPOL=0、CPHA=0在SCLK下降沿触发。
  2、MAX194转换部分:通过向MAX194的CONV引脚发低脉冲启动A/D转换,转换开始后MAX194的EOC引脚变为高电平,可通过检测EOC引脚是否变为低电平来判断A/D转换的完成。
  3、MAX194数据读取部分:首先置低MAX194的CS片选引脚,将无效数据0XFF送至SPI_SPDR以启动SPI总线,通过判SPIF位的置位来判断SPI总线传输是否完成,读取SPI_SPDR后,获得A/D转换结果的第一个字节(BIT13-BIT6)并调整数据;将无效数据0XFF再送至SPI_SPDR,然后再启动SPI总线,仍通过判SPIF位的置位来判断SPI总线传输的完成情况,读取SPI_SPDR后,获得A/D转换结果的第二个字节(BIT13-BIT6)并调整数据,最后将MAX194 的14位A/D转换数据存储在16位无符号变量rcv_data中。
  #include "LPC2104.H"// 调用LPC2104寄存器头文件
  #define?? MAX194_CS????? 0x00000100?????? // P0.8口为MAX194的片选和信号
  #define?? MAX194_EOC? 0x00000100?????? // P0.9口为MAX194的转换结束信号
  #define??? MAX194_UP???? 0x00000400??????? //P0.10口为MAX194的三态选择信号
  #define MAX194_CONV 0x00000800?????? //P0.10口为MAX194的转换启动信号
  int? main(void)
  { uint16? rcv_data;??????????? //存储A/D 转换后的14位数据的变量
  PINSEL0 = 0x00005500;??????????? //设置SPI管脚连接
  PINSEL1 = 0x00000000;
  IODIR = MAX194_CS|MAX194_UP|MAX194_CONV;// 设置P0.8,P0.10,P0.11为输出
  ……
  MSpiIni(? );???????????????? // 初始化SPI接口
  MSendData(0xFF,rcv_data);????? // 进行A/D转换病读取数据
  ……
  }
  void? MSpiIni(void)
  { SPI_SPCCR = 0x0B;?? // 设置SPI时钟分频, SPI时钟为1 MHz
  SPI_SPCR = 0x20;?? // 设置SPI接口模式,MSTR=1,CPOL=0,CPHA=0,LSBF=0
  IOCLR = MAX194_UP;? //关断输入
  }
  uint8? MSendData(uint8 s_data,uint16 r_data)
  { uint32 temp;
  IOSET=Max194_UP;??????? // 打开输入
  IOCLR = MAX194_CONV;?? // 启动转换
  Delay(10);??????????????? // 延时 10us
  IOSET = MAX194_CONV;
  do
  { temp=IOPIN;}
  while(temp&MAX194_EOC) ;?? // 转换结束
  IOCLR = MAX194_CS;? // 片选
  SPI_SPDR = s_data;?????????? // 发送数据0xFF
  while( 0==(SPI_SPSR&0x80) );? // 等待SPIF置位,即等待数据发送完毕
  r_data= (uint16)SPI_SPDR;???? //读取第一个字节数据
  r_data《=6;???????????????? //调整数据
  SPI_SPDR = s_data;?????????? // 发送数据0xFF
  while( 0==(SPI_SPSR&0x80) );? // 等待SPIF置位,即等待数据发送完毕
  r_data= r_data|(SPI_SPDR》2);? //读取第二个字节数据并调整
  IOSET = MAX194_CS;
  IOCLR = MAX194_UP;??????? //关断输入
  }
  4??? 结束语
  在使用MAX194中应尽可能把数字地和模拟地分开。如果模拟电源和数字电源来自同一个电源,那么用一低值电阻(10 Ω)将数字电源和模拟电源隔离。MAX194内部的高速比较器对VDDA和VSSA的高频噪声很敏感,应该用0.1 μF与1 μF或10 μF的并联电容将电源旁路接到模拟地。
  用于数据采集系统的A/D转换芯片有很多,新品更是层出不穷,数据采集的速度和精度等性能也在不断提高,在应用中不但应根据实际情况采用性价比较高的A/D转换芯片,而且应选用高性价比的处理器(如本文所选LPC2104),这样才能提高整个系统的性能。
?
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-6-28 08:29 , 耗时 0.088697 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表