超高速攝影機電控系統設計
在XC95288內部電路中,F0、F1輸入端口分別輸入標準脈沖和待測的速度脈沖信號(經過整形放大以后的信號),計數器0和1分別對標準脈沖F0和待測信號F1進行計數,鎖存器0和1分別對計數器0和1的計數值進行保存,16位的輸入端口NP作為預置閘門時間的設定端口,設其輸入值為NP,則預置閘門時間T0為T0=NP/f0。
本文引用地址:http://www.104case.com/article/164397.htm在電路剛開始工作時,由清零信號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分頻,則時間控制的間隔可以達到
這里給出一個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
評論