출처 : Effective C++ 멤버 초기화 리스트가 무엇인지 모르신다면 이전 포스트를 먼저 읽고 오시면 이 글을 읽는데 더욱 잘 이해될 것 같습니다. 이전 포스트에서는 멤버 초기화 리스트를 사용함으로 얻는 장점은 생성자 호출 + 대입으로 이어지는 함수 더블 호출을 한 번만으로 가능하게 하여 비용적인 면에서 효율적이다는 것이었습니다. 그렇다면 단순히 비용적 효율말고 멤버 초기화 리스트를 써야하는 또 다른 이유가 있을까요? 일단, 제일 큰 이유는 객체의 모든 데이터 멤버가 초기화된다는 보장을 받기 위해서입니다. 물론 객체 타입의 멤버(ex) STL - vector)들은 초기화 리스트에 넣지 않아도 컴파일러가 자동으로 기본 생성자를 호출하도록 만들어줍니다. 그러나, 기본 제공 타입(int, double) ..
출처 : Effective C++ 이 글을 읽기에 앞서 한 가지 법칙만 알고 가면 좋을 것 같습니다. 대입(assignment)과 초기화(initialization)은 서로 다른 개념이라는 것입니다. 예제1) 아래 코드는 string 객체를 초기화한 후, 대입합니다. std::string str; // 생성자 호출(초기화) str = "Hello World!"; // 복사 대입 연산자 호출(대입) 예제2) 반면 아래 코드는 string 객체에 대해서 초기화만 진행합니다. std::string str("Hello World!"); // 생성자 호출(초기화) 물론 위 두 과정 모두 결과는 똑같이 str 안에 "Hello World!"라는 스트링이 담겨있습니다. 예제 1같은 경우 생성자를 호출하고 대입까지 진..
이번 글을 통해 저희가 코드로 작성하는 .c 파일이 실제로 어떻게 실행 파일이 되는지 그 과정에 대해 설명하도록 하겠습니다. C를 조금이라도 해보셨던 분이라면 아래와 같이 Hello World를 출력하는 프로그램을 작성해보셨을 겁니다. 아래 소스 코드 파일을 hello.c라고 하겠습니다. #include int main(void) { printf("Hello World!\n"); return 0; } 이 hello.c는 단지 사람만이 해석할 수 있으며 컴퓨터는 해석하지 못합니다. 따라서 컴퓨터가 우리가 작성한 hello.c를 해석하고 실행할 수 있도록 하려면 다른 프로그램을 이용하여 컴퓨터가 이해할 수 있는 기계어로 바꾸어 주어야(translate) 합니다. hello.c를 컴퓨터로 이해할 수 있는 기계..
이 글에서는 칼만 필터 알고리즘에 대해서 간단하게 살펴보도록 하겠습니다. 이번 포스팅에서는 칼만 필터의 구현 방법이나 실습 예제 등이 첨부되어 있지 않아 실제로 바로 사용하기에는 어려울 수 있으나 그냥 '칼만 필터'가 이런 거구나~' 하는 개념만 잡고 가시길 바랍니다. 칼만 필터가 저주파 통과 필터(LPF)나 고주파 통과 필터(HPF) 같은 필터와 다른 점이 있다면, LPF와 HPF는 필터가 동작하기 전에 미리 가중치를 결정하고, 동작 중에 가중치 값을 변경시키지 못합니다. 그러나, 칼만 필터에 사용되는 가중치(칼만 이득이라고 합니다.)는 칼만 필터가 수행되면서 그 가중치 값이 알고리즘에 의해 지속적으로 변합니다. 칼만 필터는 측정값을 입력으로 받아, 칼만 필터 알고리즘에 의해 처리된 후 추정값을 출력으..
STM32 MCU를 이용하여 PWM의 개념을 이해하고 PWM 생성 실습을 해보도록 하겠습니다. STM32F407VET6 블록 다이어그램 중 APB1/APB2 Clock - peripheral, timer [그림 1] APB1와 연결된 Timer 채널 : TIM2, TIM3, TIM4, TIM5, TIM12, TIM13, TIM14 APB2와 연결된 Timer 채널 : TIM1, TIM8, TIM9, TIM10. TIM11 TIM1 채널을 통한 PWM Pulse 출력 CubeMX TIM1 Pin, Mode Setting내부 클럭을 사용할 것이므로 Clock Source를 Internal Clock으로 세팅Channel 1에 PWM Pulse를 출력할 것이므로 PWM Generation CH1으로 세팅 [그..
이번 포스팅은 DMA가 무엇인지 그리고 STM MCU에서는 DMA가 어떻게 사용 및 동작하는지에 대해 올려보겠습니다.(이번 포스팅에 사용하는 자료들은 STM Tech Training 중급 코스에서 사용하였던 문서를 참고하였습니다.) DMA의 정의 DMA란 Direct Memory Access의 줄임말로 쉽게 말해 직접 메모리 접근이라고 합니다. 그럼 여기서 또 문제가 생기죠. 그럼 직접 메모리 접근이 뭡니까?? 사실 그 자체입니다. 직접 메모리에 접근하여 데이터를 읽던지 쓰던지 하는 것이죠. 더 자세히 설명하자면 CPU에 대해 독립적으로 동작하는 bus slave간 데이터 전송 기능을 가지는 장치입니다. CPU 몰래 끙차끙차 데이터를 옮기는 것이죠. 원래 데이터를 옮기는 일은 CPU가 전적으로 담당했는데..
SPI란?SPI(Serial Peripheral Interface): Motorola에 의해 개발된 full-duplex 통신 이 가능한 동기 통신 규격 full-duplex 통신 : 전이중 통신. 데이터의 송신과 수신이 동시에 가능한 통신⦁ Master-Slave 방식으로 동작하며 하나의 Master와 하나 이상의 Slave가 연결되는 구조 ⦁ Master에 의해 클럭이 출력되며 클럭에 의해 동기화된 직렬 통신 방식 ⦁ 4개의 신호로 구성(SCLK, MOSI, MISO, NSS) ⦁ SPI의 구성 핀 설명 ∘ SCLK : Master에서 출력하는 Slave와 동기화하기 위한 클럭 핀 ∘ MOSI : Master Output Slave Input. Master에서는 출력, Slave에서는 입력으로 사용하..
이번 포스트는 ST 사의 STM32F407VET6 보드를 이용하여 UART 통신을 통해 PC 모니터에 Hello World!를 출력해보겠습니다. 먼저 CubeMX를 실행합니다. 그럼 먼저 UART 통신을 해야 하니 당연히 UART 설정을 해주세요. 왼쪽 Peripherals 탭에 USART1을 선택하여 다음과 같이 설정해줍니다. 비동기 방식으로 통신할 것이므로 Mode를 Asynchronous로 설정해줍니다. 설정하면 오른쪽에 USART1_RX와 USART1_TX핀이 설정된 것을 볼 수 있습니다. (저는 디버깅 용으로 PE6를 GPIO_OUTPUT을 설정하여 LED를 부착하였습니다.) PC에서 STM32F4 보드로부터 수신한 데이터를 확인하기 위해 USB to TTL 모듈의 RX핀과 TX핀을 보드의 TX..
지난 포스팅에서 보여드리기만 하고 증명이나 설명은 거의 없었던 그 식에 대해서 설명드리겠습니다. 이게 바로 저번 포스팅에서 얘기했던 식입니다. 각 부분에 대해서 다시 설명해보자면 변환할 값(새로 갱신된 데이터)에 변환 이득값을 곱해 작은 범위를 큰 범위로 늘려주고 마지막으로 모자란 보충값을 더해줍니다. 한번 세부적으로 예를 들어보도록 하겠습니다. sbus data는 지난 번에 얘기한 대로 352 ~ 1696의 범위를 가집니다.(모든 리시버의 데이터가 이 범위를 가지는 것은 아닙니다. 여러분 각자 하드웨어마다 다른 범위를 가질 것입니다.)그럼 범위의 scale은 1696 - 352 = 1344입니다. 한편 우리가 sbus data를 가지고 만들어야 할 pulse 값의 범위는 4619 ~ 8147입니다.(지..
오늘은 조종기 신호를 수신하는 SBUS 리시버의 output data를 이용하여 드론의 PWM을 생성해보는 방법에 대해서 알아보겠습니다. STM32 MCU를 이용하여 설명하겠습니다. 오늘 이 포스팅을 통해 어떤 하드웨어가 출력하는 PWM의 주기와 Duty Cycle을 MCU Timer 세팅을 통해 그대로 구현해 볼 수 있을 것입니다. 최근 진행했던 드론 프로젝트의 구성을 예로 설명하겠습니다. SBUS 리시버가 출력하는 PWM 파형 분석프로젝트에 사용했던 SBUS 리시버에서 출력하는 PWM을 오실로스코프를 통해 확인해보니 다음과 같은 결과가 있었습니다. PWM 주기 : 15msHIGH duration(한 펄스에서 HIGH가 차지하고 있는 시간) : 1.1ms ~ 1.94ms HIGH duration 범위를..
- Total
- Today
- Yesterday
- SPI
- 컴파일
- 멤버 초기화 리스트
- teraterm
- c
- 터미널
- compile
- 로그
- 드론
- computer_science
- pwm
- 칼만필터
- 초기화 리스트
- C++
- 오실로스코프
- DCM
- DMA
- UART
- Effective C++
- 고도필터
- STM32
- PID
- 컴퓨터구조
- 드론개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |