基于FPGA的频率信号实时程控计数电路

2014-12-18 12:07左清清梁争争郑毓琦
现代电子技术 2014年24期
关键词:状态机计数器时钟

左清清+梁争争+郑毓琦

摘  要: 飞控计算机采集飞机上各类传感器和其他飞行控制系统的输入信息,分析解算后控制飞行姿态。频率信号的采集就是其中重要的数据信息类型之一。在此采用可编程芯片FPGA实现将频率信号转换为数字信号的方法。这种设计思想避免了搭建复杂的硬件电路来实现该功能,降低了模块硬件设计成本,节省了印制板布局空间,降低了设计复杂度,同时设计该功能的测试接口,以便于该功能故障后能够准确定位故障源。

关键字: 飞控计算机; 频率信号; FPGA; 飞行姿态控制

中图分类号: TN710?34                   文献标识码: A                            文章编号: 1004?373X(2014)24?0160?03

FPGA based real?time program control counting circuit of frequency signal

ZUO Qing?qing, LANG Zheng?zheng, ZHENG Yu?qi

(AVIC Xian Aeronautical Computing Technique Research Institute, Xian 710065, China)

Abstract: Flight control computer collects the input information from every kind of sensor and other flight control systems, which is analyzed and calculated to control flying attitude. Frequency signal is one of important signals in collected information. The programmable chip FPGA is adopted to realize the frequency signal conversion to digital signal. This design method avoided the building of a complicated hardware circuit for the realization of this function, reduced the hardware module design cost and saved PCB layout space, lowered the design complexity. The test interface of this function was designed to confirm the failure source when the function fault occurred.

Key word: flight control computer; frequency signal; FPGA; flying attitude control

飞行控制计算机是整个飞控系统的核心,同时承担着飞行控制和导航解算两大主要任务,它主要采集飞机上各类传感器和其他飞行控制系统的输入信息,进行分析解算后对舵机等控制面进行合理的控制,控制飞机飞行姿态。从传感器系统中采集到的数据很多是频率信号,因而飞控计算机必须承担将频率信号转换为数字信号并送给其他系统的功能。为了降低硬件电路设计成本和设计复杂度,减少印制板元器件布局,降低信号布线复杂度,提高频率信号计数精度和速度,因而采用逻辑电路实现频率信号计数功能。

1  硬件电路实现

飞控计算机由中央控制器模块(CPU模块)、输入/输出接口控制模块(IOC模块)、数据传输处理模块(1553模块)、模拟信号处理模块(AIO模块)、传感器信号处理模块(RUD模块、CAN模块、IBE模块等)、PS模块组成。由于飞行控制系统是飞机安全的核心系统,因此飞控计算机采用余度容错技术,保证飞机的飞行安全。

飞控计算机频率信号采集、计数、输出功能在IOC模块上采用反熔丝FPGA芯片(型号为A1010)和VHDL硬件编程语言实现,计数结果由CPU模块读取。该功能实现包含三部分电路:输入频率信号选择和预处理电路、频率计数控制、计数控制信号产生机理及计数过程,下面将逐一介绍。

1.1  输入频率信号选择和预处理电路

飞控计算机IOC模块从其他子系统采集到的频率信号有俯仰信号、横滚信号、1 800 Hz频率信号、角速率信号、轮速信号等,由于频率信号在传输过程中衰减,因而在IOC模块接收端对其进行整形,保证信号完整性。处理电路为:将待转换频率信号整形成标准方波信号后,输入可编程芯片FPGA进行计数。具体电路见图1。

从位号为N1的8选1多路选择器HI1?548选择一路待计数频率信号,地址选择信号FREQ_SEL(2:0)是CPU模块发出的离散量信号。被选择的频率信号经过位号为N2的比较器LM139(被选频率信号接比较器负端,电压值为+0.163 V的参考电压接比较器正端,该参考电压由IOC模块工作电压+5 V分压得到),将其负半周信号全部滤除,将其正半周信号转换成方波信号。输出方波信号经过位号为D1的54HC14反相器,将其更好地整形为标准方波,输入FPGA编程芯片,进行频率计数。

1.2  频率计数控制

