0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MPC5744p的CAN通信波特率計(jì)算

嵌入式程序員 ? 來源:嵌入式程序猿 ? 作者:嵌入式程序猿 ? 2022-07-10 17:40 ? 次閱讀

摘要

本篇筆記主要記錄MPC5744p的CAN通信波特率計(jì)算,以及需要注意的問題。

CAN 位時(shí)間

記得最早是在2015年就給大家推送過關(guān)于CAN通信波特率的設(shè)置,當(dāng)時(shí)是以NXP的kinetis系列之KV46為例子來給大家介紹的,最近推送了幾篇有關(guān)CAN通信的文章,后臺(tái)又有人問起這個(gè)問題,今天我們就來在給大家詳細(xì)普及下,今天以NXP的汽車級(jí)芯片MPC5744p的flexCAN為例,MPC系列是基于PowerPC架構(gòu)的,和ARM架構(gòu)的芯片時(shí)由區(qū)別的,但NXP家的PPC架構(gòu)和ARM架構(gòu)如果都是flexCAN的IP,那么驅(qū)動(dòng)基本上可以通用,之前的文章也可供參考。

今天我們來一步步看如何在flexcan上配置can的比特率,首先要搞明白CAN標(biāo)準(zhǔn)對(duì)位時(shí)間的定義,CAN通信波特率的計(jì)算是一個(gè)難點(diǎn),要正確計(jì)算設(shè)置CAN波特率。CAN2.0協(xié)議中定義標(biāo)稱位速率為一理想的發(fā)送器在沒有重新同步的情況下,每秒發(fā)送的位數(shù)量,也就是我們說的波特率。位時(shí)間由若干個(gè)時(shí)間單元(Tq)或者稱為時(shí)間份額組成。每一位的組成如下圖所示:

334c7fa0-f612-11ec-ba43-dac502259ad0.jpg

CAN2.0協(xié)議中規(guī)定要求每一位可以劃分為幾個(gè)不重疊時(shí)間片段,分別是:

同步段(Synchronization segment)

傳播段(Propagation segment)

相位緩沖段1(Phase segment 1)

相位緩沖段2(Phase segment 2)

同步段:

位時(shí)間的同步段用于同步總線上不同的節(jié)點(diǎn)。這一段內(nèi)要有一個(gè)跳變沿。

傳播段:

傳播段用于補(bǔ)償網(wǎng)絡(luò)內(nèi)的物理延時(shí)時(shí)間。它是總線上輸入比較器延時(shí)和輸出驅(qū)動(dòng)器延時(shí)總和的兩倍。

相位緩沖段1、相位緩沖段2(PHASESEG1、PHASE SEG2):

相位緩沖段用于補(bǔ)償邊沿階段的誤差。這兩個(gè)段可以通過重新同步加長或縮短。

采樣點(diǎn):

采樣點(diǎn)是讀總線電平并解釋各位的值的一個(gè)時(shí)間點(diǎn)。采樣點(diǎn)位于相位緩沖段1(PHASE_SEG1)之后。

除過同步段是一個(gè)時(shí)間份額外,其他幾個(gè)域都在寄存器的不同位設(shè)置,需要特別注意的一點(diǎn)是在mscan中將傳播段和相位緩沖段放在一個(gè)寄存器中設(shè)置

336e8d66-f612-11ec-ba43-dac502259ad0.jpg

更波特率配置相關(guān)的寄存器,MSCAN總線定時(shí)器0和MSCAN總線定時(shí)器1,首先來看總線定時(shí)器0

CAN波特率

對(duì)于MPC57xx系列,主要時(shí)配置寄存器CAN_CTRL1

3391ea2c-f612-11ec-ba43-dac502259ad0.png

33a00a9e-f612-11ec-ba43-dac502259ad0.png

其中PRESDIV位域就是用來設(shè)置波特率預(yù)分頻器的,也就是設(shè)置時(shí)間量子的時(shí)鐘

首先CAN控制器的時(shí)鐘由兩個(gè)入口

