磁懸浮軸承控制器中MAX115與DSP的接口設(shè)計(jì)
摘 要: 本文主要討論了一種快速多通道12位ADC MAX115在磁懸浮軸承控制系統(tǒng)中的應(yīng)用,詳細(xì)介紹了MAX115的功能特點(diǎn)和工作過程,同時(shí)給出了MAX115與DSP(TMS320F240)之間的硬件接口電路和數(shù)據(jù)采集程序。
關(guān)鍵詞: MAX115;數(shù)據(jù)采集;TMS320F240
引言
在五自由度主動(dòng)磁懸浮軸承控制系統(tǒng)中,采用由工控PC+DSP控制器的架構(gòu)是一種較好的方法,而DSP核心控制器則是磁懸浮軸承控制系統(tǒng)中非常重要的一部分,對(duì)主軸位置信號(hào)的精確采集是DSP控制器的首要任務(wù)。在本控制器中采用MAX115對(duì)主軸位置的模擬信號(hào)進(jìn)行采集。
圖1 磁懸浮軸承DSP控制器的結(jié)構(gòu)簡圖
圖2 MAX115與TMS320F240 DSP之間的接口電路圖
磁懸浮控制器中的ADC選擇
在磁懸浮主軸控制器的設(shè)計(jì)中,對(duì)主軸位置的測量是至關(guān)重要的。位置傳感器的信號(hào)經(jīng)過適當(dāng)?shù)男盘?hào)調(diào)理電路處理后被傳送到A/D采樣通道,ADC把得到的模擬信號(hào)轉(zhuǎn)換成相應(yīng)的數(shù)字信號(hào),芯片采樣的精度和分辨率以及采樣轉(zhuǎn)換時(shí)間是非常重要的技術(shù)參數(shù),它們直接決定著控制速度和控制精度。本控制器中采用的傳感器是一種電渦流位移傳感器。它是一種高精度無接觸式傳感器。
本系統(tǒng)要求能分辨1mm位置信號(hào),根據(jù)傳感器的傳感特性,必須要求有至少為12位的分辨率。同時(shí)本系統(tǒng)中要求絕對(duì)精度不低于±1LSB。 由于磁力軸承系統(tǒng)要求的控制周期很短(一般小于200ms),故要求ADC的采樣時(shí)間也必須很快(一般在20ms內(nèi))。
綜上考慮選用Maxim公司的MAX115作為ADC來完成主軸位置信號(hào)的采集。MAX115是12位2×4通道同步采樣逐次比較型ADC,其具有兩組ADC,每組4通道連續(xù)采集保持;單通道轉(zhuǎn)換時(shí)間為2ms;轉(zhuǎn)換精度±1/2LSB;4通道傳輸率為16ksps;并且內(nèi)部具有2.5V參考電壓和10MHz時(shí)鐘,極大地精簡了外部附加電路;其高速的并行接口可以方便地與DSP相連。
MAX115與TMS320F240的接口電路
圖1是磁懸浮軸承DSP控制器的結(jié)構(gòu)簡圖。圖中4路主軸位置信號(hào)經(jīng)由MAX115進(jìn)行A/D轉(zhuǎn)換后,采集結(jié)果通過中斷方式輸入到DSP內(nèi)。DSP經(jīng)過濾波算法處理后,將采集數(shù)據(jù)寫到雙口RAM內(nèi),計(jì)算機(jī)通過ISA總線訪問雙口RAM并將其中的數(shù)據(jù)取走,進(jìn)行上位機(jī)的圖形顯示、數(shù)據(jù)分析等功能。同時(shí)DSP進(jìn)行控制算法計(jì)算,計(jì)算之后將控制數(shù)據(jù)通過控制器板卡上的4路DAC輸出給功率放大器,從而實(shí)現(xiàn)對(duì)主軸的控制。這樣,利用DSP處理速度快的特點(diǎn)來完成算法的計(jì)算,利用PC機(jī)強(qiáng)大的多媒體處理特點(diǎn)來實(shí)現(xiàn)主軸位置監(jiān)視和數(shù)據(jù)分析,DSP和PC同時(shí)相對(duì)獨(dú)立工作,互不影響,從而加快了系統(tǒng)的處理速度。
MAX115和DSP硬件的接口設(shè)計(jì)如圖2所示,MAX115引腳A0-A3和引腳D0-D11是具有三態(tài)的雙向接口,可以直接和DSP相關(guān)引腳進(jìn)行連接。為簡化電路設(shè)計(jì)和增加可靠性,系統(tǒng)中使用的是內(nèi)部基準(zhǔn)電源,此時(shí)要將REFIN引腳接上一個(gè)0.1mF的旁路電容;同時(shí)使用內(nèi)部時(shí)鐘10MHz,并將CLK引腳接上VCC。
MAX115與TMS320F240進(jìn)行接口設(shè)計(jì)時(shí)主要考慮兩個(gè)問題:一是MAX115數(shù)據(jù)線和控制模式線共用問題。由于MAX115的D1/A3,D0/A2為數(shù)據(jù)和地址共用引腳,但實(shí)際設(shè)計(jì)時(shí)不能將此引腳同時(shí)連接到DSP的地址線和數(shù)據(jù)線,此處即為DSP和MAX115接口連接的難點(diǎn)。本系統(tǒng)設(shè)計(jì)時(shí)用一種全新的方法來實(shí)現(xiàn),因?yàn)镈SP有16位的數(shù)據(jù)線,而MAX115只需要12位數(shù)據(jù)線和2根工作模式控制引腳,所以通過將DSP的14根數(shù)據(jù)線直接接到MAX115上的地址和數(shù)據(jù)線,即D0接AD_A0,D1接AD_A1,D2接AD_D0,D3接AD_D1,D4接AD_D2......D13接AD_D11,當(dāng)對(duì)MAX115進(jìn)行編程時(shí),通過可編程邏輯器件MAX7128進(jìn)行地址選通,MAX7128編程采用Altera公司的Max+plusⅡ集成環(huán)境,使用AHDL語言編寫。
... ...
MAX115的和信號(hào)線由DSP的和分別直接連接即可。通過DSP的數(shù)據(jù)線的D0-D3作為編程地址線從而對(duì)其工作模式進(jìn)行編程。當(dāng)A/D轉(zhuǎn)換結(jié)束后,要從ADC中讀取數(shù)據(jù),讀到14位數(shù)據(jù)D13-D0時(shí),再將所得數(shù)據(jù)左移2位,即屏蔽掉低2位無效的輸入后,即可得到12位A/D采集數(shù)據(jù)。另一個(gè)問題是MAX115與DSP接口的速度匹配問題,由于DSP速度過快,會(huì)導(dǎo)致MAX115無法正常工作,所以系統(tǒng)中采用軟件的方法插入等待狀態(tài),具體操作見下文的軟件設(shè)計(jì)。
控制器中MAX115的片選()信號(hào)、轉(zhuǎn)換開始()信號(hào)及讀()寫()信號(hào)都是由MAX7128產(chǎn)生的。MAX7128編程方便,易于調(diào)試,用其實(shí)現(xiàn)快速地址選通等功能來加快系統(tǒng)的處理速度。其中DSP的參與地址譯碼。
軟件設(shè)計(jì)
DSP作為下層的CPU來控制數(shù)據(jù)采集的整個(gè)過程。本控制器設(shè)計(jì)使用的編程軟件是TI公司的CCS,采用C語言及嵌入式匯編編程,這樣編寫的程序簡潔,易于讀懂。
本控制器采用4通道連續(xù)轉(zhuǎn)換,A3A2A1A0=0011。上電后DSP給MAX115寫入工作方式,然后送信號(hào),A/D轉(zhuǎn)換開始,轉(zhuǎn)換完成后,MAX115發(fā)出請(qǐng)求AD_INT變低,DSP中斷立刻開始讀取A/D轉(zhuǎn)換結(jié)果。MAX115的與DSP的XINT1相連,作為DSP的外部中斷輸入。當(dāng)A/D轉(zhuǎn)換完成后,變低,DSP進(jìn)入中斷服務(wù)程序,在中斷服務(wù)程序中將A/D轉(zhuǎn)換結(jié)果讀出。這種方法應(yīng)用于快速轉(zhuǎn)換,只要中斷來了便進(jìn)行轉(zhuǎn)換,充分利用了CPU的資源。下面給出了中斷方式下DSP控制A/D轉(zhuǎn)換的部分程序。其中主要以中斷子程序?yàn)橹鳎渌袛喑跏蓟捌?strong>DSP中斷向量程序均省略。
_
____ A/D轉(zhuǎn)換電路 _____
data=0X03; /*MAX115工作方式選擇A3A2A1A0=0011*/
asm(" OUT _data,0003h ");
/*選擇ADC,并寫入工作模式*/
asm("rpt XXX ");
/*XXX為一個(gè)數(shù)值 其大小應(yīng)根據(jù)實(shí)際調(diào)試而決定*/
asm(" nop ");
/*延時(shí) 匹配速度*/
asm(" OUT _data,1003h ");
/*A/D轉(zhuǎn)換開始用地址1003h來選中信號(hào)*/
_____A/D轉(zhuǎn)換結(jié)果的讀取_____
void AD_INT()
{ asm(" IN _ad_result1,0003h "); /*讀入AD_CH1A轉(zhuǎn)換結(jié)果*/
ad_result1=ad_result1&0x0fff;
ad_result1=ad_result1*2;
/* CH1A通道最后結(jié)果ad_result1*/
asm(" rpt XXX ");
asm(" nop ");
asm(" IN _ad_result2,0003h "); /*讀入AD_CH2A轉(zhuǎn)換結(jié)果*/
ad_result2=ad_result2&0x0fff;
ad_result2=ad_result2*2;
/* CH2A通道最后結(jié)果ad_result2*/
asm(" rpt XXX ");
asm(" nop ");
asm(" IN _ad_result3,0003h "); /*讀入AD_CH3A轉(zhuǎn)換結(jié)果*/
ad_result3=ad_result3&0x0fff;
ad_result3=ad_result3*2;
/* CH3A通道最后結(jié)果ad_result3*/
asm("rpt XXX ");
asm(" nop ")