<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 采用FPGA/MCU技術(shù)的光電式滾轉(zhuǎn)角測量儀的解決方案

          采用FPGA/MCU技術(shù)的光電式滾轉(zhuǎn)角測量儀的解決方案

          作者: 時(shí)間:2010-12-10 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/151256.htm

            系統(tǒng)軟件設(shè)計(jì)

            基于式滾軟件流程如圖11所示。光敏接收模塊g1-g37接收到紅外光信號,經(jīng)過轉(zhuǎn)換及信號調(diào)理之后將高電平送至FPGA上各相關(guān)引腳,F(xiàn)PGA以固定頻率對A1-A37各引腳進(jìn)行掃描,掃描頻率通過對有源晶振的輸入頻率進(jìn)行分頻得到,如果掃描到僅有一個(gè)引腳是高電平,則說明只有該引腳對應(yīng)的光敏接收模塊收到光信號,滾轉(zhuǎn)體此時(shí)剛好旋轉(zhuǎn)到某已知角度,通過FPGA控制LED顯示模塊輸出該角度,并通過串口將滾度值傳送給上位機(jī)。但如果有兩路引腳都為高電平,那么FPGA首先判斷該由哪片MCU對這些信號進(jìn)行處理,隨后通知該MCU進(jìn)行AD轉(zhuǎn)換并確定滾度,比如A5、A6均為高電平,則FPGA以串口通訊方式通知MCU A對A5、A6進(jìn)行AD轉(zhuǎn)換,轉(zhuǎn)換結(jié)果A5的信號幅值為2.50V,A6的信號幅值為3V,已知A5對應(yīng)的滾轉(zhuǎn)角為40度,A6對應(yīng)的滾轉(zhuǎn)角為50度,則此時(shí)的滾轉(zhuǎn)角度為40+[2.5/(2.5+3.0)](50-40)=44.55度,MCU再通過串口把信息反饋給FPGA。還有可能出現(xiàn)3路或者3路以上的引腳為高電平的情況,此時(shí)應(yīng)調(diào)節(jié)光敏接收模塊的初級運(yùn)放信號放大倍數(shù),盡量減少M(fèi)CU處理的模擬信號數(shù)量,然后通過比較將幅值較小的信號忽略,僅保留最大的兩路信號,隨后處理方式同上。


            FPGAVHDL語言進(jìn)行編程,其串口程序包括串口發(fā)送、串口接收與時(shí)鐘分頻三個(gè)模塊,分別與上位機(jī)及兩片MCU進(jìn)行通信,通信波特率為標(biāo)準(zhǔn)的9600b/s,數(shù)據(jù)位為8位,不帶校驗(yàn)位。MCU匯編語言編程,C8051F310可通過修改相關(guān)寄存器值非常靈活的對片內(nèi)ADC模塊、串口模塊進(jìn)行操作,ADC單端輸入方式,以MCU供電電壓為參考電壓,通過向AD0BUSY位寫1啟動(dòng)AD轉(zhuǎn)換。

            結(jié)語

            本文設(shè)計(jì)的基于式滾轉(zhuǎn)角實(shí)際運(yùn)行情況良好,在實(shí)驗(yàn)室環(huán)境中能較為準(zhǔn)確的測量出彈體滾轉(zhuǎn)角度,達(dá)到預(yù)定要求,此外還可通過增加光敏接收模塊或采用紅外激光器來進(jìn)一步提高測量精度。


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();