FPGA与单片机实现低频数字式相位测量仪

分享到:

 本设计采用MCU和FPGA相结合的系统方案,以AVR单片机ATmega128和Altera公司的Cyclone系列EP1C3T100为核心,充分发挥各自的优势,如AVR单片机先进的RISC结构和强劲的运算、控制功能,Altera公司的FPGA运算速度快、资源丰富以及易编程的特点,合理设计,此方案的相位仪具备速度快、稳定可靠、精度高等优点,而且容易实现“智能化”和“自动化”。

  1 系统方案设计

  1.1 测量方法的比较与选择

  目前相位测量的方法主要有两种:

  1)DFT测相法即将待测信号通过A/D转换得到f(n),f(n)按离散傅里叶变换得出离散频谱F(k),f(n)和F(k)为傅里叶变换对,通过运算得到两路信号的基波相位,从而计算出相位差。DFT测相法的精度受限于ADC的采样精度,需要高速ADC对信号进行过采样,测量方案复杂,可以通过采集卡在计算机上实现虚拟仪器,所以主要应用在精度要求很高的场合和虚拟仪器中。

  2)填充计数测相法 即两路同频的正弦信号经过信号整形电路后得到方波信号,方波信号经过鉴相器后,得到两路输入信号的相位差信号,用固定频率的采样脉冲进行填充并计数,从而计算出相位差。填充计数测相法主要应用在要求一定的精度,测量的频率不是太高但实时性要求很强的场合,易于实现数字化和自动化,低频数字相位仪适合用填充计数法。

  填充计数测相法的基本算法:若正弦波整形后的方波信号频率为f,周期为T,采样脉冲周期为TC,方波一个周期内对采样脉冲计数为,n则被测信号频率f=1/T=1/nTC。同样的方法测出两个同频正弦波起点之间的时间差为△t,则两信号的相位差△θ=△t·360°/T。

  1.2 系统方案的确定

  由系统测量方法可知,数据需要采集、运算及显示,考虑到Field Programmable Gate Array(FPGA)集成度高、I/O资源丰富、稳定可靠,选择余地大,外围元件很少,近年来价格下降等优势,以及MCU良好的人机接口和运算控制功能,所以本系统由MCU和FPGA相结合构成测控主体。FPGA负责采集测频和测相位差的脉冲信号,MCU负责读FPGA采集的数据,计算待测信号频率和相位差并在LCD上显示。

所以,系统由4个部分组成:待测信号调理电路、FPGA数据采集电路、MCU数据运算控制电路和LCD数据显示电路,如图1所示。

 

  2 测量误差的分析与消除

  相位测量仪的完善设计,不仅要有合适的测量方法和系统实现方案,还需要着重分析误差产生的原因和确定消除的方法。

  1)填充时钟频率(即数据采样信号)的影响与确定本相位测量仪的测频范围为20 Hz~20 kHz,相位差的范围为△θ=0°~359.9°,相位差的显示分辨率为0.1°,要求测量相位的绝对误差≤2。

  被测频率20 Hz≤f≤20 kHz,则周期50μs≤T≤50 ms。

  T=50 μs,绝对误差取0.1°~2°。

  则填充时钟信号周期:0.1°x50 μs/360°≤TC≤2°x50 μs/360°即:1/72(μs)≤TC≤1/3.6(μs),可以得出填充时钟频率:

  3.6 MHz≤fC≤72 MHz。

  T=50ms内对TC=1/3.6(μs)的填充脉冲计数,计数值Nmin=180000≤218;对TC=1/72(μs)的填充脉冲计数,计数值Nmax=3600000≤ 222。

  本设计考虑MCU的计算及分频取得信号的方便,填充时钟信号频率fC=20 MHz,测量绝对误差<1°,FPGA在20 MHz时钟信号作用下对待测信号周期和相位对应的时间差进行计数,FPGA采样的二进制数据位为20 bit,可以保证测量的精度。

  2)待测信号调理电路中零点漂移的影响与消除待测信号调理电路主要作用是把输入信号整形变换成矩形波,通常采用过零比较器或者施密特触发器。

  过零比较器在零点电位附近可能会有振荡,输入信号在零点电位附近时,电压比较器处于放大区,整形后的矩形波在边沿会产生抖动,使系统无法进行测量。要消除这种抖动,可以采用施密特触发器。为了保证测量的精度,施密特触发器必须符合两个条件:一是两路被测信号幅度基本相等,二是门限电平要基本接近。

  3)整形后方渡边沿的陡峭程度的影响与消除信号经过整形后输出的矩形脉冲信号直接送给FPGA,则FPGA不能立即获取稳定的数字脉冲信号,就会使系统的精度受到很大影响。这主要是由于整形后方波边沿不够陡峭造成的。要解决此问题,一是选取具有较大压摆率的器件,二是在比较器的后端加一级微分电路来提升脉冲信号的边沿。

  4)中低频测量精度的影响与消除采用20 MHz数据采样信号来循环计数被测信号的周期及相位差对应的时间差,精度达到0.05 μs,20位数字量的单位是0.05μs。利用被测信号刷新采样计数,实现高频多测量,低频少测量,时间计数精确可靠,这样,FPGA可以为MCU提供稳定的数据。

  3 系统硬件电路的设计

  3.1 前端信号调理电路的设计

  施密特触发器(迟滞比较器)虽然可以很好地消除比较器过零引起的抖动,但是其输出信号和输入信号存在相位差,如果两路被测信号的幅度基本相等且两个施密特触发器的门限电平又很接近,则施密特触发器引入的相位误差对测量系统误差几乎无影响。

