張良浩,孫瑞祥,于安波
(珠海格力電器股份有限公司,廣東珠海,519070)
在電機(jī)驅(qū)動(dòng)應(yīng)用領(lǐng)域,常見的模擬信號采樣功能(ADC)通常集成在MCU中。片內(nèi)多通道ADC工作模式為分時(shí)循環(huán)采樣,因此無法滿足某些高速多路同步的采樣需求。在此類應(yīng)用中,片外ADC芯片(AD7606B)可以更好地提高采樣的同步性和準(zhǔn)確性。AD7606B與DSP28335內(nèi)置ADC的性能對比如表1所示[1~2]。AD7606B為同步采樣、并行傳輸模式;DSP28335內(nèi)置ADC為分時(shí)循環(huán)采樣,串行傳輸模式。在均采用8通道采樣的情況下,AD7606B的傳輸速率,比DSP28335內(nèi)置ADC的傳輸速率快約10倍。
表1 AD7606B與片內(nèi)ADC轉(zhuǎn)換模塊參數(shù)對比表
使用FPGA實(shí)現(xiàn)ADC芯片的控制功能,比起使用傳統(tǒng)MCU可以進(jìn)一步提升模擬數(shù)據(jù)的傳輸效率。使用傳統(tǒng)MCU對ADC芯片控制會(huì)占用MCU的主頻時(shí)鐘,模擬數(shù)據(jù)的傳輸效率會(huì)受到接口讀取效率和主頻處理效率的限制;而FPGA本身為可編程邏輯型器件,其對信號的處理是通過對每個(gè)基本邏輯單元(CLB)的構(gòu)建實(shí)現(xiàn),因此其信號處理的速度與并行度要更為出色[3]。
為了最大限度的提升本方案的數(shù)據(jù)傳輸效率和準(zhǔn)確性,AD7606B的設(shè)置采用并行接口+軟件模式。FPGA與AD7606B的硬件電路連接圖如圖1所示。
圖1 FPGA與AD7606B的硬件電路連接圖
其中,OS2~OS0為硬件模式下過采樣設(shè)置引腳,軟件模式下全部置1;PAR/SER SEL為并行/串行接口選擇輸入,并行接口需置0;STBY和RANGE在軟件模式下被忽略均置1;REF SELECT為內(nèi)部/外部基準(zhǔn)電壓選擇邏輯輸入,置1選擇并使能內(nèi)部基準(zhǔn)電壓模式。AD7606B的其余各芯片引腳的功能及描述如表2所示。
表2 AD7606B通信接口功能表
軟件模式下AD7606B的控制器分為兩類:一是ADC控制器,控制AD7606B的模擬數(shù)據(jù)采集及傳輸;二是寄存器控制器,用于FPGA對AD7606B的寄存器進(jìn)行讀寫操作。
并行接口模式下AD7606B的ADC讀取時(shí)序圖如圖2所示。當(dāng)AD7606B上電后,在10ms后,F(xiàn)PGA控制RESET信號上升。RESET保持至少3000ns高電平,即完全復(fù)位。復(fù)位完成后,經(jīng)過253ns后,AD7606B進(jìn)入空閑狀態(tài)。此部分屬于上電時(shí)序,不計(jì)入ADC控制器狀態(tài)機(jī)的設(shè)計(jì)中。
圖2 并行接口ADC讀取時(shí)序圖
在空閑狀態(tài)下,F(xiàn)PGA控制CONVEST發(fā)出上升沿,AD7606B的8個(gè)模擬采樣通道同時(shí)進(jìn)行采樣。CONVEST為轉(zhuǎn)換開始輸入信號,靜默時(shí)保持高電平信號。CONVEST上升沿信號后,AD7606B給FPGA反饋BUSY高電平信號。BUSY維持高電平的時(shí)間內(nèi),AD7606B的8通道執(zhí)行模擬數(shù)據(jù)轉(zhuǎn)換。轉(zhuǎn)換完成后,BUSY變?yōu)榈碗娖叫盘?,轉(zhuǎn)換時(shí)間在0.65~0.85μs之間。通常情況下,應(yīng)在AD7606B數(shù)據(jù)轉(zhuǎn)換完成后,F(xiàn)PGA再對AD7606B進(jìn)行數(shù)據(jù)讀取,即CSn信號拉低。
在數(shù)據(jù)讀取過程中,CSn保持低電平,F(xiàn)PGA通過依次發(fā)出8次RDn下降沿信號,AD7606B依次輸出從1通道到8通道的ADC數(shù)據(jù),RDn信號的周期需滿足最小保持時(shí)間。并且AD7606B在輸出1通道的轉(zhuǎn)換值時(shí),會(huì)發(fā)出高電平的FRSTDATA 信號(即1通道輸出標(biāo)志位),意在告知FPGA當(dāng)前輸出通道為1通道。完成8個(gè)通道的數(shù)據(jù)讀取后,片選信號(CSn)拉高。至此完成了一個(gè)完整的AD7606B數(shù)據(jù)轉(zhuǎn)換及讀取流程,AD7606B再次進(jìn)入空閑狀態(tài)。
由上述分析,ADC控制器狀態(tài)機(jī)可分為6個(gè)狀態(tài):IDLE、CONVST、BUSY、READ、READ_EDGE和RESPONSE,各狀態(tài)間的轉(zhuǎn)換關(guān)系如圖3所示[6]。
圖3 ADC模式狀態(tài)機(jī)轉(zhuǎn)換圖
IDLE:空閑狀態(tài)。所有信號及變量復(fù)位,得到控制指令,進(jìn)入轉(zhuǎn)換開始狀態(tài);
CONVST:轉(zhuǎn)換開始狀態(tài)。FPGA拉低CONVST信號,再拉高CONVST信號。得到AD7606B反饋的BUSY高電平信號,進(jìn)入忙碌狀態(tài);
BUSY:忙碌狀態(tài)。得到AD7606B反饋的BUSY低電平信號,進(jìn)入讀取狀態(tài);
READ:讀取狀態(tài)。FPGA拉低CSn和RDn信號,將16bit數(shù)據(jù)讀入數(shù)組中,并進(jìn)入讀取邊沿狀態(tài);
READ_EDGE:讀取邊沿狀態(tài)。FPGA拉高RDn信號,并邊沿計(jì)數(shù)加1。如果邊沿計(jì)數(shù)小于8,進(jìn)入讀取狀態(tài);如果邊沿計(jì)數(shù)為8,進(jìn)入應(yīng)答狀態(tài);
RESPONSE:應(yīng)答狀態(tài)。應(yīng)答狀態(tài)變量置1,并進(jìn)入空閑狀態(tài)。
AD7606B默認(rèn)工作模式為ADC模式,需要通過讀任意寄存器操作進(jìn)入寄存器模式;當(dāng)需要恢復(fù)到ADC模式時(shí),需寫入地址0x00。AD7606B的寄存器讀寫時(shí)序圖如圖4所示,包括讀寄存器、寫寄存器和退出寄存器模式三部分。
圖4 并行接口寄存器讀寫時(shí)序圖
寄存器讀取通過兩幀執(zhí)行:首先將讀取命令發(fā)送到AD7606B,其次是AD7606B輸出寄存器內(nèi)容。
在第一幀中:
CSn和WRn置0;
位DB15置1;
位DB[14:8]為讀取寄存器地址;
位DB[7:0]被忽略。
在第二幀中:
CSn和RDn置0;
位DB15置0;
位DB[14:8]為被讀取寄存器地址;
位DB[7:0]為讀取數(shù)據(jù)。
寄存器寫命令通過單幀執(zhí)行:
CSn和WRn置0;
位DB15置0;
位DB[14:8]為寫入寄存器地址;
位DB[7:0]為寫入數(shù)據(jù)。
退出寄存器模式命令同寄存器寫入命令時(shí)序格式相同,需寫入地址0x00,數(shù)據(jù)被忽略。
由上述分析,寄存器控制器狀態(tài)機(jī)可分為10個(gè)狀態(tài):IDLE、ADDRESS、ADDRESS_EDGE、READ、READ_EDGE、WRITE、WRITE_EDGE、EXIT、EXIT_EDGE和RESPONSE。各狀態(tài)間的轉(zhuǎn)換關(guān)系如圖5所示。
圖5 寄存器模式狀態(tài)機(jī)轉(zhuǎn)換圖
IDLE:空閑狀態(tài)。所有信號及變量復(fù)位,得到控制指令,進(jìn)入寄存器讀寫狀態(tài);
ADDRESS:地址狀態(tài)。FPGA拉低CSn和WRn信號,并對數(shù)據(jù)線寫入{1'b1,address[6:0], 8'hxx},進(jìn)入地址邊沿狀態(tài);
ADDRESS_EDGE:地 址邊沿狀態(tài)。FPGA拉高WRn信號,并地址邊沿計(jì)數(shù)加1,進(jìn)入讀取狀態(tài);
READ:讀取狀態(tài)。FPGA拉低RDn信號,AD7606B反饋16位并行數(shù)據(jù)。FPGA讀取其中低8位所讀寄存器數(shù)據(jù),進(jìn)入讀取邊沿狀態(tài);
READ_EDGE:讀 取 邊沿 狀 態(tài)。FPGA拉 高RDn信號。如果地址邊沿計(jì)數(shù)小于n1,進(jìn)入地址狀態(tài);如果等于n1,則進(jìn)入寫入狀態(tài);
WRITE:寫 入 狀 態(tài)。FPGA拉 低WRn信號,并對數(shù)據(jù)線寫入{1'b0,address[6:0],data[7:0]},進(jìn)入寫入邊沿狀態(tài);
WRITE_EDGE:寫入邊沿狀態(tài)。FPGA拉高WRn信號,并寫入邊沿計(jì)數(shù)加1。如果寫入邊沿計(jì)數(shù)小于n2,進(jìn)入寫入狀態(tài);如果邊沿計(jì)數(shù)為n2,進(jìn)入退出狀態(tài);
EXIT:退出狀態(tài)。FPGA拉低WRn信號,并對數(shù)據(jù)線寫入{1'b0,7'h00,8'hxx},進(jìn)入退出邊沿狀態(tài);
EXIT_EDGE:退 出 邊 沿 狀 態(tài)。FPGA拉高WRn信號,進(jìn)入應(yīng)答狀態(tài);
RESPONSE:應(yīng)答狀態(tài)。應(yīng)答狀態(tài)變量置1,并進(jìn)入空閑狀態(tài)。
本文FPGA開發(fā)使用的Quartus開發(fā)環(huán)境,其內(nèi)部集成了SignalTap II邏輯分析儀,用于分析數(shù)據(jù)變化。SignalTap II是利用FPGA內(nèi)部的邏輯單元和RAM資源實(shí)時(shí)捕捉和顯示信號[7]。與Modelsim仿真不同在于,SignalTap II需要與硬件結(jié)合,程序在FPGA中運(yùn)行時(shí)實(shí)時(shí)顯示FPGA各引腳及內(nèi)部信號的測試數(shù)據(jù)。本文通過SignalTap II來測試所述狀態(tài)機(jī)的工作波形,進(jìn)而驗(yàn)證狀態(tài)機(jī)設(shè)計(jì)的正確性。
FPGA在ADC模式下的測試信號波形如圖6、圖7所示。可以看出各控制信號線和數(shù)據(jù)信號線的工作時(shí)序與圖2相一致。在數(shù)據(jù)讀取段的局部波形圖7中,可以更加清楚地看到各信號間的時(shí)間間隔。程序中所用時(shí)鐘為50MHz,由此計(jì)算出的各信號的建立時(shí)間、保持時(shí)間等時(shí)間間隔均滿足最小時(shí)限。
圖6 ADC模式下測試信號波形圖
圖7 ADC模式下測試信號局部波形圖
寄存器模式狀態(tài)機(jī)的測試波形如圖8所示。測試波形由一次讀取、一次寫入和退出寄存器三部分組成,各控制信號和數(shù)據(jù)信號的時(shí)序均與圖4一致。讀取寄存器地址0x02,讀取數(shù)據(jù)為0x08,為該寄存器的默認(rèn)數(shù)據(jù)。寫入寄存器地址0x03,寫入數(shù)據(jù)為0x22,該數(shù)據(jù)設(shè)置了AD7606B的通道1、2的輸入范圍為±10V。退出寄存器地址0x00,數(shù)據(jù)位忽略。
圖8 寄存器下測試信號波形圖
本文通過對AD7606B的并行接口通信時(shí)序分析和狀態(tài)機(jī)的設(shè)計(jì),實(shí)現(xiàn)了AD7606B控制器功能。經(jīng)過對通信關(guān)鍵信號測試,結(jié)果符合設(shè)計(jì)預(yù)期。本文中所設(shè)計(jì)的AD7606B控制器可以滿足各類電機(jī)控制所需的模擬信號采集需求,并且易于廣泛移植。