《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 一种基于DSP的数据采集与显示设计方案

一种基于DSP的数据采集与显示设计方案

2009-06-25
作者:方三档,高钦和,鲁永秋

    摘 要:为了快速、准确地进行数据采集,并把采集到的数据显示出来,设计了一种以TI公司的TMS320F2812内置ADC为数据采集核心、以MAXIM公司的MAX7219作为LED显示驱动的方案。从硬件和软件两个方面的设计进行阐述,重点介绍了软件方面的设计。调试结果证明,该设计能够达到数据采集的要求,并能稳定地显示采集到的数据,可以广泛应用于仪器仪表设计中。
    关键词:TMS320F2812;MAX7219;数据采集;LED显示


 

    数据采集及处理系统在众多领域均有广泛的应用,其主要功能是把外界模拟信号的电压参量经过A/D转换器转换成数字量,并把转换结果存储以便分析处理。采集到的数据可以选用LED数码管、液晶等器件来显示。与同类显示器件相比,LED数码管具有电路连接简单、成本低、开发周期短、性能稳定等优点。
    本设计采用TI公司的DSP芯片TMS320F2812作为信号采集和处理的核心,通过片上自带的12位ADC进行数据采集;采用MAXIM公司生产的串行输入/输出共阴极显示驱动器芯片MAX7219驱动8位LED数码管,以显示采集到的数据。
1 硬件设计
1.1 TMS320F2812内置ADC介绍

    ADC模块的框图如图1所示,其前端为2个8选1多路切换器Analog MUX和2路同时采样/保持器S/H,构成16个模拟输入通道ADCIN00~ADCIN15,通道的自由切换由硬件自动控制。所选通道的值经12位ADC模块转换后存储在各自的ADCRESULT寄存器中。

 


    ADC模块的主要特点是:模拟输入电压范围为0.0?V~3.0?V;具有快速的转换时间,ADC在25 MHz时钟下转换时间为80 ns,最高采样宽带为12.5 MSPS;自动排序功能提供多达16个自动转换,每个转换可以编程选择16个输入通道中的一个,排序器可以作为2个独立8状态排序器或者一个16状态排序器;16个结果寄存器用于保存转换值,转换后的数字量表示为:

   
    其中,ADCLO为偏移量,一般取为0。
    有多个触发源用于启动转换序列:软件立即启动(用SOC SEQn位);事件管理器EVA;事件管理器EVB;外部引脚(ADCSOC引脚)。中断控制灵活,允许每个序列或每隔一个序列转换结束产生中断请求[1-3]
1.2 MAX7219芯片介绍
    MAX7219是一个专用的串行输入/输出、共阴极LED显示驱动器。它采用3线串行接口传送数据,接口简便;每片可驱动8个LED数码管,多片串接时可控制多个LED;内部共有l4个寄存器,其中6个为控制寄存器,8个为数据寄存器,数据寄存器存放预显示的数值,控制寄存器决定MAX7219的工作模式;只需一个外部电阻即可调节LED的段电流,且允许程控方式方便地调节LED显示的亮度;MAX7219可选择LED显示器的扫描个数;有不译码和BCD码译码2种显示模式[4]
    MAX7219的数据接收装载时序图如图2所示。由图可知,当LOAD信号为低时,在每个CLK的上升沿,DIN端的数据移入MAX7219内部移位寄存器中。LOAD必须在16个CLK同时或之后由低变高(上升沿),被移入的数据才会被锁存进入内部控制寄存器或数据寄存器中。接收的第一个数据放置在内部寄存器的D15位,最后一个数据放置在D0位。在16.5个CLK之后,在DOUT端可以观测到DIN端输入的数据。在CLK的下降沿有数据输出[5,6]

 


1.3 硬件电路设计
    MAX7219是串行输入方式,故其连接方式比较简单。硬件电路设计如图3所示。TMS320F2812的SPI模块中的SPICLK、SPISIMO分别用作MAX7219的时钟信号CLK、串行数据输入信号DIN;TMS320F2812的GPIOD0用作MAX7219的数据锁存信号LOAD。MAX7219的V+引脚接+?5V电源信号,2个GND引脚接模拟地。DIG 0~DIG 7用于驱动8个数码管的显示,SEG A~G、SEG DP用于驱动数码管的7段显示和小数点的显示。

 


2 软件设计
    程序主要分为初始化、数据采集和显示数据3个部分。程序流程框图如图4所示。初始化系统主要完成高速时钟和低速时钟的设置,高速时钟设置成2分频,低速时钟设置成4分频。因为设计使用SPI模块控制MAX7219,所以初始化SPI模块要把工作方式设置为主方式,这样就可以通过SPISIMO端向MAX7219移入数据,并且为 MAX7219提供串行时钟。与之相应,初始化GPIO就要把SPICLK、SPISIMO配置成外设信号,把GPIOD0配置成通用I/O信号。初始化ADC和MAX7219见下文的部分程序和注释。

 


    数据采集部分采用事件管理器EVA启动ADC转换。配置事件管理器EVA,设置定时器1下溢中断标志启动ADC,周期设置为64。由于高速时钟设置为2分频,即75 MHz,经计算得ADC的采样频率为75/64 MHz=1.172?MHz。使能事件管理器EVA中的EVASOC,启动ADC转换。
    当ADC转换完毕后,中断标志位置位,进入ADC中断服务子程序。在ADC中断服务子程序中,将转换结果读入数组Voltage中,再把数组中的数据转换为模拟信号的电压值。响应中断后,中断返回到主函数,调用WriteWord函数,把要写入数据的数据寄存器的地址和模拟信号的电压值一并移入MAX7219中,从而驱动LED数码管把模拟信号的电压值显示出来。
    初始化ADC模块:
