新唐火神板開箱實作(五):CAN通訊測試

一、前言

    本篇要用Python寫程式,從個人電腦連接的Kvaser Leaf Light v2透過CAN傳送資料至NuMaker-Volcano接收,並從serial port觀測資料。

二、CAN bus的結構

    如下圖,如果我們要使用CAN介面,需要有CAN Controller以及CAN Transceiver。CAN Controller負責的是CAN的通訊協定,CAN Controller會依序傳輸或接收資料,並且內建CRC、ACK、中斷等邏輯電路,CPU只需要存取他的暫存器即可進行收發。這一步當然可以用軟體刻出時序,不過有獨立硬體會讓CPU輕鬆一點。現在我們在做新的專案通常會直接挑有內建CAN Controller的MCU,像是新唐的M0A23、NUC131、M482、M453都有內建。NUC131目前已經有AEC-Q101的版本了,M0A23未來應該也會有。

    CAN Controller輸出的都還只是共模信號,必須透過CAN Transceiver轉換電氣特性為差動信號。新一點的CAN Transceiver除了轉換電氣特性以外,還會有超時保護、突波及ESD防護,其中超時保護是為了避免該節點的軟體或硬體出現問題,使TXD長時間保持在LOW的時候,CAN Transceiver會把輸出級的電晶體給釋放掉,避免該節點長時間保持在顯性信號占用並阻斷其他節點的通訊。

    此外為了因應很多新出的MCU工作電壓都是3.3V,再新一點的CAN Transceiver也會將bus端的5V (VCC)與CAN TX/RX端的電源(VIO)區隔開來。幾個推薦的系列: NXP TJA1051T、TI TCAN1042、Microchip MCP2551。TJA1051T和TCAN1042有分不同版本(速度、VIO、EN等等),記得要去讀一下datasheet,看一下尾數的涵義。MCP2551就很經典很便宜,不過他就沒有VIO。

    現在帶VIO的1051、1042市場都缺料,交期都排到好幾個月。好在新唐的M0A23工作電壓可以到5V,做東西用MCP2551就可以了~

三、行前準備

1. NuMaker-Volcano要焊上排針,以利我們用杜邦線連接到CAN Transceiver
2. 準備CAN Transceiver模組,兩年前還很好買到的TCAN1042V-Q1
3. DB9母頭,要在後面焊上排針,到時候也要插杜邦線把CAN_H、CAN_L拉出來。

四、連接電路

    從範例程式第152行可以看出CAN_TX和CAN_RX分別是PB7和PB5,NuMaker-Volcano背面也直接印了GPIO的名稱。

SYS->GPB_MFP1 = (SYS->GPB_MFP1 & ~(SYS_GPB_MFP1_PB5MFP_Msk | SYS_GPB_MFP1_PB7MFP_Msk)) | (SYS_GPB_MFP1_PB5MFP_CAN0_RXD | SYS_GPB_MFP1_PB7MFP_CAN0_TXD);

    因此我們將CAN Transceiver的TX與RX分別接上PB7、PB5,當然電源也要接上去。CAN_H與CAN_L就接上Kvaser的CAN_H與CAN_L。

五、通訊測試
    
    最後我們將這段python程式執行,應該能用putty看到NuMaker-Volcano每一秒print出接收到的資料。
from canlib import canlib, Frame
import time

ch = canlib.openChannel(
	channel=0,
	flags=canlib.Open.EXCLUSIVE,
	bitrate=canlib.canBITRATE_250K
)

# Set the CAN bus driver type to NORMAL.
ch.setBusOutputControl(canlib.Driver.NORMAL)

# Activate the CAN chip.
ch.busOn()

# Transmit a message with (11-bit) CAN id = 123, length 6 and contents
# (decimal) 72, 69, 76, 76, 79, 33.
frame = Frame(id_=0x7ff, data=b'HELLO!', dlc=6)

try:
	while True:
		ch.write(frame)
		time.sleep(1)
except KeyboardInterrupt:
	pass

ch.busOff()

ch.close()



留言

這個網誌中的熱門文章

無法被取代的指針型三用電表(一):前言

關於新唐科技NuMicro ISP的介紹和使用方式

新唐火神板開箱實作(一):NuMaker-Volcano與NuEclipse IDE入門篇