'컴파일'에 해당되는 글 3건

  1. 2017.04.11 아두이노 라이브러리의 설치
  2. 2017.03.12 아두이노(Arduino) 코딩의 시작
  3. 2014.04.07 Wii-ESC에 대한 FAQ
Embedded Lecture/Arduino2017. 4. 11. 21:10


아두이노 라이브러리는 다른 언어와 마찬가지로 코드의 재사용성을 높혀 유지관리를 쉽게 만들어줍니다. 물론 상업용 업체에서는 코드를 컴파일하여 제공하므로써 우선 코드 암호화를 통한 보안 등에 더 관심을 갖을 수는 있지만, 아두이노(Arduino)나 리눅스(Linux)처럼 컴파일된 파일 혹은 실행 파일과 더불어 소스 코드도 제공하는 경우에는 사용자가 코드의 디버그(debug)와 같은 효율성 및 유지관리 측면에서 보다 촛점을 맞출 수 있습니다.


라이브러리(Library)는 기본적으로 사용자가 작성한 코드로 자주 사용하는 코드를 모듈화하여 추후에 쉽게 불러다 사용할 수 있도록 소스 코드 자체나, 컴파일하여 목적코드(object) 형태로 저장한 것입니다. 사실 사용자 뿐만 아니라 소프트웨어 환경제공자나 제조업체에 의해서 제공되는 경우가 많습니다. 이러한 라이브러리는 재사용이 가능한 루틴이나 함수 등으로 구성되며, 이 루틴이나 함수의 내부를 모르고도 설명만으로 누구나 헤더파일에 선언하여 컴파일 시 쉽게 가져다 사용할 수 있습니다.


여기서는 인터넷상에서 다운로드한 아두이노용 라이브러리를 설치하는 방법과 직접 라이브러리를 작성하는 방법에 대해서 설명합니다. 우선 Arduino IDE를 설치하면 {내문서}\Arduino\libraris 폴더가 생성되고, 여기에 다운로드 받은 라이브러리를 복사하거나 사용자가 직접 작성한 라이브러리를 저장합니다. 컴파일을 수행할 때 이 폴더는 자동으로 'include'되어서 여기에 있는 라이브러리들이 링크하게 됩니다.


라이브러리는 기본적으로 폴더 단위로 저장되어야 하는데, 예를 들어 'MyLib' 라는 이름(통상 라이브러리명은 대문자로 시작함)으로 라이브러리를 작성한다면, {내문서}\Arduino\libraris 폴더 밑에 MyLib라는 폴더가 있어야 하고, 이 폴더 밑에 MyLib.h 헤더 파일과 MyLib.cpp 파일이 있어야 합니다. 만일 예제 파일을 제공하고 싶다면 별도의 example 폴더 밑에 예제 파일의 이름과 같은 폴더를 두고 그 밑에 .ino 파일을 위치해 두어야 합니다. 이와 같은 폴더 구조를 유지하는 것이 다수의 사용자들에게 통일되고 익숙하기 때문입니다.



통상 라이브러리는 클래스나 변수 등을 선언한 헤더 파일(*.h)과 클래스 멤버함수의 정의부가 있는 *.cpp 파일로 나뉩니다. 그리고 헤더 파일에는 MyLib 클래스가 선언되어 있어야 합니다. 보통은 헤더 파일과 *.cpp 파일로 구분되지만 모든 선언과 정의를 헤더 파일에 둘 수도 있습니다만, 헤더 파일에는 클래스의 선언부를 작성하고 그것을 구현한 *.cpp 파일을 별도로 두는 것이 더 일반적이고 바람직하다는 것입니다. 이렇게 구성하면 이 라이브러리를 사용하는 스케치 파일에서는 헤더 파일만 include 해서 사용할 수 있고, 여러 곳에서 중복해서 사용할 경우에도 헤더 파일만 포함하면 되기 때문입니다.


