張智河,黃菊英
首都醫科大學 生物醫學工程學院,北京 100069
化學發光免疫分析儀是通過檢測患者血清從而對人體進行免疫分析的醫學檢驗儀器,通過單光子計數技術實現免疫反應微弱熒光的測量[1],通過抗體或抗原包被鐵氧體磁顆粒進行磁分離清洗[2],而步進電機控制是自動化學發光免疫分析測控系統的核心內容之一[3]。整個系統一般有步進電機十幾、甚至二十幾部,一個動作需要多部步進電機聯合工作,如加樣針動作就需要升降、旋轉、吸打液體等至少3部步進電機聯合工作。為了進一步提高整機的運行速度,多部步進電機聯動控制成為必然,這就給固件編程提出了更高的要求。
文中基于ARM7TDMI-S的脈寬調制技術(Pulse Width Modulation,PWM)支持多個單邊沿匹配輸出[4],經整形電路得到高分辨率的脈沖,實現了多部步進電機同步脈沖輸出,即多軸聯動。利用快速中斷的頂級中斷優先級優勢,快速中斷模式獨有的獨立寄存器優勢,及不跳轉在順延地址空間直接編寫中斷處理函數的優勢,實現了占用MCU最短、脈沖穩定可靠的輸出[5]。在中斷中實時讀取相應電機位置光電信息,達到了步進與位置監測的同步性,確保了運動部件動作準確、快速。
如何提高脈沖控制分辨率是一個普遍課題[6],文中方法改變原固件程序定時在主循環中直接控制IO口脈沖輸出,解決了邏輯控制及中斷事件對脈沖輸出的不確定性影響,脈沖輸出完全由硬件控制,同時充分利用高分辨時鐘提高脈沖前沿的時間分辨率,至少比原控制方式提高1800倍,從而使電機運行平穩性和多軸聯動定位精度上提高一個層次[7]。文中的電機控制方法是通用的方法,同樣適用于脈沖控制的伺服電機,可以用于數控機床,數控雕刻機、機器人、3D打印機等。文中實現的方法是基于ARM系統,同樣適用于有多匹配PWM輸出的其他嵌入式系統,如DSP[6]。
文中給出勻速運動、梯形運動周期的推算,可以滿足大部分數控應用,如果運動軌跡確定,則可參考已有研究的方法實現S形加減速[8]。
ARM7TDMI-S是32位RISC結構處理器,高達72 MHz主頻、512 KB片內Flash存儲器、32 KB SRAM。支持多達32個中斷向量,可將其一分配為快速中斷請求FIQ,FIQ具有最高的優先級,可實現最短的中斷等待時間,起始地址0x1C,可直接后續中斷處理程序,節省跳轉時間,快速中斷模式專有寄存器進一步發揮其獨有的優勢[9]。
一個PWM模塊,帶可編程32位預分頻器的32位定時器/計數器。有7個匹配寄存器,可實現6個單邊沿控制或3個雙邊沿控制的PWM輸出,或兩種類型的混合輸出。單邊沿控制的PWM輸出在每個周期開始時全部置高,除非輸出保持恒定低電平。匹配寄存器的更新與脈沖的輸出同步,以防止錯誤脈沖的產生。而軟件必須在新的匹配值生效之前將它們釋放。匹配寄存器PWMMR0通過匹配時自動重新加載計數值來控制PWM的頻率,其他的匹配寄存器控制單邊沿PWM輸出[4]。
電機控制總方案,見圖1。由CAN通訊中斷接收運動指令,在主循環中初始化運動周期、方向列表。定時標記啟動主循環中推算運動周期、方向列表。快速中斷中查詢周期、方向列表,設置PWM匹配寄存器,經脈沖整形電路輸出到驅動器驅動電機運行。

圖1 電機控制總方案
本研究采用ARM控制脈沖、方向輸出,電機驅動器,電機3部分結構。ARM默認啟動時管腳為高電平,為不引起啟動脈沖冗余,配置PWM匹配輸出時置低。由于PWM驅動輸出是單邊下降沿,需整形成完整單脈沖(圖2),設計脈沖寬度為20 μs,示波器無限余輝方式實測為14~17 μs(圖3),脈沖前沿有效,不受脈寬波動影響。

圖2 單邊沿整形脈沖電路圖

