솔라카 - 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 을 사용할 수 도 있다.
'프로젝트 > 솔라카' 카테고리의 다른 글
솔라카를 돌아보며 2(배터리 잔량 측정) (2) | 2018.04.29 |
---|---|
솔라카를 돌아보며...1 (0) | 2018.04.17 |
2017 WSC 사진 (0) | 2018.03.25 |
솔라카 전류측정[adc 정확도 향상] (0) | 2017.07.10 |
그래픽 oled (솔라카 대쉬보드) (0) | 2017.06.11 |