솔라카 - CAN BUS
람세스에 사용된 CAN 통신은 태양전지로부터 나오는 전력량을 확인 할 수 있도록 사용되었다. 람세스에
탑재 되어있는 MPPT Race version4의 경우 CAN 통신을
지원하기 때문에 CAN통신 단자에 2개의 선 과 CAN컨트롤러 공급 전압(최소 6V 최대18V)의 2개의 선이 필요하다. 그리고
CAN 신호를 받아서 컴퓨터로 전송 할 수 있는 모듈이 필요하다. 모듈의
경우는 마이크로프로세서로 직접 만드는 방법과 시중에 팔고있는 CAN모듈을 구입하여 사용하는 방법이 있다. 람세스에서는 직접 CAN 신호를 받아서 컴퓨터의 시리얼 통신으로
전송 할 수 있는 마이크로프로세서로 만들어 사용했다.
STM32F407 - ATA6660
CAN통신의 관한 기술문서 이기 때문에 STM32f407 ARM coretex-m4 칩을 설명 하지 않겠다.
STM32f407과 CAN트랜시버를
같이 사용해야만 CAN신호를 받고 보낼 수 있다. CAN트랜시버칩은 ATMEL사의 ATA6660을 사용했다.
선을 연결 해준 뒤, STM32f407 칩에서 CAN 신호를
받아본다.
1.1
데이터 수신
프로세서에서 CAN데이터를 받을 수 있도록 코드를 작성하여 다운로드
해준다. 아래 코드는 STM32f407 칩에서 CAN 통신을 하기 위한 레지스터 초기 설정 부분이다. 이와 같이 설정해주고, 데이터를 보내면 CAN 통신이 활성화 된다.
void Can_Init()
{
GPIO_InitTypeDef
GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,
ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,
ENABLE);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8,
GPIO_AF_CAN1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9,
GPIO_AF_CAN1);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
CAN_DeInit(CAN1);
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = ENABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_1tq;
CAN_InitStructure.CAN_Prescaler = 42;
CAN_Init(CAN1, &CAN_InitStructure);
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
= 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority
= 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
위 코드를 STM32f407칩에 다운로드 한 뒤 시리얼 통신으로 컴퓨터에서 CAN데이터를 받아보면 7바이트의 신호를 받을 수 있다.
1.2
C#프로그래밍
7바이트 신호들은 각 바이트 별로 정보가 들어있다. 각 정보는 MPPT데이터 시트 표(Figure
7)에 나와있다.
각 비트 별로 신호를 받았으면 시리얼 통신으로 컴퓨터에 데이터를 넘긴 후 C#프로그램을
제작해서 읽을 수 있는 눈금으로 표시한다. 아래 소스 코드는 각 바이트를 분석해서 원하는 정보를 얻는
과정이다.
buff[0] = buff[7];
buff[7] = (byte)(buff[7] & 0x03); //하위 2비트만 살림
vout_data = ((buff[2] +
(256 * buff[3])) * 208.79) * 0.001;
vin_data = ((buff[6] + (256
* buff[7])) * 150.49) * 0.001;
iin_data = ((buff[4] + (256
* buff[5])) * 8.12) * 0.001;
power_data = iin_data *
vin_data;
CAN 수신데이터가 시리얼 통신을 거치면서 가끔씩 오류가 날 경우도
있는데 이를 잡아주기 위해 소스코드에 데이터가 온전하지 못하면 넘어오지 못하게 하는 알고리즘도 제작을 해야한다.
위처럼 CAN 통신으로 에너지정보도 받을 수 있고, 차량내
통신으로도 CAN 을 사용할 수 도 있다.