圖3 無限余輝測量脈沖寬度
PWM時鐘分辨率72 MHz,PWM0匹配中斷周期設置為50 μs,最大驅動速度20 kHz,最小驅動速度80 Hz。
驅動數據結構如下,為便于應用指針推算數據位置最好設計成4字節對齊的數據結構:
typedef struct
{
INT8U StepMotorEnable; //按位標識啟動
INT8U StepMotorNum; //電機個數
INT8U LgtRead [6]; //讀光電信息指針
INT32U LgtPort [6]; //光電端口地址
struct
{
INT8U PWMRead; //PWM讀指針 也是光電寫指針
INT8U PWMWrite; //PWM寫指針
}Prw[6];
INT8U LgtData [6] [256]; //光電數據采集
struct
{
INT8U PWMTimers; //PWM周期整數部分
INT8U DIR; //電機運動方向
INT16S PWMMatch ; //PWM周期小數部分
}Ctr[6] [256];
}pPWMMotor;
其中PWMTimers為脈沖時間經過50 μs中斷周期的次數,PWMMatch為脈沖輸出匹配比較值。
下面以單路數據結構闡述,即去掉維數[6],驅動周期推算過程如下:
初始化PWMTimers[0]=0,PWMMatch[0]=1800,PWMMatch[1]=0為補償量。
當前讀位置PWMRead=0,寫位置PWMWrite=1。設本次驅動周期為t,相對上次時間點驅動時刻

PWMTimers[1] = PulseTime/3600; //取整數部分
PWMMatch [1] = PulseTime%3600; //取余數部分
由于PWM中斷復位匹配值為0時無法輸出脈沖,需對0匹配進行修正,將時間順延1個系統時鐘,即在本周期加1,在下一周期減1。
PWMMatch [1] =1;
對順延量進行補償
PWMMatch [2] =-1;
修正公式(1):

寫指針相對讀指針最少保留26個緩沖區間,一次計算最多寫入15條數據,由定時器每隔500 μs推算一次,保證快速中斷數據的消耗。
初始參數:起始速度、最高速度、加速度、減速度、勻速速度、平穩步數、運動總步數。平穩步數為起步、末尾的勻速運動步數,及最高速運動時的最小步數。
加減速過程步數計算


其中a為加速度或減速度,v0為始末速度,vH為最高速度。

當加速步數+減速步數+3×平穩步數>運動總步數時

當 3×平臺步數≥運動總步數 時,勻速運動。
當前速度

其中t為新脈沖時間,為簡化計算用上一次時間代替,由于加速時間t0>t,引起速度增加略帶加加速,使速度提前達到預定高速。減速運動時t0<t,引起速度減少略帶減減速,使速度推遲達到預定低速。在迭代計算中需檢測是否達到預定高速、預定低速,相應增減步數。

t0為前一周期值,a為加速度或減速度(為負值)。
RuningStatus標識運動階段,緩起、加速、高速、減速、緩停。
加減速過程時間間隔計算

計算過程采用整型64位乘除法,先算分母部分,取整后再計算整體。
當某一通道PWM寫指針與讀指針相同時,置大于3600的任意匹配值一次,使無匹配值,停止脈沖輸出。
設當前讀指針PWMRead =0,讀PWMTimers[0],當PWMTimers[0]為0時,加載PWMMatch[0]到PWM匹配寄存器,在下一個PWM周期時輸出脈沖,PWMRead++,讀取光電端口,記錄位置光電信息。當PWMTimers[0]大于0時,PWMTimers[0]--,PWMRead不動,加載方向DIR[0]一次,置大于3600的任意匹配值一次,即無輸出脈沖。中斷過程,見圖4,其中軸數為電機數,即StepMotorNum,計時為中斷計時次數,即PWMTimers。

