• 
    

    
    

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

      PIC32MX單片機的無同步時鐘電路HBS通信設(shè)計

      2018-04-11 09:13:57,
      關(guān)鍵詞:波特率數(shù)組字節(jié)

      ,

      (青島海信日立空調(diào)系統(tǒng)有限公司,青島 266510)

      引 言

      HBS通信具有無極性接線、抗干擾性強、傳輸距離長等優(yōu)點,是商用空調(diào)領(lǐng)域重要的總線通信方式。但是HBS通信對主芯片具有同步時鐘輸出的要求[1],限制了主芯片的選型。

      1 原理分析

      1.1 HBS異步串行信號的分析

      從圖1(a)可以看出,Uart發(fā)送數(shù)據(jù)時,除了數(shù)據(jù)主體D0~D7,還有起始位、奇偶校驗位和1~2個停止位[3]。起始位為低電平“0”,停止位為高電平“1”。為了敘述方便,后面的數(shù)據(jù)如無特別聲明,均以1個停止位、9 600 bps波特率為默認(rèn)的數(shù)據(jù)結(jié)構(gòu)及傳輸速率。

      圖1(b)顯示的是同步時鐘信號,此信號的波特率是發(fā)送數(shù)據(jù)的兩倍,當(dāng)數(shù)據(jù)波特率為9 600 bps時,同步時鐘信號的波特率為19 200 bps。

      圖1 異步串行信號波形圖

      圖1(c)是原數(shù)據(jù)與同步時鐘信號調(diào)制后的波形,此波形輸入到MM1192芯片的6引腳。

      圖1(d)是HBS的差分信號,即屏蔽雙絞線中測出的信號波形。

      需要注意的是,UART是先發(fā)D0后發(fā)D7,而SPI(Serial Peripheral Interface)則相反,是先發(fā)D7后發(fā)D0。

      1.2 同步信號模擬異步信號的原理分析

      無論使用同步發(fā)送異步接收法還是PWM模擬同步時鐘法,都需要確保圖1(d)中的HBS差分信號是相同的。PIC32MX系列單片機雖然無同步時鐘端口,但是使用SPI同步時鐘發(fā)送的方法,適當(dāng)?shù)倪M行數(shù)據(jù)變換,可以實現(xiàn)和圖1(c)相同的信號波形,輸入MM1192的6引腳。從而在通信數(shù)據(jù)線中得到和圖1(d)相同的HBS差分信號波形。

      此方法成功的關(guān)鍵是進行準(zhǔn)確的數(shù)據(jù)變換,11個數(shù)據(jù)引腳調(diào)制后是22個引腳,最少需要3個字節(jié)24引腳,再加上一個延時字節(jié),共4個字節(jié)。通常有兩種變換方法:一是將起始位單獨變換為1個字節(jié),數(shù)據(jù)位變換為2個字節(jié),奇偶校驗位及停止位變換為最后一個字節(jié),如圖2所示的劃分;二是從起始位到停止位,按順序每8個引腳劃為一個字節(jié),如圖3所示。由于第1種數(shù)據(jù)變換方式實現(xiàn)上相對簡單,本次設(shè)計采用第1種方式。

      圖2 第1種數(shù)據(jù)變換分組方式

      圖3 第2種數(shù)據(jù)變換分組方式

      2 同步無調(diào)制發(fā)送異步接收HBS的硬件設(shè)計

      2.1 MM1192的功能分析

      本次設(shè)計應(yīng)用MITSUMI生產(chǎn)的SOP MM1192通信芯片。該芯片主要由發(fā)送和接收兩部分組成。接收部分的工作原理為:MM1192通過pinl5-IN(2)、pinl6-IN(1)采集總線上的差分信號,之后與芯片內(nèi)部的2.5 V相比較,再將比較結(jié)果放大后轉(zhuǎn)換為“1”或“0”數(shù)字信號,最終在pin1-Reception DATA OUT腳輸出。發(fā)送部分工作原理為:MM1192通過pin6-DATA IN腳采集“1”或“0”數(shù)字信號,之后經(jīng)過觸發(fā)器判斷高低電平,再通過與非門觸發(fā)內(nèi)部三極管導(dǎo)通,最終在pin9-OUT(A)和pinl0-OUT(B)輸出模擬差分信號,實現(xiàn)數(shù)據(jù)的差分信號傳輸[4]。

      2.2 硬件電路的設(shè)計

      由于接收部分采用以前的成熟電路,而且接收信號也無變化,不作展開分析,只對發(fā)送部分電路進行分析及再設(shè)計,如圖4、圖5所示。

      圖4 異步有同步時鐘的發(fā)送電路

      圖5 同步無調(diào)制發(fā)送電路

      原電路如圖5所示,通過三極管的組合實現(xiàn)邏輯和運算。其中Q23、Q24通過異或連接,其邏輯運算關(guān)系如下:

      根據(jù)德摩根定理有以下運算成立:

      這個邏輯非由Q25實現(xiàn)。

      變更后電路如圖5所示,由于PIC32MX系列芯片SPI在空閑時是低電平[3],而MM1192的空閑信號輸入要求是高電平,所以新電路需要保留一個三極管在輸入MM1192之前進行電平反轉(zhuǎn)。R151作為芯片輸出信號的上拉電阻,C142作為濾波電容也保留。

      3 同步無調(diào)制發(fā)送異步接收HBS的軟件設(shè)計

      3.1 UART及SPI端口的初始化

      同步無調(diào)制發(fā)送異步接收通信模塊的軟件流程圖如圖6所示,其中初始化和翻譯表制作是重要的環(huán)節(jié),進行詳細(xì)說明。

      圖6 軟件流程圖

      UART初始化如下:

      SYS_INT_Disable(); //初始化時,先關(guān)掉所有中斷

      U1BRG = 259;//40 MHz的設(shè)定主頻時,波特

      //率為9600bps

      U1MODEbits.PDSEL=2;//首字節(jié)奇校驗接收

      U1MODEbits.STSEL =0;//1個停止位

      U1STAbits.URXEN=1;//允許接收

      IEC1bits.U1RXIE=1;//允許接收中斷觸發(fā)

      U1STAbits.UTXEN=0;//UART的發(fā)送中斷是不需要

      //的,關(guān)閉

      IEC1bits.U1TXIE=0;//UART的發(fā)送中斷使能是不

      //需要的,關(guān)閉

      SPI初始化如下:

      SPI_BaudRateSet(&SPI1BRG,&SYS_CLK_Frequency, 19200 );

      //19200bps波特率設(shè)定,兩倍頻于UART接收頻率

      SPI1CON = 0x18030;

      SPI1CONbits.MODE32 = 1;//使用32位寄存器發(fā)送模式

      SPI2CONbits.STXISEL =1;

      SPI2CONbits.ON = 1;

      SYS_INT_Enable();//初始化結(jié)束后,打開所有中斷

      同步串口通信沒有起始位、停止位和奇偶校驗位,所以和異步串口通信不同,不需要相關(guān)的軟件設(shè)置[5]。由于SPI發(fā)送沒有外部的調(diào)制電路,需要兩倍頻于UART的設(shè)置,才可以得到相同的波形。

      3.2 異步轉(zhuǎn)同步翻譯表的制作

      首先,需要定義5個unsigned char型數(shù)組,用于存放異步轉(zhuǎn)同步時查表的數(shù)據(jù)。本設(shè)計翻譯表的制作采用圖2的分組方法。

      Table0[256]——此數(shù)組用于存儲起始位“0”的轉(zhuǎn)化數(shù)據(jù),因為0~255所有數(shù)據(jù)的起始位均相同,所以此數(shù)組中的所有數(shù)據(jù)均為0x01。

      Table1[256]——此數(shù)組用于存儲原始數(shù)據(jù)中的D0、D1、D2、D3 。由于UART和SPI數(shù)據(jù)發(fā)送的數(shù)據(jù)順序相反[3,5],而且外部電路SPI發(fā)送少了一組三極管反向,需要將原二進制數(shù)據(jù)左右顛倒,然后再“0”或“1”反轉(zhuǎn)。此部分?jǐn)?shù)據(jù)轉(zhuǎn)化的實現(xiàn)使用了Turbo C軟件編程。轉(zhuǎn)化結(jié)果如下:

      const unsigned char Table1[256]={//第二字節(jié) D0~D3

      0x55,0x15,0x45,0x5,0x51,0x11,0x41,0x1,0x54,0x14, //0~9

      0x44,0x4,0x50,0x10,0x40,0x0,0x55,0x15,0x45,0x5,//10~19

      0x51,0x11,0x41,0x1,0x54,0x14,0x44,0x4,0x50,0x10, //20~29

      0x40,0x0,0x55,0x15,0x45,0x5,0x51,0x11,0x41,0x1,//30~39

      0x54,0x14,0x44,0x4,0x50,0x10,0x40,0x0,0x55,0x15, //40~49

      0x45,0x5,0x51,0x11,0x41,0x1,0x54,0x14,0x44,0x4,//50~59

      0x50,0x10,0x40,0x0,0x55,0x15,0x45,0x5,0x51,0x11, //60~69

      0x41,0x1,0x54,0x14,0x44,0x4,0x50,0x10,0x40,0x0,//70~79

      0x55,0x15,0x45,0x5,0x51,0x11,0x41,0x1,0x54,0x14, //80~89

      0x44,0x4,0x50,0x10,0x40,0x0,0x55,0x15,0x45,0x5,//90~99

      0x51,0x11,0x41,0x1,0x54,0x14,0x44,0x4,0x50,0x10, //100~109

      0x40,0x0,0x55,0x15,0x45,0x5,0x51,0x11,0x41,0x1,//110~119

      0x54,0x14,0x44,0x4,0x50,0x10,0x40,0x0,0x55,0x15, //120~129

      0x45,0x5,0x51,0x11,0x41,0x1,0x54,0x14,0x44,0x4,//130~139

      0x50,0x10,0x40,0x0,0x55,0x15,0x45,0x5,0x51,0x11, //140~149

      0x41,0x1,0x54,0x14,0x44,0x4,0x50,0x10,0x40,0x0,//150~159

      0x55,0x15,0x45,0x5,0x51,0x11,0x41,0x1,0x54,0x14, //160~169

      0x44,0x4,0x50,0x10,0x40,0x0,0x55,0x15,0x45,0x5,//170~179

      0x51,0x11,0x41,0x1,0x54,0x14,0x44,0x4,0x50,0x10, //180~189

      0x40,0x0,0x55,0x15,0x45,0x5,0x51,0x11,0x41,0x1,//190~199

      0x54,0x14,0x44,0x4,0x50,0x10,0x40,0x0,0x55,0x15, //200~209

      0x45,0x5,0x51,0x11,0x41,0x1,0x54,0x14,0x44,0x4,//210~219

      0x50,0x10,0x40,0x0,0x55,0x15,0x45,0x5,0x51,0x11, //220~229

      0x41,0x1,0x54,0x14,0x44,0x4,0x50,0x10,0x40,0x0,//230~239

      0x55,0x15,0x45,0x5,0x51,0x11,0x41,0x1,0x54,0x14, //240~249

      0x44,0x4,0x50,0x10,0x40,0x00 //250~255

      };

      Table2[256]——此數(shù)組用于存儲原始數(shù)據(jù)中的D4、D5、D6、D7 。此部分的轉(zhuǎn)化和Table1[256]相似。轉(zhuǎn)化結(jié)果如下:

      const unsigned char Table2[256]={//第三字節(jié) D4、D5、D6、D7

      0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,//0~9

      0x55,0x55,0x55,0x55,0x55,0x55,0x15,0x15,0x15,0x15,//10~19

      0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,//20~29

      0x15,0x15,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,//30~39

      0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x5,0x5,//40~49

      0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,//50~59

      0x5,0x5,0x5,0x5,0x51,0x51,0x51,0x51,0x51,0x51,//60~69

      0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,//70~79

      0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,//80~89

      0x11,0x11,0x11,0x11,0x11,0x11,0x41,0x41,0x41,0x41,//90~99

      0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,//100~109

      0x41,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,//110~119

      0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x54,0x54,//120~129

      0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,//130~139

      0x54,0x54,0x54,0x54,0x14,0x14,0x14,0x14,0x14,0x14,//140~149

      0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,//150~159

      0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,//160~169

      0x44,0x44,0x44,0x44,0x44,0x44,0x4,0x4,0x4,0x4,//170~179

      0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,

      //180~189

      0x4,0x4,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,//190~199

      0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x10,0x10,//200~209

      0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,//210~219

      0x10,0x10,0x10,0x10,0x40,0x40,0x40,0x40,0x40,0x40,//220~229

      0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,//230~239

      0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

      //240~249

      0x0,0x0,0x0,0x0,0x0,0x0

      //250~255

      };

      Table30[256]——此數(shù)組用于存儲原始數(shù)據(jù)中的奇偶校驗位和停止位。由于數(shù)據(jù)發(fā)送時,頭碼使用奇校驗,后面的數(shù)據(jù)使用偶校驗,所以需要做成兩個數(shù)組。此數(shù)組為奇校驗翻譯表,后面的Table31是偶校驗翻譯表。這兩個數(shù)組全部由0x40和0x00組成,只是0x40和0x00在數(shù)組中的位置不同。

      Table31[256]——此數(shù)組用于存儲原始數(shù)據(jù)偶校驗位和停止位。

      舉例說明:當(dāng)HBS通信需要發(fā)送數(shù)據(jù)頭碼“0x23”時,需要以19 200bps的波特率連續(xù)發(fā)送 Table0[0x23]、Table1[0x23]、Table2[0x23]、Table30[0x23]。

      3.3 問題及解決

      問題1的現(xiàn)象為軟件里計數(shù)器顯示,在發(fā)送ACK第2個字節(jié)時,示波器上才出現(xiàn)第1個字節(jié)的波形。此時SPIxCONbit.STXISEL=0x00,本意是最后一個位移出SPISR寄存器后進入發(fā)送中斷[5]。但是經(jīng)過測試發(fā)現(xiàn),數(shù)據(jù)剛放進SPIx發(fā)送緩存區(qū)SPIxBUF,就觸發(fā)了發(fā)送中斷。

      發(fā)送中斷中的發(fā)送數(shù)據(jù)計數(shù)器為2時,實際上第1個字節(jié)才剛剛發(fā)完,導(dǎo)致軟件的自發(fā)自收檢測出錯。問題的原因是SPIxCONbit.STXISEL=0x00起作用是有條件的,需要使能增強緩存器模式才有效[5]。最后,將SPIxCON寄存器的bit16設(shè)置為1,將SPIx設(shè)置為增強模式后,問題解除。

      問題2的現(xiàn)象為,用Checker串口監(jiān)測軟件不能正常顯示出最后一位字節(jié)。但是用示波器看波形時,最后一個字節(jié)已經(jīng)發(fā)送了,對方設(shè)備也回復(fù)了信息。

      一幀數(shù)據(jù)被發(fā)送完畢,發(fā)送中斷被立即關(guān)閉,導(dǎo)致軟件一直處于發(fā)送未完成的狀態(tài)。因為發(fā)送完畢標(biāo)記位通常在發(fā)送中斷中處理,關(guān)閉中斷后就無法進入發(fā)送中斷了。確保發(fā)送完畢標(biāo)記位已經(jīng)設(shè)置完成后,再關(guān)閉發(fā)送中斷,問題解除。

      4 測試結(jié)果與分析

      分別測試原波形和本文設(shè)計的同步無調(diào)制發(fā)送的波形(單片機發(fā)送I/O口和兩根通信線間的差分信號)。實際波形如圖7和圖8所示,非常相近,都可以被正常接收。本設(shè)計在進行數(shù)據(jù)翻譯時,在每個字節(jié)之間有意加入了一些延時,使得通信波形更容易被接收端識別響應(yīng)。此方法發(fā)送的數(shù)據(jù),每個字節(jié)之間有0.9 ms的延時,可以改變翻譯表的分組方法,去掉延時來縮短字節(jié)間的時隙。經(jīng)過測試確認(rèn),字節(jié)之間少量的延時可令數(shù)據(jù)通信更加穩(wěn)定。

      圖7 有同步時鐘信號的發(fā)送數(shù)據(jù)和差分信號波形

      圖8 同步無調(diào)制發(fā)送和差分信號波形

      [1] 金國華. 通信芯片MM1192在多聯(lián)機控制系統(tǒng)中的應(yīng)用[J].重慶工學(xué)院學(xué)報,2009,23(4).

      [2] 李希志,曹銳,張獻(xiàn)林,等.無時鐘同步信號單片機實現(xiàn)HOMEBUS總線通信的方法:中國,201110256025.4[P].2018-01-8.

      [3] Microchip. PIC32MX系列單片機手冊, 2014.

      [4] MITSUMI.HBS-Compatible Driver and Receiver Monolithic IC MM1192,2017.

      [5] Microchip.Section 23 Serial Peripheral Interface(SPI), DS61106G.

      石靖峰(碩士),主要從事中央空調(diào)控制系統(tǒng)研發(fā)工作。

      猜你喜歡
      波特率數(shù)組字節(jié)
      JAVA稀疏矩陣算法
      電腦報(2022年13期)2022-04-12 00:32:38
      No.8 字節(jié)跳動將推出獨立出口電商APP
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      電腦報(2020年24期)2020-07-15 06:12:41
      CAN 總線波特率自適應(yīng)程序設(shè)計
      智能制造(2020年5期)2020-07-03 06:24:00
      No.10 “字節(jié)跳動手機”要來了?
      基于FPGA的異步串行通信波特率容錯設(shè)計
      電子測試(2018年7期)2018-05-16 06:27:18
      簡談MC7字節(jié)碼
      尋找勾股數(shù)組的歷程
      C*Core芯片SCI串口波特率容限優(yōu)化
      VB數(shù)組在for循環(huán)中的應(yīng)用
      考試周刊(2012年88期)2012-04-29 04:36:47
      南陵县| 剑河县| 绥棱县| 米易县| 关岭| 西和县| 石楼县| 黔东| 石棉县| 苗栗县| 南宫市| 广灵县| 清流县| 东方市| 岳西县| 岱山县| 普兰店市| 固安县| 博客| 松溪县| 大洼县| 教育| 师宗县| 德格县| 平顶山市| 阿荣旗| 墨玉县| 安龙县| 广德县| 张掖市| 华蓥市| 于都县| 和政县| 临湘市| 清河县| 安陆市| 民和| 云霄县| 堆龙德庆县| 伊春市| 黄石市|