'sensor'에 해당되는 글 4건

  1. 2017.12.01 MPU6050 센서 1
  2. 2017.02.26 드론에 요구되는 각종 센서들
  3. 2015.12.10 BLDC와 PMSM의 토크
  4. 2014.04.03 BLDC의 장단점


MPU6050 센서는 가속도계(Accelerometer)와 자이로(Gyroscope)가 1개의 칩에 모두 포함하고 있는 6DOF(Degrees of Freedom) MEMS(Micro Electro Mechanical Systems) 센서로, I2C(Inter Integrated Circuit) 통신 프로토콜을 통해서 데이터를 가져올 수 있습니다. 다음은 MPU6050의 메뉴얼입니다.


http://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf



MPU6050의 특징입니다.

      • 3-axis Accel + 3-axis Gyroscope DMP(Digital Motion Processor)

      • ±1% Temperature Sensor( Digital output )

      • 7개의 16bit ADC를 내장하여 16bit 정교한 기울기 출력

      • ±250,±500,±1000,±2000(˚/sec) dps 자이로, ±2,±4,±8,±16g 가속도 (User programable)

      • 1024byte fifo buffer

      • I2C 400KHz

      • Programable Interrupts

      • High-G Interrupts

      • VDD: 2.375V ~ 3.46V

      • Gyroscope Operating current 3.6mA( Standby 5uA )

      • Accelerometer Operating current 500uA( Low Power mode 10uA~ )

      • Programable Low-Pass Filter

      • -40℃ ~ +85℃ (TA 25℃ )

      • StartUp time 30msec

      • Self Test

      • I2C Address : 0x68 ( except R/W 0x1 )

      • I2C Master or Slave

      • Auxiliary I2C bus for communicating to an off-chip 3-Axis digital output magnetometer(지자계 센서) or other sensors.


MPU6050은 24pin QFN 패키지로 내부 timing generator를 사용하지 않는 경우 외장 32.768kHz 혹은 19.2MHz 클럭이 필요합니다. 따라서 사용이 용이하도록 주변 소자를 내장한 MPU6050의 Breakout 보드가 있으며 GY-521의 그 중의 하나입니다.


GY-521의 회로도


GY-521 모듈

(가속도계와 자이로의 방향은 MPU6050 칩의 1번 핀을 기준으로 3차원 축이 결정되며 MPU6050과 동일함을 알 수 있습니다)


MPU6050(GY-521)은 가속도계를 포함하므로 가속도를 측정하는 센서는 아닙니다. 단지 가속도를 이용하여 3차원 공간상 X, Y 그리고 Z 축을 중심으로 기울어진 각도(기울기)를 얻는 센서입니다. 가속도는 중력 방향과의 반대 방향일 때 양(+)이고 아래에서 각 축에 곡선 화살표는 자이로의 회전방향을 나타냅니다. 가속도계와 자이로 외에도 온도도 측정할 수 있는데 이는 이와같은 센서가 온도에 따라 약간 변화하기 때문에 이를 보정하는 목적으로 제공합니다.


만일 MPU6050을 비행기에 탑재하고 진행방향이 Y축 방향과 같다면 가속도계 출력 AccX는 롤(Roll), AccY는 피치(Pitch)그리고 AccZ는 요(Yaw)가 됩니다. 즉 AccX는 X축을 기준으로 기울어진 각도를 의미합니다. 가속도계는 X, Y축에 대해서 기울어진 정도를 중력가속도[g]의 단위로 출력합니다. 이때 기준 방향은 중력방향입니다. 그러나 Z축이 중력방향이 일치하는 경우 요를 구할 수 없다는 것입니다.


만일 움직이지 않고 이동하는 경우 진행 방향의 가속도의 영향으로 중력 방향이 변하게 되어 부정확하게 된다는 것입니다. 이러한 이유로 자이로의 측정 결과를 참조하게 되는데, 자이로는 짧은 시간은 정확하기 때문입니다. 하지만 긴 시간에 대해서는 자이로 센서가 측정시 함유하는 잡음 등을 각속도를 적분하여 기울기를 얻기 때문에 적분하는데, 이 과정에서 오차(적분상수)는 누적되고 시간에 따라 자이로 측정값은 드리프트하게 됩니다. 이때 변화분을 bias라고도 부릅니다.



