시리얼 데이터를 수신 받거나, 여러가지 경우 문자열로  HEX 데이터가 오는 경우가 있다. 이때 데이터를 파싱하기 위해서는 HEX값으로 변환해줘야한다.

아래 예제소스는 문자열HEX를 리얼HEX로 변환해주는 코드다. 


macAddr[0] = "E"

macAddr[1] = "E"


sprintf(hexstr,"0x%c%c",macAddr[0],macAddr[1]);

Addr[0] = strtol(hexstr,err,16);


하면 Addr[0]에 0xEE!



출처: http://newkie.tistory.com/48 [뉴키]

'공부 > 기타' 카테고리의 다른 글

opamp 회로 사이트  (0) 2018.01.31
BLDC 모터 컨트롤러 회로도  (0) 2018.01.18
INA333 테스트  (0) 2017.07.08
Error[Li006]: duplicate definitions for - IAR  (0) 2016.09.22
atmega128 tftlcd 한글출력  (0) 2016.09.01

모터에 전류가 어느정도 흐르는지 측정하기 위해서는 설치된 전류센서로 신호를 받아야한다. 현재 솔라카에서 사용하고 있는 전류센서[hass50]의 경우 출력 신호는 전압 신호로 되어있다.


<hass 50>


전류센서에서 출력되는 전압신호를 프로세서가 받기 위해서는 ADC(analog-to-digital converter)를 이용한다. 전압신호의 경우 노이즈가 많기 때문에 외곡이 있을 수 있고, 이 때문에 제대로된 전류측정값을 얻지 못 할 수도 있다. ADC노이즈를 줄이기위해서 솔라카에서는 디지털 필터를 사용했다. 가장 구현하기 쉬운방법이고, 개발 시간도 짧다.





'프로젝트 > 솔라카' 카테고리의 다른 글

솔라카 MPPT 전력량 CAN 데이터 수신  (0) 2018.04.17
2017 WSC 사진  (0) 2018.03.25
그래픽 oled (솔라카 대쉬보드)  (0) 2017.06.11
솔라카 고전압 측정회로  (0) 2017.05.16
MPPT 모니터링 프로그램  (0) 2016.11.25

INA333 계측용 증폭기를 테스트진행



'공부 > 기타' 카테고리의 다른 글

BLDC 모터 컨트롤러 회로도  (0) 2018.01.18
C언어 hex string -> real hex  (0) 2017.12.22
Error[Li006]: duplicate definitions for - IAR  (0) 2016.09.22
atmega128 tftlcd 한글출력  (0) 2016.09.01
atmega128 sd카드 제어  (0) 2016.09.01

can, rf 통신 모듈까지 장착한 후면 계기판 모습

저 모듈에서 방향지시등, 브레이크스위치 등등을 제어한다.







솔라카 계기판에 사용할 2.7인치 oled를 출력했다. (모델명: NHD-2.7-12864UCY3)

프로세서는 cortex-m3 계열 stm32f103을 사용

그래픽 라이브러리는 가장 많이 사용하는 u8g라이브러리를 이용했으며, 병렬방식이아닌 직렬방식으로 oled에 신호를 인가했다.

HAL라이브러리와 u8g라이브러리를 같이 사용했다.

속도는 직렬방식이라 느릴줄 알았는데, 계기판으로 사용하기에 전혀 지장이 없을정도로 업데이트가 빨랐다.

어느 각도에서든지 글자가 잘 보였고, 햇빛에서도 문제가 없어보였다.

이제 CAN트랜시버와 모듈화를 거쳐 CAN통신으로 값을 전달하면 값이 출력되게 만들예정이다.




아래는 데이터시트에서 발취한 시리얼 인터페이스








HAL라이브러리에 u8g_arm.c , u8g_arm.h 를 추가하여 소스를 추가한다.