采用LM339内部有4个独立的电压比较器,该电压比较器的特点是:失调电压小,典型值为2 mV;电源电压范围宽,双电源电压为±1~±18 V;对比较信号源的内阻限制较宽。同相和反相输入端电压差别大于10 mV就能确保输出能从一种状态可靠地转换到另一种状态,输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到正电源一般须接一只电阻。在跳变电压值附近的干扰不超过回差AU,输出电压的值就将是稳定的。正反馈可以加快比较器的响应速度。由于迟滞比较器加的正反馈很强,远比电路中的寄生耦合强得多,所以可免除由于电路寄生耦合而产生的自激振荡。通过调节电位器,使两个施密特触发器的门限电平基本相等,保证输入电路对相位差测量不带来误差。电路如图2所示。

 

  3.2 系统测量电路设计

  以单片机为核心设计相位仪,如其晶振为24 MHz,单片机C/T的计数误差为1个机器周期为±0.5 μs,则绝对误差为360°x0.5 μs/50μs=3.6°,所以,当被测信号频率很高时很难满足测量要求。

  本设计采用AVR单片机与FPGA相结合的方案,FPGA实现数据采集,将所测信号的频率和相位差所对应时间差转换为二进制数据传给单片机;单片机从FPGA获取数据,经过运算、转换等数据处理,将被测信号的频率和相位差在LCD上显示。

       系统电原理图如图3所示。MCU采用ATMEL公司的AVR单片机ATmega128,具有先进的RISC结构,大多数指令在一个时钟周期内完成,有32个8位通用工作寄存器及外设控制寄存器,克服了一般单片机单一累加器数据处理带来的瓶颈。有128 KB的系统内可编程Flash,4 KB的EEPROM以及4 KB的内部SRAM,遵循JTAG标准的边界扫描功能,支持扩展的片内调试,可通过JTAG接口实现对Flash、EEPROM、熔丝位和锁定位的编程。

  FPGA采用Altem Cyclone系列的EP1C3T100,配置芯片为EPCS1,VHDL功能程序经过全编译会生成.sof和.pof文件,配置的下载为Byte-Blaster II,[Mode]项选择“JTAG”为把.sof文件配置到FPGA芯片EP1C3T100中,用于调试;[Mode]项选择“Active Serial Programming”为把.pof文件下载到配置芯片EPCS1中,系统重新上电时正常运行。

  LCD采用HTM12864,为128x64串行数据传送液晶显示器,背光灯通过光耦受到控制。

  ATmega128和EP1C3T100设计各自的JTAG接口。图3绘出了ATmega128和EP1C3T100的接口D0~D19、EN、Dsel、LCN;ATmega128与HTM12864的接口RET、D/C、SCLK、DATA;EP1C3T100的输入信号FAin和FBin,66 MHz外部有源晶振,配置芯片EPCS1。

       4 系统软件的设计

 

  4.1 FPGA数据采集VHDL程序设计

 

  FPGA数据采集的VHDL程序设计是在Altera QuartuslI开发软件平台及实验开发系统上完成的。程序设计采用自顶向下(up-to-down)的设计方法。FPGA系统的模块构成如图4所示。采样信号发生模块完成时钟信号源的分频工作,得到CLK=20 MHz;待测信号采样模块在控制信号产生模块的周期闸门信号Tk和时间清零信号Tcr的作用下,输出待测信号周期和相位差数据;测量数据提取模块在鉴相信号JXc和计数提取信号Lad的作用下,并在输出使能信号EN和数据类型信号Dsel控制下分别输出周期和相位差数据,交MCU运算处理显示。