本设计以对1 800 Hz频率信号进行计数为例,介绍如何实现计数功能。计数器采用16 bit计数器,选择2 MHz采样时钟(选择的采样时钟频率必须远大于待计数频率最大值)。写任意数据到IOC模块的FPGA内寄存器地址,启动频率计数过程。计数控制逻辑中的STRT_TIMER信号有效表示计数过程开始[1]。 计数控制逻辑中RST_CNTR信号清除计数器,并且产生一个门控信号COUNT,该门控信号保持为高,持续时间为两个由低到高的待转换频率信号(TIMER_IN)的上升沿,刚好是一个完整的待计数周期。采用16 bit计数器和2 MHz采样时钟对门控信号COUNT进行计数,得到的值为计数结果。为了防止计数器溢出,计数器值为FF00H时停止计数[2] 。信号时序关系见图2。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t2.tif>

图2 频率计数信号时序关系图

1.3  计数控制信号产生机理及计数过程

STRT_TIMER信号产生原理:CPU模块通过系统总线向IOC模块FPGA内寄存器地址写任意值,启动频率计数功能,启动信号STRT_TIMER发出,STRT_TIMER=(!SEL_IOC & !WR & A15 & A14 & A1 & !DEN)or(!RST_CNTR & STRT_TIMER)。其中SEL_IOC、WR 、DEN为CPU模块向IOC模块发出的片选信号、写信号、数据总线使能信号,A15、A14、A1选择FPGA内寄存器地址C002H。

16 bit计数器清零信号RST_CNTR产生原理:频率计数采用16 bit计数器实现,那么在每个计数任务开始首先需要对计数器清零,启动信号STRT_TIMER发出后(该信号高有效),STRT_TIMER和Timer_IN=0(Timer_IN与2 MHz采样时钟同步)启动测试序列,Timer_IN=0信号同时激活RST_CNTR。该信号产生逻辑如图3所示[3]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t3.tif>

图3 RST_CNTR信号逻辑图

门控信号COUNT产生原理:门控信号是待转换频率信号Timer_IN的一个完整的采样周期长度。用2 MHz采样时钟对门控信号时间长度进行计数,即可得到计数值。当RST_CNTR有效时,清除FPGA中的计数器和STRT_TIMER信号。RST_CNTR=1时状态机器[S1,COUNT]被初始化为状态[0,0](图中R代表RST_CNTR信号,T代表Timer_IN信号),COUNT信号输出逻辑关系见图4。产生COUNT门控信号的状态机,初始状态为[0,1];当Timer_IN变到1时,进入状态[0,1];当Timer_IN变到0时,下一状态成为[1,1];当Timer_IN又变到1时,下一状态成为空闲[1,0];状态机保持在空闲状态,直到启动新的计数周期,COUNT信号状态机图如图5所示[4]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t4.tif>

图4 COUNT门控信号逻辑图

16 b计数器实现:2 MHz采样时钟对COUNT门控信号进行计数,16 b计数器由T触发器实现,计数值达到FF00H时禁止计数功能,防止计数器溢出,计数器见图6。计数器得到的值为计数结果(一个完整的待转换频率信号Timer_IN周期计数值,此例选择1 800 Hz进行计数,计数结果为0457),将计数结果放至FPGA寄存器地址,CPU模块可以从该地址中读取频率计数结果,并送至传感器系统[5]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t5.tif>

图5 状态机图[S1,COUNT]

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t6.tif>

图6 16 b计数器

2  测试接口设计

在进行频率计数功能、性能设计时,不仅要考虑到功能、性能的实现,同时也要考虑预期设计要求满足后,如何验证该功能,甚至于在今后的模块功能故障隔离过程中,如何能更快、更准确地找出故障源。因而在FPGA逻辑设计时,将计数控制信号STRT_TIMER(计数功能启动信号)、RST_CNTR(复位计数器信号)、COUNT(门控信号)、RD_TIMER(CPU模块读计数值信号)等关键信号引至FPGA管脚,以便在逻辑仿真、调试或模块调试、维修时信号测量,准确定位故障源。采用FPGA设计能够简化测试接口,仅需将关注的信号引到芯片管脚上,避免了采用其他硬件电路实现,且不必为印制板走线添加复杂度[6]。

3  结  语

