[INTERFACE]/CAN2010. 4. 18. 23:00

[CAN_EVM] CAN Test Board

 

[CAN_EVM] CAN Test Board

 

 

 

 

CAN 테스트 할수 있는 EVM 보드를 제작했다. LM3S2965 EVM 보드 및 SM-Type EVM중 CAN테스트 가능한 MCU를 적용할 수 있는 보드 이다.

 

 

CAN관련 회로도

 

 

 

 

LM3S5732 사용시  [CAN_EVM] 핀맵

 

 

 

STM32-SM  사용시 [CAN_EVM] 핀맵

 

 

 

 

 

LM3S2x 기준으로 제작된 보드 이기 때문에 SM-Type 연결 할때 보드상의 SW 입력은 전혀 고려가 되어 있지 않아 점퍼가 필요하다.

 



 



 

Posted by nexp
TAG Can, CAN_EVM

댓글을 달아 주세요

[TI]/LM3S5xxx2009. 12. 5. 16:43

[LM3S5732-SM] USB2CAN 테스트

[LM3S5732-SM] USB2CAN 테스트


USB 및 CAN통신 기능이 있는 LM3S5732를 이용하여 CAN2USB 테스트를 진행 했다.
모터 제어용으로 만들었던 확장 보드를 이용 하였는데 CAN드라이버가 있고 LM3S2965보드와 호환 쉽게 된다.



USB2CAN 테스트 프로그램
LM3S5732는 USB기능이 있기 때문에 PC와 고속 인터페이스가 쉽다. USB Bulk모드로 통신하도록 프로그램을 작성하였다.



LM3S5732 USB2CAN테스트 동영상
CAN2USB 테스트를 위해 CAN디바이스(LM3S2265)에서 스위치를 누를때 마다 전송되는 CAN 데이터를 LM3S5732 USB인터페이를 이용하여 데이터를 PC로 출력하는 예제를 작성해 보았다.



수정사항
모터 제어 확장보드는 여러가지 테스트에 활용할 수 있도록 제작하였지만 주로 LM3S2965를 타겟으로 제작되었기 때문에 LM3S5732를 사용할때는 약간의 수정 사항이 필요하다. -> 다음 추가 제작시에는  이부분을 반영해야 겠다.
1) SM-Type보드(LM3S5732)를 이용할때 CAN인터페이스를 위해서는 점퍼가 있어야 한다.



2)모터제어 확장보드의 스위치도 연결이 안되어 있으므로 점퍼가 필요하다.
 - 확장보드의 위쪽 스위치(SW7) 을 LM3S5732의 CN11_14P(PC6)으로 연결 하였다.

Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2011.09.21 15:09 [ ADDR : EDIT/ DEL : REPLY ]

[TI]/LM3S2xxx2009. 10. 21. 17:53

[ LM3S2965 EXP ] CAN통신을 이용한 모터 PID 제어 테스트

[ LM3S2965 EXP ] CAN통신을 이용한 모터 PID 제어 테스트




PC프로그램 - PID값 설정에 따른 위치 추의값을 실시간으로출력






Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2010.02.09 13:49 [ ADDR : EDIT/ DEL : REPLY ]
  2. 혹시~ CAN 통신 테스트 관련하여 자료좀 받을 수 있을까요?
    FIFO 예제를 보고 수정을 하여 통신을 해보니 통신이 안되네요
    도움좀 부탁드립니다.

    2010.06.24 16:43 신고 [ ADDR : EDIT/ DEL : REPLY ]

[ST_MICRO]/STM322009. 10. 17. 01:30

USB2CAN 보드 제작

USB2CAN 보드 제작



Main features
● Supports CAN protocol version 2.0 A, B Active
● Bit rates up to 1 Mbit/s
● Supports the Time Triggered Communication option
Transmission
● Three transmit mailboxes
● Configurable transmit priority
● Time Stamp on SOF transmission
Reception
● Two receive FIFOs with three stages
● 14 scalable filter banks/CAN cell - shared between CAN cells
● Identifier list feature
● Configurable FIFO overrun
● Time Stamp on SOF reception
Time Triggered Communication Option
● Disable automatic retransmission mode
● 16-bit free running timer
● Configurable timer resolution
● Time Stamp sent in last two data bytes
Management
● Maskable interrupts
● Software-efficient mailbox mapping at a unique address space
 
 
 
 
STM32 CAN 통신 모듈 블록도
3개의 Mailbox로 구성된 2개의 FIFO가 있어 총 6개의 Mailbox가 있다.



