新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于MCU的室外移動機器人組合導航定位系統

        基于MCU的室外移動機器人組合導航定位系統

        ——
        作者: 時間:2015-05-08 來源:網絡 收藏

          2.5 SPI轉UART電路

        本文引用地址:http://www.104case.com/article/273857.htm

          由于的片上UART資源都被IMU器件和接收機占用,因此需要擴充一個UART接口才能滿足定位系統與PC機間的通信。為此將上的GPIO模擬SPI,再通過MAX3111E芯片轉成UART接口。

          MAX3111E是MAXIM公司推出的全功能收發器,內部包含UART和RS232電平轉換兩個獨立的部分。UART部分包括兼容于SPI的串行接口、可編程波特率發生器、發送移位寄存器、接收移位寄存器、8字長的FIFO以及4種可屏蔽中斷發生器;RS232部分包括電泵電容、硬件關斷(SHDN管腳),具有±15kV靜電保護作用。它可以選擇1.8432MHz或3.6864MHz兩種晶振作為外部晶振,芯片能夠工作在300bps~230kbps波特率,本文使用的是3.6864MHz晶振。MAX3111E與連接電路如圖5.

          

         

          圖5 SPI轉UART電路

          MAX3111E的控制命令分為寫配置命令、讀配置命令、寫數據命令以及讀數據命令四種。本文寫入芯片的配置命令是0xE809,8bit數據長度、使能FIFO、發送中斷使能、波特率38400bps.數據的寫入需要在每個字節前面加上0x81,例如若要發送字節0x55,則需要從DIN端移位輸入0x8155.

          下面是連續發送n個字節的C語言代碼:

          SPI_WRITE_16BIT(0xE809);//寫配置命令

          delay_ms(10);//延時10ms

          SPI_WRITE_16BIT(0x8100+DATA1);//發送第1個數據DATA1

          delay_ns(250);//延時250ns

          SPI_WRITE_16BIT(0x8100+DATA2);//發送第2個數據DATA2

          ……

          delay_ns(250);//延時250ns

          SPI_WRITE_16BIT(0x8100+DATAn);//發送第n個數據DATAn

          使用MAX3111E時需要注意:

          1、片選信號CS的下降沿到時鐘SCLK信號的第一個上升沿至少要有100ns的時間延遲;

          2、芯片判定片選信號CS失效時,需要CS管腳保持高電平的時間至少為200ns.因此當需要連續發送數據時,兩個寫數據命令之間至少需要200ns,建議間隔250ns;

          3、寫配置命令需要晶振工作穩定,因此可以在寫配置命令后再讀配置,直到寫入和讀出的配置數據相應位相同時才保證芯片按需求配置完畢。

          3軟件設計

          3.1 GPIO模擬SPI實現方法

          使用GPIO模擬SPI,對選定的IO口進行時序上的電平操作,模擬出SPI時序。本文將SPI的電平操作采用宏定義的方式,可參考表3中的源代碼。

          

         

          程序按照SPI邏輯關系使用上述的宏定義,可以在選定的IO端口產生SPI信號,并且可以靈活的控制每個CS有效期間的時鐘數。使用GPIO模擬的SPI具有操作直觀、靈活可變等優點。相比較模擬得到的SPI,控制器上自帶的SPI接口基本不占用控制器資源,發送和接收的移位、時鐘信號的產生都交由內部SPI模塊處理。而GPIO模擬的SPI需要控制器不斷對IO進行操作,因此會占用控制器處理時間。時鐘信號也因對電平操作消耗機器周期,導致時鐘信號速度有限。

        c語言相關文章:c語言教程


        加速度計相關文章:加速度計原理


        關鍵詞: MSP430F149 GNSS

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 普格县| 龙川县| 彭阳县| 山丹县| 通河县| 湄潭县| 夹江县| 贵阳市| 托克逊县| 旬阳县| 平江县| 康定县| 滨海县| 成安县| 蓝山县| 塔城市| 浏阳市| 宝鸡市| 福建省| 廊坊市| 建湖县| 波密县| 常州市| 黄冈市| 桃园市| 额济纳旗| 通海县| 噶尔县| 石林| 海晏县| 海原县| 黄陵县| 通海县| 攀枝花市| 铜梁县| 海盐县| 江华| 湛江市| 平潭县| 宁蒗| 郁南县|