本文介绍了一种在接口控制模块上使用预处理电路和FPGA硬件逻辑电路实现频率信号计数功能的方法。该方法避免搭建复杂的硬件电路,降低了硬件设计成本和设计复杂度,提高了频率计数的精确性。该设计不仅能够应用于飞控系统的数据采集、转换、计算,也能够应用于其他需要进行频率转换的数字模块的设计。为需要实现该功能的模块设计提供了一种设计思想和设计方法,减少设计成本和时间,提高开发效率,具有一定的工程实用性。

参考文献

[1] 李云松,宋瑞,雷杰,等.Xilinx FPGA 设计基础(VHDL版)[M].西安:西安电子科技大学出版社,2008.

[2] 黄智伟.FPGA系统设计与实践[M].北京:电子工业出版社,2005.

[3] 郑亚民,董晓丹.可编程逻辑器件开发软件[M].北京:国防工业出版社,2006.

[4] 王金明.Verilog HDL程序设计教程[M].北京:人民邮电出版社,2004.

[5] 刘玲,胡永生.数字信号处理的FPGA实现[M].北京:清华大学出版社,2003.

[6] Altera. Cyclone datasheet [EB/OL]. [2011?03?20]. http://www.eetrend.com/da...00022669.

本设计以对1 800 Hz频率信号进行计数为例,介绍如何实现计数功能。计数器采用16 bit计数器,选择2 MHz采样时钟(选择的采样时钟频率必须远大于待计数频率最大值)。写任意数据到IOC模块的FPGA内寄存器地址,启动频率计数过程。计数控制逻辑中的STRT_TIMER信号有效表示计数过程开始[1]。 计数控制逻辑中RST_CNTR信号清除计数器,并且产生一个门控信号COUNT,该门控信号保持为高,持续时间为两个由低到高的待转换频率信号(TIMER_IN)的上升沿,刚好是一个完整的待计数周期。采用16 bit计数器和2 MHz采样时钟对门控信号COUNT进行计数,得到的值为计数结果。为了防止计数器溢出,计数器值为FF00H时停止计数[2] 。信号时序关系见图2。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t2.tif>

图2 频率计数信号时序关系图

1.3  计数控制信号产生机理及计数过程

STRT_TIMER信号产生原理:CPU模块通过系统总线向IOC模块FPGA内寄存器地址写任意值,启动频率计数功能,启动信号STRT_TIMER发出,STRT_TIMER=(!SEL_IOC & !WR & A15 & A14 & A1 & !DEN)or(!RST_CNTR & STRT_TIMER)。其中SEL_IOC、WR 、DEN为CPU模块向IOC模块发出的片选信号、写信号、数据总线使能信号,A15、A14、A1选择FPGA内寄存器地址C002H。

16 bit计数器清零信号RST_CNTR产生原理:频率计数采用16 bit计数器实现,那么在每个计数任务开始首先需要对计数器清零,启动信号STRT_TIMER发出后(该信号高有效),STRT_TIMER和Timer_IN=0(Timer_IN与2 MHz采样时钟同步)启动测试序列,Timer_IN=0信号同时激活RST_CNTR。该信号产生逻辑如图3所示[3]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t3.tif>

图3 RST_CNTR信号逻辑图

门控信号COUNT产生原理:门控信号是待转换频率信号Timer_IN的一个完整的采样周期长度。用2 MHz采样时钟对门控信号时间长度进行计数,即可得到计数值。当RST_CNTR有效时,清除FPGA中的计数器和STRT_TIMER信号。RST_CNTR=1时状态机器[S1,COUNT]被初始化为状态[0,0](图中R代表RST_CNTR信号,T代表Timer_IN信号),COUNT信号输出逻辑关系见图4。产生COUNT门控信号的状态机,初始状态为[0,1];当Timer_IN变到1时,进入状态[0,1];当Timer_IN变到0时,下一状态成为[1,1];当Timer_IN又变到1时,下一状态成为空闲[1,0];状态机保持在空闲状态,直到启动新的计数周期,COUNT信号状态机图如图5所示[4]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t4.tif>

图4 COUNT门控信号逻辑图

