ChibiOS 다운로드

ChibiOS/RT는 http://sourceforge.net/projects/chibios/files에서 최신 버젼을 다운로드 받을 수 있습니다. 상업용 라이센스를 요청하기 전에 제품 평가를 위해서 GPL 버젼을 사용할 수 있으며, 코드는 정확하게 같습니다. 2018.2월 기준, 버젼은 ChibiOS_18.2.0이고 이를 기준으로 설명합니다.


다운로드 받은 ChibiOS_18.2.0을 압축해제 하면 ChibiOS 폴더 내에 아래와 같은 폴더 구조를 볼 수 있습니다.

demos/ -- 각 플랫폼에 따른 예제입니다.

docs/ -- 문서입니다. 

ext/ -- ChibiOS는 아니지만 외부 라이브러리입니다. 예) fat, tcp/ip 스택

os/ -- ChibiOS 소스 코드입니다.

test/ -- 커널 테스트를 위한 소스 코드입니다.

testhal/ -- HAL integration 테스트 예제입니다.

community/

testex/

tools/


ext에 마련된 모듈은 SD 카드를 지원하기 위한 FAT 파일시스템과 네트워크를 지원하기 위한 오픈 소스 스택인 lwip 등이 포함되어 있으며 필요시 사용할 수 있습니다. testhal의 경우 각 플랫폼에 따른 마이크로컨트롤러의 주변장치를 사용하기 위한 HAL 예제가 마련되어 있습니다. 필요한 경우 가져다 쓰면 됩니다. 예를 들어 ADC의 사용 예제를 참고하고 싶으면 testhal\STM32\STM32F4xx\ADC 폴더에 완전한 소스 코드를 확인할 수 있습니다.


한편 docs 내에 readme.txt 파일 내용과 같은 절차에 따라 documentation을 HTML 문서로 만들 수 있으며 ChibiOS 사용시 도움을 얻을 수 있습니다. 사실 컴파일 시 요구되는 폴더는 소스 코드인 os 폴더와 필요하다면 ext 폴더 정도를 사용할 수 있습니다.


새로운 프로젝트 작성

작업의 편의를 위해서 ChibiOS 폴더 아래에 원하는 폴더를 생성합니다. 예를 들어 저렴한 STM32F411RE-NUCLEO64 보드를 사용한다고 가정하여 ~/ChibiOS_18.2.0/myProject/LED로 폴더를 만들었습니다. 그리고 원하는 프로젝트와 가장 유사한 예제를 우선 demos 폴더에서 찾아 자신이 만든 새폴더로 복사합니다.



위 그림과 같은 STM32F411RE-NUCLEO64 보드를 사용할 경우, demos\STM32\RT-STM32F411RE-NUCLEO64 폴더에 이미 친절하게 준비되어 있습니다. 복사한 파일은 반드시 있어야 하는 3개의 헤더 파일인 chconf.h, halconf.h, mcuconf.h와 자신이 코딩할 main.c 그리고 리눅스/유닉스와 같은 커맨드라인 환경에서 개발하는데 필요한 Makefile입니다.


    • chconf.h - Kernel에 관련된 세팅이 포함되며 예를 들어 시스템 타이머와 Kernel 파라미터, 디버깅에 연관된 스위치 설정.

    • halconf.h - ChibiOS/HAL 드라이버에 관련된 설정. 예를 들어, PAL, CAN, ADC, DAC, PWM, Serial 등이며 사용하지 않는 드라이버는 disable 시킴.

    • mcuconf.h - MCU에 관련된 모든 설정. 예를 들어 Clock 트리, DMA, IRQ 우선순위 등.


Makefile 편집

Makefile은 전통적인 make 명령이 이해할 수 있는 문법으로 구성되어 있어 컴파일 및 링크 등이 일괄 처리되도록 규명한 일종의 배치 파일입니다. 다음은 demos\STM32\RT-STM32F411RE-NUCLEO64 폴더에서 복사해 온 Makefile의 내용입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
##############################################################################
# Build global options
# NOTE: Can be overridden externally.
#
 
# Compiler options here.
ifeq ($(USE_OPT),)
  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
endif
 
# C specific options here (added to USE_OPT).
ifeq ($(USE_COPT),)
  USE_COPT = 
endif
 
# C++ specific options here (added to USE_OPT).
ifeq ($(USE_CPPOPT),)
  USE_CPPOPT = -fno-rtti
endif
 
# Enable this if you want the linker to remove unused code and data
ifeq ($(USE_LINK_GC),)
  USE_LINK_GC = yes
endif
 
# Linker extra options here.
ifeq ($(USE_LDOPT),)
  USE_LDOPT = 
endif
 
# Enable this if you want link time optimizations (LTO)
ifeq ($(USE_LTO),)
  USE_LTO = yes
endif
 
# If enabled, this option allows to compile the application in THUMB mode.
ifeq ($(USE_THUMB),)
  USE_THUMB = yes
endif
 
# Enable this if you want to see the full log while compiling.
ifeq ($(USE_VERBOSE_COMPILE),)
  USE_VERBOSE_COMPILE = no
endif
 