圖4 快速中斷流程圖
快速中斷模式R8~R12為專有寄存器[9],可定義為常量或變量。R13為堆棧指針,R14為返回地址寄存器,當不調用子函數其值不變,可不用壓棧保存。R0~R7為公用寄存器使用時必須壓棧保護。
在調試期間可采用調用C函數方式,實現匯編與C函數之間相互跳轉,發揮C語言靈 快速中斷C處理函數PWM_isr()返回調用函數FIQReturn(),用于避開C處理函數PWM_isr()的彈出堆棧過程。
FIQReturn
ADD SP,SP,#0x04 ;跳轉了1次,所以加4
LDMFD SP!, {R0-R7,LR} ;彈出寄存器,
SUBS PC, LR, #4
快速中斷C處理函數
void PWM_isr(void) //快速中斷處理函數
{
unsigned int k;
PWM1IR = 1; //復位PWM1MR0匹配中斷,以免阻塞非FIQ中斷響應。
...
PWM1LER = k; //鎖存PWM1匹配更新
FIQReturn();
}
配置PWM匹配寄存器程序
n = (PWM1_BASE_ADDR + 0x1C);
if(i>=3)
n += 0x18;
__asm{str m,[n,i,lsl #2]};
其中n為PWM匹配寄存器地址,i為0~5的PWM輸出序號,m為匹配值。
初始化快速中斷模式寄存器函數FIQset(j),j為更新PWM匹配寄存器數據。
FIQset
MSR CPSR_c,#0xd1;//進入FIQ快速中斷模式
MOV R10,r0 ;//PWM1LER = R10; 更新PWM匹配寄存器
MSR CPSR_c,#0xdf;//進入系統模式
MOVS PC, LR
當中斷程序完全達到設計要求后,將其轉換為匯編形式,去掉跳轉,進一步壓縮C語言的冗余代碼,達到速度最優化[10]。
在自動化學發光免疫分析測控系統中血清樣本、試劑、磁珠等溶液的加載,需要液位探測,減小針管外壁的掛滴量,需要移液過程加減速順滑,避免甩滴,尤其吸打液體時加減速更需要精準,減少震顫,提高移液量精準度。為驗證上述方案的有效性,首先設計了柱塞泵單元,見圖5,采用ARM加步進電機驅動IC方案,ARM芯片為LPC2368,開發環境ADS1.2,FIQ中斷程序經優化得到50余條匯編代碼。經示波器觀測,勻速運動、梯形運動脈沖波形非常平穩,步進電機可以承載更大加減速率的平穩運行,進一步工作是需要在系統中在線帶載能力測試。

圖5 柱塞泵單元
下一步工作是運動軌跡生成與控制,方案:由三維軟件繪制空間移動路徑,利用機加工CAM軟件生成G代碼[11],在ARM中利用插補技術[12]形成驅動脈沖序列,完成多軸聯動。
步進電機控制是自動化學發光免疫分析測控系統的核心內容之一,上文給出的應用ARM快速中斷加載PWM匹配數據同步控制多部步進電機的方案,是對自動化學發光免疫分析儀的固件程序升級的一部分。實驗證明快速PWM匹配中斷驅動多部步進電機是行之有效的方案[13]。加上編碼器檢測[14]等反饋,就形成了完整的閉環運動控制系統,徹底解決加速丟步、減速過沖及驅動時序雜亂引起失穩問題。
PC數控系統CNC的發展趨勢是多軸聯動、信息網絡化[15],本文是多軸聯動同步脈沖高分辨率分配方案,實現硬件自動匹配,對提高開環控制系統速度有重要意義,如與智能電機驅動器聯網[16],實現運動數據前瞻插補,可以進一步提高柔性運動控制[17]。何均等[18]提出的隨機周期獨立軸自適應插補控制方案,進一步明確了本文多軸聯動脈沖分配方案的重要意義,進一步提高進給系統精度有賴于將兩相步進電機改為三相步進電機,步進電機閉環伺服驅動器的網絡化,實現各分立軸自適應前瞻插補控制,從而加快系統級網絡測控大趨勢的進展。
[參考文獻]
[1] 魏麗君.化學發光免疫分析儀測量系統的改進[J].光電子技術,2013,33(1):19-23.
[2] 趙建文,陳艷寧,路士州.化學發光免疫檢測儀涉及的關鍵技術[J].發光學報,2012,33(12):1381-1388.
[3] 錢俊,張昕,白志紅,等.全自動化學發光免疫分析儀取樣平臺運動控制器設計[J].軟件,2011,32(3):84-87.
[4] 王澤澤,李文偉,張勝錳,等.基于PWM調制的高漏感變壓器三相輸出平衡控制[J].機電工程,2017,34(2):173-177.
[5] 蔣俊,錢光明.ARM中斷處理的安全性與高效性研究[J].單片機與嵌入式系統應用,2009,5:78-81.
[6] 凌松,駱敏舟,王善杰.基于FPGA的五軸聯動控制器的設計[J].制造業自動化,2014,36(6):138-140.
[7] 袁茂強,王永強,王力,等.基于蒙特卡洛法的3D打印機定位精度分析[J].機床與液壓,2016,44(21):141-146.
[8] 蔡澤凡.基于STM32的步進電機S形加減速控制曲線的快速實現方法[J].信息技術與信息化,2014,4:27-29.
[9] 石駿.基于ARM7的光譜采集系統的設計[D].成都:電子科技大學,2016.
[10] 翁斌.ARM7內核的中斷屏蔽方法[J].單片機與嵌入式系統應用,2011,6:71-73.
[11] 張紀寬,彭力,陳志勇.基于STM32的雙軸監控云臺精準控制系統設計[J].單片機與嵌入式系統應用,2016,6:32-35.
[12] 任強,羅澤林.基于插補算法與最優前瞻的數控運動軌跡控制研究[J].機械設計與制造工程,2016,45(4):63-66.
[13] 唐明,高琳,梁得亮,等.實時操作系統uC/OS-Ⅱ在永磁同步電動機矢量控制系統中的應用[J].微電機,2010,43(12):78-81.
[14] 周祺睿,楊斌.基于ARM7的軌道檢測儀的嵌入式系統設計[J].微計算機信息,2008,24(2):121-122.
[15] 張建明,龐長濤.超精密加工機床系統研究與未來發展[J].航空制造技術,2014,11:47-51.
[16] 徐健,唐小琦,宋寶.基于ARM+FPGA的EtherCAT主站設計及實現[J].組合機床與自動化加工技術,2016,6:84-87.
[17] 李志嘉,徐志鵬.基于CANopen協議的雙軸伺服電機同步控制研究[J].機床與液壓,2016,44(1):14-16.
[18] 何均,游有鵬,王化明,等.脈沖進給系統的高平穩運動控制[J].機械工程學報,2011,47(3):116-123.