위 그림에서 X축을 중심으로 회전한 각도 φ와 Y축을 중심으로 회전한 각도 ρ의 계산식입니다. 만일 X축 자체가 기울어지지 않았다면, 중력이 X축 상에 기여도는 없어 φ는 arctan(Ay/Az)으로 간략하게 됩니다. 여기서 Ax, Ay, Az는 AccX, AccY, AccZ입니다. ρ에서 음의 부호는 X축 중심으로 회전각도는 Y축이 위쪽으로 기울어져야 양이지만, Y축 중심으로 회전각도는 X축이 아래로 기울어져야 양이기 때문입니다.


MPU6050을 사용해 실시간으로 기울기를 요구하는 시스템은 가속도계의 측정값과 자이로의 측정값을 적절히 잡음을 고려하여 융합하고 최적의 가장 정확한 기울기를 얻어냅니다. 이때 사용하는 필터는 보상필터(Complementary filter; 혹은 상보필터)와 칼만필터(Kalman filter)로 알려집니다.


MPU6050은 7개의 채널에 대해서 16bit 크기의 값을 출력해주는 고성능 ADC를 내장하므로 각 축의 센서 출력값에 대해서 int16_t(-32768~32767)의 자료형으로 접근해야 합니다. 또한 MPU6050은 update rate(sampling time)이 가속도, 자이로에 대해서 각각 4~1000Hz, 4~8000Hz으로 출력값을 제공합니다.


MPU6050은 내부 레지스터를 이용해서 출력 값의 범위를 조정할 수 있습니다. 예를 들어 가속도계에서 AFS_SEL=0으로 설정함으로써 출력은 ±2[g]까지 나타낼 수 있으며 이를 2byte 크기로 나타내게 됩니다. 만일 AFS_SEL=0과 FS_SEL=0을 설정하였다면 다음과 같습니다.



가속도계에서는 최대 ±2[g]이고(-2g에서 +2g까지 측정하여 -32768에서 +32767까지 매핑Scale Factor가 1g당 16,384로 출력에 이를 나누어주면 실제 [g] 단위를 얻을 수 있습니다. 그러나 우리가 원하는 것은 기울어지 각도이므로 arctan에서는 비율(ratio)만을 사용하므로 단위는 의미가 없게 됩니다. 자이로에서는 최대 ±250[deg/s]이고(-250에서 +250까지 측정하여 -32768에서 32767까지 매핑Scale Factor가 131(32767/250)로 출력에 이를 나누어주면 실제 [deg/s] 단위의 각가속도를 얻을 수 있습니다. 각 센서는 감도(Sensitivity)를 증가시킬수록 미세하게 측정 가능하지만 정확도는 떨어집니다.


다음은 아두이노(Arduino) 보드와 GY-521(MPU6050) 모듈과의 연결 방법과 Wire 라이브러리를 이용하여 실행한 MPU6050의 데이터 출력의 예제입니다.


아두이노 보드와 연결 방법



// MPU-6050 Short Example Sketch
// By Arduino User JohnChi
// August 17, 2014
// Public Domain

#include<Wire.h>
const int MPU_addr=0x68;  // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
  Wire.begin(); // Wire 라이브러리 초기화
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);      // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);
}
void loop(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);
  delay(333); 
}




'Flight Controller 이해 > 센서' 카테고리의 다른 글

관성측정장치(IMU)의 원리  (0) 2017.03.14
드론에 요구되는 각종 센서들  (0) 2017.02.26
Posted by Nature & Life


과거 전통적인 RC 헬기는 역동적인 비행이나 실기에서 보지 못했던 배면 비행이나 곡예 비행 등으로 매니아를 사로잡았다면 최근의 쿼드콥터(Quadcopter)와 같은 드론은 안정된 기체의 자세 제어을 통해서 매우 정숙한 호버링이나 자동 이착륙 혹은 소위 'mission planner'와 같은 툴로 사용자가 미리 경유지점을 정해놓고 자동 비행하는 waypoint 비행 등으로 더욱 매력을 느끼게 할 것입니다.


전자의 경우 RC 헬기의 테일 움직임을 감지하여 메인 로터에 대한 반동 토크를 상쇄시켜 기체의 회전으로부터 안정성을 꾀하기 위한 최소한의 센서만을 사용하였고, 나머지 비행은 사용자 조종기의 사이클릭 제어에 절대 의지할 수 밖에 없기 때문에 입문자의 접근이 쉽지 않았다는 것입니다.