33c203ec-f612-11ec-ba43-dac502259ad0.png

CAN總線控制寄存器1主要就是來設(shè)置位時(shí)間的幾個(gè)域,TSEG1段用于設(shè)置傳播段和相位緩沖段1,TSEG2用于設(shè)置相位緩沖段2,搞清楚這幾個(gè)域的配置后,我們就可以來動(dòng)手配置了,例如要求配置波特率位500k,使用總線時(shí)鐘160MHz 4分頻為CAN模塊時(shí)鐘(CAN模塊時(shí)鐘也可以配置為外部晶振,推薦正式項(xiàng)目,配置為外部晶振,當(dāng)然如果你的板子有晶振的話),則我們可以配置如下:

預(yù)分頻配置為4,

傳輸段配置為7,則為8個(gè)時(shí)間量子

PSEG1 配置為7,則根據(jù)數(shù)據(jù)手冊(cè)描述,相位緩沖段1為8個(gè)時(shí)間量子 PSEG2配置為 2, 則根據(jù)數(shù)據(jù)手冊(cè)描述,相位緩沖段2為3個(gè)時(shí)間量子

根據(jù)CAN標(biāo)準(zhǔn),同步段一般為一個(gè)時(shí)間量子,

則波特率計(jì)算如下

波特率 = 1/(8 + 8 + 3 + 1) * 40000000/4 = 500kbps, 同理可配置其他波特率,當(dāng)然同一種波特率,這幾個(gè)域可以配為不同的值。也可以參考以下推送,里面有詳細(xì)的推導(dǎo)過程。

33e54398-f612-11ec-ba43-dac502259ad0.png

如果時(shí)采用SDK 配置, 那么SDK只需要填入波特率,便會(huì)主動(dòng)分配每個(gè)段的值,但是我們還是要知道和搞清楚會(huì)自己配置。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2694

    瀏覽量

    463146
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    5949

    瀏覽量

    135782
  • 波特率
    +關(guān)注

    關(guān)注

    2

    文章

    293

    瀏覽量

    34036
  • MPC5744P
    +關(guān)注

    關(guān)注

    1

    文章

    9

    瀏覽量

    8140

原文標(biāo)題:CAN波特率

