<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

      CANoe CAN采樣點測試方法及誤差分析

      0
      分享至

      在車載控制器中,CAN采樣點的測試是控制器的基本測試之一,那CAN總線的采樣點一般怎么測試呢?今天一起來捋一捋。

      首先CAN報文的位將分割為同步段(Sync Segment)、時間片段 1(TSEG1 Segment)和時間片段 2(TSEG2 Segment)。這些片段由不同數(shù)量的 TQ 組成, TQ 為該總線電平中最小的時間單位。預(yù)分頻(Prescaler)值以及收發(fā)器使用的時鐘頻率直接影響了一個位長度的總 TQ 數(shù)量。采樣點位置將由各個片段中 TQ 的數(shù)量計算得到。


      1 個位中包含 8 或 16 個 TQ 的分段示意圖

      采樣點的理論計算值可由下式得到:

      = ( + 1)/( + 1 + 2)

      在此必須知道所使用的 CAN 時鐘頻率,以此來計算一個標(biāo)稱位時間所使用的總 TQ 數(shù)量。

      例如:若一個 TQ 的長度為 0.0625us,時鐘頻率是 16MHz(通常 CAN 所使用的時鐘頻率),預(yù)分頻數(shù)為1。這就導(dǎo)致在 500kBaud 下一個位含有 32 個 TQ。若預(yù)分頻數(shù)為 2,則一個位包含 16 個 TQ。

      同步段(Sync Segment)在任何情況下均僅為 1 個 TQ 長度,剩余的 TQ 將會被分為 TSEG1 和 TSEG2。

      例如:若一個位的總 TQ 數(shù)為 16,采樣點位置為 75%,則 TSEG1 的 TQ 數(shù)為 11, TSEG2 的 TQ 數(shù)為 4。

      CAN采樣點測試的原理是節(jié)點判斷信號邏輯電平的位置,對 CAN總線來說極其重要,尤其是在一個CAN網(wǎng)絡(luò)里,多個節(jié)點要保持同一個采樣點。如果其中一個偏差較大,有可能使整個網(wǎng)絡(luò)出現(xiàn)故障,所以對 CAN節(jié)點進行采樣點的測試顯得尤為重要,采樣點測試目的用于檢查控制器的采樣點設(shè)置是否遵守規(guī)范要求。

      采樣點的位置不受控制器所處的收發(fā)狀態(tài)影響,故針對采樣點測試既可以干擾控制器發(fā)送的指定報文的某個位,也可以通過測試工具發(fā)送特定干擾報文去檢測控制器的行為。

      下面以CANoe發(fā)送特定干擾報文的方法為例。VH6501 在檢測到總線空閑時,發(fā)送較高優(yōu)先級的特定干擾報文,完成一個干擾循環(huán)。每次干擾循環(huán)發(fā)送結(jié)束,微調(diào) CRC Delimiter 位長度,使其逐次縮短,導(dǎo)致后一位 ACK Slot前移,并將 ACK Slot 長度增加,保證整幀報文的長度不變。當(dāng)顯性位電平由后往前,移至 DUT 采樣點位置,會被 DUT 采到并判定 CRC Delimiter 位為高電平,出現(xiàn)格式錯誤,DUT 隨即發(fā)送錯誤幀,并被 CANoe 采集到。另外每次干擾循環(huán)結(jié)束, VH6501 將發(fā)送 30 次控制器正常接收的任意一幀正常報文,從而使 DUT 始終保持 Error Active 狀態(tài),因其主動錯誤幀容易辨認(rèn)。


      那CANoe工程如何配置呢?首先打開軟件后,選擇CANoe的示例工程Disturbance SamplePoint Test (CAN)。進入工程后,將 VH6501 通道分配給軟件通道 CAN1,在下圖所示界面設(shè)置 Mode 為 CAN,并勾選 Activate 選項使能 VH6501 總線干擾功能。


      VH6501 的采樣點設(shè)置盡量靠前,確保優(yōu)先干擾到控制器的采樣點,此處BTL Cycles(指的是TQ數(shù)量,將一個位分為16個TQ) 和SJW(同步跳變寬度) 要選擇數(shù)值較大的組合,可參考下圖配置。


      配置完成之后,就可以寫capl測試腳本了。

      /*@!Encoding:936*/
      includes
      {
      
      }
      variables
      {
      CanDisturbanceFrameTrigger frameTrigger;
      CanDisturbanceFrameSequence frameSequence;
      CanDisturbanceSequence sequence;
      CanDisturbanceTriggerRepetitions repetitions;
      const int repetition_times_in_one_cycle = 10;
      //Number of disturbance repetitions in a cycle
      long result;
      long errfrmcount; //The error frame count in one cycle
      long first_err_bit_length,first_error_occur, ten_error_occur;
      long validityMask;
      long cycleFlag;
      message 0x100 triggerMessage; //The trigger
      message.(ID is not important.)
      message 0x0 spTestMsg; //The disturbance frame sequence which CRC DEL need to be shorten.
      message 0x1 Keep_DUT_ErrorActive;
      const long CountMsgKeepErrorActive = 30;
      long MsgCntKeepErrorActive = 0;
      char spTestDone[33] = "SPDone";
      }
      on errorFrame
      {
      if(this.msgChannel == @sysvar::CANDisturbanceInterface1::ChannelNo)
      {
      errfrmcount++;
      if((errfrmcount == 1) && (first_error_occur == 0))
      {
            first_err_bit_length = frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0];
      first_error_occur = 1;
      write("+++++++++First error frame occurs+++++++++++.");
      }
      if(errfrmcount == repetition_times_in_one_cycle)
      {
      ten_error_occur = 1;
      testSupplyTextEvent(spTestDone);
      }
      }
      }
      
      on message 0x1
      {
      if(MsgCntKeepErrorActive <= CountMsgKeepErrorActive)
      {
      ++MsgCntKeepErrorActive;
      output(Keep_DUT_ErrorActive);
      }
      else
      {
      ActivateTriggerAgain();
      }
      }
      
      void ActivateTriggerAgain()
      {
      if(ten_error_occur == 0)
      {
      errfrmcount = 0;
      //CRC Delimiter is shorten with 6.25ns per cycle.
          --frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0];
      ++frameSequence.AckSlot.BitSequence[0].segmentLength[0];
      result = canDisturbanceTriggerEnable(@sysvar::CANDisturbanceInterface1::DeviceNo,frameTrigger, frameSequence, repetitions);
      if(result == 1)
      {
      write("Trigger is enabled,
      frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] = %d",
      frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0]);
      }
      else
      {
      write("Enable trigger error Result = %d", result);
      }
      }
      }
      
      on sysvar sysvar::CANDisturbanceInterface1::Trigger::State
      {
      //6501 is Idle after repetition_times_in_one_cycle finish
      if(@sysvar::CANDisturbanceInterface1::Trigger::State == 0)
      {
          //At the end of each disturbance cycle, the VH6501 need to outputsome normal message to prevent the DUT from being in a passive error state
          //because the passive error frame is not easily to be observed and
      //identified.
      MsgCntKeepErrorActive = 0;
      output(Keep_DUT_ErrorActive);
      }
      }
      
      testcase SamplePointTest_forVH6501()
      {
      first_error_occur = 0;
      ten_error_occur = 0;
      errfrmcount = 0;
      cycleFlag = 1;
        frameSequence.SetMessage(@sysvar::CANDisturbanceInterface1::DeviceNo,spTestMsg);
      validityMask = 0; //trigger on any CAN messages
      frameTrigger.SetMessage(triggerMessage,
      @sysvar::CANDisturbanceInterface1::DeviceNo, validityMask);
      frameTrigger.TriggerFieldType =
      @sysvar::CanDisturbance::Enums::FieldType::EndOfFrame;
        frameTrigger.TriggerFieldOffset = 9; //Trigger position is the thirdbit of IFS.
      write("CRC Delimiter Bit Length = %d",
        frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0]);
      repetitions.Cycles = 1;
      repetitions.HoldOffCycles = 0;
      repetitions.HoldOffRepetitions = 0;
      repetitions.Repetitions = repetition_times_in_one_cycle;
        result = canDisturbanceTriggerEnable(@sysvar::CANDisturbanceInterface1::DeviceNo,frameTrigger,frameSequence,repetitions);
      
      if(result == 1)
        {
      write("Trigger is enabled.");
        }
      else
      {
      write("Enable trigger error Result = %d", result);
      }
      result = testWaitForTextEvent(spTestDone, 10000);
      if(result == 1)
      {
      write("frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] = %d
      , sample point lies in %f%%~%f%%",
      frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0],
      (frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] * 100.00) /
      frameSequence.DLC.BitSequence[1].segmentLength[0], (first_err_bit_length *
      100.00) / frameSequence.DLC.BitSequence[1].segmentLength[0]);
      }
      }
      
      void maintest()
      {
      SamplePointTest_forVH6501();
      }

      那采樣點的測試結(jié)果一般受什么影響呢?一般來說受3個因素影響。


      在總線信號和 RxD 引腳信號上影響采樣點測試結(jié)果的因素示意圖

      ?指VH6501每次縮短或增長的步進長度。

      ?指控制器的CAN參數(shù)配置中一個TQ的時間長度。

      ?指總線上一個位的電平長度與控制器內(nèi)部主控芯片 RxD 引腳上的一個位電平長度的時間差。? = () - ()

      如果一個 CAN 的設(shè)備使用的時鐘對應(yīng)的最小 TQ 時間長度在?的范圍內(nèi),并且實際 TQ 配置在此范圍內(nèi),則?所帶來的誤差需要考慮在采樣點測試的結(jié)果中 。ISO11898-2: 2015規(guī)定了在2MBaud下,規(guī)定了?的允許范圍為-65ns 到+40ns。而對于 2MBaud下,一個位時間長度為500ns, 這意味著在RxD引腳上的為時間長度將會比在總線上的為時間長度短13%或長 8%。而 TQ 時間長度的計算公式為:? =/

      如果在 2MBaud 下, 一個 TQ 的時間長度小于一個位的 13%, 則?將會被考慮進采樣點測試的結(jié)果當(dāng)中。具體的誤差將取決于 CAN 發(fā)送器和使用的波特率。

      假設(shè) CAN 時鐘頻率為 80MHz, ?為 25ns,預(yù)分頻(Prescaler) 為 1, ?為 12.5ns, ?為6.25ns。仲裁相為 500kBaud,數(shù)據(jù)相為 2MBaud。

      這意味著?所帶來的誤差在仲裁相為 1.25%,在數(shù)據(jù)相則會上升到 5%(由于單個位時間長度縮短了) 。這幾乎相當(dāng)于 2 個 TQ 的時間長度。測試工具 VH6501 步進長度?所帶來的誤差分別為0.3125%和 1.25%。

      由于 CAN 協(xié)議 11898 中并未規(guī)定重同步后跳變沿一定要在同步段(Sync Segment) 的哪個位置,從同步段(Sync Segment) 的開始到結(jié)束均可以,因此這會帶來 1 個 TQ 的誤差。在仲裁相和數(shù)據(jù)相中帶來的誤差分別為 0.625%和 2.5%。

      因此綜上所述,在仲裁相中總的最大誤差為 2.1875%(1.25% + 0.3125% + 0.625%) ,在數(shù)據(jù)相中總的最大誤差為 8.75%(5% + 1.25% + 2.5%)。

      由上可知, 由 VH6501 所帶來的誤差所占比例是很小的。而大部分是由于 CAN 協(xié)議本身所帶來的誤差。

      -end-

      分享不易,懇請點個【】和【在看】

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點推薦
      2026年最神的神童

      2026年最神的神童

      木子默
      2026-02-23 20:46:54
      你啥時候意識到錢的重要性?網(wǎng)友:錢能解決85%以上的雞毛蒜皮事

      你啥時候意識到錢的重要性?網(wǎng)友:錢能解決85%以上的雞毛蒜皮事

      帶你感受人間冷暖
      2026-02-23 01:22:30
      馬筱梅順利產(chǎn)子!汪小菲喜提三娃,玥兒希箖暖心迎弟引全網(wǎng)熱議

      馬筱梅順利產(chǎn)子!汪小菲喜提三娃,玥兒希箖暖心迎弟引全網(wǎng)熱議

      清衣渡a
      2026-02-25 03:47:07
      繼張本智和反華拜鬼,被官媒點名后,石川佳純也走上了他的老路

      繼張本智和反華拜鬼,被官媒點名后,石川佳純也走上了他的老路

      姩姩有娛
      2026-02-23 18:09:28
      你火鍋里的肥牛,可能根本就沒見過牛

      你火鍋里的肥牛,可能根本就沒見過牛

      富貴說
      2026-02-23 17:59:39
      縱隊司令員頂撞軍區(qū)司令員,朱德都勸不動,劉伯承:讓陳賡管管他

      縱隊司令員頂撞軍區(qū)司令員,朱德都勸不動,劉伯承:讓陳賡管管他

      大運河時空
      2026-02-24 08:15:03
      法國新型超聲速核導(dǎo)彈亮相

      法國新型超聲速核導(dǎo)彈亮相

      財聯(lián)社
      2026-02-24 15:39:13
      安佩姆參加海港訓(xùn)練!45號錯過客戰(zhàn)申花+泰山 球迷:黃瓜菜都涼了

      安佩姆參加海港訓(xùn)練!45號錯過客戰(zhàn)申花+泰山 球迷:黃瓜菜都涼了

      刀鋒體育
      2026-02-24 20:38:30
      帶狗子玩了一次蹦床,結(jié)果上癮了,趁沒人偷偷上去顛到停不下來

      帶狗子玩了一次蹦床,結(jié)果上癮了,趁沒人偷偷上去顛到停不下來

      Magic寵物社
      2026-02-23 20:05:08
      當(dāng)年舉報畢福劍的那位告密者竟然變成這樣了!誰能想到啊?

      當(dāng)年舉報畢福劍的那位告密者竟然變成這樣了!誰能想到啊?

      霹靂炮
      2026-02-06 13:48:54
      4大MVP候選人受65場規(guī)則所限 坎寧安“撿漏”成唯一候選人?

      4大MVP候選人受65場規(guī)則所限 坎寧安“撿漏”成唯一候選人?

      仰臥撐FTUer
      2026-02-25 10:08:04
      只打了3個賽季,就成NBA首人!上帝得有多偏心,創(chuàng)造出這樣的怪物

      只打了3個賽季,就成NBA首人!上帝得有多偏心,創(chuàng)造出這樣的怪物

      毒舌NBA
      2026-02-25 06:21:36
      廣州不是你想超就能超的,GDP 可以追,國際地位你永遠追不上!

      廣州不是你想超就能超的,GDP 可以追,國際地位你永遠追不上!

      藍色海邊
      2026-02-24 16:32:58
      毛主席曾預(yù)言:這兩個國家將來對中國最大威脅,如今果然應(yīng)驗

      毛主席曾預(yù)言:這兩個國家將來對中國最大威脅,如今果然應(yīng)驗

      歷史人文2
      2026-02-25 09:58:51
      201億!2010萬人!廣州:你大爺還是你大爺

      201億!2010萬人!廣州:你大爺還是你大爺

      廣州PLUS
      2026-02-24 18:25:13
      哈梅內(nèi)伊交代后事,特朗普想不通:伊朗打不贏,為什么還不屈服?

      哈梅內(nèi)伊交代后事,特朗普想不通:伊朗打不贏,為什么還不屈服?

      涼羽亭
      2026-02-25 08:37:34
      魯能熱身賽3比1完勝!韓鵬直接派出三中衛(wèi)壓陣,新前腰破門

      魯能熱身賽3比1完勝!韓鵬直接派出三中衛(wèi)壓陣,新前腰破門

      振剛說足球
      2026-02-25 10:05:18
      太離譜!華人Costco門口遭持槍搶車,嫌犯竟用翻譯軟件發(fā)中文“要錢”

      太離譜!華人Costco門口遭持槍搶車,嫌犯竟用翻譯軟件發(fā)中文“要錢”

      華人生活網(wǎng)
      2026-02-25 05:58:22
      72萬個充電樁,年入40億,常州夫婦邊賺錢邊收割,如今要上市了

      72萬個充電樁,年入40億,常州夫婦邊賺錢邊收割,如今要上市了

      毒sir財經(jīng)
      2026-02-22 10:38:14
      巴拿馬賭輸了?撕毀長和租約后,中國占21.4%的貨運量成致命一擊

      巴拿馬賭輸了?撕毀長和租約后,中國占21.4%的貨運量成致命一擊

      墨蘭史書
      2026-02-24 23:36:59
      2026-02-25 10:40:49
      新能源自動駕駛 incentive-icons
      新能源自動駕駛
      專注于半導(dǎo)體行業(yè)資訊
      950文章數(shù) 346關(guān)注度
      往期回顧 全部

      汽車要聞

      方程豹首款轎車實車圖曝光 就等價格了?

      頭條要聞

      媒體:中國開年對日本出"重拳" 反制手段根本性質(zhì)變

      頭條要聞

      媒體:中國開年對日本出"重拳" 反制手段根本性質(zhì)變

      體育要聞

      曝雄鹿計劃今夏追小卡 字母哥渴望與其并肩作戰(zhàn)

      娛樂要聞

      撒貝寧到沈陽跑親戚 老婆李白模特身材

      財經(jīng)要聞

      春節(jié)檔"開門黑" 電影票少賣了7000萬張

      科技要聞

      蘋果MacBook Pro要加觸摸屏了,還帶靈動島

      態(tài)度原創(chuàng)

      教育
      藝術(shù)
      健康
      房產(chǎn)
      公開課

      教育要聞

      9點開始!2026山東單招綜評報名25日--27日3天!有詳細教程!

      藝術(shù)要聞

      如果吳清源重生,他會如何與柯潔較量?

      轉(zhuǎn)頭就暈的耳石癥,能開車上班嗎?

      房產(chǎn)要聞

      330萬人涌入!春節(jié)全國樓市,第一個賣爆的區(qū)域出現(xiàn)了!

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關(guān)懷版