아두이노 홈페이지에서 다양한 아두이노 라이브러리를 제공하고 있습니다. 사용자는 여기에서 필요한 라이브러리를 다운로드 받아서 설치할 수 있습니다. 예를 들어 OneWire 라는 라이브러리를 다운로드 받았다고 가정하면, 다운로드 폴더에 OneWire.zip 파일이 다운로드 되어 있을 것입니다. 이 압축파일에는 OneWire.h, OneWire.cpp 파일이 들어 있습니다. 이 경우 이 압축파일을 이용하여 바로 사용자 라이브러리 폴더에 복사할 수 있는데 다음과 같이 'Sketch>Include library > Add .ZIP Library' 메뉴를 이용하여 압축파일을 선택해 주면 됩니다.


아두이노 라이브러리


이 경우에, OneWire.zip 파일을 선택하면 자동으로 사용자 라이브러리 폴더에 압축이 해제되서 복사하게 됩니다. 만일에 인터넷 상에서 특정 라이브러리의 특정 버젼을 필요로 하는 경우에는 사용자가 직접 압축을 해제한 후에 필요한 폴더 혹은 파일만을 사용자 라이브러리 폴더에 수동으로 복사해도 무방하다는 것입니다.



'Embedded Lecture > Arduino' 카테고리의 다른 글

인터럽트의 처리(2)  (0) 2017.05.08
초음파 센서를 이용한 거리 측정 예제  (0) 2017.04.16
아날로그 출력(PWM)  (0) 2017.03.20
아날로그 입력 및 온도계 예제  (0) 2017.03.19
아날로그 입력  (0) 2017.03.18
Posted by Nature & Life
Embedded Lecture/Arduino2017. 3. 12. 01:12


아두이노(Arduino) 코딩(coding)을 위해서 아두이노 통합 환경 즉, IDE(Integrated development envirionment)를 다음의 링크에서 사용자의 OS 환경에 맞게 설치하여 합니다.


https://www.arduino.cc/en/Main/Software


사실 IDE에는 2가지가 존재합니다. 첫번째는 사용자 PC에 직접 설치하는 전통적 환경이며, 두번째는 Arduino Web Editor으로 온라인 버젼입니다. 일반적인 설치 버젼은 아두이노가 업데이트 되면 업데이트 작업이 매번 필요하지만, Web Editor 버젼은 항상 아두이노 보드의 모든 라이브러리나 지원 사항을 포함하여 최신 버젼을 유지하고 클라우드에 스케치(sketch)를 저장하게 됩니다. 여기서 스케치는 자신이 코딩한 소스 파일을 의미합니다.


이외에도 사용자의 로컬 PC에서 설치 버젼을 사용시 빠른 속도와 편의기능 등이 있으에도 불구하고 온라인 버젼이 출시되는 이유는 여러 사람이 코딩이 함께 하는 협업에 유리하고 자신의 작성한 코드나 라이브러리를 공유할 수 있으며, 이러한 코드를 효율적으로 안전하게 관리할 수 있기 때문이라는 것입니다.



이는 아두이노 IDE의 첫 화면이며 여기서 프로그램의 코딩과 컴파일(compile) 그리고 아두이노 보드가 PC에 USB를 통해서 제대로 연결되었다면 아두이노 보드로의 다운로드 까지 가능하게 됩니다. 아두이노 보드를 PC에 연결하려면, USB로 아두이노 보드와 연결하고 IDE를 실행한 다음, 메뉴에서 '도구|보드'에 자신이 연결한 아두이노 보드의 종류를 선택하고, '도구|시리얼 포트'에 가상 시리얼 포트의 번호를 선택합니다. 참고로 아두이노 포트 번호는 Windows의 경우 장치관리자에서 확인할 수 있습니다.



위의 아두이노 IDE의 첫 화면에서 아래와 같이 아두이도 코딩의 프로토타입(prototype)을 보여줍니다. 사실 사용자가 이마저도 직접 써야 하지만, 아두이노는 친절하게 반드시 있어야 할 코드는 미리 써주었다는 것입니다. C 언어에 익숙한 사용자라면 프로그램은 반드시 main() 함수로 시작해야 한다고 알고 있는데, 이는 없는 것이 아니고 아두이노 IDE가 사용자 편의를 위해서 내부적으로 처리하게끔 하였다는 것입니다.


void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

