產品廠商新聞方案技術培訓下載招聘品牌展會視頻媒體國防軍民融合

  •  
     

    基于ARM的CAN總線智能節點的設計

    2006-07-11 21ic

        摘要:CAN總線是一種應用廣泛的實時性現場總線,提出了基于具有ARM7TDMI內核的32位微控制器的CAN總線智能節點設計方案。詳細介紹了ARM控制(LPC2294)的特點、智能節點的結構以及系統軟件設計,同時結合現場實際使用給出了硬件抗干擾措施。     關鍵詞:CAN總線 ARM 嵌入式控制器       CAN(Controller Area Network)即控制器局域網,CAN總線是國際上應用最廣泛的現場總線之一。它最早是由德國Bosch公司推出的,CAN通信協議是一種用于汽車內部測量與執行部件之間的數據通信協議。       作為一種技術先進、可靠性高、功能完善、成本合理的遠程網絡通訊控制方式,CAN總線已被廣泛應用于各個自動化控制系統中。例如,在汽車電子、自動控制、智能大廈、電子系統、安防監控等各領域中,CAN總線具有不可比擬的優越性。本設計給出CAN總線節點方案。它采用內置多路CAN總線控制器PLC2294作為主控制器,使得該節點體積小、功耗低、抗干擾性好,因而特別適用于汽車、工業控制以及醫療系統和容錯維護總線中。 1 硬件設計 1.1 LPC2294的特點       ARM7系列具有ARM7TDMI內核的32位嵌入式微處理器是目前應用很廣的嵌入式RISC處理器。該系列芯片體積小、功耗低、成本低,高性能與靈活性相結合,有較多的寄存器,提供了擴充的增強的固定長的16/32位雙指令集。用16位的Thumb指令可以節省高達35%的空間。另外它還實行注水線作業,提供嵌入式ICE2RT邏輯,支持片上斷點和調試點支持,具有先進的軟件開發和調試環境。



        本設計選用的LPC2294是PHILIPS公司新推出的一款功能強大的超低功耗的具有ARM7TDMI內核的32位微控制器。144腳封裝、兩個32位定時器、八路10位ADC、四路CAN通道和PWM通道以及多達九個的外部中斷,內部嵌入256K字節高速Flash存儲器和16K字節靜態RAM,包含76(使用了外部存儲器)~112(單片)個GPIO口。如此豐富的片上資源完全可以滿足一般的工業控制的需要,同時還可以減少系統硬件設計的復雜度。另外,LPC2294支持JTAG實時仿真和跟蹤、128位寬度的存儲器接口和獨特的加速結構,使32位代碼能夠在高達60MHz的操作頻率下運行。       LPC2294內部集成有四路CAN控制器:符合CAN規范CAN2.0B,ISO 11989-1標準:總線數據波特度均可達1Mbps;可訪問32位的寄存器和RAM;全局驗收過濾器可識別幾乎所有總線的11位和29位Rx標識符;驗收過濾器為選擇的標準標識符提供了FullCAN-style自動接收功能。       作為本設計的核心部件,LPC2294不僅擔起主控制器的作用,同時還作為CAN網絡的節點控制器,與網絡中的其它節點實現數據傳輸與交換。 1.2 CAN節點硬件電路組成       CAN節點硬件電路如圖1所示,由ARM微控制器LPC2294、CAN總線收發器TJA1050T、高速光耦6N137和電源隔離模塊B0505S等組成。       主控芯片LPC2294的晶振頻率范圍為1~30MHz。本設計選晶振頻率為20MHz,通過設置內部的VPB分頻器可以提高CPU時鐘頻率。內部256K字節的高速Flash存儲器用于代碼和數據的存儲。對于FLASH存儲器,可通過內置的串行JTAG接口進行在系統編程(ISP),或進行在應用編程(IAP)。為了便于調試和系統升級,在設計中可以預留這些接口電路。       LPC2294采用雙電源供電。CPU的供電電壓范圍為1.65~1.95V(1.8V±8.3%),I/O的供電電壓范圍為3.0~3.6V(3.3V±10%)。       收發器TJA1050T是CAN協議控制器和物理總線之間的接口,它與“ISO 11898”標準完全兼容。CANH和CANL理想配合,可使電磁輻射減到更低。除此之外,TJA1050T不上電時,總線呈現無源特性,這使得TJA1050T在性能上大大優于以前的CAN總線收發器。TJA1050T有兩種工作模式:高速模式和靜音模式(它們由引腳“S”來控制)。在高速模式中,總線輸出信號有固定的斜率,并且以盡量快的速度切換。高速模式適用于最大位速度和最大總線長度的情況,而且此時其收發器循環延遲最小。靜音模式時發送器是禁能的。它不管TxD的輸入信號。靜音模式可以防止CAN控制器不受控制時對網絡通訊造成堵塞。
    1.3 硬件的抗干擾設計       在本設計所應用的場合中,產生電磁信號的設備較多,包括超短波設備、音頻設備、電源等,因此抗干擾設備顯示尤其重要。主要采取了以下措施:       (1) 為了進一步提高CAN總線節點的抗干擾能力,保證各節點之間在電氣上是完全隔離和獨立的,LPC2294的TX0和RX0分別通過高速光耦6N137與TJA1050T的TXD的RXD相連。不過,應該特別說明的是,光耦部分電路所采用的兩個電源必須完全隔離,否則采用光耦也就失去了意義。電源的完全隔離采用小功率電源隔離模塊B0505S。電路雖復雜一些,但是卻提高了節點的穩定性和安全性。       (2) 在CAN總線的兩端加有兩個120Ω的電阻,這兩個電阻對于總線阻抗的匹配起著相當重要的作用。去掉它們會使數據通信的抗干擾性及可靠性大大降低,甚至無法通信。       (3) CANH和CANL與地之間并聯了兩個30pF的小電容,可以濾除總線上的高頻干擾并且具有一定的防電磁輻射的能力;在兩根CAN總線接入端之間并入了5.6V的TVS管,當CAN總線竄入電壓干擾時可通過TVS管的短路起到一定的過壓保護作用。       (4) 為了減小現場對節點的干擾,有用屏蔽雙絞線,且根據實際使用經驗,屏蔽電纜的屏蔽層無需接地。 2 軟件設計       軟件調試環境采用ARM公司的ARM核處理器集成開發工具ADSv1.2。ADSv1.2集成了匯編、C、C++編譯器和調試器,編譯效率高,提供了功能強大的系統庫,支持軟件調式、JTAG仿真調試及硬件調試。本設計采用的是JTAG仿真調試。       對于一般的32位ARM應用系統,在運行主程序前必須初始化運行環境,即為ARM芯片編寫啟動代碼。該啟動代碼包括異常向量表、堆棧初始化、存儲系統初始化和目標板初始化等,一般用匯編語言編寫。對于該設計來說,關鍵的是編寫CAN驅動程序。主程序只需通過調用驅動程序提供的接口來實現數據的接收和發送,驅動程序包括四部分內容:CAN控制器的初始化、接收數據、發送數據和總線異常處理。圖2為主程序流程圖。 2.1 CAN控制器初始化       初始化CAN控制器的操作包括:硬件使能、軟件復位、設備報警界限、設備總線波特率、設備中斷工作方式、設備驗收濾波器工作方式、設備工作模式并啟動CAN等。初始化程序如下: HwEnCAN(CanEum); //硬件使能,CanNum=0~3,指四路CAN控制器 SoftRstCAN(CanNum); //軟件復位寄存器 CANEWL(CanNum).Bits.EWL_BIT=USE_EWL_LAN[CanNum]; //設置錯誤警告界限 CANBTR(CanNum).Word=USE_BTR_CAN[CanNum]; //初始化波特率 VICDefVectAddr=(UINT32)CANIntPrg; //初始化中斷為非向量中斷 VICIntEnable 1=(1<<19)|(1<<(20+CanNum))|(1<<26+CanNum)); CANIER(CanNum).Word=USE_INT_CAL[CanNum]; CANAFMR.Bits.Accbp_bit=1; //配置驗收濾波器(旁路狀態,即屏蔽驗收濾波器) CANMOD(CanNum).Bits.TPM_BIT=USE_TPM_CAN[CanNum]; //初始化工作模式 CANMOD(CanNum).Bits.LOM_BIT=USE_MOD_CAN[CanNum]; SoftEnCAN(CanNum); //啟動CAN       LPC2294片內外設與引腳的連接由引腳連接模塊控制。CAN控制器的硬件使能就是通過軟件設備GPIO寄存器來控制多路開關的,將特定的引腳與CAN控制器連接起來。在設備各CAN寄存器之前必須進行軟件復位,這是因為CAN的某些寄存器必須在軟復位狀態下讀寫。       值得注意的是,LPC2294為所有的CAN控制器提供了全局接收標識符查詢功能。2KRAM可容納1024個標準標識符或者512個擴展標識符或兩種類型混合的標識符。通過軟件處理,可在該RAM中設置存放1~5個標識符表格。與獨立CAN控制器SJA1000相比,它能更容易地任意復雜的ID進行篩選過濾,滿足復雜的ID的接收過濾要求。這無疑大大減少了系統軟件設計復雜度及運行時的負擔。設置驗收濾波器工作方式,必須首選創建LUT表格,指定每個表格的起始地址,并用實際的ID地址初始化該表格。最后設定驗收過濾器模式寄存器。若該節點不主動發送數據,可選擇在總線不活動時進入睡眠模式。 2.2 數據發送       將待發送的數據打包成符合CAN協議的幀格式后,便可寫入發送緩站區,并自動發送。圖3為發送子程序流程圖。       在寫發送緩沖區前必須查詢其狀態。LPC2294中的每個CAN控制器有三個發送緩沖區,它們的狀態可通過查詢CANSR得知。只有當其中有空間的發送緩沖區即才將數據寫入。在發送大量數據時,這一步顯得尤其重要,否則發送可靠性將不能保證。啟動發送成功后,只能通過查詢CANGSR的TCS位或配置發送成功中斷來判斷數據是否發送成功。
    2.3 數據接收       接收數據可采用查詢方式或中斷方式。在某一段時間內,CAN總線并不是總是在活動,為了提高效率,可采用中斷方式。在初始化程序中必須使能接收中斷。在中斷服務子程序中,讀取CANICR,判斷是否有接收中斷標志,有則讀取接收緩沖區數據。為了防止接收緩沖區數據溢出,可開辟一個循環接收數據隊列來暫時存儲數據,主程序則通過查詢該隊列來獲得總線數據。 2.4 異常情況處理       在線總線發生嚴重故障的情況下,CAN節點有可能脫離總線,此時以下寄存器位被置位:CANSR的BS位、CANIR的BEI位和EI位(如果使能)和CANMOD的RM位。RM將許多CAN控制器功能復位和禁止。軟件下一步必須置零RM位。發送錯誤計數器將遞減計數總線釋放條件(11個連續的隱性位)的第128個事情。軟件可通過讀取Tx錯誤計數器對計數器遞減計數的情況進行監測。       在應用中,若前面傳輸到CAN控制器的數據未被讀出,而接收緩沖區又沒有及時釋放,就有可能引起后面信息的丟失。這時必須通過寫命令寄存器來清除CANSR的數據溢出位。這兩種異常可通過異常中斷來處理,只要在中斷子程序中加入處理代碼即可。其它的總線異常處理可根據使用情況決定是否在軟件中處理。       總之,軟件的編寫和規劃相當重要。ARM7TDMI指令集是基于RISC的,具有32位ARM/16位Thumb雙指SR相互調用。因此,為了提高程序代碼密度,某些對性能要求不高的代碼可用Thumb指令集編寫。       由于該方案體積小、功耗低、抗干擾性好,現已應用于電磁環境復雜的某車載通信設備中,滿足了該項目對CAN網絡點節的要求。


    分享到:
     
     
     
     
    熱門產品
     
    推薦廠商
     
    關于我們 | 聯系我們 | 廣告服務 | 版權隱私 | 積分換禮 | 友情鏈接 | 站點導航 | 違規舉報
     
    3d直选定位 广西快乐十分平台 内蒙古快三基本走势图和尾 北京pk拾赛车官网计划 股票配资平台全国招商 重庆快乐10分开奖-开奖结果 股票融资 债券融资 贵州快3走势图彩经网 宁夏十一选五走势图 快乐扑克3遗漏数据 山西十一选五走势图手机 天天红包赛可以挣钱吗 炒股投资 湖北快3走势分布图 黑龙江快乐十分尾值打法 3d试机号开奖 吉林11选五任选7多少钱