16 b计数器实现:2 MHz采样时钟对COUNT门控信号进行计数,16 b计数器由T触发器实现,计数值达到FF00H时禁止计数功能,防止计数器溢出,计数器见图6。计数器得到的值为计数结果(一个完整的待转换频率信号Timer_IN周期计数值,此例选择1 800 Hz进行计数,计数结果为0457),将计数结果放至FPGA寄存器地址,CPU模块可以从该地址中读取频率计数结果,并送至传感器系统[5]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t5.tif>

图5 状态机图[S1,COUNT]

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t6.tif>

图6 16 b计数器

2  测试接口设计

在进行频率计数功能、性能设计时,不仅要考虑到功能、性能的实现,同时也要考虑预期设计要求满足后,如何验证该功能,甚至于在今后的模块功能故障隔离过程中,如何能更快、更准确地找出故障源。因而在FPGA逻辑设计时,将计数控制信号STRT_TIMER(计数功能启动信号)、RST_CNTR(复位计数器信号)、COUNT(门控信号)、RD_TIMER(CPU模块读计数值信号)等关键信号引至FPGA管脚,以便在逻辑仿真、调试或模块调试、维修时信号测量,准确定位故障源。采用FPGA设计能够简化测试接口,仅需将关注的信号引到芯片管脚上,避免了采用其他硬件电路实现,且不必为印制板走线添加复杂度[6]。

3  结  语

本文介绍了一种在接口控制模块上使用预处理电路和FPGA硬件逻辑电路实现频率信号计数功能的方法。该方法避免搭建复杂的硬件电路,降低了硬件设计成本和设计复杂度,提高了频率计数的精确性。该设计不仅能够应用于飞控系统的数据采集、转换、计算,也能够应用于其他需要进行频率转换的数字模块的设计。为需要实现该功能的模块设计提供了一种设计思想和设计方法,减少设计成本和时间,提高开发效率,具有一定的工程实用性。

参考文献

[1] 李云松,宋瑞,雷杰,等.Xilinx FPGA 设计基础(VHDL版)[M].西安:西安电子科技大学出版社,2008.

[2] 黄智伟.FPGA系统设计与实践[M].北京:电子工业出版社,2005.

[3] 郑亚民,董晓丹.可编程逻辑器件开发软件[M].北京:国防工业出版社,2006.

[4] 王金明.Verilog HDL程序设计教程[M].北京:人民邮电出版社,2004.

[5] 刘玲,胡永生.数字信号处理的FPGA实现[M].北京:清华大学出版社,2003.

[6] Altera. Cyclone datasheet [EB/OL]. [2011?03?20]. http://www.eetrend.com/da...00022669.

本设计以对1 800 Hz频率信号进行计数为例,介绍如何实现计数功能。计数器采用16 bit计数器,选择2 MHz采样时钟(选择的采样时钟频率必须远大于待计数频率最大值)。写任意数据到IOC模块的FPGA内寄存器地址,启动频率计数过程。计数控制逻辑中的STRT_TIMER信号有效表示计数过程开始[1]。 计数控制逻辑中RST_CNTR信号清除计数器,并且产生一个门控信号COUNT,该门控信号保持为高,持续时间为两个由低到高的待转换频率信号(TIMER_IN)的上升沿,刚好是一个完整的待计数周期。采用16 bit计数器和2 MHz采样时钟对门控信号COUNT进行计数,得到的值为计数结果。为了防止计数器溢出,计数器值为FF00H时停止计数[2] 。信号时序关系见图2。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t2.tif>

图2 频率计数信号时序关系图

1.3  计数控制信号产生机理及计数过程

STRT_TIMER信号产生原理:CPU模块通过系统总线向IOC模块FPGA内寄存器地址写任意值,启动频率计数功能,启动信号STRT_TIMER发出,STRT_TIMER=(!SEL_IOC & !WR & A15 & A14 & A1 & !DEN)or(!RST_CNTR & STRT_TIMER)。其中SEL_IOC、WR 、DEN为CPU模块向IOC模块发出的片选信号、写信号、数据总线使能信号,A15、A14、A1选择FPGA内寄存器地址C002H。

16 bit计数器清零信号RST_CNTR产生原理:频率计数采用16 bit计数器实现,那么在每个计数任务开始首先需要对计数器清零,启动信号STRT_TIMER发出后(该信号高有效),STRT_TIMER和Timer_IN=0(Timer_IN与2 MHz采样时钟同步)启动测试序列,Timer_IN=0信号同时激活RST_CNTR。该信号产生逻辑如图3所示[3]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t3.tif>

