2017-04-15 9 views
1

Atmega2560 칩을 기반으로 한 맞춤 Canbus IO 모듈을 작성하는 중입니다. 이 모듈은 PWM 제어 및 전류 피드백, 20 개의 디지털 입력, 5 개의 아날로그 입력 및 4 개의 0-5v 아날로그 출력을 갖춘 10 개의 고전류 출력을 갖습니다. 나는 내가 사용할 J1939 메시지 구조를 알아 내려고 노력해왔다. 이 모듈은 마스터 ECU에 의해 제어되는 슬레이브 장치가됩니다. 이 모듈 중 하나 이상이 동일한 네트워크에있을 수 있으므로 각 모듈에 CAN 주소 스위치를 추가하여 사용자가 각 장치의 CAN ID 1-255를 선택할 수 있도록했습니다. 이 계획은 각 모듈이 단일 CAN 메시지로 모든 디지털 입력 상태를 브로드 캐스팅하도록하는 것이 었습니다. 0xFF00을 PGN ID로 선택한 다음 8 바이트를 사용하여 특정 모듈에 대한 입력 상태에 대한 비트 형식의 상태를 나타내는 경우 마스터가 메시지의 출처를 마스터가 어떻게 알 수 있습니까? CANbus 메시지의 모듈 주소입니까?j1939 맞춤 모듈 통신

arduino CANBUS 예제를 살펴 봤는데 PGN을 기반으로 필터링 할 수 있지만 원본 주소 나 대상 주소를 기준으로 필터링하지 않습니다.

누군가가이 작업을 수행하는 방법에 대해 설명해 줄 수 있습니까?

+0

J1939는 확장 CAN 식별자의 8 개의 최하위 비트로서 소스 어드레스를 인코딩 시작 페이지 참조. 당신은 CAN 인터페이스를 프로그래밍하여 그 부분을 필터링 할 수 있어야합니다.하지만 성능 문제가없는 한 소프트웨어 필터링을 고수해야합니다. 나는 ATmega2560 대신에 CAN 주변 장치가 내장 된 MCU를 선택하는 것이 더 나을 것이라고 생각합니다. – doynax

+0

그래서 PGN과 우선 순위를 추가하여 메시지를 보낼 수 있습니까? 예를 들어 0x0CFF00FE를 보내면 다음과 같습니다. 우선 순위 3 PGN 65280 발신 주소 254 이 정확합니까? – jonfarrugia

+0

@jonfarrugia 틀렸어. 모든 독점 PGN (65280-65535)은 브로드 캐스트 메시지이므로 대상 주소는 항상 255입니다. – LaneL

답변

0

예, 언급 한 doynax와 마찬가지로, 8 개의 최하위 비트는 항상 노드의 소스 주소 용으로 예약되어 있습니다. 차량의 CAN 버스에이 네트워크를 배치하는 경우, 차량 버스에서 출발지 주소를 주장하지 않으면 자동차에 외부 정보를 놓으려고 할 때마다 주 ECU에서 NAK를받을 수 있습니다 버스.

이 문제를 방지하려면 네트워크의 각 사용자 지정 노드에 대해 클레임 주소 프로 시저를 수행해야 할 수 있습니다. 여기서 PGN 60928을 브로드 캐스트 (대상 주소 0xFF)로 보내고 네트워크의 모든 노드는 해당 PGN에서 고유 한 소스 주소로 응답해야합니다 (모든 노드가 모든 노드가이 사양을 준수한다고 가정). 공통 소스 주소가 응답에 표시되면 사용할 수 없다는 것을 알고 있습니다.

자세한 내용은 다음 슬라이드는 39 J1939