STM32 CAN인터럽트
인터럽트 소스는 여러가지 있지만 가장 많이 사용하게 될 소스는 CAN_RF0R, CAN_RF1R 이다. CAN 데이터가 Mailbox에 정상적으로 저장되면 이벤트를 발생하게 된다. 인터럽트 발생 하면 CAN FIFO에서 데이터를 꺼내오면 된다. 아래 코드를 보면 아주 간단하다는 것을 알 수 있다.




인터럽트 Handler 부분 
[stm32f10x_it.c]
void USB_LP_CAN_RX0_IRQHandler(void)
{
   wIstr = USB_Istr();
  
  if(CAN_GetITStatus(CAN_IT_FMP0) == SET)
  {
    CAN_Receive(CAN_FIFO0, &gRxMessage);
  
   gFlagCanInt = 1;  
  }
}
인터럽트 발생하면CAN_Receive() 함수를 이용해 데이터를 가져오면 된다.



USB와 CAN은 동일한 인터럽트 핸들러를 공유 하므로 고려할 부분이 있는데... 일단 USB, CAN을 동시에 사용하면 문제가 있는것 같다.

메뉴얼을 살펴보니 USB와 CAN은 512-SRAM을 사용하고 있는데... 이를 동시에 사용할 수 없다고 되어 있다. 버퍼를 잘 관리해서 쓰면 불가능 하지는 않겠지만 USB드라이버 쪽을 다시 제작해야 하는 아주 큰 문제가 발생할것 같다...
The USB and CAN share a dedicated 512-byte SRAM memory for data transmission and reception, and so they cannot be used concurrently (the shared SRAM is accessed through CAN and USB exclusively). The USB and CAN can be used in the same application but not at the same time.

물론 CAN포트가 2개 있는 칩으로 하면 문제 없지만 그러면 가격이 상승된다. 저렴한 CAN to USB 장치를 만드는 것이 목적 이었기 때문에 결국 이 문제를 해결하기 위해 다른칩(LM3S5x)으로 해결해야 했다.

USB2CAN 보드(http://nexp.tistory.com/966) 참고
Posted by nexp
TAG Can, STM32

댓글을 달아 주세요

  1. 비밀댓글입니다

    2010.10.17 20:12 [ ADDR : EDIT/ DEL : REPLY ]

[TI]/LM3S2xxx2009. 10. 16. 21:23

LM3S2965 CAN EVAL 테스트

LM3S2965 CAN EVAL 테스트
 
 
 
주요 프리페럴 핀맵
 
 


기본 LED제어를 위해 config.h 파일 수정
//-----------------------------------------------------------------------------
//LED Driver
#define LED1_BIT      BIT2
#define LED1_PORT      GPIO_PORTG_DATA_R
#define Led1Init()      
#define Led1Off()      Sbi(LED1_PORT, LED1_BIT)
#define Led1On()      Cbi(LED1_PORT, LED1_BIT)
#define Led1Toggle()     Tbi(LED1_PORT, LED1_BIT)
#define LED2_BIT      
#define LED2_PORT      
#define Led2Init()      
#define Led2Off()      
#define Led2On()      
#define Led2Toggle()     
#define Led1Init()       (SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOG);\
          Sbi(GPIO_PORTG_DIR_R, LED1_BIT);Sbi(GPIO_PORTG_DEN_R, LED1_BIT) 
  
//-----------------------------------------------------------------------------
//Switch Driver
#define SW1_BIT       BIT4
#define SW1_PORT      GPIO_PORTG_DATA_R
#define Sw1Init()      (SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOG);\
          Cbi(GPIO_PORTG_DIR_R, SW1_BIT);Sbi(GPIO_PORTG_DEN_R, SW1_BIT)
#define GetSw1()      (GPIO_PORTG_DATA_R&SW1_BIT)
#define WaitForSw1()     while(GetSw1())


CAN Tinterface

Posted by nexp
TAG Can, LM3S2965

댓글을 달아 주세요