图3 RST_CNTR信号逻辑图

门控信号COUNT产生原理:门控信号是待转换频率信号Timer_IN的一个完整的采样周期长度。用2 MHz采样时钟对门控信号时间长度进行计数,即可得到计数值。当RST_CNTR有效时,清除FPGA中的计数器和STRT_TIMER信号。RST_CNTR=1时状态机器[S1,COUNT]被初始化为状态[0,0](图中R代表RST_CNTR信号,T代表Timer_IN信号),COUNT信号输出逻辑关系见图4。产生COUNT门控信号的状态机,初始状态为[0,1];当Timer_IN变到1时,进入状态[0,1];当Timer_IN变到0时,下一状态成为[1,1];当Timer_IN又变到1时,下一状态成为空闲[1,0];状态机保持在空闲状态,直到启动新的计数周期,COUNT信号状态机图如图5所示[4]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t4.tif>

图4 COUNT门控信号逻辑图

16 b计数器实现:2 MHz采样时钟对COUNT门控信号进行计数,16 b计数器由T触发器实现,计数值达到FF00H时禁止计数功能,防止计数器溢出,计数器见图6。计数器得到的值为计数结果(一个完整的待转换频率信号Timer_IN周期计数值,此例选择1 800 Hz进行计数,计数结果为0457),将计数结果放至FPGA寄存器地址,CPU模块可以从该地址中读取频率计数结果,并送至传感器系统[5]。

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t5.tif>

图5 状态机图[S1,COUNT]

<\\192.168.6.11\现代电子技术14年37卷第24期\Image\20t6.tif>

图6 16 b计数器

2  测试接口设计

在进行频率计数功能、性能设计时,不仅要考虑到功能、性能的实现,同时也要考虑预期设计要求满足后,如何验证该功能,甚至于在今后的模块功能故障隔离过程中,如何能更快、更准确地找出故障源。因而在FPGA逻辑设计时,将计数控制信号STRT_TIMER(计数功能启动信号)、RST_CNTR(复位计数器信号)、COUNT(门控信号)、RD_TIMER(CPU模块读计数值信号)等关键信号引至FPGA管脚,以便在逻辑仿真、调试或模块调试、维修时信号测量,准确定位故障源。采用FPGA设计能够简化测试接口,仅需将关注的信号引到芯片管脚上,避免了采用其他硬件电路实现,且不必为印制板走线添加复杂度[6]。

3  结  语

本文介绍了一种在接口控制模块上使用预处理电路和FPGA硬件逻辑电路实现频率信号计数功能的方法。该方法避免搭建复杂的硬件电路,降低了硬件设计成本和设计复杂度,提高了频率计数的精确性。该设计不仅能够应用于飞控系统的数据采集、转换、计算,也能够应用于其他需要进行频率转换的数字模块的设计。为需要实现该功能的模块设计提供了一种设计思想和设计方法,减少设计成本和时间,提高开发效率,具有一定的工程实用性。

参考文献

[1] 李云松,宋瑞,雷杰,等.Xilinx FPGA 设计基础(VHDL版)[M].西安:西安电子科技大学出版社,2008.

[2] 黄智伟.FPGA系统设计与实践[M].北京:电子工业出版社,2005.

[3] 郑亚民,董晓丹.可编程逻辑器件开发软件[M].北京:国防工业出版社,2006.

[4] 王金明.Verilog HDL程序设计教程[M].北京:人民邮电出版社,2004.

[5] 刘玲,胡永生.数字信号处理的FPGA实现[M].北京:清华大学出版社,2003.

[6] Altera. Cyclone datasheet [EB/OL]. [2011?03?20]. http://www.eetrend.com/da...00022669.

猜你喜欢
状态机计数器时钟
采用虚拟计数器的电子式膜式燃气表
别样的“时钟”
古代的时钟
基于有限状态机的交会对接飞行任务规划方法
有趣的时钟
时钟会开“花”
计数器竞争冒险及其处理的仿真分析
任意N进制计数器的设计方法
基于单片机的仰卧起坐计数器
FPGA设计中状态机安全性研究