일반적인 C 프로그램과 달리 아두이노 하드웨어 프로그램은 위의 2가지 함수인 setup()과 loop()가 반드시 필요합니다. 코딩이란 사용자가 이들 함수를 기반으로 새로운 코드나 함수를 삽입하여 원하는 기능이나 동작을 구현하는 과정이라는 것입니다. setup() 함수는 아두이노 보드의 MCU가 처음 시작할 때 단 한번 실행됩니다. loop() 함수는 setup() 함수가 실행된 이후에 영원히 반복하게 됩니다. 이런 무한 반복을 하드웨어적으로 멈추게 하는 것은 아두이노 MCU의 'RESET' 버튼을 누르는 것인데, 이때 하드웨어는 다시 초기화되고 처음 setup() 함수부터 실행하게 됩니다.





'Embedded Lecture > Arduino' 카테고리의 다른 글

인터럽트와 volatile 지시자  (1) 2017.03.18
아두이노의 TWI(I2C) 통신  (0) 2017.03.18
아두이노의 시리얼 통신  (0) 2017.03.18
인터럽트의 처리(1)  (0) 2017.03.12
LED 깜박이기  (0) 2017.03.12
Posted by Nature & Life
Radio Control/ESC2014. 4. 7. 21:03

 

 

다음은 Wii-ESC에 대한 FAQ입니다.

http://code.google.com/p/wii-esc/wiki/WiiESCv20FAQ

 

Introduction

This page is collection of answers from different forums and threads. Main intention is to collect knowelege base here and than transform it to proper documentation later on.

이 페이지는 다른 포럼이나 글들에서 대답을 정리한 것입니다. 주된 목적은 여기에 기본 지식을 정리하고 나중에 적절한 문서 형태로 전환할 것입니다.

 

Q: What is the difference (meaning of) RCP_MAX and RCP_FULL?

RCP_MAX와 RCP_FULL의 [의미상] 차이는 무엇인지요?

 

RCP_MIN/RCP_MAX - valid range, everything outside is rejected ( 유효한 범위, 이외의 모든 것은 무시됩니다)
RCP_START - where to start (with min. power) (최소 파워인 시작 지점)
RCP_FULL - where to have full power (최대 파워를 갖는 지점)
RCP_DEADBAND - deadband for startup (초기의 데드밴드)

 

Q: Do you have a link to compile/flashing instructions for v2

v2에 대한 컴파일 및 프로그래밍 설명서에 대한 링크가 있는지요?

 

The easiest way to build (빌드하기에 가장 쉬운 방법) :

Download Code::Blocks (in downloads) (CodeBlocks을 다운로드합니다)
Open project wii-esc-ng.cbp (wii-esc-ng.cbp를 'Open project'로 열기합니다)
Setup path to avr-gcc in Code::Blocks (CodeBlocks에 avr-gcc 경로를 설정합니다)

 

Q: I did notice on an MT3506 and a Turnigy/Keda 2213 1050KV motor that the throttle seems to have some bumps, with either normal or complementary PWM.

MT3506과 Turnigy/Keda 2213 1050KV 모터에서 정상 모드 혹은 complementary PWM 모드에서 스로틀에 'bump' 현상을 있는 것으로 압니다.

 

 

 

I would guess you have BEMF filter caps still in place. It does not like them any more

여러분의 ESC에 BEMF 신호의 필터링을 위한 cap이 부착되어 있는 것으로 압니다. 그 cap을 제거해야 합니다.

 

Q: What is Sigma-Delta modulation and how such resolution is archived with /8 timer pre-scaler?

무엇이 Sigma-Delta 변조이며 어떻게 그러한 분해능이 8 timer pre-scaler 없이 구현될 수 있는지요?

 

Generally concept is simple: http://en.wikipedia.org/wiki/Pulse-density_modulation. So, there are 1 bit first order SDM. Due the fact that it has integrator, it is not necessary to sample it precisely. It even benefitial to add some noise to the sampling. So SDM generation scheduled as Idle task using prothothreads, without any timer or interrupt. This also allows to naturally sync SDM generation and Analogue comparator sampling. Qantizer value can be any as soon as the integrator not overflowing. So currently all measured range passed directly to the SDM without any transformation, which is ~4000 points with extended range, 1600 with standard one.