void InitAdc(void)
{
    AdcRegs.ADCTRL1.bit.RESET = 1;//复位整个ADC模块
    asm(' RPT #10 || NOP');// 必须等待约12个时钟周期后,ADC模块的复位才有效。
    AdcRegs.ADCTRL3.all = 0x00C8; // 首先对带隙参考源电路进行上电。
    Delayus(5000);       //ADCPWDN置位前等待5ms
    AdcRegs.ADCTRL3.bit.ADCPWDN = 1;  //对ADC模块的其余部分进行上电。
    Delayus(20);      //ADC上电完成后的延时。
    /***配置ADC寄存器***/
    AdcRegs.ADCMAXCONV.all?=?0x0001;//设置1次转换。
    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;  // 设置ADCINA0的转换。
    AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;  // 设置ADCINA1的转换。
    AdcRegs.ADCTRL1.all=0x2710;
    AdcRegs.ADCTRL2.all=0x0900;
}
初始化MAX7219:
/* MAX7219初始化 */
void InitDisplay (void)
{
    WriteWord (0x0b,0x07);       // 设置扫描界限
    WriteWord (0x09,0xff);      // 设置译码模式
    WriteWord (0x0a,0x0a);      // 设置亮度级别
    WriteWord (0x0c,0x01);      // 设置为正常工作模式
}
/* 向MAX7219写入字(16位)*/
void WriteWord (uchar addr,uchar num)
{
    uchar entire;
    entire=(addr<<8)+num;
    GpioDataRegs.GPDDAT.bit.GPIOD0=0; //将LOAD信号置为低电平,准备移入数据。
    delay(200);
    SpiaRegs.SPIDAT=entire;
    delay(200);
    GpioDataRegs.GPDDAT.bit.GPIOD0=1; // /将LOAD信号置为高电平,锁存进相应寄存器
}
3 调试结果
    设计中采集2路0~3?V的正弦波信号,正弦波信号通过波形发生器产生,其频率可以在10?Hz~100?Hz、100?Hz~1 kHz、1 kHz~10 kHz、10 kHz~100 kHz之间任意选取。
3.1 数据采集部分
    调整正弦波信号的频率,使其保持在一个固定的值。经过ADC转换后,采集到的数据一路放在Voltage1中,另一路放在Voltage2中。从Voltage1中截取45个点,CCS中观察到的波形如图5所示。

 


    示波器观察到的要采集的正弦波信号的频率为52.1 kHz,而采样频率经计算为1.172 MHz,所以采集到正弦波信号在一个周期内的点数为1.172 MHz/0.0521 MHz=22.495≈22.5个。由图可知,波形图中的45个点构成两个周期的正弦波波形,与计算结果完全吻合。
3.2 数码显示部分
    采集到的2路数字信号转换为模拟量后,第一路信号由前4个LED数码管显示,第二路信号由后4个LED数码管显示,每一路可以读到小数点后面第3位。8位LED数码管的一个显示状态如图6所示。

 

    通过观察,LED数码管的显示亮度能够调整,显示数值的刷新速度也能调节,以适应人眼的观察范围。显示亮度可以在MAX7219的初始化中控制,而刷新速度则通过延时来控制。
    本设计采用TMS320F2812的内置ADC作为数据采集电路的核心部件,并且用TMS320F2812的SPI模块和GPIOD0端口控制MAX7219驱动LED显示。电路连接简单,易于实现。调试结果证明,该设计能够快速准确地进行数据采集,并能稳定显示采集到的数据,可以广泛应用在仪器仪表的设计中。
参考文献
[1] 徐科军,张瀚,陈智渊. TMS320X281x DSP原理与应用[M].第1版.北京:北京航空航天大学出版社,2006.
[2] 曹梦婷,潘宏侠. 基于TMS320F2812的ADC数据采集的软件实现[J].机械工程与自动化, 2008,148(3):82-83.
[3] TI Incorporation. TMS320F2810,TMS320F2811, TMS320F2812,TMS320C2810,TMS320C2811, TMS320C2812 Digital signal processors data manual. 2007.
[4] 邵笑冰,徐龙祥. MAX7219在DSP控制系统中的应用[J]. 中国仪器仪表,2003(8):36-37.
[5] 苏奎峰,吕强,常天庆,等. TMS320X281x DSP原理及C程序开发[M].第1版.北京:北京航空航天大学出版社,2008.
[6] MAXIM. Serially interfaced,8-digit LED display drivers MAX7219/7221. 2003.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。