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

2013-09-25 17:22 来源:互联网 作者:洛小辰

在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 转速测量 电路控制

相关阅读

暂无数据

一周热门