반면에 후자의 경우에는 갖가지 센서들을 탑재하여 비행 안정성이 확보되었기 때문에 드론이 단순한 취미나 레포츠를 떠나 항공촬영이나 방재, 택배 등의 임무에 적용이 용이하게 되었고, 그 만큼 비행자동화의 덕택으로 쉽게 배울 수 있어 사용자 층이 훨씬 두터워지고 급기야는 드론의 대중화가 현실화 되었다는 것입니다.


이와 같이 드론이 비행 안정화 및 자동화가 가능했던 이유는 우선 각종 첨단 센서들을 탑재한 시너지 효과라는 것입니다.


Accelerometer(가속도계):

직선 가속도를 측정하는 센서로 최근에는 x,y 그리고 z에 대한 3축(공간) 자이로(Gyro; Gyroscope)를 이용한 센서가 류를 이루게 되었습니다. 과거 RC 헬기가 단방향의 자이로 센서를 채용한 것과 달리, 이는 공간상에서 어느 방향이든 기체의 기울어짐을 감지하여 펌웨어로 하여금 즉시 자세 제어를 가능하게끔 하여 매우 정교한 호버링(정지비행)이 가능하게 되었다는 것입니다.



Barometer(공기압계): 

고도 센서의 용도로서 공기압이 지표면으로터 고도에 따라 감소함을 이용하여 공기압을 측정함으로서 현재 기체의 고도를 역으로 알 수 있게 되었다는 것입니다. 따라서 사용자는 정확이 얼마의 고도에서 기체가 비행할 수 있도록 명령할 수 있고 기체는 이 센서를 통하여 자동으로 고도를 조정할 수 있게 되었다는 것입니다.


Magnetometer(지자기계):

지자기 센서는 '전자 나침판(Electronic compass)'으로 지구의 자기(지자기)를 검출하여 동서남북 방향을 알려주는 센서로, 이를 이용하여 드론은 기체의 방향을 정확히 돌리거나 정해진 방향으로 자동으로 비행이 가능할 수 있게 되었다는 것입니다.


GPS(위치 센서):

익숙한 내용인 Global Positioning System으로 드론은 GPS 센서를 이용하여 인공위성으로부터 자신의 절대 위치를 알 수 있고 따라서 비행 좌표를 설정하거나 혹은 사용자가 시야에 보이지 않아도 안전하게 원래 위치로 되돌아 오는 등의 기능이 가능하게 되었다는 것입니다.




'Flight Controller 이해 > 센서' 카테고리의 다른 글

MPU6050 센서  (1) 2017.12.01
관성측정장치(IMU)의 원리  (0) 2017.03.14
Posted by Nature & Life


BLDC 모터의 경우에는 전기각의 매 60도 간격으로 구형파 파형의 전류를 한번에 2개 위상에 가하여 구동하며, 나머지 한 개의 위상은 전력을 가하지 않은 floating 상태로 역기전력(Back EMF; BEMF)를 관측하고 이를 이용하여 6-step commutation을 실시합니다.


따라서 BLDC 모터의 구동은 근본적으로 토크 리플(Torque ripple)이 발생할 수 밖에 없으며 그러므로 시스템에서 토크 리플이나 음향 노이즈가 큰 문제가 되지 않고 감당할 수 있는 수준일 때 사용된다는 것입니다. 하지만 PMSM은 사인파(정현파)형 전류를 3개 위상에 모두 동시적으로 가하여 구동하여, 토크가 매끄럽고 음향 노이즈가 낮다는 것입니다.


이러한 Brushless 모터의 구동을 위해서는 고정자에서 회전 자기장을 만들어 낼 수 있도록 외부에서 제어를 해주어야 하며, 고정자 코일에 토크가 최대가 되도록 전류를 공급하기 위해서는 회전자의 현재 위치에 대한 정보가 반드시 필요하게 됩니다. 이를 위해서 센서나 광학 엔코더(optical encoder)를 사용하는데 이는 가격 상승의 원인이며 이러한 센서들이 다양한 드론(Drone)의 비행 환경에서 감도가 떨어지고 주변 시스템의 잡음 등의 영향으로 센서가 없는 센서리스(Sensorless) 모터를 채택한다는 것입니다.


