1 引言
随着现代电子技术的应用和发展,越来越多的电子应用由模拟系统向数字系统转变,而A/D转换器为模拟系统和数字系统的界面,承担着模拟信号转变为数字信号的任务,在一些多路信号采集系统和实时数字信号处理系统中,A/D转换的多路扩展、高精度、低成本、实时性显得越来越重要。在一般信号采集系统中,由单片机或微控制器对高精度A/D转换器进行控制,通常采用软件模拟A/D转换器时序的方法。因此增加了CPU的负担,降低了CPU的工作效率,在多片A/D转换器多通道扩展应用中,降低了信号采集的实时性。
现场可编程门阵列FPGA(Field ProgrammableGate Array)是20世纪80年代中期在PAL,GAL等逻辑器件的基础上发展起来的一种可编程逻辑器件,其特点是高集成度、高速和高可靠性,设计人员可以现场修改器件的逻辑功能。VHDL(VHSIC Hardvcare Description Language)是目前通用的硬件描述语言之一,可用来描述一个数字电路的输入、输出以及相互间的行为与功能。
FPGA的高集成度和高速的特性,使之相对于单片机和微控制器,更适合用于对高速A/D器件的采样控制。本文设计一种基于FPGA的高速串行输入/输出A/D转换器的控制器,该控制器完成对ADS7844芯片的采样控制,提高了采样的实时性、减轻了主CPU的运行负担。
2 ADS7844功能介绍
ADS7844是Burr_Brown公司推出的一种高性能、宽电压、低功耗的12 b串行数模转换器。它有8个模拟输入端,可用软件编程为8通道单端输入A/D转换器或4通道差分输入A/D转换器,其转换率高达200 kHz,而线性误差和差分误差最大仅为±1 LSB。ADS7844在电源电压为2.7~5 V之间均能正常工作,最大工作电流为1 mA,进入低功耗状态后的耗电仅为3μA。ADS7844通过6线串行接口与CPU进行通信,接口简单方便。
2.1 ADS7844的引脚功能
CH0~CH7:模拟输入端,当器件被设置为单端输入时,这些引脚可分别与信号地COM构成8通道单端输入A/D转换器;当器件被设置为差分输入时,利用CH0-CH1,CH2-CH3,CH4-CH5,CH6-CH7可构成4通道差分输入A/D转换器;
COM:信号地;
Vref:参考电压输入端,最大值为电源电压;
CS:片选端、低电平有效、该脚为高电平时,其他数字接口呈三态;
Dclk:外部时钟输人端,在时钟作用下,CPU将控制字写入ADS7844,并将转换结果从中读出;
Din:串行数据输入端,在片选有效时,控制字在Dclk上升沿被逐位锁入ADS7844;
Dout:串行数据输出端,在片选有效时,转换结果在DcIk的下降沿开始被逐位从ADS7844移出;
BUSY:“忙”信号输出端,在接收到控制字的第一位数据后变低,只有在转换结束且片选有效时,该脚才输出一个高脉冲;
SHDN:电源关闭端、低电平有效。当SHDN为低电平时,ADS7844进入低功耗状态;
Vcc,GND:分别为电源端和数字地。
2.2 ADS7844的控制字及转换时序
ADS7844的控制字如表1所述。
ADS7844的控制字共有8位,其中S是起始位,控制字的起始位总为“1”。A2~A0是通道选择位,在单端输入时分别对应8个通道,而对于差分输入,000~011分别对应CH0-CH1,CH2-CH3,CH4-CH5,CH6-CH7,而100~111则分别对应CH0-CH1,CH1-CH0,CH3-CH2,CH5-CH4,CH7-CH6。Bit3没有定义。SGL/DIF是模式控制位,该位为“1”时是单端输入模式,为“0”时是差分输入模式。PD1和PD0是电源关闭模式控制位,若为“00”,则表示ADS7844在不进行数据转换时自动进入电源关闭模式,若为“11”,芯片则始终处于电源开启模式。
ADS7844有多种转换时序,基本时序如图1所示。
从图1中可见,一个转换周期需要24个时钟周期,其中8个用于输入控制字,16个用于读取转换结果。控制字的所有位在时钟上升沿被锁入芯片,转换结果在时钟的下降沿被逐位移出。所有移人和移出的数据都是高位在前、低位在后。需要说明的是,ADS7844是12位A/D转换器,其转换结果只有12位,故在移出12位结果后,还需送入4个时钟来完成整个转换过程,这4个多余的时钟移出的数据为“0”,使用时不应作为转换结果处理。[page]
3 ADS7844控制器的设计
用FPGA设计的采样控制器AD_CONTROLLER与ADS7844的接口电路如图2所示,基本时序如上所述。
AD_CONTROLLER的输入时钟取12 MHz,经内部4分频后输出至ADS7844的CLK引脚。cs_all为来自CPU的启动信号,当其为低时AD_CONTROLLER开始工作。addr[3..0]为对应的ADS7844的通道地址,data[15..0]为某地址所对应通道的A/D转换结果,当某一通道转换结束,oe信号由低电平变为高电平并持续1个周期。
AD_CONTROLLER主要由分频模块(fq),A/D转换周期形成模块(fq_cs);A/D转换器片选信号模块(cs_pulse);通道地址及控制字形成模块(addr_1);A/D转换数据输出模块(from_ad)和控制字移位输出模块(to_ad)组成,其结构如图3所示。
取FPGA工作频率10 MHz,经分频器4分频得2.5 MHz作为A/D转换器的时钟。分频器通常用计数器实现,各VHDL教材上都已详细讲述,这里不再赘述。信号cs每隔28个clk1时钟周期发出1个clk1周期的高电平脉冲并转换1次模拟输入通道,28个cIk1周期中,A/D转换器片选cs_ad信号占用4个周期,控制字的串行输出(di)占用8个周期,ADS7844芯片由Din引脚接收到控制字后,在下一个周期的下降沿开始将A/D转换后的数据串行输出至Dout引脚,由from_ad模块进行串/并转换并输出(data[15..0]),此串并转换需16个周期。信号stld的下降沿将由状态机产生的控制字(control_word[7..0])锁存入to_ad模块内部的并/串移位寄存器(74165),经过8个周期后控制字由di引脚输入ADS7844芯片。cs脉冲的产生由计数器实现,这里不做详细介绍。cs_ad片选信号通过cs_ad模块将cs信号展宽2个周期而得到,其电路结构如下:
电路由1个计数器(cs_wide)、前沿D触发器(inst6)和后沿D触发器(inst3)组成。当cs信号上升沿到时,inst6触发,cs_ad置高电平。2个周期后,inst3由下降沿触发输出高电平,反相后将inst6和计数器cs_wide清零,同时cs_ad输出低电平。由此看出,cs_ad的信号正是cs信号经过2个周期展宽后得到。
通道地址及控制字形成模块(addr_1)可以实现所需的各种输入模式,并产生通道地址和控制字,以单端输入模式为例,VHDL代码如下:
这里用双进程的有限状态机(FSM)来设计通道地址产生器。当addr<=“0000”时表示没有通道被选择,ADS7844没有工作;当addr<=“0000”时表示通道1被选择,依次类推。[page]
4 计算机仿真分析
用Quartus Ⅱ 6.0进行分析综合、布局,共占用Altera cyclone FPGA 59个LE(logic elements),波形仿真如图5所示。
图5中elk的周期为100 ns,clk1为系统时钟4分频后的工作时钟,当cs_all为低电平时,AD_CONTROLLER开始工作。由状态机产生的控制字(10000100)在stld的下降沿被锁存入移位寄存器,当cs_ad由高变低时,控制字被逐位移出至di端口。在此,假设当ADS7844接收到控制字并由ad_do端口逐位移出1通道转换后的数据1000000000010000,经过16个周期后oe由低变高,oe的下降沿可以将移入寄存器的数据锁存。由图5可见,仿真波形与ADS78414控制波形一致,达到了设计的目的。
5 结 语
本试验用于混合动力汽车电池管理系统电池电压、电流信息采集部分。电池管理系统通常采用双单片机的结构,一个单片机完成电池信息采集功能,另外一个单片机完成电池SoC(State of Charge)计算及人机交互功能。这种系统结构复杂,可靠性降低。为解决这一问题,该A/D控制器被封装成基于Avalon总线的自定义IP核,应用于Altera公司FPGA所支持的NIOS Ⅱ嵌入式系统中,NIOS Ⅱ软核CPU仅在A/D控制器引起的中断服务程序中读取采集到的数据,这样大大提高了采集速度和CPU的效率,使得有更多的CPU资源应用于SoC计算和人机交互。这种基于SoPC(Systemon Programmable Chip)的电池管理系统结构紧凑、功能齐全、可靠性大大提高。
FPGA用来设计控制电路有很多优点。FPGA不仅可进行任意次编程,而且用户可以借助开发工具快速编程、编译、优化、仿真直到最后芯片制作。高集成性使得用户可以利用硬件描述语言及开发工具在单片FPGA芯片上实现各种复杂的逻辑电路和片上系统,提高了系统性能、减小了电路面积、降低了成本。高速性有效地解决模拟控制的精度与数字控制的速度之间的矛盾。随着FPGA性能的提高和成本的降低,以FPGA为基础的数字电路和SoPC(Systam on ProgrammableChip)代表了嵌入式系统的发展方向,FPGA将应用得越来越广泛。
1 引言
随着现代电子技术的应用和发展,越来越多的电子应用由模拟系统向数字系统转变,而A/D转换器为模拟系统和数字系统的界面,承担着模拟信号转变为数字信号的任务,在一些多路信号采集系统和实时数字信号处理系统中,A/D转换的多路扩展、高精度、低成本、实时性显得越来越重要。在一般信号采集系统中,由单片机或微控制器对高精度A/D转换器进行控制,通常采用软件模拟A/D转换器时序的方法。因此增加了CPU的负担,降低了CPU的工作效率,在多片A/D转换器多通道扩展应用中,降低了信号采集的实时性。
现场可编程门阵列FPGA(Field ProgrammableGate Array)是20世纪80年代中期在PAL,GAL等逻辑器件的基础上发展起来的一种可编程逻辑器件,其特点是高集成度、高速和高可靠性,设计人员可以现场修改器件的逻辑功能。VHDL(VHSIC Hardvcare Description Language)是目前通用的硬件描述语言之一,可用来描述一个数字电路的输入、输出以及相互间的行为与功能。
FPGA的高集成度和高速的特性,使之相对于单片机和微控制器,更适合用于对高速A/D器件的采样控制。本文设计一种基于FPGA的高速串行输入/输出A/D转换器的控制器,该控制器完成对ADS7844芯片的采样控制,提高了采样的实时性、减轻了主CPU的运行负担。
2 ADS7844功能介绍
ADS7844是Burr_Brown公司推出的一种高性能、宽电压、低功耗的12 b串行数模转换器。它有8个模拟输入端,可用软件编程为8通道单端输入A/D转换器或4通道差分输入A/D转换器,其转换率高达200 kHz,而线性误差和差分误差最大仅为±1 LSB。ADS7844在电源电压为2.7~5 V之间均能正常工作,最大工作电流为1 mA,进入低功耗状态后的耗电仅为3μA。ADS7844通过6线串行接口与CPU进行通信,接口简单方便。
2.1 ADS7844的引脚功能
CH0~CH7:模拟输入端,当器件被设置为单端输入时,这些引脚可分别与信号地COM构成8通道单端输入A/D转换器;当器件被设置为差分输入时,利用CH0-CH1,CH2-CH3,CH4-CH5,CH6-CH7可构成4通道差分输入A/D转换器;
COM:信号地;
Vref:参考电压输入端,最大值为电源电压;
CS:片选端、低电平有效、该脚为高电平时,其他数字接口呈三态;
Dclk:外部时钟输人端,在时钟作用下,CPU将控制字写入ADS7844,并将转换结果从中读出;
Din:串行数据输入端,在片选有效时,控制字在Dclk上升沿被逐位锁入ADS7844;
Dout:串行数据输出端,在片选有效时,转换结果在DcIk的下降沿开始被逐位从ADS7844移出;
BUSY:“忙”信号输出端,在接收到控制字的第一位数据后变低,只有在转换结束且片选有效时,该脚才输出一个高脉冲;
SHDN:电源关闭端、低电平有效。当SHDN为低电平时,ADS7844进入低功耗状态;
Vcc,GND:分别为电源端和数字地。
2.2 ADS7844的控制字及转换时序
ADS7844的控制字如表1所述。
ADS7844的控制字共有8位,其中S是起始位,控制字的起始位总为“1”。A2~A0是通道选择位,在单端输入时分别对应8个通道,而对于差分输入,000~011分别对应CH0-CH1,CH2-CH3,CH4-CH5,CH6-CH7,而100~111则分别对应CH0-CH1,CH1-CH0,CH3-CH2,CH5-CH4,CH7-CH6。Bit3没有定义。SGL/DIF是模式控制位,该位为“1”时是单端输入模式,为“0”时是差分输入模式。PD1和PD0是电源关闭模式控制位,若为“00”,则表示ADS7844在不进行数据转换时自动进入电源关闭模式,若为“11”,芯片则始终处于电源开启模式。
ADS7844有多种转换时序,基本时序如图1所示。
从图1中可见,一个转换周期需要24个时钟周期,其中8个用于输入控制字,16个用于读取转换结果。控制字的所有位在时钟上升沿被锁入芯片,转换结果在时钟的下降沿被逐位移出。所有移人和移出的数据都是高位在前、低位在后。需要说明的是,ADS7844是12位A/D转换器,其转换结果只有12位,故在移出12位结果后,还需送入4个时钟来完成整个转换过程,这4个多余的时钟移出的数据为“0”,使用时不应作为转换结果处理。[page]
3 ADS7844控制器的设计
用FPGA设计的采样控制器AD_CONTROLLER与ADS7844的接口电路如图2所示,基本时序如上所述。
AD_CONTROLLER的输入时钟取12 MHz,经内部4分频后输出至ADS7844的CLK引脚。cs_all为来自CPU的启动信号,当其为低时AD_CONTROLLER开始工作。addr[3..0]为对应的ADS7844的通道地址,data[15..0]为某地址所对应通道的A/D转换结果,当某一通道转换结束,oe信号由低电平变为高电平并持续1个周期。
AD_CONTROLLER主要由分频模块(fq),A/D转换周期形成模块(fq_cs);A/D转换器片选信号模块(cs_pulse);通道地址及控制字形成模块(addr_1);A/D转换数据输出模块(from_ad)和控制字移位输出模块(to_ad)组成,其结构如图3所示。
取FPGA工作频率10 MHz,经分频器4分频得2.5 MHz作为A/D转换器的时钟。分频器通常用计数器实现,各VHDL教材上都已详细讲述,这里不再赘述。信号cs每隔28个clk1时钟周期发出1个clk1周期的高电平脉冲并转换1次模拟输入通道,28个cIk1周期中,A/D转换器片选cs_ad信号占用4个周期,控制字的串行输出(di)占用8个周期,ADS7844芯片由Din引脚接收到控制字后,在下一个周期的下降沿开始将A/D转换后的数据串行输出至Dout引脚,由from_ad模块进行串/并转换并输出(data[15..0]),此串并转换需16个周期。信号stld的下降沿将由状态机产生的控制字(control_word[7..0])锁存入to_ad模块内部的并/串移位寄存器(74165),经过8个周期后控制字由di引脚输入ADS7844芯片。cs脉冲的产生由计数器实现,这里不做详细介绍。cs_ad片选信号通过cs_ad模块将cs信号展宽2个周期而得到,其电路结构如下:
电路由1个计数器(cs_wide)、前沿D触发器(inst6)和后沿D触发器(inst3)组成。当cs信号上升沿到时,inst6触发,cs_ad置高电平。2个周期后,inst3由下降沿触发输出高电平,反相后将inst6和计数器cs_wide清零,同时cs_ad输出低电平。由此看出,cs_ad的信号正是cs信号经过2个周期展宽后得到。
通道地址及控制字形成模块(addr_1)可以实现所需的各种输入模式,并产生通道地址和控制字,以单端输入模式为例,VHDL代码如下:
这里用双进程的有限状态机(FSM)来设计通道地址产生器。当addr<=“0000”时表示没有通道被选择,ADS7844没有工作;当addr<=“0000”时表示通道1被选择,依次类推。[page]
4 计算机仿真分析
用Quartus Ⅱ 6.0进行分析综合、布局,共占用Altera cyclone FPGA 59个LE(logic elements),波形仿真如图5所示。
图5中elk的周期为100 ns,clk1为系统时钟4分频后的工作时钟,当cs_all为低电平时,AD_CONTROLLER开始工作。由状态机产生的控制字(10000100)在stld的下降沿被锁存入移位寄存器,当cs_ad由高变低时,控制字被逐位移出至di端口。在此,假设当ADS7844接收到控制字并由ad_do端口逐位移出1通道转换后的数据1000000000010000,经过16个周期后oe由低变高,oe的下降沿可以将移入寄存器的数据锁存。由图5可见,仿真波形与ADS78414控制波形一致,达到了设计的目的。
5 结 语
本试验用于混合动力汽车电池管理系统电池电压、电流信息采集部分。电池管理系统通常采用双单片机的结构,一个单片机完成电池信息采集功能,另外一个单片机完成电池SoC(State of Charge)计算及人机交互功能。这种系统结构复杂,可靠性降低。为解决这一问题,该A/D控制器被封装成基于Avalon总线的自定义IP核,应用于Altera公司FPGA所支持的NIOS Ⅱ嵌入式系统中,NIOS Ⅱ软核CPU仅在A/D控制器引起的中断服务程序中读取采集到的数据,这样大大提高了采集速度和CPU的效率,使得有更多的CPU资源应用于SoC计算和人机交互。这种基于SoPC(Systemon Programmable Chip)的电池管理系统结构紧凑、功能齐全、可靠性大大提高。
FPGA用来设计控制电路有很多优点。FPGA不仅可进行任意次编程,而且用户可以借助开发工具快速编程、编译、优化、仿真直到最后芯片制作。高集成性使得用户可以利用硬件描述语言及开发工具在单片FPGA芯片上实现各种复杂的逻辑电路和片上系统,提高了系统性能、减小了电路面积、降低了成本。高速性有效地解决模拟控制的精度与数字控制的速度之间的矛盾。随着FPGA性能的提高和成本的降低,以FPGA为基础的数字电路和SoPC(Systam on ProgrammableChip)代表了嵌入式系统的发展方向,FPGA将应用得越来越广泛。
举报