文章出處:【微信號(hào):InterruptISR,微信公眾號(hào):嵌入式程序員】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    can波特率計(jì)算

    can波特率其實(shí)并不難計(jì)算,這里給出了can波特率的簡單計(jì)算,并給出了實(shí)例STM32的
    發(fā)表于 12-14 17:02 ?1.2w次閱讀
    <b class='flag-5'>can</b><b class='flag-5'>波特率</b><b class='flag-5'>計(jì)算</b>

    設(shè)計(jì)了一個(gè)關(guān)于mpc5744p板子,電路設(shè)計(jì)基本上都是按照mpc5744p電路,請(qǐng)問為什么燒寫程序燒不進(jìn)去?

    我有個(gè)問題,我設(shè)計(jì)了一個(gè)關(guān)于mpc5744p板子,電路設(shè)計(jì)基本上都是按照mpc5744p電路,為什么燒寫程序燒不進(jìn)去??
    發(fā)表于 06-29 11:45

    MPC5744P的Overlay RAM相關(guān)資料分享

    內(nèi)容提要引言1. MPC5744P的Overlay RAM工作原理介紹2 MPC5744P的Flash Overlay配置詳解2.1 平臺(tái)Flash標(biāo)定區(qū)域描述字寄存器配置字
    發(fā)表于 11-04 07:53

    如何學(xué)習(xí)MPC5744P CAN總線?

    如何學(xué)習(xí)MPC5744P CAN總線?
    發(fā)表于 02-07 08:58

    請(qǐng)問Devkit MPC5744P板上的CAN1端口在哪里?

    我需要在 Devkit MPC5744P 板上測試 Flexcan1 通信,但我只能找到 CAN0 端口。你能告訴我 CAN1 端口在哪里嗎?我找不到它。
    發(fā)表于 03-14 13:33

    如何對(duì)MPC5744P進(jìn)行編程?

    目前我正在學(xué)習(xí)如何對(duì) MPC5744P 進(jìn)行編程,但在嘗試創(chuàng)建簡單的 UART 應(yīng)用程序時(shí)目前無法解決此問題。當(dāng)我將 UART + CAN 示例用于 MPC5744P 時(shí),UART 和 CAN
    發(fā)表于 03-16 08:36

    如何驗(yàn)證MPC5744P FPU是否正常工作?

    我想知道是否啟用了 MPC5744P 浮點(diǎn)單元?我參考了一些帖子并將我的 S32DS 設(shè)置為如下所示,是否正確?以及如何選擇合適的庫支持謝謝~!
    發(fā)表于 03-23 08:51

    如何為MPC5744P配置內(nèi)存保護(hù)單元?

    我想知道更多關(guān)于如何為 MPC5744P 配置內(nèi)存保護(hù)單元,我需要知道如何使用這個(gè)配置器。
    發(fā)表于 04-04 09:03

    MPC5744P_DataSheet

    最近(2015年1月)飛思卡爾MPC5744p芯片資料,需要的速來。
    發(fā)表于 02-24 16:30 ?36次下載

    NXP MPC5744P 32位200MHzMCU開發(fā)方案

    本文介紹了MPC5744P主要特性,框圖,以及三相PSMS馬達(dá)開發(fā)板MTRCKTSPS5744P主要特性,框圖和電路圖。
    的頭像 發(fā)表于 06-17 18:54 ?2.6w次閱讀
    NXP <b class='flag-5'>MPC5744P</b> 32位200MHzMCU開發(fā)方案

    基于恩智浦MPC5744PCAN驅(qū)動(dòng)開發(fā)和測試

    摘要 本篇筆記主要記錄基于恩智浦MPC5744PCAN驅(qū)動(dòng)開發(fā)和測試,接口設(shè)計(jì),封裝為BSP驅(qū)動(dòng),為之后實(shí)現(xiàn)CAN的高層通信打下基礎(chǔ)。。 準(zhǔn)備工作 安裝S32DS for PA, 因
    的頭像 發(fā)表于 09-03 11:35 ?4156次閱讀
    基于恩智浦<b class='flag-5'>MPC5744P</b>的<b class='flag-5'>CAN</b>驅(qū)動(dòng)開發(fā)和測試

    基于恩智浦MPC5744P的SAE J1939協(xié)議棧開發(fā)

    的,MPC5744P 支持CAN2.0B。CAN 的高層協(xié)議,J1939 是基于CAN2.0B的擴(kuò)展幀,29位標(biāo)識(shí)符,支持單幀和多幀收發(fā)通信
    的頭像 發(fā)表于 09-24 16:15 ?8156次閱讀
    基于恩智浦<b class='flag-5'>MPC5744P</b>的SAE J1939協(xié)議棧開發(fā)

    恩智浦MPC5744P微控制器芯片手冊(cè)

    恩智浦MPC5744P微控制器芯片手冊(cè)免費(fèi)下載。
    發(fā)表于 03-04 16:06 ?23次下載

    MPC5744pCAN通信波特率如何計(jì)算

    本篇筆記主要記錄MPC5744pCAN通信波特率計(jì)算,以及需要注意的問題
    的頭像 發(fā)表于 01-20 14:58 ?1955次閱讀
    <b class='flag-5'>MPC5744p</b>的<b class='flag-5'>CAN</b><b class='flag-5'>通信</b><b class='flag-5'>波特率</b>如何<b class='flag-5'>計(jì)算</b>

    基于恩智浦MPC5744P的電機(jī)FOC控制中電流的采樣

    本篇筆記主要記錄基于恩智浦MPC5744P的電機(jī)FOC控制中電流的采樣。
    的頭像 發(fā)表于 04-20 14:17 ?2039次閱讀
    基于恩智浦<b class='flag-5'>MPC5744P</b>的電機(jī)FOC控制中電流的采樣