• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于LPC2136單片機的光電編碼仿真接口設計

      2015-05-29 12:26:23鄭均輝甘泉
      現(xiàn)代電子技術 2015年10期

      鄭均輝++甘泉

      摘 要: 在低速狀態(tài)下經LPC2136普通單片機利用UART通信技術,通過對光電編碼器的正交信號分析,來模擬正交編碼器的硬件設計與軟件設計,實現(xiàn)對電機轉向及精確定位的數(shù)字化顯示,為編碼器應用在低速的自動智能控制領域提供了一個很好的解決方案。測試證實該設計對光電編碼器的計數(shù)與標準記測器的計數(shù)值在低速旋轉條件下非常準確。

      關鍵詞: 光電編碼; LPC2136; 接口設計; UART通信技術

      中圖分類號: TN710?34 文獻標識碼: A 文章編號: 1004?373X(2015)10?0042?03

      0 引 言

      在工業(yè)控制精度要求相對較高的領域,比如發(fā)動機的轉速測量控制等自動化控制應用中,通常需要用正交編碼器對各種位移、速度、角度等進行精確測量[1]。目前,在一些高級ARM處理器中,如Cortex?M3內核的STM32F系列、周立功的LM3S601/608微控制器[2]等已經集成了編碼器接口。但是在實際工作中出于成本的考慮,需要使用價格比較低的微控制器,而它們的缺陷是沒有編碼器接口,因此就需要通過常規(guī)的控制器來仿真編碼器接口以滿足應用需求。

      本文以NXP公司的LPC2136處理器為對象,研究其在低速轉動中模擬光電編碼器接口顯示編碼器正反轉,記錄轉動圈數(shù),對其轉動定位進行標注,然后完成對JVH?10BM?E5光電編碼器的精確控制,將獲得的數(shù)據進行分析處理后通過GPIO模擬SPI方式發(fā)送到7段碼顯示,得到準確直觀的數(shù)字化顯示結果,同時通過UART口把數(shù)據送到PC在串口助手顯示。

      1 光電編碼器簡介

      編碼器(Encoder)作為傳感產品的一大重要分支[3],能將信號或數(shù)據編制并轉換為可用以通信、傳輸和存儲之形式的設備。編碼器最重要的應用就是定位,目前其已經越來越廣泛地被應用于各種工控場合[4]。如機床工具、航空航天、鐵道交通、新能源及港口機械等行業(yè),都在使用著大量的編碼器產品[5]。而光電編碼器,是一種通過光電轉換將輸出軸上的機械幾何位移量轉換成脈沖或數(shù)字量的傳感器。這是目前應用最多的傳感器,光電編碼器是由光柵盤和光電檢測裝置組成。光柵盤是在一定直徑的圓板上等分地開通若干個長方形孔[6]。由于光電碼盤與電動機同軸,電動機旋轉時,光柵盤與電動機同速旋轉,經發(fā)光二極管等電子元件組成的檢測裝置檢測輸出若干脈沖信號。光電編碼器的正反轉判斷信號如圖1所示。A、B兩相信號是相差[14]周期,如果A提前[B 14]周期則表明順時針旋轉,若B提前[A 14]周期則表明逆時針旋轉。

      2 硬件系統(tǒng)設計

      LPC2136微控制器是一個基于支持實時仿真和嵌入式跟蹤的16/32 位ARM7TDMI?S CPU,帶有256 KB嵌入的高速FLASH存儲器。其內部具有2個32位可編程定時/計數(shù)器,均具有4路捕獲、4路比較匹配并輸出電路。定時器對外設時鐘(Pclk)周期進行計數(shù),可選擇產生中斷或根據4個匹配寄存器的設定,在到達指定的定時值時執(zhí)行其他動作(輸出高/底電平、反轉或者無動作)。4個捕獲輸入,用于在輸入信號發(fā)生跳變時捕獲定時器值并產生中斷。

      圖1 光電編碼器信號示意圖

      本設計采用型號為JVH?10BM?E5的光電編碼器,有A、B、Z三條信號線,在它內部光柵盤共有100個柵格,即每旋轉3.6°就能發(fā)出一個沿變信號。硬件電路中使用了LPC2136中的P0.16,P0.17,P0.18引腳分別連接光電編碼器的信號線A,B,Z。使用其GPIO口P0.2,P0.3,P0.4來模擬SPI總線對數(shù)碼管的數(shù)據傳輸顯示,各個數(shù)碼管之間共陰極顯示,通過P0.6~P0.13控制數(shù)碼管段位,用74HC595模擬SPI來選通控制哪一個顯示。硬件系統(tǒng)原理如圖2所示。

      圖2 硬件系統(tǒng)原理框架

      設計使用12 MHz外部晶振,通過LPC2136定時器1的捕獲功能來獲取光電編碼器信號A,Z的信號,通過配置P0.10的CAP1.0通過捕獲A信號的下降沿從而產生中斷。光電編碼器在正向旋轉時,信號A的波形比信號B的波形提前90°。通過對A,B信號序列研究發(fā)現(xiàn),當在信號A下降沿到來那一刻,如果信號B是高電平,則能判斷光電編碼器是在順時針旋轉,反之,則能判斷光電編碼器是逆時針旋轉。因此,把LPC2136的P0.17設置成GPIO的輸入模式連接光電編碼器的信號B端,通過檢測信號A下降沿產生中斷的那一刻信號B的高低電平就能判斷出編碼器的正反轉,通過4個數(shù)碼管與上位機同步顯示。

      數(shù)碼管顯示時使用SPI接口的串行時鐘線(SCK)、主機輸入/從機輸出數(shù)據線MISO、主機輸出/從機輸入數(shù)據線MOSI等3條線來發(fā)送數(shù)據給74HC595使其不斷刷新,刷新頻率小于24 Hz的時候會使人感覺發(fā)光閃爍,因此,刷新每個數(shù)碼管的時間間隔不能大于10 ms,刷新頻率越高顯示亮度越大。

      UART是一種通用串行數(shù)據總線,一般使用3條線,GND、RxD和TxD用于異步通信。該總線雙向通信,可以實現(xiàn)全雙工傳輸和接收。在本次嵌入式設計中,UART0用來與PC進行通信,波特率設為9 600 b/s,8個數(shù)據位,1個停止位。UART首先將接收到的并行數(shù)據轉換成串行數(shù)據來傳輸。消息幀從一個低位起始位開始,后面是7個或8個數(shù)據位,一個可用的奇偶位和一個或幾個高位停止位。接收器發(fā)現(xiàn)開始位時它就知道數(shù)據準備發(fā)送,并嘗試與發(fā)送器時鐘頻率同步。如果選擇了奇偶,UART就在數(shù)據位后面加上奇偶位。奇偶位可用來幫助錯誤校驗。在接收過程中,UART從消息幀中去掉起始位和結束位,對進來的字節(jié)進行奇偶校驗,并將數(shù)據字節(jié)從串行轉換成并行。UART也產生額外的信號來指示發(fā)送和接收的狀態(tài)。

      3 軟件系統(tǒng)設計

      設計使用ADS1.2開發(fā)環(huán)境,EasyJtag在線調試下載工具,使用串口助手來接收LPC2136發(fā)送過來的編碼器數(shù)據。首先對LPC2136進行初始化,配置I/O口P0.17、P0.18引腳為數(shù)據輸入, 配置UART0波特率為9 600 b/s,采用查詢方式來獲取接收或發(fā)送完成時狀態(tài)。定時器1的P0.10為下降沿捕獲端口。模擬SPI時定義P0.2為CLK時鐘信號,P0.3為DATA數(shù)據信號,發(fā)送1 B數(shù)據循環(huán)8次,P0.4 LATCH鎖存信號,等接收到8位數(shù)據后通過鎖存信號不斷復位或置位進行位接收字節(jié)接收發(fā)送,通過不斷掃描來點亮數(shù)碼管。在使用I/O模擬SPI時序發(fā)送數(shù)據時需要一定的時鐘周期來延時,由于數(shù)碼管動態(tài)顯示需要不斷刷新,故延時函數(shù)需調用點亮數(shù)碼管的語句,否則,多處使用延時函數(shù)數(shù)碼管就會產生閃爍。軟件設計流程如圖3所示。

      程序初始化之后開在捕獲中斷程序中設置變量flag_int = 0xaa,在主函數(shù)不斷循環(huán)當判斷到flag_int為0xaa后來判斷P0.10的電平即正交編碼器B信號的輸出電平,如果為高,則編碼器順時針旋轉,編碼器位置計數(shù)(程序中使用變量count)值加1;如果P0.10的電平為低,則編碼器逆時針旋轉,編碼器位置計數(shù)值減1。由于使用的光電編碼器旋轉一周計數(shù)值為100,故在count=100時,需對count清零,同時對光電編碼器的旋轉圈數(shù)加1。

      圖3 MCU主流程圖

      正交編碼器低速仿真接口設計的主要算法如下。

      void __irq Timer1_CapInt (void) //下降沿捕獲中斷函數(shù)

      {

      T1IR = 1 << 4; //清除CAP1.0中斷標志

      flag_int=0xaa;

      VICVectAddr = 0x00; // 向量中斷處理結束

      }

      if(flag_int==0xaa)

      //判斷正反轉及對光電編碼器的轉動角度計數(shù)

      {

      if(((IO0PIN&0x00000400)==0x00000400))

      //P0.10為高正轉

      {

      flag_int=0x00;

      count++; //記錄轉動的位置

      if(count==0x65) //360°記100個數(shù)

      count=0;

      UART0_SendByte (count); //串口助手顯示

      }

      else if(((IO0PIN&0x00000200)==0x00000000))

      {

      flag_int=0x00;

      count??;

      if(count==0xff)

      count=0x64;

      UART0_SendByte (count);

      }

      }

      If(count==0x64) //輸出編碼器Z軸信號即編碼器旋轉圈數(shù)

      {

      Encoder_Cycle ++;

      UART0_SendByte(Encoder_Cycle);

      }

      4 結 語

      本文介紹了編碼器的工作原理、LPC2136 MCU的部分外設功能以及在低速狀態(tài)下如何通過普通單片機來模擬正交編碼器接口的硬件設計與軟件設計的流程。通過單片機來模擬正交編碼器的設計為編碼器應用在低速的自動智能控制領域提供了一個很好的解決方案。把編碼器信號同時輸入到創(chuàng)思杰ZN96系列智能記測器進行對比測試,證實本設計對光電編碼器的計數(shù)與標準記測器計數(shù)值在低速旋轉條件下非常準確。由于系統(tǒng)沒有對實際應用中的各種機械干擾信號進行濾波,因此就需要在工業(yè)應用中進一步增加硬件濾波或者軟件濾波消除誤差。同時,如何在濾波成本與濾波性能之間取得較好的性價比,也需要進一步探索研究。

      參考文獻

      [1] 蔡尚峰.自動控制理論[M].北京:機械工業(yè)出版社,1980.

      [2] 賀玲玲.一種用旋轉電子編碼器檢測絕對角度位置的方法與實現(xiàn)[J].重慶工商大學學報:自然科學版,2009,26(5):472?476.

      [3] 王明順,沈謀全.虛擬編碼器設計與轉速測量[J].儀器儀表學報,2008,29(6):1300?1305.

      [4] 權超健,劉獻禮.光電編碼器輸出信號自動調試技術研究[J].測控技術,2014,33(3):38?42.

      [5] 周化仁,潘學盈,王宗信.檢測與轉換技術[M].北京:中國礦業(yè)大學出版社,1989.

      [6] 謝劍英.微型計算機控制技術[M].北京:國防工業(yè)出版社, 1985.

      进贤县| 阳城县| 永宁县| 鲁山县| 玛曲县| 乌审旗| 肥城市| 增城市| 布拖县| 开阳县| 石柱| 南涧| 东丽区| 屏边| 昌宁县| 萨迦县| 墨竹工卡县| 绥宁县| 辽中县| 伊金霍洛旗| 西乌珠穆沁旗| 靖江市| 赞皇县| 阳新县| 黑水县| 宝丰县| 当涂县| 辽中县| 舞阳县| 通山县| 建平县| 汉中市| 许昌县| 平陆县| 简阳市| 武平县| 聂荣县| 霍邱县| 白银市| 利辛县| 壤塘县|