u8g_arm.c
 #include "u8g_arm.h"  
 void u8g_Delay(uint16_t val)  
 {  
      HAL_Delay(val);  
 }  
 void u8g_MicroDelay(void)  
 {  
      HAL_Delay(1);  
 }  
 void u8g_10MicroDelay(void)  
 {  
      HAL_Delay(1);  
 }  
 uint8_t u8g_com_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)  
 {  
  switch(msg)  
  {  
   case U8G_COM_MSG_STOP:  
    break;  
   case U8G_COM_MSG_INIT:  
    u8g_MicroDelay();  
    break;  
   case U8G_COM_MSG_ADDRESS:           /* define cmd (arg_val = 0) or data mode (arg_val = 1) */  
    u8g_10MicroDelay();  
    HAL_GPIO_WritePin(PORT, DC, arg_val);  
    u8g_10MicroDelay();  
    break;  
   case U8G_COM_MSG_CHIP_SELECT:  
    if ( arg_val == 0 )  
    {  
         HAL_Delay(1);  
         HAL_GPIO_WritePin(PORT, CS, GPIO_PIN_SET);  
    }  
    else  
      HAL_GPIO_WritePin(PORT, CS, GPIO_PIN_RESET);  
    u8g_MicroDelay();  
    break;  
   case U8G_COM_MSG_RESET:  
    break;  
   case U8G_COM_MSG_WRITE_BYTE:  
     HAL_SPI_Transmit(&SPI_HANDLER, &arg_val, 1, 10000);  
     while(HAL_SPI_GetState(&SPI_HANDLER) != HAL_SPI_STATE_READY);  
     u8g_MicroDelay();  
     break;  
   case U8G_COM_MSG_WRITE_SEQ:  
   case U8G_COM_MSG_WRITE_SEQ_P:  
    {  
         HAL_SPI_Transmit(&SPI_HANDLER, (uint8_t *)arg_ptr, arg_val, 10000);  
         while(HAL_SPI_GetState(&SPI_HANDLER) != HAL_SPI_STATE_READY);  
         u8g_MicroDelay();  
         arg_val = 0;  
    }  
    break;  
  }  
  return 1;  
 }  

u8g_arm.h:

 #ifndef _U8G_ARM_H  
 #define _U8G_ARM_H  
 #include "u8g.h"  
 #include "stm32f1xx_hal.h"  
 #define SPI_HANDLER hspi2 // use your SPI hadler  
 extern SPI_HandleTypeDef SPI_HANDLER;  
 #define DC GPIO_PIN_11  
 #define CS GPIO_PIN_12  
 #define PORT GPIOB  
 uint8_t u8g_com_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);  
 #endif  

and part of main.c:  메인소스는 재량껏 수정한다.
 #include "stm32f1xx_hal.h"  
   
 /* USER CODE BEGIN Includes */  
 #include "u8g.h"  
 #include "u8g_arm.h"  
 /* USER CODE END Includes */  
   
 /* Private variables ---------------------------------------------------------*/  
 SPI_HandleTypeDef hspi2;  
   
 TIM_HandleTypeDef htim1;  
   
 /* USER CODE BEGIN PV */  
 u8g_t u8g;  
 /* Private variables ---------------------------------------------------------*/  
   
 /* USER CODE END PV */  
   
 /* Private function prototypes -----------------------------------------------*/  
 void SystemClock_Config(void);  
 static void MX_GPIO_Init(void);  
 static void MX_SPI2_Init(void);  
   
   
 /* USER CODE BEGIN PFP */  
 /* Private function prototypes -----------------------------------------------*/  
   
 /* USER CODE END PFP */  
   
 /* USER CODE BEGIN 0 */  
   
 /* USER CODE END 0 */  
   
 int main(void)  
 {  
   
  /* USER CODE BEGIN 1 */  
   
  /* USER CODE END 1 */  
   
  /* MCU Configuration----------------------------------------------------------*/  
   
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */  
  HAL_Init();  
   
  /* Configure the system clock */  
  SystemClock_Config();  
   
  /* Initialize all configured peripherals */  
  MX_GPIO_Init();  
  MX_SPI2_Init();  
   
   
  /* USER CODE BEGIN 2 */  
  u8g_InitComFn(&u8g, &u8g_dev_ssd1306_128x64_hw_spi, u8g_com_hw_spi_fn); //이부분은 자신의 디스플레이에 맞춰야함 
  HAL_Delay(100);  
  /* USER CODE END 2 */  
   
  /* Infinite loop */  
  /* USER CODE BEGIN WHILE */  
  while (1)  
  {  
  /* USER CODE END WHILE */  
   
  /* USER CODE BEGIN 3 */  
       u8g_FirstPage(&u8g);  
       do  
       {  
            u8g.font = u8g_font_profont22;  
            u8g_DrawStr(&u8g, 20, 55, "Hello");  
       } while ( u8g_NextPage(&u8g) );  
    HAL_Delay(100);  
  }  
  /* USER CODE END 3 */  
   
 }  




spi+hal+u8g 

도움받은곳 http://elastic-notes.blogspot.kr/p/stm32-spi-oled-ssd1306-u8glib-cubemx.html






'프로젝트 > 솔라카' 카테고리의 다른 글

2017 WSC 사진  (0) 2018.03.25
솔라카 전류측정[adc 정확도 향상]  (0) 2017.07.10
솔라카 고전압 측정회로  (0) 2017.05.16
MPPT 모니터링 프로그램  (0) 2016.11.25
솔라카 더미카  (0) 2016.10.15








INA333 계측용 증폭기를 사용했다. 전압분배 저항은 200k 근처로 사용해서 내부임피던스를 높이고, 용량이 큰 저항을 사용해야한다. 

pspice 시뮬레이션 결과 배터리 전압이 70V일 경우 2.5V가 출력 되고 배터리 전압이 121.8V 일 경우 4.5V가 출력이 된다.

MCU의 12bit ADC로 배터리의 전압을 측정 할 수 있다. 하지만 배터리는 고전압으로 제어회로에 심각한 피해를 줄 수 있고, BLDC모터의 토크리플 때문에 노이즈로 센싱 성능이 떨어진다. 그래서 절연 과정과 아날로그 필터, 디지털 필터가 필요하다. 

'프로젝트 > 솔라카' 카테고리의 다른 글

솔라카 전류측정[adc 정확도 향상]  (0) 2017.07.10
그래픽 oled (솔라카 대쉬보드)  (0) 2017.06.11
MPPT 모니터링 프로그램  (0) 2016.11.25
솔라카 더미카  (0) 2016.10.15
방향지시등 회로 - 555타이머  (0) 2016.09.01

솔라셀 상판 전력데이터가 필요했는데

전력측정하는 시스템을 만들자니 번거럽고해서, mppt에서 나오는 CAN데이터를 받아왔다.

 

 

구름이 걷힐때 까지 기다리면서 

??

 

구름이 걷혔다.

 

 

 

 

 

해가 그리 밝지 않았다..

 

 

 

 

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;

 

 

 

 

 

c# 으로 간단하게 제작

 

'프로젝트 > 솔라카' 카테고리의 다른 글

솔라카 전류측정[adc 정확도 향상]  (0) 2017.07.10
그래픽 oled (솔라카 대쉬보드)  (0) 2017.06.11
솔라카 고전압 측정회로  (0) 2017.05.16
솔라카 더미카  (0) 2016.10.15
방향지시등 회로 - 555타이머  (0) 2016.09.01


대회전 연습용 차량이다.

Error[Li006]: duplicate definitions for (a) and (b)

오류내용은 이중으로 정의 되어있다는말

타이머2를 쓰려는데 (TIM2_IRQHandler) 계속 오류가 나서 구글링해서 보니 a.c 파일과 b.c 파일이 서로 같은 함수를 정의 하고있을때 오류가 난 것

왜 stm32f4xx_it.c 이 파일에 

void TIM2_IRQHandler(void)
{
   
}

이 함수가 정의 되어있던건지
위에 함수를 주석 처리하니까 컴파일이 잘됨

/*
void TIM2_IRQHandler(void)
{
   
}
*/


'공부 > 기타' 카테고리의 다른 글

C언어 hex string -> real hex  (0) 2017.12.22
INA333 테스트  (0) 2017.07.08
atmega128 tftlcd 한글출력  (0) 2016.09.01
atmega128 sd카드 제어  (0) 2016.09.01
PID제어 개념 [퍼옴]  (0) 2016.09.01



군대가기전 128써서 출력했던건데

물론 라이브러리를 사용했지만, 영어만 있어서 한글 구현하는데 고생했던걸로 기억한다.

GLCD 한글용 코드를 이용했지만 코드를 수정하는데만 이틀 걸렸다.

이거하려고 tft lcd 데이터시트 밤새 봤던 기억이..



코드는 컴퓨터 자료정리 할때 올리는걸로...

'공부 > 기타' 카테고리의 다른 글

C언어 hex string -> real hex  (0) 2017.12.22
INA333 테스트  (0) 2017.07.08
Error[Li006]: duplicate definitions for - IAR  (0) 2016.09.22
atmega128 sd카드 제어  (0) 2016.09.01
PID제어 개념 [퍼옴]  (0) 2016.09.01



군대가기전에 ms카드 인식해서 간단한 텍스트 리더기 만드려고 했던건데 완벽하게는 못 만들었다.

fat시스템을 이용했다. 128로 sd카드 제어하는 소스는 인터넷에 많이 돌아다닌다.

'공부 > 기타' 카테고리의 다른 글

C언어 hex string -> real hex  (0) 2017.12.22
INA333 테스트  (0) 2017.07.08
Error[Li006]: duplicate definitions for - IAR  (0) 2016.09.22
atmega128 tftlcd 한글출력  (0) 2016.09.01
PID제어 개념 [퍼옴]  (0) 2016.09.01

+ Recent posts