FPGA在单片机输出使能信号EN和数据类型信号Dsel控制下,输出所测信号的频率和相位差所对应的二进制数据仿真波形如图5所示。VHDL程序经过编译调试生成.pof文件下载到配置芯片EPCS1中实现所设计的功能。

  4.2 ATmega128运算控制程序设计

  AVR单片机ATmega128从FPGA分别读取频率和相位差的20位数字量,由于FPGA在20 MHz数据采集信号作用下对待测信号周期和两同频信号的相位差所对应的时间差计数,因此20位数字量的单位是0.05μs,单片机对这些数字量进行计算,可以得到待测信号的频率和相位差。

  单片机运算控制程序设计思路:单片机(ATmega128)通过控制信号EN和Dsel从FPGA(EP1C3T100)读取待测信号的周期和两待测信号相位差所对应的时间差,对读取的数据进行计算、转换,送液晶显示器显示,显示待测信号的频率、相位差以及有关信息。主程序流程图如图6所示。源程序由主程序及若干子程序组成,主程序是一个循环执行程序。


1)单片机从FPGA读数据

  根据MCU与FPGA的20位数字量的接口,从单片机的PA、PB和PC(低4位)读取数据,组合成20位的数据,控制线EN和Dsel控制FPGA释放数据。当Dad=1时,FPGA向单片机传送待测信号的相位差数据;当Dsel=0时,FPGA向单片机传送待测信号的周期数据;当EN=1时,FPGA向单片机释放数据,当EN=0时,FPGA禁止向单片机释放数据。

  2)频率和相位差数据的运算

  为了测量达到要求的精度,在运算时不能丢失数据,所以采用扩大倍数定点取数的方法,保证数据计算准确。依据如下方法进行计算:信号频率F=106/T,计算结果精确到1 Hz;相位差△θ=△tx360°x10/T,计算结果精确到0.1°。

  3)LCD显示器显示频率、相位差等相关信息

  本设计采用HTM12864(128x64)的LCD液晶显示器,控制器为S6B0724,与单片机数据与控制接口是:CS、RET、D/C、SCLK、DATA,背光灯根据按键动作控制,用按键来切换显来示信息。

  5 结论

用此方法设计的数字式相位测量仪具有较高的精度,稳定可靠。本仪器测量正弦信号的频率及两个同频正弦信号的相位差,较好地满足了设计的技术指标要求。

继续阅读
基于ATmega128和CH374的USB接口设计

以ATmega128和CH374为核心,通过SPI串口通讯方式设计了一款USB接口,系统硬件简单,不需要编写复杂的USB驱动程序,利用其动态链接库即可实现USB与PC的通信,研发简单,易于实现。

SKT之AVR硬件I2C的操作函数

STK600 之 Atmega128硬件I2C 读写高精度时钟芯片DS3231函数,STK600 用于程序的下载 连接JTAG口至mega128目标板即可,分享给大家参考。

ATMEGA128熔丝位配置详解

本文以AVR系列的ATmega128单片机为例,详细介绍熔丝位的配置以及在配置过程中常出现的一些问题,并给出相应的解决办法,成功地解决了因熔丝位配置不当而引起的单片机不能正常工作和死锁等一系列问题。

Atmega128中文资料

ATmega128是ATMEL公司的 8位系列单片机的最高配置的一款单片机,应用极其广泛。

基于ATmega128的16路遥控单元设计及应用

本文介绍一款具有16路遥控接点输出的ARTU-J16,该装置通过RS485总线与上位机相连,作为远程继电器输出模块,用于接收计算机指令,执行系统的遥控操作或自动控制,继电器输出共16路,装置拥有1600组操作事件记录,带GPS校时功能,在外部电源掉电后可以保证SOE事件记录一个月内不丢失,相对以往控制方式,本设计在简化控制网络结构的同时,提供了一种低成本,高可靠性的替代方案。

©2019 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss