만들기2015. 6. 19. 23:27

MCP2515 CAN Driver IC를 적용한 CAN 통신 모듈 사용법



아두이노와 MCP2515 배선 연결

설명
아두이노 핀 번호
MCP2515 CAN 모듈
전원5VVCC
그라운드
GNDGND
클럭
13
SCK
MISO
12SO
MOSI
11
SI
ChipSelect
10CS
Receive Interrupt
2
INT

구글 검색어 : mcp2515 can arduino library
아두이노 라이브러리 다운로드 : https://github.com/coryjfowler/MCP_CAN_lib

상기 라이브러리도 16Mhz Xtal을 기준으로 작성되어 있음
구입한 CAN 모듈은 8Mhz Xtal이 장착되어 있어서 mcp_can_dfs.h 를 수정해야함
<수정한 라이브러리를 본 게시물에 첨부 했음>

DHT-sensor-library-master(modified for 8MHz Xtal).zip


/*
#define MCP_16MHz_500kBPS_CFG1 (0x00)
#define MCP_16MHz_500kBPS_CFG2 (0xF0)
#define MCP_16MHz_500kBPS_CFG3 (0x86)
*/

#define MCP_16MHz_500kBPS_CFG1 (0x00) //8Mhz Xtal 500Kbps CAN speed
#define MCP_16MHz_500kBPS_CFG2 (0x90) //8Mhz Xtal 500Kbps CAN speed
#define MCP_16MHz_500kBPS_CFG3 (0x02) //8Mhz Xtal 500Kbps CAN speed

첨부된 라이브러리를 "내문서/Arduino/Libraries/" 위치에 복사합니다.

아두이노를 실행하고 메뉴에서 "파일"->"예제"->"MCP_CAN_Lib-master"->"send"클릭



송수신 예제 모두 실행하면 잘 동작합니다.


[사진 설명 : 5031개 CAN 메세지를 보냈는데(좌) 모두 정상 수신함(우)]


MCP2515가 수신하는 예제의 경우 (receive.ino)
데이터 전송이 빠를 경우 데이터를 놓칠 수 있음
이경우 시리얼 모니터를 통해 표시하는 데이터를 줄이면 놓치지 않고 받을 수 있음

[사진 설명 : 10286개 CAN 메세지를 보냈는데(좌) 메시지를 놓쳐서 2677개만 수신함(우)]


[사진 설명 : 10257개 CAN 메세지를 보냈는데(좌) 시리얼로 표시되는 내용을 줄이자 모두 정상 수신함(우)]


ODB 통신방법 정리 : http://uglytree.tistory.com/category/CAN/OBD-II


UDS 소개 : http://hoyoung2.blogspot.kr/2013/11/can-protocols.html


ODB PID wikipidia : https://en.wikipedia.org/wiki/OBD-II_PIDs


CAN Shield D-SUB 9핀

CAN_L : 6(x) --> 5

CAN_H : 4(x) --> 3







Posted by orasman