일반적인 개념은 간단합니다: http://en.wikipedia.org/wiki/Pulse-density_modulation. 1-bit 1st order SDM입니다. 이것은 적분기를 가지고 있기 때문에 그것을 정밀하게 샘플링할 필요가 없습니다. 이것은 결국 샘플링 노이즈를 추가하는 격입니다. 그래서 prothothreads를 사용하여 Idle task로 어떤 타이머나 인터럽트 없이 SDM 생성이 스케줄링합니다. 이것은 또한 동기화된 SDM 생성과 아날로그 비교기 샘플링을 허용합니다. 양자화 값은 overflow가 되지 않은 어떤 값이 될 수 있습니다. 그러므로 현재 모든 측정된 범위는 어떤 변환없이 SDM으로 곧바로 전달되고 표준의 1600이 아닌 약 4000 포인트의 확장된 범위를 갖습니다.

 

Benefits of this approach :

  • Lower switching losses as FET's have enough time to properly open/close (currently min on/off ~4us) (FET가 적절히 열리고 닫히기 위한 충분한 시간(현재 최소 ~4us의 on/off 시간)을 가질 때 낮은 스위칭 손실을 갖습니다)

  • More linear power curve by the same reason. (동일한 이유로 좀 더 선형적인 파워 커브를 갖습니다)

  • Lower noise in working range. Yes, the base frequency drops to 1khz at 99.99% but it is not really critical as commutation noises are much higher there. (동작영역에서 잡음 수준이 낮습니다. 기본 주파수는 99.99%에서 1khz인데 commutation 잡음이 휠씬 높기 때문에 실제로 중요하지는 않습니다)

 

Q: What is done to increase dynamic response of the system?

무엇이 시스템의 동적 응답 특성을 증가시켰나요?

 

Yes I have 7.5° blanking time and 2 taps FIR instead of IIR for timing. 2 taps FIR still needed because ZC detection in LH and HL transitions is not symmetrical. (7.5° blanking time과 IIR 대신에 2-tap FIR 필터를 가지며 2-tap FIR 필터는 LH 그리고 HL 천이에서 ZC 감지가 대칭적이지 않기 때문에 여전히 필요합니다)

 

Q: How Can I activate complimentary PWM during compilation?

어떻게 컴파일 동안에 complimentary PWM을 적용할 수 있는지요?

 

Add "#define COMP_PWM" in config.h (config.h에서 "#define COMP_PWM"을 추가합니다)

 

Q: hi ziss.. im interested in wii-esc fws.. and would be interested to know what is the downside of wii-esc?

무엇이 Wii-ESC 펌웨어의 단점인지요?

 

Bright side (장점):

1. up to 4000 steps of resolution.
2. low noise with comparatively high efficiency (Sigma-delta modulator, instead of fixed frequency PWM)
3. linear power response. (completely no "bump" at 100%)
4. Sync recovery.
5. Safe stall detection.
6. Complimentary PWM support

 

Dark side (단점):
1. no EPA, throttle endpoints are fixed.
2. no reverse
3. probably lower max RPM.
4. require removing BEMF capacitors.

 

Q: What is better for BS20A wii-esc Complementary or Low side PWM?

BS20A ESC에서 wii-esc 펌웨어의 Complementary PWM과 Low side PWM 중에 어떤 것이 좋은지요?

 

Short answer: Complimentary PWM allows faster rotor deceleration, putting energy back to the battery. (Complimentary PWM은 에너지를 밧데리 다시 보내 빠른 로터 감속이 가능합니다)

Long answer: This has an interesting effect of having the motor speed more closely and more quickly track the duty cycle even without any active braking or closed-loop controlling. (이것은 모터 속도가 어떤 브레이크나 폐회로 제어가 없을 때 조차도 duty 사이클을 좀 더 근접하고 빠르게 따라가는 흥미있는 효과를 갖습니다)

 

 

'Radio Control > ESC' 카테고리의 다른 글

RapidESC FAQ's  (0) 2014.06.11
RapidESC Flashing  (0) 2014.06.03
RapidESC란?  (0) 2014.05.26
Wii-ESC 프로젝트의 소개입니다  (0) 2014.04.04
Wii-ESC란?  (0) 2014.03.13
Posted by Nature & Life