반응형

Embeded/ARM Cortex-M4 14

초음파 센서

다른 센서들과 다르게 초음파센서는 ADC에 연결하고 값을 읽어오기만하면 되는 구조가 아니다. 보다 복잡한 제어가 필요하다. 초음파센서의 원리 초음파 센서는 기본적으로 Trig핀과 Echo핀이 있는데 Trig핀으로 10us 동안 High신호를 입력하면 초음파를 발사하기 시작한다. 이 때부터 Echo핀이 High상태를 유지하다가 초음파가 돌아오면 다시 Low상태가 된다. 초음파센서 사용법 즉 1us주기로 동작하는 타이머를 사용하고 Trig에 10펄스 동안 High신호를 GPIO로 입력한 뒤 Echo핀이 High상태인 동안의 펄스를 카운트하고 그 카운트된 값을 58로 나누면 cm단위의 거리값이 나오게 된다. 주의할 점 Echo가 Low상태가 됬을 때 카운트를 중지하고 다시 Trig로 신호를 줘야하는데 이것을 ..

스태핑 모터 상 제어

마이크로프로세서에서 바퀴 등을 돌려야할 때 흔히 사용되는 모터가 스태핑모터다 일단 DC모터 보다 높은 전압과 전류를 소비하지만 강한 파워를 보여준다. 문제는 이 놈을 제어하는 것이 보통의 DC모터처럼 전압을 가하면 땡이 아니라는 것이다. 상 제어가 필요없는 모터드라이버를 사용하면 좋겠지만 그렇지 않은 경우 상 제어를 별도로 해 줘야한다. 상 제어? 이 모터를 구동시키는 방법엔 1상, 2상, 1-2상 여자방식이 있다. 스태핑모터의 내부에는 4개의 전자석이 있다. 이 전자석들이 차례로 동작하면서 모터를 회전시키는 것이다. 전자석들이 동작하는 방식에 따라 1상, 2상, 1-2상 여자방식이 나뉘게 된다. 1상 전자석들을 편의상 ABCD라고 할 때 ABCD ABCD ABCD ABCD 의 형태로 신호를 보내는 경우..

UART - PC, 블루투스 통신

무선 통신 마이크로프로세서 간의 통신, 마이크로프로세서와 PC간의 통신등을 위해 사용되는 방법 중 가장 흔하게 사용하는 방법이 UART통신이다. 로봇과 컨트롤러간의 신호전달, 디버깅을 위해 PC에서 값을 확인할 때 등 다양하게 사용된다. 무선통신은 하나의 기기가 Master가 되고 마스터의 중계를 받는 복수의 Slave가 있다. 마스터(Master) 초기화 소스 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..

Sink방식과 Source방식

싱크방식과 소스방식은 위 사진으로 설명이 가능하다. 마이크로프로세서에 센서나 엑츄에이터를 추가할 때의 연결방식을 말한다. 소스방식(왼쪽)은 마이크로프로세서가 전원소스가 되는 것이고 싱크방식(오른쪽)은 별도의 외부전원을 사용하는 것이다. 무슨차이인가? STM32F4의 경우 마이크로프로세서 내부에서 끌어 쓸 수 있는 전압은 3.3v이다. LED하나만 하더라도 3.3v를 인가하면 충분한 밝기를 낼 수 없고 각종 센서들 중엔 동작전압이 3.3v인것도 있지만 5.0v를 요구하는 경우도 많다. 이런 경우 부족한 전압 혹은 전류를 대신하기 위해 외부전원(파워서플라이, 배터리 등)을 사용할 때 싱크방식을 선택해야한다.

DAC(Digital-Analog Converter)

DAC ADC완 반대로 디지털신호를 아날로그신호로 변환시키는 것으로 마이크로프로세서 내부에서 처리된 값으로 엑츄에이터(Actuator)를 동작시킬 때 사용될 수 있다. 예를 들어 LED의 밝기를 조절하고 하고자 할 때 LED로 들어가는 전압의 세기를 변화시켜야 할 것이다. 이 때 DAC가 사용될 수 있다. DAC 초기화 소스 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 void Init_DAC(){ GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitStructur..

ADC(Analog-Digital Converter)

ADC(Analog-Digital Converter)란 아날로그 신호를 디지털 신호로 변환시켜주는 것이다. 아날로그 신호란 자연계에서의 수치로 음성, 온도, 압력의 세기 따위를 전압의 세기로 나타내는 것이다. 디지털 신호 다른 말로 디스크리트(discrete) 신호는 High와 Low로 구분되는 이산적인 값이다. 어디에 쓰나? 마이크로프로세서에서 ADC는 외부 센서(온도 센서, 적외선 센서, 초음파 센서, 가속도 등)으로 부터 읽어들인 아날로그 값을 처리하기 위해 디지털 신호로 변환시키는데 사용된다. 측정값이 전압의 세기로 나타내지는 센서들은 모두 ADC를 거쳐야한다고 생각하면 된다. ADC 초기화 소스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22..

GPIO(General Purpose Input Output) IN, OUT 소스

GPIO(General Purpose Input Output)은 쉽게 말해 다용도 입출력 기능으로 GPIO는 입출력 뿐만 아니라 후에 다루게될 ADC, DAC를 포함해서 Timer까지 등까지 대부분의 기능을 겸한다. GPIO를 통해 외부에서 swt등으로 입력하는 신호를 입력받을 수 도 있고 MCU내부에서 처리한 값을 GPIO를 통해 LED등의 소자로 출력할 수 도 있다. 다음은 OUT모드로 GPIO를 초기화시키는 소스이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void Init_GPIO() { GPIO_InitTypeDef GPIO; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); GPIO.GPIO_Pi..

GPIO/Timer를 활용한 FND제어 소스

원래 Timer에 이어 GPIO까지 설명하고 이 소스를 공개하려 했는데 Timer에 대해 설명하기 너무 까다로워 일단 이 소스를 공개해버린다. 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 10..

라이브러리(library)코딩과 레지스터(Register)코딩

MCU에서 펌웨어를 작성할 때 작성방법에 따라 라이브러리(Library)를 사용하는 방법과 레지스터(Register)를 사용하는 방법으로 나뉜다. 라이브러리(Library) 먼저 라이브러리를 활용하는 방법은 우리가 흔히 사용하는 방법으로 #include하여 추가하는 헤더파일에 있는 명령어들을 사용하는 것으로 C언어로 예를 들면 printf같은 것들이 라이브러리에 속한다. 사용자가 직접 레지스터를 제어하지 않아도 되게끔 MCU제조사 혹은 일반 개발자들이 각 기능들의 레지스터 제어를 함수형식으로 가독성이 좋게 만들어 헤더파일화 시킨것이다. 라이브러리로 작성할 경우 가독성이 좋다는 장점이 있다. 레지스터(Register) 기본적으로 MCU의 모든 기능들은 레지스터를 제어함으로써 구동되게 된다. 레지스터를 이용..