# If enabled, this option makes the build process faster by not compiling
# modules not used in the current configuration.
ifeq ($(USE_SMART_BUILD),)
  USE_SMART_BUILD = yes
endif
 
#
# Build global options
##############################################################################
 
##############################################################################
# Architecture or project specific options
#
 
# Stack size to be allocated to the Cortex-M process stack. This stack is
# the stack used by the main() thread.
ifeq ($(USE_PROCESS_STACKSIZE),)
  USE_PROCESS_STACKSIZE = 0x400
endif
 
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
# stack is used for processing interrupts and exceptions.
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
  USE_EXCEPTIONS_STACKSIZE = 0x400
endif
 
# Enables the use of FPU (no, softfp, hard).
ifeq ($(USE_FPU),)
  USE_FPU = no
endif
 
#
# Architecture or project specific options
##############################################################################
 
##############################################################################
# Project, sources and paths
#
 
# Define project name here
PROJECT = ch
 
# Imported source files and paths
CHIBIOS = ../../..
# Startup files.
include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f4xx.mk
# HAL-OSAL files (optional).
include $(CHIBIOS)/os/hal/hal.mk
include $(CHIBIOS)/os/hal/ports/STM32/STM32F4xx/platform.mk
include $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F411RE/board.mk
include $(CHIBIOS)/os/hal/osal/rt/osal.mk
# RTOS files (optional).
include $(CHIBIOS)/os/rt/rt.mk
include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk
# Other files (optional).
include $(CHIBIOS)/test/lib/test.mk
include $(CHIBIOS)/test/rt/rt_test.mk
include $(CHIBIOS)/test/oslib/oslib_test.mk
 
# Define linker script file here
LDSCRIPT= $(STARTUPLD)/STM32F411xE.ld
 
# C sources that can be compiled in ARM or THUMB mode depending on the global
# setting.
CSRC = $(STARTUPSRC) \
       $(KERNSRC) \
       $(PORTSRC) \
       $(OSALSRC) \
       $(HALSRC) \
       $(PLATFORMSRC) \
       $(BOARDSRC) \
       $(TESTSRC) \
       main.c
 
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
# setting.
CPPSRC =
 
# C sources to be compiled in ARM mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
ACSRC =
 
# C++ sources to be compiled in ARM mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
ACPPSRC =
 
# C sources to be compiled in THUMB mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
TCSRC =
 
# C sources to be compiled in THUMB mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
TCPPSRC =
 
# List ASM source files here
ASMSRC =
ASMXSRC = $(STARTUPASM) $(PORTASM) $(OSALASM)
 
INCDIR = $(CHIBIOS)/os/license \
         $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
         $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
         $(CHIBIOS)/os/various
 
#
# Project, sources and paths
##############################################################################
 
##############################################################################
# Compiler settings
#
 
MCU  = cortex-m4
 
#TRGT = arm-elf-
TRGT = arm-none-eabi-
CC   = $(TRGT)gcc
CPPC = $(TRGT)g++
# Enable loading with g++ only if you need C++ runtime support.
# NOTE: You can use C++ even without C++ support if you are careful. C++
#       runtime support makes code size explode.
LD   = $(TRGT)gcc
#LD   = $(TRGT)g++
CP   = $(TRGT)objcopy
AS   = $(TRGT)gcc -x assembler-with-cpp
AR   = $(TRGT)ar
OD   = $(TRGT)objdump
SZ   = $(TRGT)size
HEX  = $(CP) -O ihex
BIN  = $(CP) -O binary
 
# ARM-specific options here
AOPT =
 
# THUMB-specific options here
TOPT = -mthumb -DTHUMB
 
# Define C warning options here
CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes
 
# Define C++ warning options here
CPPWARN = -Wall -Wextra -Wundef
 
#
# Compiler settings
##############################################################################
 
##############################################################################
# Start of user section
#
 
# List all user C define here, like -D_DEBUG=1
UDEFS =
 
# Define ASM defines here
UADEFS =
 
# List all user directories here
UINCDIR =
 
# List the user directory to look for the libraries here
ULIBDIR =
 
# List all user libraries here
ULIBS =
 
#
# End of user defines
##############################################################################
 
RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC
include $(RULESPATH)/rules.mk
 
cs


86번 라인의 PROJECT는 프로젝트의 이름이자 생성되는 파일명과 같습니다. 89번 라인은 ChibiOS 폴더의 절대 경로 또는 상대 경로입니다. '~/ChibiOS_18.2.0'이 추천됩니다. 161번 라인은 STM32F411RE-NUCLEO64 보드가 STM32F406 디바이스를 내장하므로 'cortex-m4'입니다. 164번은 사용하는 Toolchain을 지정하는 것으로 기본적으로 GNU Toolchain을 사용하도록 되어 있으므로 그냥 둡니다.


95번 라인의 'board.mk'는 사용하는 보드의 설정 정보를 담은 것으로 아래와 같습니다. 여기서는 'board.h'와 'board.c' 파일을 include 하게 합니다. 우선 board.h 파일의 정보는 보드에서 마이크로컨트롤러의 핀이 어떻게 사용되었는지에 관한 정보입니다. 예를 들어 핀인 GPIO는 아날로그와 디지털 모드로 사용될 수 있으며, 디지털 모드는 그 쓰임새에 따라 입력 혹은 출력, pull-up, PWM, CAN, UART 등등 여러가지의 모드로 사용되며 이를 일일이 지정하게 됩니다. board.c 파일은 board.h 파일에서 GPIO 사용을 매크로 지정한데로 초기화하는 함수가 구현되어 있습니다. 따라서 핀의 사용이 달라진다면 board.h는 반드시 수정되어야 합니다.


1
2
3
4
5
6
7
8
9
# List of all the board related files.
BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F411RE/board.c
 
# Required include directories
BOARDINC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F411RE
 
# Shared variables
ALLCSRC += $(BOARDSRC)
ALLINC  += $(BOARDINC)
cs


그러나 사용하고자 하는 보드가 없거나 사용자가 직접 PCB를 제작하고 assemble 한 보드의 경우에는 가장 유사하다고 생각되는 demos 폴더 하에 보드 중에서 찾아보고 /os/hal/boards 폴더 하에 적당한 board.mk, board.h 그리고 board.c 파일을 자신이 생성한 폴더에 복사합니다. 그리고 board.mk 파일에서 경로를 수정하고 board.h 파일에서 GPIO를 수정해야 합니다.


애플리케이션 코딩

'main.c'에 사용자가 원하는 기능을 작성하면 됩니다. demos\STM32\RT-STM32F411RE-NUCLEO64 폴더에서 제공하는 예제인 main.c는 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
    ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
        http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/
 
#include "ch.h"
#include "hal.h"
#include "rt_test_root.h"
#include "oslib_test_root.h"
 
/*
 * Green LED blinker thread, times are in milliseconds.
 */
static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) {
 
  (void)arg;
  chRegSetThreadName("blinker");
  while (true) {
    palClearPad(GPIOA, GPIOA_LED_GREEN);
    chThdSleepMilliseconds(500);
    palSetPad(GPIOA, GPIOA_LED_GREEN);
    chThdSleepMilliseconds(500);
  }
}
 
/*
 * Application entry point.
 */
int main(void) {
 
  /*
   * System initializations.
   * - HAL initialization, this also initializes the configured device drivers
   *   and performs the board-specific initializations.
   * - Kernel initialization, the main() function becomes a thread and the
   *   RTOS is active.
   */
  halInit();
  chSysInit();
 
  /*
   * Activates the serial driver 2 using the driver default configuration.
   */
  sdStart(&SD2, NULL);
 
  /*
   * Creates the blinker thread.
   */
  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
 
  /*
   * Normal main() thread activity, in this demo it does nothing except
   * sleeping in a loop and check the button state.
   */
  while (true) {
    if (!palReadPad(GPIOC, GPIOC_BUTTON)) {
      test_execute((BaseSequentialStream *)&SD2, &rt_test_suite);
      test_execute((BaseSequentialStream *)&SD2, &oslib_test_suite);
    }
    chThdSleepMilliseconds(500);
  }
}
cs


ChibiOS는 멀티 쓰레드(multi-thread)를 지원하고 Thread1은 GPIOA의 5번 핀을 500ms 간격으로 컸다 켰다를 반복합니다. 여기서 chRegSetThreadName("blinker") 함수는 ChibiOS 이하의 os\rt\include\chregistry.h에 선언되어 있으며, chThdSleepMilliseconds() 함수는 ChibiOS 이하의 os\rt\include\chthreads.h에 선언되어 있고, palClearPad()와 palSetPad() 함수는 ChibiOS 이하의 os\hal\include\hal_pal.h에 선언되어 있습니다.


main() 함수에서 hallnit()는 ChibiOS/HAL과 HAL 서브 시스템을 초기화 하는 것이며, chSysInit()는 Kernel이 초기화되고 main 함수가 쓰레드가 되며 RTOS가 활성화되도록 합니다. 이후에는 main() 함수의 스레드와 다른 모든 스레드가 실행될 준비가 되지 않았을 때 실행되는 idle 스레드가 생성됩니다. 한편 halInit() 함수는 ChibiOS 이하의 os\hal\include\hal.h에 그리고 chSysInit() 함수는 ChibiOS 이하의 os\rt\include\chsys.h에 선언되어 있습니다.


sdStart(&SD2, NULL) 함수는 시리얼 드라이버 2를 디폴트 설정으로 활성화 하는 것으로 ChibiOS 이하의 os\hal\include\hal_serial.h에 정의되어 있습니다. chThdCreateStatic() 함수는 Thread1을 생성시키는 함수로 ChibiOS 이하의 os\rt\include\chthreads.h에 선언되어 있습니다.


while 문 내에 palReadPad(GPIOC, GPIOC_BUTTON)) 함수는 GPIOC의 13번 핀에 연결된 버튼 값을 읽어오는 것으로 ChibiOS 이하의 os\hal\include\hal_pal.h에 선언되어 있으며, 버튼이 눌러지면 조건 문 아래의 연속된 test_execute() 함수가 실행되고 이는 500ms 간격으로 버튼을 조사하게 됩니다. 이 test_execute()는 ChibiOS 이하의 test\lib\ch_test.h에 정의된 함수로 두번째 인자인 문자열을 시리얼 드라이버 2에 보내게 됩니다.


