超高速摄影机电控系统设计

  作者:胡安平 时间:2013-08-28来源:电子产品世界

  在XC95288内部电路中,F0、F1输入端口分别输入标准脉冲和待测的速度脉冲信号(经过整形放大以后的信号),计数器0和1分别对标准脉冲F0和待测信号F1进行计数,锁存器0和1分别对计数器0和1的计数值进行保存,16位的输入端口NP作为预置闸门时间的设定端口,设其输入值为NP,则预置闸门时间T0为T0=NP/f0

  在电路刚开始工作时,由清零信号CLR对所有的计数器、锁存器和D触发器清零。这样,计数器0的计数值NN0的初值为0,故此时NP>NN0,比较器输出为1,但此时DFF0触发器的输出F2仍保持此初值0,由于F2作用在计数器0和1的使能端,此时计数器没有开始计数,直到信号F1的上升沿到来后,DFF0触发器的输出F2才翻转为1,允许两计数器计数。随着计数值的增加,当NN0>NP时,比较器输出等于0,不过此时两个计数器仍在计数,直到信号F1的又一上升沿到来后,F2=0,两个计数器都停止计数,利用F2的下降沿(F3的上升沿)将此时的计数值NN0和NN1分别通过锁存器0和1锁存起来。然后利用此时F2=0,经D1触发器延时到信号F0的上升沿到来后,对计数器0、1清零。延时清零的原因是为了避免锁存器锁存数据与计数器清零同时进行,从而使存储数据出错。但由于延时清零,使实际门控信号的上升沿比速度信号F0的上升沿滞后,滞后时间为信号F0的一个周期。为使检测结果准确,将计数器0的计数值加1即可。F2实质上就是实际门控信号。

  在设计电路时,需要考虑计数器溢出的情况。例如,在电机转速很慢的情况下,两个速度脉冲信号上升沿间的时间间隔较长,这使实际闸门时间变得很长,在该段时间内,计数器0可能会出现溢出情况。在该情况下,可用3种方法来解决计数:一是增加计数器0的位数;二是通过增加计数器来对溢出次数另行读数;三是一旦计数器溢出,便认为此时电机的转速约等于0。这里采用的方法是:在电机转速很慢的时候延时2秒种后再进行测量,而且计数器都采用16位宽度。

  单片机ATMega16L的功能设计

  ATMega16L单片机是ATMEL公司生产的高性能单片机,采用精简指令集,具有预取指令功能,指令可以在一个时钟周期内执行,处理速度快。在高速摄影电控系统中,ATMega16L单片机负责读取XC95288的电机测速值,处理控制内外信息的输入输出接口,并与上位控制计算机通过RS-485接口进行信息交互。

在软件编程时,利用ATMega16L单片机定时/计数器与系统时钟的预定比例分频器,可以获得很高分辨率的时间间隔控制精度,例如,单片机系统采用8MHz的晶振工作,采用8分频,则时间控制的间隔可以达到微秒,完全能够实现超高速摄影中要求的0.1微秒的控制精度。

  这里给出一个ATMega16L单片机读取XC95288的电机测速值的C语言子程序。

  void FX_calc(void)
  {
          //计算Nb数值
                F_SEL_NB();
  NB = ReadFromCPLD()+1;
  NB_temp=(uint64_t)NB;
  //计算Nx数值
  F_SEL_NX();
  NX = ReadFromCPLD();
  NX_temp=(uint64_t)NX;

  if(NB_temp)
  {
  //计算Fx数值
          /*32位时x不能超过0xd6=214.75=4,294,967,295/20,000,000
          一定要考虑到溢出问题:FF_FF_FF_FF=4,294,967,275, FB=20,000,000
          */
          FX_temp=( (uint64_t) (FB* NX_temp)/NB_temp ); //20000000*x/2000
          FX = (uint32_t) FX_temp;
                }
          usart_send_dword(FX);
          _delay_ms(10);
  }

  结束语

  根据以上电路设计的转镜式超高速摄影机电控系统,已在某系统超高速摄影机中得到应用,系统工作良好。

  参考文献:
  [1] 王杰等.Xinlinx FPGA/CPLD设计手册[M].北京:人民邮电出版社,2011:242
  [2] 刘建清等.轻松玩转AVR单片机C语言[M].北京:北京航空航天大学出版社,2011:90

1 2 3

关键词: 高速摄影 单片机 CPLD 转速测量 电路控制 201309

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版