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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 采用CAN總線和CCll00芯片的嵌入式遠(yuǎn)程測控系統(tǒng)方案設(shè)計

          采用CAN總線和CCll00芯片的嵌入式遠(yuǎn)程測控系統(tǒng)方案設(shè)計

          作者: 時間:2012-06-08 來源:網(wǎng)絡(luò) 收藏

          相關(guān)的資源有:在電路中使用了2410的一個擴(kuò)展的L/O口作為片選信號,低電平有效;使用了2410的外部中斷0作為中斷引腳,低電平有效;16 MHz晶體作為輸入時鐘,MCP2510內(nèi)部有振蕩電路,用晶體可直接起振。

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

            中心模塊端,可對C,8051F310模擬SPI口的方式與MCP2510連接。

            2.3 無線測控模塊設(shè)計

            典型的無線結(jié)構(gòu)包括一個無線發(fā)射器(包括數(shù)據(jù)源、調(diào)制器、RF源、RF功率放大器、天線、電源)和一個無線接收器BJ(包括數(shù)據(jù)接收電路、RF解調(diào)器、譯碼器、RF低噪聲放大器、天線、電源)。發(fā)射器的數(shù)據(jù)通過無線發(fā)射出去,接收器天線接收后進(jìn)行處理,得到經(jīng)過校驗的正確數(shù)據(jù)。

            中選用了射頻作為無線收發(fā)器,理由如下:

            (1) 該器件有著極為優(yōu)秀的傳輸能力,空曠傳輸距離可以達(dá)到500m,加了PA的模塊則可以達(dá)到1200m,完全滿足了一般的工廠測控距離要求。

            (2) 2-FSK,GFSK和MSK支持,抗干擾能力極強(qiáng),適用于工廠環(huán)境惡劣的生產(chǎn)車間。

            (3) 是一種低成本、真正單片的UHF收發(fā)器,可以根據(jù)自己的需要配置MCU,使用靈活,且功耗很低,完全可以電池供電。

            (4) 它具有433/868/915 MHz3個波段載波頻率,也可以容易地設(shè)置在300—348 MHz、400—464 MHz和800—928 MHz的其他頻率上。

            該選用了C8051F310作為CCI 100的微控制器。它具有一個增強(qiáng)型外設(shè)接口(SPIO),具有訪問一個全雙工同步串行的能力,具有29個I/O端口、lO位逐次逼近型的ADC和一個25通道差分輸入多路選擇器,滿足了作為數(shù)據(jù)采集的通常需求。

            模塊與CPU是SPI口進(jìn)行通信的,只需把CCll00的SPI口接到CPU的硬件SPI口上,另外,再將CCll00的GD00或GD02也接在CPU的任意引腳上。如果想要用中斷處理收發(fā)數(shù)據(jù)或是想做無線喚醒的話,該引腳必須接在CPU的外部中斷引腳上。如圖4所示。

            

            圖4 現(xiàn)場測控C8051F310與CC1100連接示意圖

            微控制器除了完成基本的初始化工作、數(shù)據(jù)的發(fā)送和接收之外,還需要根據(jù)需要在CCll00的引腳產(chǎn)生中斷,并由所編寫的中斷管理程序進(jìn)行狀態(tài)檢測以及切換,并執(zhí)行相應(yīng)的中斷操作,使得無線通信可以在發(fā)射和接收以及待機(jī)之間切換。

            3、軟件設(shè)計

            軟件設(shè)計主要包括了通信程序模塊、無線通信部分等,其中驅(qū)動程序的設(shè)計是在LINUX下多任務(wù)操作下實(shí)現(xiàn)的,多任務(wù)系統(tǒng)中的通信程序結(jié)構(gòu)設(shè)計流程圖。如圖5所示。

            

            圖5 多任務(wù)系統(tǒng)中的總線通信程序結(jié)構(gòu)CAN總線通信程序的設(shè)計可分為發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和中斷處理3個模塊來實(shí)現(xiàn)。系統(tǒng)中CAN總線的數(shù)據(jù)發(fā)送和接收是兩個不同的線程。在驅(qū)動程序中建立數(shù)據(jù)發(fā)送和接收緩沖區(qū)。中斷處理程序只負(fù)責(zé)填充(或者讀取)緩沖區(qū)中的數(shù)據(jù),然后喚醒等待接收(或發(fā)送)數(shù)據(jù)的任務(wù)。數(shù)據(jù)的發(fā)送和接收都通過獨(dú)立的緩沖區(qū)由中斷來實(shí)現(xiàn)。操作系統(tǒng)的中斷響應(yīng)時間在軟件上決定了CAN總線數(shù)據(jù)的最快收發(fā)速度。

            MCP2510的初始化,通過函數(shù)static int MCP—device—init(void)實(shí)現(xiàn)??赏ㄟ^設(shè)置MCP2510中的CNFl、CNF2、CNF3 3個寄存器,實(shí)現(xiàn)不同時鐘下CAN總線通信波特率的設(shè)置。

            對于無線通信模塊,軟件設(shè)計主要包括09051F310的初始化和CCI 100的初始化以及接收數(shù)據(jù)程序、發(fā)送數(shù)據(jù)程序,通過寄存器的配置實(shí)現(xiàn)其頻率、通道、通信速率等的設(shè)置。函數(shù)void halRfWritePdSettings(RF SETHNGS木pRtSettings)即實(shí)現(xiàn)配置CCll00的寄存器的功能。發(fā)送數(shù)據(jù)通過函數(shù)void halRf-SendPacket(unsigned char譬txBuffer,unsigned char size)實(shí)現(xiàn),接收數(shù)據(jù)通過函數(shù)unsigned char halRfBeceivePacket(unsigned char rxBuffer,unsigned char length)實(shí)現(xiàn)。在采集模塊中為了做到低功耗還采用了隨機(jī)定時喚醒功能,這樣加上CCll00自帶的CCA功能,可以最大限度地防止信息相撞,從而達(dá)到穩(wěn)定可靠的通信狀態(tài)。

            4、結(jié)束語

            基于CAN總線和無線技術(shù)的集中監(jiān)控系統(tǒng)是數(shù)據(jù)采集、網(wǎng)絡(luò)傳輸、計算機(jī)軟件等多種技術(shù)的綜合應(yīng)用,適用于對遠(yuǎn)端現(xiàn)場環(huán)境進(jìn)行實(shí)時監(jiān)控,自動化管理,保障工業(yè)生產(chǎn)的安全穩(wěn)定運(yùn)行。而隨著網(wǎng)絡(luò)及通信技術(shù)的飛速發(fā)展,短距離無線通信以其特有的抗干擾能力強(qiáng)、可靠性高、安全性好、受地理條件限制較少、安裝施工簡便靈活等特點(diǎn),在測控系統(tǒng)中的應(yīng)用越來越廣泛,如何根據(jù)實(shí)際需要選擇合適的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),開發(fā)自己的測控系統(tǒng)成為一個越來越廣泛的課題。在該設(shè)計中采用的CCll00有其局限性,只能實(shí)現(xiàn)星形組網(wǎng),如果需要組建Mesh網(wǎng)絡(luò),可考慮把方案中的CCll00換成適用于ZIGBEE協(xié)議的CC2420芯片。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(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); })();