摘 要: 為了能快速簡便地判斷光電編碼器的好壞,設計了一種基于Arduino新型集成開發環境的光電編碼器檢測儀,實現了Arduino板與可編程智能液晶觸摸顯示器終端的通信控制,完成了對光電編碼器信號準確的計數,并能判斷其好壞。檢測儀操作簡單方便,對于基于Arduino集成開發環境開發的產品具有一定的參考價值。
關鍵詞: Arduino; 光電編碼器; 觸摸顯示器; 脈沖計數
中圖分類號: TN964?34 文獻標識碼: A 文章編號: 1004?373X(2014)02?0124?03
0 引 言
Arduino是一款基于單片機系統的電子產品開發平臺,它的軟硬件系統都具有高度的模塊化,而且軟件系統是完全開源的。其硬件系統也是高度模塊化的,在核心控制板的外圍有開關量輸入/輸出模塊、各種模擬量傳感器輸入模塊、總線類傳感器的輸入模塊,還有網絡通信模塊[1?2]。Arduino有自己特有的編程語言。其語法規則類似C/C++語言,IDE環境和語言把單片機與硬件相關的一些參數都參數化并進行了很好的封裝,把端口都打包,寄存器、地址指針之類的基本不用管,大大降低了軟件開發難度。因此不用開發者去了解其硬件結構即可對其編程,實現設計者的設計意圖和創意[3]。
本文提出了一種基于Arduino開發環境的光電編碼器檢測儀設計方案,能夠對光電編碼器的好壞進行判斷,實現光電編碼器正轉與反轉時的脈沖計數。
1 整體設計
該檢測儀主要由調理電路、Arduino控制板、液晶顯示電路等組成,如圖1所示。
CLKA和CLKB為光電編碼器輸出的兩路相位相差90°的編碼信號。調理電路用來對這兩路信號進行整形濾波等信號處理,最后送至Arduino控制板。Arduino控制板用來實現光編碼器脈沖個數的計數,正轉、反轉兩種脈沖信號的判別。液晶顯示電路用來顯示檢測的參數,同時對不同型號光電編碼器進行選擇控制。
2 硬件部分設計
2.1 調理電路
信號調理電路用于檢測信號的調理,主要是把待測交流信號,經過濾波、放大、選通、有效值轉換、限幅等處理,送到微控制器進行測量。
圖2為調理電路框圖,光電編碼器輸出的兩路相位相差90°的正弦波信號A、B,經施密特觸發器變為a、b兩組方波信號。A分為兩組:一路經微分電路,在方波的上升沿形成脈沖信號d,再由門電路輸出,形成正轉脈沖,另一路經反相器,形成反相方波c,再經微分電路形成脈沖信號e,由門電路輸出反相脈沖g。b組方波直接連到兩個門電路的控制端,作為兩個門電路的選通信號。
光電編碼器正轉時,b組信號超前90°,它的方波正半波對應不經反相器a組方波的上升沿,正半波又使門電路選通,d組脈沖通過門電路形成正轉脈沖;而c組方波的上升沿對應b組方波負半波,此時雖然微分電路輸出e脈沖,但門電路關閉,不能輸出反相脈沖g。當編碼器反轉時,情況正好相反。最終輸出的脈沖分別送入控制檢測電路進行計數。
2.2 Arduino控制板
本檢測儀采用了意大利最新開發的Arduino Due微控制器。Arduino Due是一塊基于 Atmel SAM3X8E CPU的微控制器板。它是第一塊基于32位ARM核心的Arduino,使用32位ARM核心的Due相較于以往的使用8位AVR核心的其他Arduino更強大:32位核心在一個時鐘能處理32位的數據。控制板包括54個數字I/O引腳 (其中12路PWM輸出),12個模擬輸入通道,2個模擬輸出通道 (DAC),I/O口總輸出電流為130 mA。3.3 V端口輸出能力為800 mA,5 V端口輸出能力為800 mA,FLASH 512 KB (所有空間都可以儲存用戶程序),SRAM 96 KB (兩個部分:64 KB and 32 KB),時鐘速率[4?5]為 84 MHz。
由于Arduino due的工作電壓為3.3 V,I/O口可承載電壓也為3.3 V,所以經過調理電路產生的5 V脈沖不能直接處理。本檢測儀通過SN74lVC4245芯片把5 V的脈沖整形為3.3 V的脈沖。
2.3 液晶顯示電路
本設計中采用了國產開發的可編程智能LCD(即Programmable Smart LCD,簡稱PS?LCD)。PS?LCD是一種包含LCD顯示屏、LCD控制器、觸摸屏、人機界面處理系統和通信接口于一體的智能顯示模組,通過可選的通信接口與外部控制單元(如:51單片機、ARM、DSP、PC、PLC、總線設備等)連接,實現系統的人機交互界面。
新建Designer工程,定義界面分辨率、界面切換效果和主界面等;設置背景、加入/設置控件、定義事件動作等;PS?LCD的采用Java Script的腳本語言,Java Script是因特網上最流行的腳本語言,它存在于全世界所有 Web 瀏覽器中,能夠增強用戶與 Web 站點和 Web 應用程序之間的交互。本液晶顯示屏通過腳本編寫實時地顯示微控制器采集送過來的脈沖個數,并進行判斷。
用LCD模擬器驗證界面效果和通信過程,重復前面步驟直到滿意為止。
PS?LCD作為先進的智能人機界面產品,能通過通信接口輕松靈活地與外部控制單元實現數據交互。目前,PS?LCD支持兩種通信協議:CTP(Cooky Talking Protocol)協議和用戶自定義(UserDefine)協議。本檢測儀采用的是CTP協議。
在CTP通信模式下,PS?LCD在收到通信命令后,會立刻執行,結束后會向主控制器返回結果。由于PS?LCD的串口通信協議跟微控制器Arduino Due的通信協議不一致,在通信過程中要進行轉換和控制。為了取消PS?LCD命令執行結果的自動回復消息,在CTP通信模式下,通過調用ctpSet(“reply”, 0)函數取消PS?LCD的自動回復。PS?LCD同時通過通信協議產生的串口信號來控制微控制器的工作,真正實現人機互動的效果[6]。
生成界面輸出文件spf,然后將spf文件通過PS?LCD專用軟件工具Flex下載到PS?LCD驗證最終界面效果。
本檢測儀PS?LCD最終的檢測界面如圖3所示。
圖3 檢測界面
3 軟件部分設計
3.1 脈沖計數子程序
為了能更加準確地對脈沖進行測試,采用外部中斷進行計數,Arduino due 控制板的54個數字I/O引腳,均可以作為中斷端口。編寫的主要計數程序如下[7?10]:
void setup()
{
Serial.begin(115200);
pinMode(APin, INPUT);
pinMode(BPin,INPUT);
attachInterrupt(APin, blinkA,RISING); //上升沿中斷模式//
attachInterrupt(BPin, blinkB,RISING);
T=millis();
}
void loop()
{
if(Serial.available() > 0) //判斷顯示器是否發送信號//
{
str1 = Serial.read();
if( str1==′A′)
//根據顯示器送來的信號判斷光電編碼器型號//
{
count=0;
num=0; //清零//
}
}
while(num!=count)
{
num=count;
sprintf(str,\"pulse.text=%d;\",num);
Serial.println(str);
}
}
void blinkA()
{
if((millis()?T)>0.5) //防抖動設計//
{
count++;
T=millis();
}
}
void blinkB()
{
if((millis()?T)>0.5) //防抖動設計//
{
count??;
T=millis();
}
}
3.2 液晶顯示程序
根據所要測試的光電編碼器,選擇不同的型號,不同型號的光電編碼器定義不同的發送信號,以LBJ?001?2048型光電編碼器為例,選擇按鈕的腳本編寫子程序如下:
pulse.text=\"\"; //脈沖顯示個數清零//
result.text=\"\"; //脈沖判斷結果清零//
du.text=\"\"; //角速度顯示結果清零//
if (xinghao.currentIndex=1) //選擇第一種型號//
sysCom0.write(0x41); //向單片機發出A控制字符//
else if (xinghao.currentIndex=2) //選擇第二種型號//
sysCom0.write(0x42); //向單片機發出B控制字符//
…
其中sysCom0.write(0x41)為寫入串口發送緩沖區,串口向外部發送1字節數據 0x41,即是字符‘A’。當Arduino微控板接收到串口送過來的‘A’字符時,即可判斷出待測試的光電編碼器型號為LBJ?001?2048,啟動相對應的程序進行測試。同理當選擇第二種型號測試時,Arduino微控板將接收到串口送過來的‘B’字符時,即可判斷出待測試的光電編碼器型號為SE0932II?5400P/r,啟動相對應的程序進行測試。
4 結 語
本文著重介紹了基于Arduino開發環境的光電編碼器檢測儀的設計,并實現Arduino微控板與PS?LCD的通信控制問題。由于Arduino是一個開放的單片機開發人機互動產品的軟硬件平臺,對于基于Arduino開發環境的電子制作競賽、電子藝術品創意開發、電子檢測產品等方面具有較好的參考價值。
參考文獻
[1] 蔡睿妍.Arduino的原理及應用[J].電子設計工程,2012,20(16):155?157.
[2] 李德駿,馬孝輝.基于Arduino平臺的家用安防監控系統設計[J].科技與生活,2011(1):114?115.
[3] 王汀.微處理機原理與接口技術[M].杭州:浙江大學出版社,2008.
[4] 楊繼志,楊宇環.基于Arduino的網絡互動產品創新設計[J].機電產品開發與創新,2012,25(1):99?101.
[5] 紀欣然.基于Arduino開發環境的智能尋光小車設計[J].現代電子技術,2012,35(15):161?163.
[6] 紀松波,侯婷.智能液晶觸摸顯示終端與單片機接口的設計[J].現代電子技術,2010,33(12):16?18.
[7] 崔才豪,張玉華,楊樹財.利用Arduino控制板的光引導運動小車設計[J].自動化儀表,2011,32(9):5?7.
[8] BENDER P, KUSSMANN K. Arduino based projects in the computer science capstone course [J].Journal of Computing Sciences in Colleges, 2012, 27(5): 152?157.
[9] 鄒建梅,王亞格.利用Arduino增強FLASH互動性的研究[J].中國教育技術裝備,2010(36):107?109.
[10] 袁本華,董錚.基于Arduino控制板的溫室大棚測溫系統設計[J].安徽農業科學,2012,40(8):5049?5050.