各位前輩大家好
小弟因為計畫需要,老師幫我買了一塊NI-CAN,有附一套軟體叫做NIMAX,小弟有看裡面的Data Sheet
看來看去,這套MAX軟體好像只有跟CAN Channel API有關.
想請教各位前輩,Channel API和Frame API用法有何不同
下面這檔案,是不是屬於CAN Frame API的用法
Channel API和Frame API這兩者 小弟實在是有點搞混了
希望各位大大能指點小第一番
第一次發言 若有得罪 希望各位大大多多包含
各位前輩大家好
小弟因為計畫需要,老師幫我買了一塊NI-CAN,有附一套軟體叫做NIMAX,小弟有看裡面的Data Sheet
看來看去,這套MAX軟體好像只有跟CAN Channel API有關.
想請教各位前輩,Channel API和Frame API用法有何不同
下面這檔案,是不是屬於CAN Frame API的用法
Channel API和Frame API這兩者 小弟實在是有點搞混了
希望各位大大能指點小第一番
第一次發言 若有得罪 希望各位大大多多包含
沒想到竟有人開始研究CAN了!我因為工作的需要前一陣子也買了一張NI的CAN card,價值比我現在使用IBM X31的NB還要貴,真是不便宜的小卡片。
後來和硬體的同事一起做了自已的CAN card,可以利用LV透過USB去收發CAN bus上的message,成本大約只有NI的十分之一。
而為了測試所寫的CAN card韌體,所以會用到NI的CAN card和相關的API,因此對此題目有點粗淺的研究。
言歸正傳,Channel API是比較簡單但使用起來較為受限的coding方式,在使用Channel API前,要先對您想要處理的CAN message定義出相關的資料檔,然後在程式中直接寫出與CAN message相對應的程式,利用Channel API的方式LV已幫您做了大部分的事,您只要關心相與message對應的工作即可,但缺點是您無法直接收到CAN bus上的raw data,也沒辦法處理remote frame,因為LV已經幫您處理過了。
而使用Frame API則有較大的彈性,您可以收到每一個在CAN bus上傳遞的message並加以處理,不過代價就是自已要做比較多的事。
至於在兩者之間如何選擇,端看您的需求了。若時間允可不妨都試試看。
在使用CAN API上若有問題,可以先找找隨API所附的範例程式,若還是不清楚在CAN API的文件中也有相當清楚的說明。
祝您使用順心!
[QUOTE=void]沒想到竟有人開始研究CAN了!我因為工作的需要前一陣子也買了一張NI的CAN card,價值比我現在使用IBM X31的NB還要貴,真是不便宜的小卡片。
後來和硬體的同事一起做了自已的CAN card,可以利用LV透過USB去收發CAN bus上的message,成本大約只有NI的十分之一。
而為了測試所寫的CAN card韌體,所以會用到NI的CAN card和相關的API,因此對此題目有點粗淺的研究。
言歸正傳,Channel API是比較簡單但使用起來較為受限的coding方式,在使用Channel API前,要先對您想要處理的CAN message定義出相關的資料檔,然後在程式中直接寫出與CAN message相對應的程式,利用Channel API的方式LV已幫您做了大部分的事,您只要關心相與message對應的工作即可,但缺點是您無法直接收到CAN bus上的raw data,也沒辦法處理remote frame,因為LV已經幫您處理過了。
而使用Frame API則有較大的彈性,您可以收到每一個在CAN bus上傳遞的message並加以處理,不過代價就是自已要做比較多的事。
至於在兩者之間如何選擇,端看您的需求了。若時間允可不妨都試試看。
在使用CAN API上若有問題,可以先找找隨API所附的範例程式,若還是不清楚在CAN API的文件中也有相當清楚的說明。
祝您使用順心!
[/QUOTE]
感謝Void前輩的回答 我本來以為這個問題,可能會石沉大海 太感謝了....
小弟是12月初時,被我教授叫去學CAN 用來監控我實驗室的各個系統.
目前已經完成了CAN Transceiver電路 而CAN BUS我是用兩顆120ㄛ母的電阻在bus的最末兩端.
那顆CAN Transceiver 我是用Ti的SN65HVD230Q 電源是3.3V.
小弟查了一下那塊NI-CAN板子上的CAN Transceiver是Philips Tja1044 電源是5V
這樣兩者所輸出的CAN_H和CAN_L在CAN BUS上是否要做準位的調整,還是NI-CAN那塊板子 已經都調整好了
還是說,所有的CAN Transceiver 在CAN BUS上CAN_H和CAN_L輸出的準位都一樣?
Void前輩在請教您一下,小弟現在是先測試CAN Transmit - periodic.vi這程式,然後把NI-CAN上的CAN_H和CAN_L接到
CAN BUS上,目前BUS上還沒接上其他設備,所以現在在BUS上NI-CAN一直重複傳送資料.(因為收不到ACK訊號)
請教一下,如果我在CAN BUS上接上DSP,要由NI-CAN傳送資料給DSP.
那我在CAN Transmit-periodic.vi 那程式的Arbitration ID是否一定要跟DSP某一個Mailbox的ID要一樣才能互傳
因為小弟目前所知,如果是DSP對DSP互傳 只要一方提出(CANTRS=1)
另一方對應的"郵箱"就會被要求傳送控制訊號(但不知這兩顆DSP同一郵箱編號的所設的 ID是否要一樣?)
小弟是這方面的新手,希望各位大大能指導小弟一下
目前我老闆是叫我先用DSP 2812跟NI-CAN作溝通,算是做測試 看在DSP那裡的程式是否正確
之後再測試用別的CAN控制器(SJA1000)跟8051結合,再跟NI-CAN溝通.
void前輩 真的是太感謝你了 好像真的很少人在作CAN,往後不知可否請教您一些CAN的問題
感恩
1、CAN BUS上CAN_H和CAN_L位準的規範請參考http://www.can-cia.org/can/physical-layer若CAN Transceiver的IC是依照標準做的話,那麼應該是彼此通用。
2、至於Arbitration ID的問題就要看您DSP的firmware要如何寫了,我使用的CAN microcontroler可以有選項去接收所有CAN bus上的message,也可以只收特定ID的message。當您的DSP要指定收特定ID的message時,那麼LV上的程式就要發出相同的ID,這樣在DSP端才會收的到。
[QUOTE=void]1、CAN BUS上CAN_H和CAN_L位準的規範請參考http://www.can-cia.org/can/physical-layer若CAN Transceiver的IC是依照標準做的話,那麼應該是彼此通用。
2、至於Arbitration ID的問題就要看您DSP的firmware要如何寫了,我使用的CAN microcontroler可以有選項去接收所有CAN bus上的message,也可以只收特定ID的message。當您的DSP要指定收特定ID的message時,那麼LV上的程式就要發出相同的ID,這樣在DSP端才會收的到。 [/QUOTE]
感謝Void前輩所提供的網頁資料,小弟昨天埋頭狂K,受益良多
小弟再請教您一些問題,您給的這網頁的資料裡面的Nominal bit time裡面有一個Sample point小弟不是很了解他的功用
有查了一下,Sample point這個點定義Nominal bit time所傳輸位元的值,和補償edge Phase的誤差
那Sample point這個值要如何求呢?
小弟現今用的DSP 2812所提供的CAN範例 在程式的最後有寫了幾個值
PS:裡面的TSEG1=Propagation delay segment+Phase buffer segment1
TSEG2=Phase buffer segment2
/* Bit configuration parameters for 150 MHz SYSCLKOUT*/
/***************************************************/
/*
The table below shows how BRP field must be changed to achieve different bit
rates with a BT of 15, for a 80% SP:
---------------------------------------------------
BT = 15, TSEG1 = 10, TSEG2 = 2, Sampling Point = 80%
---------------------------------------------------
1 Mbps : BRP+1 = 10 : CAN clock = 15 MHz
500 kbps : BRP+1 = 20 : CAN clock = 7.5 MHz
250 kbps : BRP+1 = 40 : CAN clock = 3.75 MHz
125 kbps : BRP+1 = 80 : CAN clock = 1.875 MHz
100 kbps : BRP+1 = 100 : CAN clock = 1.5 MHz
50 kbps : BRP+1 = 200 : CAN clock = 0.75 MHz
例:用1 Mbps Sampling Point = 80%
ECanaRegs.CANBTC.bit.BRP = 9;
ECanaRegs.CANBTC.bit.TSEG2 = 2;
ECanaRegs.CANBTC.bit.TSEG1 = 10;
Sample point不是可以用來補償edge Phase的誤差,如果今天edge Phase的誤差產生在別的地方
那Sample point的值是不是就要跟著改變?
還是說如果程式裡 就已經給定以上的值 那是否代表 Sampling Point = 80%和上面BRP TSEG2 TSEG1所設定的
值所產生的edge Phase的誤差就可以完全消除?
The table below shows how to achieve different sampling points with a BT of 25:
-------------------------------------------------------------
Achieving desired SP by changing TSEG1 & TSEG2 with BT = 25
-------------------------------------------------------------
TSEG1 = 18, TSEG2 = 4, SP = 80%
TSEG1 = 17, TSEG2 = 5, SP = 76%
TSEG1 = 16, TSEG2 = 6, SP = 72%
TSEG1 = 15, TSEG2 = 7, SP = 68%
TSEG1 = 14, TSEG2 = 8, SP = 64%
The table below shows how BRP field must be changed to achieve different bit
rates with a BT of 25, for the sampling points shown above:
1 Mbps : BRP+1 = 6
500 kbps : BRP+1 = 12
250 kbps : BRP+1 = 24
125 kbps : BRP+1 = 48
100 kbps : BRP+1 = 60
50 kbps : BRP+1 = 120
*/
再次感謝
有關CAN protocol 的簡介可以看看下面這份outline文件,其中後面幾頁有提到check point 的意義。
http://america.renesas.com/media/products/mpumcu/canlin_mpumcu/child_folder/rej99b0021_canoutline.pdf
至於您DSP中CAN的相關設定要請您看看DSP的data sheet了,因為我沒有用過您現在用的DSP,我用的是renesas的CAN microcontroller,也就是上面連接網址的公司。
[QUOTE=void]有關CAN protocol 的簡介可以看看下面這份outline文件,其中後面幾頁有提到check point 的意義。
http://america.renesas.com/media/products/mpumcu/canlin_mpumcu/child_folder/rej99b0021_canoutline.pdf
至於您DSP中CAN的相關設定要請您看看DSP的data sheet了,因為我沒有用過您現在用的DSP,我用的是renesas的CAN microcontroller,也就是上面連接網址的公司。
[/QUOTE]
Void前輩 再一次謝謝您
您提供的這個文件, CAN protocol 寫的真的很詳盡....感謝
Ti所提供的相關資料,內容實在是很貧乏