MCP2551은 UART-CAN 변환기입니까?


12

내 컴퓨터를 사용하여 CAN 버스 스니퍼를 250 kbit / s로 만들고 싶습니다. 일부 연구 결과 MCP2551 이 CAN의 물리 계층을위한 일종의 전압 레벨 레귤레이터 라는 것을 알았습니다 . 이를 염두에두고이 설정이 작동하는지 궁금합니다. 통신의 일부가 아닌 자동 테스트 목적으로 교환 된 메시지를 기록하고 싶습니다.

PC <-> USB-UART (아마도 CP2102, 이미 가지고 있기 때문에) <-> MCP2551 <-> CAN 버스

그렇지 않은 경우 버스의 일부가 되려면 MCP2551에 어떤 종류의 신호를 입력해야합니까?

답변:


14

그렇게 할 수는 있지만 CAN 버스에서 얻는 것은 CAN 전압 레벨을 사용하는 UART입니다. 버스의 CAN 장치와 통신하려면 MCP2551에 CAN 프로토콜 메시지를 제공해야합니다. 청취와 동일 : CAN 메시지가 UART 형식과 매우 다르기 때문에 UART는 메시지와 함께 무엇을해야할지 모릅니다. 항상 최소한 프레임 오류가 발생하며 메시지 내용이 표시되지 않습니다.
이 이미지는 CAN 메시지의 구조를 보여줍니다 :

여기에 이미지 설명을 입력하십시오

캔 인터페이스가 주변에 많은 마이크로 컨트롤러있다 산세 송수신기는. 이를 위해 MCP2551이 설계되었습니다. 과거에는 4 개의 CAN 인터페이스가있는 NXP LPC2294를 사용했습니다. 각각 CAN 버스에 연결하려면 MCP2551이 필요합니다. NXP의 최신 컨트롤러에는 LPC1800 제품군이 포함되어 있으며이 중 모든 구성원이 CAN을 지원합니다.


UART 시작 / 정지 비트와 아마도 일부 CAN "시작 / 탑 비트"상황을 완전히 잊었습니다. 아마도 FTDI를 GPIO로 사용하여 PC에서 CAN 스택을 사용하여 MCP2551로 전송하는 솔루션을 찾으려고 노력할 것입니다.
rnunes

3
@rnunes-시작 / 정지 비트가 아닙니다. 이러한 요소가 없으면 UART 전송은 8 비트 바이트입니다. CAN 메시지는 주소 지정, 우선 순위 및 오류 검사와 함께 훨씬 더 복잡합니다. 둘을 비교할 수 없습니다.
stevenvh

그러나 FTDI를 사용하면 UART와 같이 바이트 단위가 아닌 비트 단위로 작동합니다 (기본적으로 USB <-> GPIO입니다). 나는 이미 그 CAN MCU를 찾고 있지만 지금은 돈을 쓰고 싶습니다 (학생 취미 프로젝트). 나는 이미 FTDI를 가지고 있습니다. FTDI가이 작업을 수행 할 수 없다는 연구 결과를 마치면 CAN MCU를 사용해 봅니다.
rnunes

스택은 모든 것을 처리하고 (예 : 비트 스터핑) MCP2551에 비트 단위로 전송합니다. 내가 지금 가지고있는 유일한 문제는 빠르고 규칙적이어야하기 때문에 FTDI 대기 시간입니다. 그러나 나중에 측정 할 것입니다.
rnunes

1
@rnunes-그러나 CP2102 (FTDI가 아닌 SiLabs)에서 나오는 것은 비트가 아니라 바이트 입니다. 1 비트 후에는 멈출 수 없습니다. 마이크로 컨트롤러와 USB를 인터페이스하려면 CP2102와 CAN + MCP2551을 지원하는 마이크로 컨트롤러가 모두 필요합니다. 또는 USB 장치로도 작동 할 수있는 마이크로 컨트롤러입니다. 그러면 CP2102가 필요하지 않습니다.
stevenvh

7

MPSSE 모드 (UART는 잊어 버림 ), MCP2515 및 MCP2551 에서 FT2232H를 사용하여 USB / CAN 인터페이스를 만들었습니다 . MCP2515는 여기서 놓친 핵심 요소입니다. 그것이하는 일을 잘 연구하십시오. 프레임, ACK, 체크섬 생성 및 확인, 메시지 필터링 및 CAN 노드가 표준에 의해 수행해야하는 덜 명백한 작업을 수행하는 것은 실제 CAN 컨트롤러입니다. 스니퍼를 원할 경우 MCP2515에는 버스에서 전송을 보장하지 않는 청취 전용 모드가 있습니다. MCP2551은 RS-232 용 MAX232 또는 RS-485 용 ADM485와 유사한 단순한 물리 계층 어댑터입니다.

FTDI MPSSE 기술은 본질적으로 인터럽트를 지원하지 않기 때문에이 아키텍처는 완벽하지 않습니다. 이렇게하면 USB 호스트 컨트롤러에 많은 부하가 발생하지만 여전히 메시지 손실을 보장하지는 않습니다 (MCP2515는 "오버플로 모드"를 활성화 한 경우 내부에 최대 2 개의 수신 된 메시지를 저장할 수 있으며 그렇지 않은 경우에는 하나만 저장할 수 있음). STM32F105와 같은 CAN 및 USB 주변 장치가 내장 된 적절한 마이크로 컨트롤러가 훨씬 더 나은 솔루션입니다 (103은 USB와 CAN을 동시에 사용할 수 없음). 이 아이디어를 정확하게 구현하려면 이 프로젝트 를 참조하십시오 . stevenh가 제안한 LPC18xx도 작동하지만 LPC17xx는 더 저렴하고 찾기 쉽습니다.


이 경우 풀링하는 것은 문제가 아니지만 그렇습니다. 이상적인 솔루션은 CAN 메시지 버퍼로 작동하는 CAN 컨트롤러가있는 MCU를 사용하는 것입니다. 지금부터 내가 작성한 첫 번째 설정을 사용해 보겠습니다. 감사합니다
rnunes

+1 uC없이 CAN 컨트롤러와 직접 통신하기 위해 FTDI 칩을 사용하는 것이 좋습니다. 분명히 FTDI는 전용 USB to SPI 브리지 인 FT221X를 출시했습니다. (USB에서 I2C 로의 다른 모델도 있습니다.)
Nick Alexeev

2

질문을 이해하면서 기존 CAN 버스에서 청취하고 싶기 때문에 UART를 전혀 사용할 수 없습니다. CAN과 UART Siganlling은 완전히 다릅니다.

이론적으로 MCP2551에서 나오는 CAN 수신 라인을보고 CAN 트래픽을 디코딩 할 수 있습니다. 쉽지는 않지만 이론적으로는 가능합니다. 특수한 CAN 하드웨어가 없으면 CAN 비트 레이트보다 몇 배 더 빠른 속도로 샘플링하고 나중에 소프트웨어에서 해당 비트 스트림을 디코딩해야합니다. 250kbit / s CAN을 디코딩하려면 약 1Mbit / s로 기록해야합니다.

마이크로 컨트롤러를 사용하는 것이 훨씬 쉽습니다. PIC 18F2580 및 기타 유사한 프로세서에는 CAN 주변 장치가 내장되어 있습니다. 하드웨어는 모든 비트 레벨 디코딩을 수행하고 전체 CAN 프레임을 수신합니다. 그런 다음 프로세서는 UART를 통해 수신 한 CAN 프레임을 PC로 보낼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.