变形镜驱动器驱动电路的设计

李正东+周志强+袁学文+刘章文
摘 要: 为了实现多通道变形镜驱动和控制,设计由6组模块组成的变形镜驱动器。其中每块模块包括硬件部分和软件部分,硬件部分设计包含电源设计、接口设计、D/A转换及放大设计和FPGA设计,其旨在接收驱动电压组成的矢量数据,并把这些数字信号经D/A芯片转换成模拟电压,随后经射随和高压放大电路输出,作为变形镜陶瓷单元的驱动电压。软件部分设计包含FPGA设计和NIOS设计,其中FPGA从矢量驱动数据中提取属于该驱动模块16个通道的驱动电压,并把每个通道的驱动电压,按D/A转换芯片的时序要求,以串行方式把数据发送给对应的D/A芯片,完成对变形镜陶瓷单元驱动电压的输出。NIOS程序旨在实现对上位机指令的处理和反馈,完成对驱动模块参数的配置、调试和保存以及数据源切换、通道电压设置等功能。实验表明,变形镜驱动器不仅能以200 f/s的速率对96单元变形的镜波前校正功能进行控制,而且能够正确完成与上位机的信息交互。
关键词: 变形镜; 驱动电路; 硬件设计; 软件设计; FPGA; NIOS系统
中图分类号: TN79+2?34; TN247 文献标识码: A 文章编号: 1004?373X(2017)24?0169?06
Abstract: In order to drive and control the multi?channel deformable mirror, a deformable mirror driver composed of six?group modules was designed. The each module is composed of hardware and software. The hardware design includes the power supply design, interface design, D/A conversion and amplification design, and FPGA design, which is aimed at receiving the vector data composed of drive voltage, and converting the digital signals into the analog voltage through D/A chip. And then the analog voltage output by the emitter follower and high?voltage amplifying circuit is taken as the drive voltage of the deformable mirror ceramic unit. The software design includes the FPGA design and NIOS design. The 16?channel drive voltage of the drive module is extracted in the vector drive data through FPGA, and sent to the corresponding D/A chip in the serial mode according to the time serial requirement, so as to output the drive voltage of the deformable mirror ceramic unit. The NIOS program is aimed to process and feed the command from the upper computer; and realize the configuration, debugging and saving of the drive module parameters, data source switchover and channel voltage setting. The experimental results show that the deformable mirror driver can control the wavefront correction function of the 96?unit deformable mirror with the frequency of 200 f/s, and realize the information interaction with the upper computer correctly.
Keywords: deformable mirror; driver circuit; hardware design; software design; FPGA; NIOS system
0 引 言
主动光学系统的关键器件是由压电陶瓷单元组成的变形镜,而变形镜的工作原理是通过改变加在压电陶瓷单元上的电压,从而改变压电陶瓷单元的形变,最终达到改善光束测量的目的。变形镜驱动器[1?2]是负责将一组电压值构成的矢量数据施加到变形镜上,其中每一路电压负责驱动变形镜的一个陶瓷单元。考虑到陶瓷单元驱动电压较高以及电路板的散热要求,变形镜驱动器集成了六块驱动模块,其中每块驱动模块实现16通道驱动电压的输出,这些模块通过CPCI物理总线集成在一个机箱内,并通过一个控制模块实现整个变形镜驱动器与上位机、图像处理板卡等之间的通信。在系统工作时,控制模块首先接收来自于上位机或图像处理板卡的驱动数据矢量,并发往所有挂在CPCI总线上的驱动模块,每个驱动模块根据各自的地址,提取属于自己的驱动数据,经过D/A转换和放大,实现驱动电压的输出,协同完成对96单元变形镜的驱动。
具体来说,其中的总线电路板相当于整个变形镜驱动器的主板,其提供了整个变形镜驱动器基本的CPCI总线,电源模块正是通过CPCI物理总线为变形镜驱动器的控制模块、图像处理模块和六块驱动模块供电,控制模块、图像处理模块和六块驱动模块之间的控制信号、数据信号以及反馈信号也是通过该CPCI总线实现互联。其中的电源模块采用一款成熟的商业化电源模块来实现,其有四组输出端子,分别输出150 V,-50 V,15 V,-15 V四种电压,其中150 V和-50 V为六块驱动模块内部的末级高压放大器提供正、负电源,15 V电源通过CPCI物理总线为控制模块、图像处理模块和六块驱动模块提供工作电源,-15 V结合15 V为驱动模块内含的前级放大器提供负、正电源;其中的图像处理模块对图像数据处理完成后,得出一组驱动变形镜所需的电压驱动矢量数据,并通过CPCI总线发送到控制模块,再经过控制模块的处理,发送到驱动模块,最终通过驱动模块的输出电压控制变形镜的形变,实现光束质量的控制。变形镜驱动器原理框图如图1所示。
1 变形镜驱动器驱动模块的硬件设计
一套变形镜驱动器内含6块驱动模块,每块驱动模块都挂在CPCI总线上,其设计电路及运行程序完全一致,不同之处,在于系统上电后,每块驱动模块读取CPCI底板上靠近本模块的拔码开关,用此作为自己的ID号来标识自己。所有驱动模块的硬件框架如图2所示,其主要框架包括4个部分,分别为电源部分、接口部分、D/A转换及放大部分和FPGA部分,其中电源部分包括来自CPCI总线的4组电源,其中15 V,-15 V两组电源作为驱动模块D/A转换芯片的工作电压,150 V,-50 V两组电源作为末级放大器的供电电源。15 V电源经过不同的电压转换芯片给FPGA及其他接口芯片供电,接口部分包括接收来自CPCI物理总线的输入接口以及发往CPCI物理总线的输出接口,A/D转换及放大部分主要实现对来自对驱动矢量或者单通道指令的数字信号进行D/A转换及放大,FPGA部分实现对整个模块工作流程的控制,完成驱动模块经由控制模块与上位机的通信,以及控制各通道的输出电压对变形镜进行驱动。对于电源部分,15 V,-15 V,150 V,-50 V经过滤波以及瞬态过冲抑制保护电路后,分别作为D/A转换芯片、隔离电路和末级模拟信号放大器的工作电源,15 V电源再经过两片LMZ14201电压转换芯片,分别输出5.0 V 和3.3 V电压,5.0 V电压作为通过CPCI物理总线负责与控制模块通信的RS 485接口芯片的工作电压,3.3 V电压作为模块中FPGA的I/O电压和NIOS所需的SDRAM等其他接口芯片的工作电压,其经过NCP5661?1.2芯片输出1.2 V的电压用来作为FPGA的内核电压,图3给出了3.3 V电压的设计原理图。
接口部分的设计分为三个部分,即来自CPCI总线的输入接口、发往CPCI总线的输出接口和面板接口,其中输入接口是指并行总线設计,它是采用全硬件方式,以差分信号方式接收经由CPCI总线,来自控制模块发送过来的驱动矢量数据,并把这些驱动矢量数据发往FPGA,此功能主要由DS91M040芯片来实现,电路设计上,与RS 485总线设计一致,即DS91M040的单端信号,包括数据信号和控制信号接入FPGA,其4对差分信号均接到CPCI总线上,从而提高总线数据传输的速度和可靠性,数据传输协议自行制定,图4仅给出总线电路的设计。输出接口是把驱动模块的16个高压模拟放大器输出端,连接到CPCI物理总线作为输出端子,其输出电压在-20~150 V之间,每个端子对应变形镜的一个陶瓷单元。CPCI物理总线上还包含RS 485总线的I/O设计,它主要用来实现驱动模块和控制模块在调试工作模式下的信息交互,即接收经由控制模块来自上位机的指令,或将本驱动模块的状态信息经由控制模块回传给上位机,尤其在末级放大器输出通道的参数进行标定,上位机通道切换、通道电压设置等功能的实现均是通过RS 485接口发往驱动模块的,此功能由SP485EL芯片来实现,控制模块为RS 485总线的主设备,驱动模块为RS 485总线的从设备,其中SP485EL的一对差分信号,连接至CPCI总线上,其他单端信号连接到FPGA。面板接口设计则相对比较简单,它主要用于显示驱动模块的工作状态,包含驱动模块的3.3 V电源状态显示、通信状态显示、故障显示以及蜂鸣器报警设计。
A/D转换及放大部分用来实现驱动电压的数字信号的D/A转换和放大,此功能主要由AD5360,ADG5434和PA343三类芯片来实现,其中AD5360为串行工作方式的16通道D/A转换芯片,数据输入为16 b的数字信号,输出为-10~10 V的模拟电压。D/A转换时,FPGA程序将芯片的2 b模式标识,6 b通道地址,以及16 b电压数据组成一个数据包,按照AD5360芯片要求的时序串行写入,由此实现通道的电压输出,其中通道地址的改变可以实现通道的切换;ADG5434芯片相当于集成了4个通道的射随器芯片,它主要用来实现前后电路的隔离功能,防止后级高压放大电路对前级电路造成干扰,由于每块芯片含有4个通道,所以每块驱动模块设计了4块ADG5434芯片;另外,驱动模块还设计了16块PA343芯片,每块PA343芯片的输出端通过CPCI端子直接接入变形镜的陶瓷单元,它是一款高精度、高电压的模拟信号放大器,其容许的最大输出电压可到300 V以上,这里将PA343的放大倍数设置为12倍,由于D/A转换芯片输出的最高模拟电压为10 V,所以PA343输出的最大电压为120 V,其放大电路如图5所示。
FPGA是整个控制模块的核心部件,用于实现对驱动模块所有指令和数据的控制和交互,FPGA部分的设计主要包含FPGA电源设计、时钟设计、JTAG口设计、配置芯片设计和存储器设计,其中存储器包含一片SDRAM芯片和一片EPCS16,而这里的EPCS16作为EPROM不同于FPGA的配置芯片,它主要存储本驱动模块所有末级高压放大器的配置参数等。上电后,NIOS系统先要从该EPROM中读取参数,并利用这些参数进行系统的初始化,这些工作完成后,矢量数据通道都切换正常后,系统才进入工作模式。
2 变形镜驱动器驱动模块的软件设计
驱动模块的软件设计包含两个部分:一部分是FPGA程序的设计;另一部分是NIOS程序设计。FPGA程序的主要目的是当变形镜驱动器工作在运行模式时,接收经由CPCI总线来自驱动模块的驱动矢量数据,一帧驱动矢量接收完毕后,并根据本模块的地址,从96个驱动矢量数据中提取属于本模块的16个输出通道的电压数据,再根据AD5360芯片的时序要求,依次把不同通道的数据包串行输出到AD5360芯片,实现16通道模拟电压的输出,以供后续放大电路放大使用。NIOS程序的主要目的是当变形镜驱动器工作在调试模式时,通过RS 485总线,接收并解析来自控制模块的指令或数据,实现对驱动模块相关硬件的切换,或者单个通道输出电压的设置,以及放大器通道参数的保存等,同时还根据上位机的指令,收集本驱动模块的状态信息并回传,下面分别介绍FPGA和NIOS程序的设计。
2.1 FPGA的程序设计
驱动模块利用NIOS程序接收来自RS 485接口的上位机指令,而通过FPGA的高速并行接口接收来自控制模块的驱动矢量数据,FPGA程序的逻辑框图如图6所示。
CPCI总线上驱动矢量数据的传输,利用高速并行接口的四对差分线来实现,其中一对差分线作为时钟信号,另外三对差分线作为数据信号,传输过程以字节为单位进行传输,即在每个字节的最高位前填一个0,组成9 b数据,依据高位先传,低位后传的原则实现传输,这样一个字节的数据需要3个时钟周期完成传输。在1帧数据传输时,首先在最先的6个时钟周期传输两组同步信号,即“111_111_111”和“111_010_101”,然后再开始以字节为单位传输1帧的驱动矢量数据,其中每帧驱动矢量数据包含96个字,每个字包含2 B,其数值大小代表变形镜对应陶瓷单元的驱动电压值,其传输过程采用小端方式传输。
驱动矢量数据的来源有两个:一个来源为矢量数据接收和传输模块发送过来的;另一个来源为NIOS系统发出的16个字组成的驱动矢量。在系统工作于调试模式时,驱动矢量数据由NIOS系统给出,此时NIOS系统只给出16个字的数据,由NIOS系统直接写入存储容量为16个字的DPRAM2。当系统工作于运行模式时,驱动矢量数据由驱动矢量接收和存储模块提供,这种情况下,为了提高系统的带宽,图6中的DPRAM1设计为512 B的双口RAM,即256个字,划分为A,B两个半区,分别为128个字,读写操作均采用乒乓操作。当系统开始工作时,驱动矢量接收和存储模块首先检查是否存在帧同步信号,如果帧同步信号正确,则连续接收随后的96个驱动矢量数据,并把这些数据写入A区。当A区数据写操作完成时,驱动矢量接收和存储模块通知后续相关模块A区写操作完成,同时等待并准备将下一帧的驱动矢量数据写入B区,后续相关模块收到驅动矢量接收和存储模块A区写完成信号后,从A区读取驱动矢量数据,再进行后续操作,其FPGA接口设计如图7所示。
图6中的数据源切换模块,是依据NIOS系统发出的指令,在两种驱动矢量数据源之间进行切换,从而实现数据通道选择,并把本模块需要的16字驱动数据写入DPRAM5中,尤其当选择来自高速并行接口的驱动矢量时,数据源切换模块还要根据本模块的地址映射,从96个字的驱动矢量中,选择属于本驱动模块的16个字的驱动矢量。当然NIOS系统发出什么指令又依赖于经由控制模块、RS 485接口来自上位机的指令,缺省情况下,系统工作于运行模式。D/A转换控制模块接收到数据源切换模块发出的写完成信号后,每次从DPRAM5中读出驱动矢量,并按照芯片AD5360的时序要求,写入本芯片,依次对本模块的每个通道实现D/A转换,其程序设计使用状态机实现,具体的流程图如图8所示。
图6中的DPRAM3用来存储需要监视的通道,通过NIOS系统,可以利用DPRAM3存储数据的数值,将相关通道的电压信号输出,供示波器显示。DPRAM4用来存储本驱动模块的地址映射数据,即用来定位并提取本驱动模块16个通道的电压数据在96个驱动矢量中的具体位置。
2.2 NIOS的设计
NIOS的设计包括QSYS组件定制和程序设计[3?4],QSYS组件定制如图9所示。其中除了一些必要的JTAG、定时器、配置存储器等内核外,还包含其他一些内核,具体介绍如下。
在NIOS系统中,clk_0为处理器内核,onchip_ram_descriptor为片内存储器内核,用于存储程序代码,在系统中设置其为复位地址,sdram_0为SDRAM控制器内核,它用于实现和外部SDRAM的通信,从而为应用程序提供运行空间,po_0为32位的并行输入/输出类型内核,它用于实现对输入、输出I/O的电平控制,它不仅通过FPGA,在面板显示系统通信、报警等工作状态,而且还通过FPGA,实现对驱动矢量数据源的选通切换、中断禁止等功能。epcs_flash_controller_0为EPCS内核,在系统中作为EPROM使用,用于存储程序的配置参数,如通道映射等,dpram_ChMap,dpram_DavMonitor和dpram_DAV均为双口RAM内核,其中dpram_ChMap实现与FPGA中DPRAM4的通信,NIOS系统借此将本驱动模块的通道映射数据写入到DPRAM4中,FPGA程序再据此从帧驱动矢量数据中读取对应本模块的16通道的驱动电压数据。dpram_DavMonitor实现与FPGA中DPRAM3的通信,NIOS系统借此把本驱动模块中所要监控的通道写入到DPRAM3中,FPGA程序以此把相关通道的状态和数据控制输出给外界示波器监视。dpram_DAV实现与FPGA中DPRAM2的通信,在调试状态下,NIOS系统借此将本驱动模块的16个通道电压值,写入到DPRAM2中,FPGA程序从DPRAM2中读出这些数据,并驱动本驱动模块的16个输出通道,uart_0为串口内核。NIOS系统借此实现和RS 485接口芯片的通信,并经由CPCI物理总线,实现与控制模块的通信,并将本驱动模块的状态参数返回给上位机,以上构成了NIOS系统的内核设计。NIOS程序首先利用HardwareInit()函数进行硬件初始化,其中包括对po_0的初始化,将部分连接到FPGA中的PIO引脚电平设置成禁止外部中断的状态,对uart_0的初始化、定时器的初始化以及dpram_ChMap,dpram_DavMonitor和dpram_DAV三个双口RAM的初始化等,再利用SoftwareInit()函数进行系统的软件初始化,读取EPROM中存储各个末级高压放大器参数进行配置,并从CPCI主板读取本驱动模块的板卡号。然后生成地址映射,且写入DPRAM4中,供FPGA程序使用,使能外部中断,程序进入主循环。由于NIOS系统主要用于调试模式,所以程序主循环体内,主要是检查是否新的有来自串口uart_0的字符串指令,若有新的字符串指令,则调用procNetCommand()对新的字符串指令进行处理。
字符串指令大体分为三类:一类为set类命令,包括配置参数中电压极值设置、通道映射设置、单通道电压设置与驱动矢量数据切换等;一类为get类指令,这类指令主要是为了确认set类命令执行结果是否正确而设置的,基本对应着set指令;最后一类指令为其他指令,如save指令,这个指令的主要目的是因为驱动模块每个通道的末级电压放大器含有两个参数,这些参数需在单通道电压调试模式下通过调试获得,并最终通过控制模块的save命令将这些参数固化到相应驱动模块的EPROM中。例如指令,其中:“”为字符串指令的首尾标志;“0.0”表示指令接收方为所有驱动模块;“set_vec_source”表示本指令是设置驱动矢量数据的来源;“0”表示驱动矢量源来自图像处理模块;“1”表示驱动矢量源来自NIOS系统的DPRAM3。又如,其中:“0.2”表示操作的对象为第1个机箱的第2个驱动模块;“set_DA”表示本指令是设置单通道的电压值;“12=43 525”表示将本驱动模块的12通道的电压设置为43 525(65 535对应电压最大值),这个通道映射为驱动器系统的第28号通道,即(2-1)×16+12=28。相反表示获取驱动矢量的数据源,表示获取第28号通道的设置电压值。这些指令执行完成后,再将相关的反馈信息打包,再利用sendCommandUpper()函数,通过RS 485接口反馈给控制模块,NIOS系统的主函数流程图如图10所示。
3 驱动器驱动模块的实验
根据上述设计原理,研制了6块变形镜驱动器驱动模块,并结合控制模块,完成了系统集成,并进行了带陶瓷负载的集成实验,软件功能如与上位机的通信功能、通道切换等均达到设计目的,通道输出电压的實验结果如图11所示。由图11可知,驱动模块在满程驱动陶瓷单元,即加载电压峰峰值接近150 V(-30~120 V)的情况下,陶瓷单元的往复形变频率接近200 Hz,上升沿时间仅2.94 ms,满足了系统的要求。
4 结 论
根据上述设计原理,研制了集成在96通道变形镜驱动器内的控制电路板。该电路板不仅能够以200 f/s的速率正确接收并发送来自SPI的驱动矢量数据,而且能够正确收发来自上位机网口或者串口的控制指令,实现单通道与驱动矢量的切换、驱动矢量数据源的切换、单通道电压设置、放大器参数调试和保存以及通道数据读取、回传等功能,达到了预定的设计目标。当然,相对变形镜的响应速度而言,如何在后续工作中进一步提高系统带宽,提高数据频率仍有许多工作要做。
参考文献
[1] 李正东,袁学文,周志强,等.变形镜驱动器参数自动标定系统的设计[J].计算机测量与控制,2016,24(10):150?153.
[2] 刘章文,李正东,周志强,等.基于模糊控制的自适应光学校正技术[J].物理学报,2016,65(1):131?138.
[3] 卢毅,赖杰.VHDL与数字电路设计[M].北京:北京航空航天大学出版社,2001.
[4] 李兰英.NIOS嵌入式SOPC设计原理及应用[M].北京:北京航空航天大学出版社,2006.
[5] 朱晓锦,曹浩,陆美玉,等.基于PA95功放芯片的压电功率放大器开发[J].压电与声光,2008,30(5):561?563.
[6] 王慧,宫赤坤,王宏峰.基于PA95的新型压电陶瓷驱动电源[J].微计算机信息,2011,27(12):58?59.
[7] LABROSSE J J.嵌入式实时操作系统μC/OS[M].邵贝贝,宫辉,译.北京:北京航空航天大学出版社,2012.
[8] 郑宇军,石海鹏,王卫红,等.C#语言程序设计基础[M].3版.北京:清华大学出版社,2014.