빌드

작성이 완료되었으며 make 명령으로 컴파일 합니다. 만일 헤더 파일이 수정되었다면 처음부터 다시 컴파일을 진행할 것이고 오류없이 컴파일이 성공하였다면 ~/ChibiOS_18.2.0/myProject/LED/build 폴더 안에 'ch.elf'를 확인할 수 있을 것입니다.



'Embedded Programming > ChibiOS' 카테고리의 다른 글

ChibiOS/RT의 특징  (0) 2018.02.25
Cortex-M4 환경에서 ChibiOS 사용한 기초 예제  (0) 2017.12.19
Posted by Nature & Life


ChibiOS/RT는 Giovanni Di Sirio에 의해서 개발하였으며, 임베디드(embedded) 애플리케이션을 위한 무료이자 효율적이고, 컴팩트하며 빠른 RTOS(Real Time Operating System)입니다. Kernel primitive의 이해가 쉬운 세트를 제공하며 다양한 아키텍처(ARM7, Cortex-M0, Cortex-M3, Cortex-M4, PowerPC e200z, STM8, AVR, MSP430, ColdFire, H8S, x86)를 지원합니다. ChibiOS/RT는 RTOS로 GPL3 라이센스 하에서 배포됩니다.


ChibiOS/RT는 8, 16, 32-bit 마이크로컨트롤러의 임베디드 애플리케이션을 위해서 설계되었습니다; 사이즈와 실행 효율이 주요 프로젝트의 목표입니다. 참고로 커널 사이즈는 STM32 Cortex-M3 프로세스에서 활성화된 모든 서브시스템에서 최소 1.2KB에서 최대 5.5KB입니다. 커널은 초당 220,000 이상의 스레딩을 생성시키거나 종료할 수 있고, 72MHz의 STM32에서 1.2ms 내에 컨텍스트 스위칭(context switch)을 실행할 수 있습니다.


특징

  • Tiny memory footprint, 고성능, 쉬운 이식성(portable), 깔끔하고 이해가 쉽습니다.

  • 선점형 마이크로커널이자 멀티스레딩(multithreading), 128 우선 순위 레벨, 신뢰성 있고 정적 아키텍처.

  • Semaphores, Mutexes, CondVars, Messages, Event Flags, Mailboxes, Virtual Timers를 위한 커널 지원.

      • Counting semaphores

      • Mutexes with support for the priority inheritance algorithm

      • Condition variables

      • Synchronous and asynchronous Messages

      • Event flags and handlers

  • IRQ abstraction, non-OS fast IRQ sources(zero latency buzzword) 지원.

  • ARM, ARM-CM0, ARM-CM3, ARM-CM4, PowerPC, STM8, MSP430, AVR, ColdFire, H8S, Linux/Win32/MacOS 시뮬레이터를 지원.

  • HAL(Hardware Abstraction Layer) 컴포넌트는 지원되는 플랫폼 간에 애플리케이션의 이식이 가능.

  • Port(GPIO), Serial, ADC, CAN, DAC, EXT, GPT(general-purpose timer), I2C, I2S, ICU, MAC, MMC/SD, PAL, PWM, RTC, SDC, SPI, UART, USB, WDG 디바이스 드라이버 모델을 위한 HAL 지원.

  • uIP과 lwIP TCP/IP stacks(demo 포함)를 위한 지원.

  • FatFS 파일 시스템 라이브러리(demo 포함)를 지원.

  • 동일한 우선 순위 레벨에서 스레드를 위해서 Round-robin 스케쥴링

  • Software timers

  • Queues

  • Synchronous and asynchronous I/O with timeout capability

  • Thread-safe memory heap and memory pool allocators.


스레드, semaphore, 타이머와 같은 모든 시스템 객체는 실행 중에 생성되고 삭제될 수 있습니다. 가능한 메모리를 제외하고 어떤 상한이 없습니다. 시스템 신뢰성을 개선하기 위해서, 커널 아키텍처는 전체적으로 정적이고, memory allocator가 요구되지 않습니다(그러나 옵션으로 가능합니다). 그리고 테이블 혹은 배열과 같은 상한 사이즈 제한과 함께 어떠한 데이터 구조가 존재하지 않습니다. 시스템 API는 에러 코드나 예외와 같은 에러 조건을 갖지 않도록 설계되었습니다.


RTOS는 임베디드 디바이스 애플리케이션을 위해서 설계되었고 다양한 마이크로컨트롤러를 위한 데모 애플리케이션을 포함합니다:

  • ST STM32F1xx, STM32F2xx, STM32F3xx, STM32F4xx, STM32L1xx, STM32F0xx

  • ST STM8S208x, STM8S105x, STM8L152x

  • ST/Freescale SPC56x / MPC56xx

  • NXP LPC11xx, LPC11Uxx, LPC13xx

  • NXP LPC2148

  • Atmel AT91SAM7S, AT91SAM7X

  • Atmel Mega AVR

  • TI MSP430x1611

  • TI TM4C123G and TM4C1294

  • Microchip PIC32MX