그러므로 BLDC 모터의 경우에는 회전자의 위치를 파악하기 위해서 floating 상에서 유기된 역기전력(BEMF)이 '0'을 교차하는 순간(Zero-Crossing Point)을 감지하여 회전자와 주어진 고정자 권선 간의 상대적 위치에 대한 정보을 알아내어 위상 정류를 동기화시키는 간단한 방법을 사용합니다. 여기서 역기전력이 '0'인 순간은 자속의 절대값이 최대인 순간을 포착하는 것과 같습니다.



반면에 PMSM의 경우에는 2상의 전류를 감지하여 모터의 복잡한 다변수 비선형 상태 방정식을 이산화(digitized)하여 수치해석적으로 실시간 계산을 통해 회전자 위치를 지속적으로 얻어 반영하는 구조로, 회전자의 토크가 최대가 되도록 고정자 3상의 전류를 공급하게 됩니다. 따라서 PMSM의 센서리스 제어를 위해서는 BLDC와는 달리 고성능의 ADC와 32-bit 이상의 빠른 속도, 때로는 부동 소수점 연산장치(Floating Point Unit; FPU)를 갖는 마이크로컨트롤러(MCU)가 필요하게 된다는 것입니다.



위 그림에서 좌측은 사다리꼴 파형의 역기전력을 갖는 BLDC 모터와 우측은 정현파형의 역기전력을 갖는 PMSM의 각 시간에 따른 토크의 변화를 나타냅니다. 각 상의 토크 T는 역기전력 e와 전류의 i에 곱에 비례하므로 전체 토크 Te = Ta + Tb + Tc 는 이론적으로 일정하게 보입니다. 하지만 실제로는 BLDC 모터의 경우 사다리꼴의 윗변의 폭이 좁아져 토크는 리플이 생기게 됩니다.




'Flight Controller 이해 > 모터제어이론' 카테고리의 다른 글

모터의 토크 발생원리  (2) 2015.12.12
BLDC와 PMSM의 구조  (0) 2015.12.12
BLDC vs. PMSM  (0) 2015.12.09
BLDC의 장단점  (0) 2014.04.03
BLDC모터란?  (0) 2014.04.01
Posted by Nature & Life

 

 

BLDC 모터는 다시 Sensored 모터와 Sensorless 모터로 나뉘어지는데, Sensored 모터는 이를 구동하기 위한 엔코더(Encoder)나 홀센서(Hall sensor)와 같은 회전자(rotor) 검출 Sensor 등을 가진 형태이며, Sensorless 모터는 이러한 Sensor가 없는 모터를 말합니다.

 

 

다음은 기존이 DC 모터와 일반적인 Sensored BLDC(Brushless DC) 모터의 장단점을 요약하였습니다.

 

 

장점 :

1) Brush가 없으므로 전기적, 기계적 잡음이 적습니다.

2) Brush의 마모가 없으므로 반영구적이며 유지보수가 필요없으며 고속회전에 무리가 없습니다.

3) 또한 기계적 접점이 없으므로 고속화가 용이합니다.

4) 기계적 접점에서 스파크(아크)나 잡음 등의 에너지 손실이 없어 밧데리 효율이 개선됩니다.

5) 기계적 접점이 없으므로 신뢰성이 높고 모터의 소형화와 경량화가 가능합니다.

6) 따라서 EMI 회로가 필요없습니다.

7) 홀센서로부터 모터의 속도를 정확히 알 수 있으므로 일정속도제어 및 가변속제어가 용이합니다.

8) 자석을 이용하기 때문에 전력 밀도와 효율성이 상대적으로 높습니다.

 

 

단점 :

1) DC 모터에 비해 제어가 복잡해집니다.

2) 별도의 구동회로가 요구됩니다.

3) 위치 검출 소자와 구동회로가 요구되어 단가가 상승합니다.

4) 회전자에 영구자석을 사용하므로 저관성화에 제한이 있습니다.

 

대표적인 Sensored BLDC 모터는 CD-ROM에 사용되는 Spindle 모터입니다.

 

 

CD-ROM의 Spindle 모터

 

 

Sensorless BLDC 모터는 RC에 사용되는 대부분의 모터입니다.

 

 

멀티콥터에 사용되는 HP4108 모터

 

 

 

'Flight Controller 이해 > 모터제어이론' 카테고리의 다른 글

모터의 토크 발생원리  (2) 2015.12.12
BLDC와 PMSM의 구조  (0) 2015.12.12
BLDC와 PMSM의 토크  (0) 2015.12.10
BLDC vs. PMSM  (0) 2015.12.09
BLDC모터란?  (0) 2014.04.01
Posted by Nature & Life