소프트웨어 I/O 에뮬레이션(emulation) 모드로 Win32 프로세스에서 커널을 실행시키는 것이 가능합니다. 이는 물리적인 하드웨어의 요구 없이 쉬운 애플리케이션 개발을 허용합니다.




'Embedded Programming > ChibiOS' 카테고리의 다른 글

ChibiOS/RT 설치  (1) 2018.02.25
Cortex-M4 환경에서 ChibiOS 사용한 기초 예제  (0) 2017.12.19
Posted by Nature & Life


Mini VESC v0.4 하드웨어의 회로도 입니다.

https://github.com/antonchromjak/MINI4


다음은 부품리스트(BOM)입니다.

U1,U2,U3: LM5113SDE

U4,U5,U6: AD8417

U7: STM32F405RGT6

U8: LMR16006YDDCT

U9,U10: MCP1700T-3302E/TT

Q1,Q2,Q3,Q4,Q5,Q6: NTMFS5C604NLT1G

D1: PMEG6020AELR

D3: SML-D12P8WT86C

D4: SML-D12V8WT86C

L1: WURTH ELEKTRONIK 74438335220

X1: ABM3B-8.000MHZ

R1,R2,R3: CSS2H-2512R-L500F

R6,R7,R8,R9,R10,R11: 0603 3R9

R29,R28 0603 220R

R30,R20,R19,R18: 0603 100R

R31,R21,R34: 0603 10k

R25,R27: 0603 22R

R22: 0603 54k9

R33: 0603 100k

R5,R13,R15,R17: 0603 2k2

R4,R12,R14,R16: 0603 39k

R32: NCP18XH103F03RB

C30,C31: 0603 10p

C16,C15,C14: 0603 4n7 

C29,C21,C22,C26,C27,

C19,C76,C20: 0603 100n 50V

C23: 0603 220n 25V

C1,C2,C3: 0603 470n 25V

C6,C7,C8,C9,C10,C11,

C87,C88,C89,C90,C17,

C18,C86,C78,C77: 0603 2u2 25V

C48,C49,C50,C51,C52,

C53,C54,C55,C82,C33,

C34,C37,C38,C40,C41,

C42,C43,C81,C45,C46,

C47,C68,C69,C70,C71,

C73,C75,C57,C58,C59,

C64,C65,C66,C67,C72,

C83,C12,C13,C56,C44,

C4,C5,C61,C63,C84,

C25,C32,C35,C36,C39,

C60,C62,C74,C85,C79,

C80,C24: 1206 2u2 100V

C25: 1206 10u 16V

P11,P10,P9: Micro JST ZH 1.5mm 6-Pin


pdf 포맷입니다(v0.4).

MINI4.pdf

이전 버젼입니다.

MINI_VESC.pdf



Posted by Nature & Life


Mini VESC는 VESC 6에서 출력을 감소시고 사이즈를 줄여 드론에 적용하기 위해서 만들어진 보드입니다. VESC 펌웨어 v4.12에서 약간의 수정(shunt, hwconfig 등을 변경)을 하여 그대로 적용할 수 있습니다.



  • 72x18 mm / 9.5g

  • 8S 20-30A without heat sink (12V with 24A without heat sink @V0.4 / V0.5)

  • 3개의 6-pin 커넥터:

- For programming and debugging: GND, NRST, SWCLK, SWDIO, USBP, USBM

- For motor extra: GND, MOTORTEMP, HALL1, HALL2, HALL3, VCC(3,3V)

- For another one : GND, EN, RX(UART), TX(UART), SERVO, VCC(3,3V)

그리고 VESC Tool을 연결하기 위해서 다음의 케이블(Mini. Micro JST ZH 1.5mm 6-Pin to USB type-a male)이 필요합니다.



파워 스테이지 MOSFET은 NTMFS5C604NL, 게이트(GaN) 드라이버는 LM5113, 전류 센싱을 위한 current sense amplifier AD8417, +5V 전원을 위한 buck 레귤레이터 LMR16006과 VCC 그리고 VAA를 위한 LDO MCP1700, 3x R001 shunts 저항. 고전압 애플리케이션을 위해서 IRFH5006과 LMR16006을 사용할 수 있습니다. 테스트를 위해서 N5065 80A 모터를 사용하였습니다.



아래 그림에서와 같이 EN는 Pull-up 외에도 Pull-down 저항 옵션을 갖을 수 있습니다. EN이 '0'이면 단지 2uA의 전류를 당기지만, 2V 이상의 전압을 공급하면 게이트 드라이버와 MCU에 전원을 공급합니다.



구입처:

https://oshpark.com/profiles/Anton_Chromjak


kicad sources

https://github.com/antonchromjak/MINI4


VESC와 MINI4의 비교



Posted by Nature & Life
Embedded Programming/EmBitz2018. 2. 13. 22:20


임베디드 개발 환경에 적합한 EmBitz의 특징입니다. 무엇보다도 사용 제한이 없으며 무료입니다.


Highlights:

    • Multiple device targets (ARM, MSP430, PIC,  ….).

    • Included optional: GNU ARM Embedded “bare-metal” compiler with different optimized libraries.

    • Powerful debugger fully optimized for embedded development.

    • Written in C++. No interpreted languages (Jave or .NET) or proprietary libs needed.

    • Extensible through plugins

Interface:

    • Syntax highlighting, customizable and extensible

    • Syntax highlighting for assembler sources for all the supported targets (ARM, MSP430, PIC,…)

    • Code folding for C/ C++ and XML files.

    • Tabbed interface (VS2010 style)

    • Code completion

    • Class/symbol Browser (also for the compiler predefined symbols)

    • Smart indent

    • Spelling checker with US dictionary pre-installed

    • CScope integration with binaries pre-installed

    • One-key swap between .h and .c/.cpp files

    • Open files list for quick switching between files (optional)

    • External customizable "Tools"

    • To-do list management with different users

Build engine:

    • Multiple compiler/target support:

- EmBlocks "bare-metal" GNU ARM compiler (with memory report in EmBlocks)

- Keil/ARM realview

- ARM GCC (generic)

- Mspgcc (MSP430)

- PIC32 Microchip

- PIC24, PIC30, dsPIC Microchip

- PIC18 Microchip

- AVR GCC ATmel (MHV windows toolchain detection)

    • Auto detection of installed toolchains

    • Build options for Compiler, Linker and Assembler

    • Inherited options from upper levels are visible at lower levels

    • Compiler build options on source file level

    • Support for parallel builds (utilizing your CPU's extra cores)

    • Multi-target projects

    • Workspaces to combine multiple projects

    • Inter-project dependencies inside workspace

    • New Project Wizard for NXP-ARM, ST-ARM, EnergyMicro and Microchip targets (others will follow)

    • Project loader for uVision ARM projects

    • Project loader for Mplab 8 projects (PIC32,dsPIC, PIC30, PIC24 and PIC18)

    • Project loader for Atmel Studio project/workspace (AVR and ARM)

    • Project importer MplabX projects

    • Project importer CoIde projects

ARM GNU Embedded "bare-metal" Compiler:

    • Based on GNU 5.4-branch

    • Special libraries for the cortex family (with and without fpu/softfp etc)

    • Newlib builds optimized for Speed & Size (and default)

    • Newlib Nano-branch included

    • Unwind handling is excluded for minimum size builds

    • All libraries are selectable from linker panel EmBlocks

    • CMSIS library preinstalled and available without further settings

    • Fully documented and accessible at EmBlocks help menu (inclusive ARM quick references)

Debugger:

    • Special tailored GDB binaries optimized for embedded debugging

(ARM, MSP430, & AVR are selectable in the install package)

    • Step-in/out, Step-over, Step-instruction, Run to cursor & Set PC at cursor

    • Disassembler view mode, mixed or plain

    • Memory view hex,char or dec (signed/unsigned) and 8,16 or 32 bits selectable

    • Memory view Scrollable (uVision style) and with "Address modify" function

    • System view with CMSIS-SVD (XML) description support.

    • Display all the peripherals registers of the device and modify the values if necessary.

    • Live data and variables (on mouse-over) on GDB server support

    • Live watches (global variables)

    • EB monitor – printf/scanf in EB console window without halting the application (the semihosting successor)

    • Supports old Semihosting console handling in debugger-target view through GDB

    • OS aware debugger plugin: OSsupport

– FreeRTOS

    • Navigation between register, disassembly and memory views

e.g. show memory pointed by register/system or disassembly immediate values etc.

    • GUI debug interface settings

    • Easy integration of additional GDB-servers by squirrel scripting

    • Automatic GDB server launch and termination

    *ST-link GDB server available in package which supports flash/ram execution with live data.

    *OpenOCD GDB server available in package which supports live data for STlink.

    • Scripted register window parser for register-flags

    • Changeable register values in register window

    • Cursor aware variable inspect (on cursor or on selection) with live updates

    • Custom variable types possible via scripting

    • Assembler syntax highlight with PC-aware line colouring

    • Debug session storage in separate file (.eds) option

    • Breakpoints in source windows are visible also in assembler pane

    • 'Break on valid source line if possible' option

Additional Plug-ins:

    • SVD online repository plugin (>400 files)

    • Auto versioning

    • File diff viewer.

    • Hex editor (even for large files).

    • Doxy documentation generation front-end.

    • Code snippets.

    • Code statistics.

    • EB monitor


EmBitz(v1.11)에서 코드를 볼 때 색깔이 흐려서 보이지 않는 경우에 "Settings -> Editor..." 메뉴에서 아래와 같이 'Syntax highlighting'에서 설정할 수 있습니다. 이와 같은 설정은 EmBitz 종료시 반드시 저장되어야 합니다.



Posted by Nature & Life
Motor & Battery/Battery2018. 2. 9. 21:56


배터리의 용량은 '1시간에 사용할 수 있는 전류량'을 말하며 'mAh'라는 단위를 사용합니다. 예를 들어, 배터리가 2000mAh라고 하면, 2000mA의 전류를 사용할 때 1시간(런타임) 동안 사용할 수 있다는 의미입니다. 그러나 소모전류량에 따라 달라질 수 있으므로 200mA로 사용한다면 10시간 동안(2000mAh/200mA = 10h) 사용할 수도 있습니다.


보통 RC에서 소모전류는 20A 이상 되기 때문에 20A의 경우에는 2000mAh/20000mA = 0.1h = 6분 정도에 모두 사용하게 됩니다. 일반 배터리의 경우 부하가 높은 전류를 끌어 당기게 되면 전압이 강하되어 충분한 전류를 보내주질 못하는데 이러한 능력의 척도를 방전율이라 부르고 안전하게 방전할 수 있는 전류의 최대값을 나타내는 비율이 됩니다.


방전율(C-rate)은 보통 몇 C로 표기하며 'C'는 Capacity(용량)의 약자입니다. 그래서 1C면 자신이 가진 용량(Capacity)의 1배를 내줄 수 있다는 뜻이며, 10C라 하면 자신의 용량의 10배를 내줄 수 있다는 의미가 됩니다. 게다가 이러한 C의 개념은 용량을 뜻하기 때문에 방전에만 사용하는 것이 아니라, 충전 시에도 '몇C 충전'이라고 표현합니다. 보통은 1C이며 시중에 현재 3C까지 출시됩니다. 예를 들어, 1C 충전이라 함은 배터리가 가지고 있는 용량(mAh)만큼의 전류량(mA)으로 충전시킨다는 뜻입니다. 2000mAh인 경우, 충전 전류를 1000mA로 설정하면, 배터리의 용량의 0.5배가 되므로 0.5C충전이 되고 2000mA로 충전하면 1C충전이 된다고 합니다.



다음 그림은 리튬폴리머(LiPo) 충전율에 따른 배터리 수명을 나타냅니다. 따라서 충전은 가능하지만 1C를 초과한 충전은 권장되지 않습니다.



요약하면 예를 들어, 리튬폴리머 3.7V 2000mAh(15C)라 하면, 배터리의 용량은 2000mAh이고, 방전율은 15C가 됩니다. 즉, 소모전류가 2000mA(2A)라면 1시간 동안 사용할 수 있고, 자신의 용량의 15배인 30A(15 x Capacity = 30,000mA)까지 소모전류를 사용할 수 있다는 뜻입니다. 물론 사용시간은 2000mAh/30,000mA = 0.0666시간 = 3.9분 이내가 됩니다.


리튬폴리머(혹은 리포) 배터리는 여러개의 셀(Cell)을 모아서 사용하는데 1셀은 한 장의 판을 사용한 것이고 2셀은 두 장의 판을 직렬로 연결한 것을 의미합니다. 1셀이 3.7V의 전압을 가지므로 셀이 추가될수록 출력전압은 3.7V의 배수가 됩니다. 방전률의 한계를 초과하는 부하의 연결은 배부름(스웰링)이 발생할 수도 있습니다. 예를 들어, '4S2P'와 같은 표현을 병기하도 하는데 이는 셀을 S는 직렬, P는 병렬로 연결했다는 의미입니다.


※ 리튬폴리머 배터리의 배부름(스웰링) 현상 - 셀, 즉 3.7V짜리 판을 직렬 연결하여 사용하는데, 밀폐된 공간에서 고체에 기체가 발생해 용적이 늘어나면서 커지는 현상으로 각각의 판이 부풀어 올라 배터리의 배가 부르는 현상입니다. 이는 아래의 경우에 발생하게 됩니다:

        • 과충전 - 4.2V까지 만충된 후에도 추가로 충전

        • 과방전 - 순간적으로 너무 빨리 그리고 많이 소모할 경우 혹은 큰 부하에 비해 방전율이 낮은 배터리 사용 시

        • 고열 - 70도 이상 되는 열이 발생되어 각 셀에 무리를 줄 경우

        • 충격 및 내부 파손

        • 완충한 상태로 장기간 보관 시


리튬폴리머 배터리는 젤타입이라 폭발의 위험성은 없는 반면에 내부 전해질이 액체타입인 수소나 이온 배터리의 경우 폭발의 위험성이 존재합니다. 다만 리튬폴리머 배터리의 경우 연소가 발생해 불이 날 수도 있습니다. 또한 리튬폴리머 배터리의 경우 산소(혹은 물에도 반응)와 만나게 되면 순간적으로 연소가 되어 불꽃이 발생하거나 외부에 덮고 있는 피박이 크게 파손되어 큰 화재가 발생할 수도 있습니다. 그러므로 배터리가 부풀어 올랐을 때 바늘이나 칼로 외부 피막을 뚫어 가스를 빼는 것은 매우 위험합니다.


리튬 계열은 충전 시 열이 발생하지는 않지만 과전압으로 충전 시 내부 전해질이 급격하게 이온화 되면서 부산물(가스)이 생기게 됩니다. 따라서 리튬철(Li-Fe) 배터리만 제외하고 모두 1C의 충전을 하는 것이 권장됩니다. 충전 방법은 배터리가 3.7V 600mAh라면 전압은 4.2V에 충전 전류는 0.6A를 넣어주는 것입니다. 리튬폴리머 배터리는 메모리 효과가 없기 때문에 다른 배터리(예를 들어, Ni-Cd(니카드))와 달리 방전할 필요가 없으며 니켈전지류처럼 완충 완방전을 해줄 필요가 없습니다.


※ 메모리 효과 - 니켈카드늄(Ni-Cd) 배터리가 완전 방전하지 않고 충전할 시에 전체 배터리의 용량이 줄어드는 현상을 말합니다.

 

리튬전지는 니켈전지와 다르게 전압 수평화 현상을 일으키지 않는데, 수평화 현상이란 전압이 다른 전지들을 혼용하여 사용하면 전압이 모두 같아지는 현상을 말합니다. 따라서 니켈전지는 리튬과 다르게 밸런싱이라는 것이 필요 없습니다. 다만 니켈전지의 이러한 특성 때문에 전압이 낮은 전지와 같이 두면 낮은 쪽이 충전되는 현상이 일어나게 되어 열이 발생하게 되고, 만일 밀폐되고 온도가 높은 곳이라면 화재가 발생할 수도 있습니다. 반면 리튬은 이러한 현상이 없으므로 전압 차가 높은 셀들을 장시간 연결하게 되면 전압이 높은 한쪽 셀이 불안정한 상태가 됩니다. 즉 배터리가 배부름 현상이 생길 수 있으므로 방전으로 전압 평준화를 할 필요가 있습니다.


주의사항

  1. 셀당 2.7V 이하로 떨어지면 과방전으로 못쓰게 됩니다.

  2. 셀당 4.2V 이상 충전되면 과충전으로 못쓰게 됩니다. 만땅 충전하여 장기 보관시 배부름(스웰링) 현상이너 화재의 위험이 있습니다.

  3. 셀간 전압 밸런스가 달라지면 배터리 수명(성능)이 감소합니다. 이를 막기 위해 밸런스 기능이 있는 충전기를 사용해야 합니다.


보관방법

리튬폴리머 배터리는 반드시 직사광선 노출을 피하고(배터리가 급속도로 익음) 5-25도 사이에서 보관을 해야 하며, 30도가 넘는 온도에서 장시간 방치하면 내부 전해질이 활성화 되어 부풀어 오릅니다. 마찬가지로 추운 겨울철 영하의 날씨에 장기간 보관하면 전해질이 굳어 방전률이 급격하게 떨어져 배터리 수명이 줄고 안전사고도 일어날 수 있습니다. 그러므로 장기간 보관할 때는 신문지로 돌돌 말아서 필라멘트 테이프 등으로 감싸주는 것이 좋습니다. 리튬폴리머 배터리는 충전 시 열이 나는 게 아니라 방전 시 일어나므로 충전 중 열이 많이 난다면 대부분 내부 결정이 깨져서 연쇄 반응이 일어나고 있다는 것으로 파기해야 합니다.


보관할 때는 방전을 해준 후 3.8V까지 밸런싱 충전하는 것이 배터리를 가장 안전하게 보관하는 방법입니다. 자연방전 되더라도 1년정도는 3.7V를 유지하기 때문에 리튬폴리머 배터리의 평균 전압치를 맞춰 보관할 수 있게 됩니다. 3.7V는 흔히 사용하는 스토리지 모드(배터리의 50% 잔량), 즉 보관 모드입니다. 실제로 배터리 구입시 대부분 배터리는 3.7~3.8V로 충전되어 판매됩니다. 그 이유는 이 전압대에서는 환원, 산화 반응이 거의 일어나지 않기 때문입니다.


리튬폴리머 배터리가 충전이나 방전을 일으킬 경우 환원, 산화 반응으로 전해액 성분변화가 일어납니다. 이런 반응에 의해 점차 내부저항이 증가하고, 용량도 감소하게 됩니다. 아래 그림은 충방전 전압에 따른 화재 위험도(risk of fire)를 나타냅니다.



참고로 다음 그림은 충전 전압에 따른 배터리 수명을 나타낸 그림입니다. 비록 충전 전압이 0.1V 증가하지만 충방전이 거듭될수록 충전 용량이 급격하게 감소됨을 알 수 있습니다.




Posted by Nature & Life
Drone News/Review2018. 2. 6. 00:54


가격대 성능비가 최고(약 27만\)이고, 오픈 소스인 CX-20의 구입처입니다.


오픈 소스 CX-20


패키지 포함:

1 x CX-20 자동 패스 RC 쿼드 콥터 (2시간 충전 / 15분 flying)

1 x 송신기 (2.4G ISM / 4 x AA / 300m)

1 x 충전기 (Switching Power Supply / Balance Charger)

1 x 배터리 (LiPo 11.1V(3S) 2700MAH 25C)

1 x CD, 메뉴얼, 공구



Posted by Nature & Life


VESC 6 하드웨어(v6.4)의 회로도 입니다.



pdf 포맷입니다.

VESC_6.pdf


Posted by Nature & Life


VESC 하드웨어(v4.12)의 회로도 입니다.

https://github.com/vedderb/bldc-hardware



pdf 포맷입니다.

BLDC_4.pdf


Posted by Nature & Life