pg365의 등록된 링크

 pg365로 등록된 네이버 블로그 포스트 수는 83건입니다.

Notch filter 입력 성형 기법으로 진동 저감 효과 [내부링크]

이전 글(https://blog.naver.com/pg365/223037005685)에서 로봇 팔의 진동을 없애기 위해 ZV(Zero Vibration)과 Notch filter를 사용하여 모션 프로파일을 변형하는 방법에 대해 설명하였습니다. 리니어 모터에 진동측정센서(AHRS)를 장착한 모습 이번에는 실제로 리니어 모터의 가동자를 움직여 가동자에 고정된 팬듈럼에서 진동을 발생시키고 가속도 센서로 진동을 측정해 보도록 하겠습니다. 모터의 가동자가 가속도 센서의 y축으로 움직이기때문에 y축 진동을 측정하여 Damped frequency 와 Damping ration를 계산합니다. 가속도 센서로 측정한 값은 대략 다음과 같습니다: Damped frequency: 16.2 Hz Damping ratio: 0.01 그리고 이 값을 모터 드라이버의 입력 성형 Notch filter 파라메터로 설정합니다. 모터가 짧은 거리를 왕복하도록 프로그램 하면 아래 그림과 같이 삼각형 모양의 속도 프로파

모터 드라이버의 고유한 저항 측정 [내부링크]

모터 권선의 저항은 일정한 값을 가질것입니다. V=IR 식이 성립하기때문에 I가 커지면 V가 따라 커지면서 R은 상수가 될 것으로 봅니다. 그런데 모터 드라이버에서 전류를 증가시키면서 모터 권선의 저항 R을 측정해보면 아래와 같은 그래프를 얻게 됩니다. (오른쪽 그래프의 가로 축은 전류[A], 세로 축은 저항[Ω] 값입니다.) 위 그래프를 보면, M1, M2, M3, M4 4개의 모터에 대해 전류를 증가시키면서 저항을 측정한 그래프입니다. 모터마다 전류가 작아질 수록 저항이 커지는 특성을 보여줍니다. 왜이럴까요? 위 그래프를 보면, M1, M2, M3, M4 4개의 모터에 대해서 20A 에서의 전류 값이 0이 되도록 그래프를 끌어내렸습니다. 그러면 4개의 그래프가 일치하여 하나의 그래프처럼 보입니다. 아무래도 모터와 무관하게 모터 드라이버 고유의 저항이 있는것같습니다. 제 추측으로는, Gate driver의 Dead time과 FET의 Voltage drop 등의 원인으로 전류가 작

PMSM 모터의 U, V 상 전류 측정 방법 [내부링크]

PMSM 모터의 U, V, W 권선에 흐르는 전류를 측정하기 위해 일반적으로 다음과 같은 방법이 사용됩니다. U와 V 상에 션트 저항이나 홀이펙트 전류센서를 연결하여 전류를 측정합니다. 그리고 W 전류는 0 - (U + V) 으로 계산합니다. 측정 전류값을 아날로그로 MCU로 전송하는 경우, 경로 중간에 하드웨어적으로 약간의 로패스 필터를 사용하기도 합니다. 그런데 PWM 스위칭에 의해 측정 전류에는 노이즈가 들어갑니다. PWM 스위칭 노이즈를 피하기 위해 PWM의 중앙에서 전류를 셈플링하게 되는데요. 모터가 구동 중에는 PWM이 중앙까지 좁혀지거나 넓혀지기도 하기때문에 중앙에서 전류를 셈플링 하더라도 스위칭 노이즈가 들어가게 됩니다. 그리고 인덕턴스가 작은 모터에서는 PWM 스위칭 시에 전류가 선형으로 변하지 않기 때문에 중앙 값이 평균이라는 보장도 없습니다. 저의 경우는 좀 더 정확한 전류를 측정하고 측정 전류에서 노이즈를 없애기 위해 최대한 많은 전류 셈플을 얻고 평균을 내는

로봇의 진동 저감을 위한 입력성형(ZV, Notch filter) 방법 [내부링크]

아래 그림과 같은 glass handling robot을 제어하는 경우, 로봇을 움직인 후 팔에 잔류진동이 남아 목표 도달 및 유지 성능이 떨어지고 다음 동작을 시작하기까지 진동이 없어지는 시간을 대기해야합니다. 결국 로봇 팔의 잔류진동으로 인해 전체 시스템의 생산성을 떨어뜨리게 됩니다. 잔류진동을 억제하는 방법으로는 모터 드라이버의 속도 제어기로 입력되는 모션 프로파일의 모양을 변형시켜 진동을 피해가도록 하는 ZV(Zero Vibration), ZVD(Zero Vibration Derivative) 등의 입력성형(input shaping)방법이 사용됩니다. ZV(Zero Vibration) 이 방법은 오픈루프로 작동하기때문에 진동을 측정하기 위한 센서 피드백이 필요없고 안정적입니다. 미리 측정된 진동 파라미터를 설정하여 진동을 걸러내기 때문입니다. 반면 외란에 의해 유발된 진동이나 진동요소가 바뀌었을 때는 재대로 대응할 수 없게 됩니다. 작동 원리는 간단합니다. 모션 프로파일을 구

로봇 팔의 감쇠진동(damped oscillation)을 측정하는 방법 [내부링크]

로봇의 진동 저감을 위한 입력성형(ZV, Notch filter) 방법(https://blog.naver.com/pg365/223037005685) 에서 모션 프로파일의 모양을 변형시켜 로봇 팔의 잔류진동을 감소하는 방법에 대하여 설명하였습니다. 이번 글에서는 로봇 팔의 잔류진동에서 감쇠진동(damped oscillation) 주파수와 감쇠비를 측정하는 방법에 대해 설명하겠습니다. 잔류진동을 측정하는 두가지 방법이 있습니다. 진동하는 로봇 팔에 가속도 센서를 붙여 가속도 센서로부터 진동을 측정하는 방법과 팔을 구동하는 모터 드라이버에서 위치 오차(= 목표 위치 - 엔코더 위치)를 읽어 진동을 측정하는 방법이 있습니다. 여기서는 모ㅌ 드라이버의 위치 오차를 사용하는 쉬운 방법을 사용하겠습니다. 위 그림과 같이 벨트로 구동되는 외팔보를 목표 위치로 이동하면, 아래 그래프와 같이 목표위치에 도달후 엔코더 위치가 감쇠진동하는 모양으로 나타납니다. 위치 오차 대신 엔코더 위치를 이용하여 감쇠

자율주행 로봇의 SLAM에 AHRS 센서를 사용하는 이유 [내부링크]

AHRS센서는 Heading을 잡아주기때문에 AHRS 센서라 부르기는 하는데, 이게 실내에서 사용할 때는 문제가 됩니다. 지자기센서(Magnetometer, 자기계)가 지구자기장의 방향을 탐지하여 Heading을 보정해 주는 방법을 사용하기때문에 지구자기장이 일그러져 있는 실내에서는 제대로 작동하지 않습니다. *출처: 심화학습 기술을 사용한 자기장 기반 실내 위치인식 연구 그런데 왜 실내에서 자율주행하는 로봇에 AHRS 센서를 사용할까요? 그건 바로 로봇 좌우 바퀴의 엔코더만 가지고 odometry를 계산하는 것보다, AHRS 센서로부터 회전각도를 얻어와 odometry를 계산하는 것이 훨씬 정밀하기 때문입니다. 보통 좌우 엔코더에서는 직선 이동량만 얻어오고 AHRS 센서에서는 회전각도만 얻어와 dead-reckoning 합니다. 그럼 AHRS 센서를 사용하면 카메라나 비컨, LiDAR 같은 로봇의 절대위치를 알 수 있는 센서가 필요 없을까요? 그렇지는 않습니다. AHRS를 실내에서

거대 탑승 로봇 기억날까요? [내부링크]

제프베이조스가 타서 세계적으로 유명해진 로봇이죠. 아바타에도 비슷하게 생긴 로봇을 군바리들이 타고다닙니다. 공도리들은 이런 로봇 차고에 하나씩 있었으면 하는 로망이 있습니다. 차고도 없는데 말이죠. 근데 모 회사 출장갔는데 자재 반출입 창고에 이 로봇이 뙇~~~ 운반비만 삼천 들었답니다. 저는 줘도 못가져가겠네요. 안타깝습니다. 양땡땡 회장님의 불꽃싸대기 갑질로 회사가 순삭당해버렸으니...

MEMS 기반 자이로(Gyroscope)는 비싼제품 사면 돈낭비 하는겁니다. [내부링크]

MEMS 기반 자이로(Gyroscope)는 비싼제품 사도 가격만큼 성능이 좋아지거나 하지 않습니다. 조그마한 칩에다 코리올리 힘을 측정하는 장치를 구겨넣어놨기때문에 성능의 한계가 있습니다. 카메라 생각해보시면 됩니다. 스마트폰 카메라가 아무리 좋아져도 DSLR 카메라를 능가하지 못하는 것과 같습니다. DSLR 카메라가 스마트폰 카메라에 비해 빛을 모으는 렌즈와 촬상소자인 CCD 크기가 물리적으로 크기때문입니다. 그러다보니 사진 해상도와 선명도, 아웃포커스 능력, 어두운곳에서의 화질 등에서 확실히 차이가 납니다. 요즘은 자율주행이 핫이슈라, 주행로봇의 오도메트리 계산에서 헤딩을 보정하기 위해 AHRS 센서를 엔코더 보조로 사용합니다. 국산 AHRS 센서는 10~20만원 정도이고 외산들은 100만원을 넘어가 1000만원짜리도 있습니다. 과연 수백만원 하는 외산 AHRS 센서를 사면 성능이 100배 좋아질까요? 그냥 돈낭비입니다. 그냥 주행로봇에 천만원 짜리 센서를 붙였으니 잘 되겠지 하

BLDC 또는 스탭 모터의 초기 전기각 추정 [내부링크]

BLDC 모터는 전기각을 알기 위해 홀센서(Hall sensors)를 사용합니다. 엔코더를 장착한 폐루프 스탭 모터의 경우는 홀센서가 없기때문에 전기각을 찾는 다른 방법이 필요합니다. 홀센서가 없는 모터의 경우, 전기각을 찾는 일반적인 방법은 모터가 허용하는 최대 전류를 특정한 방향으로 흘려 모터의 회전자가 강제로 전류를 흘리는 방향으로 정렬되도록 하는 방법입니다. 이 방법은 모터의 회전자가 임의로 회전할 수 있기 때문에, 모터가 기구적으로 스토퍼에 부딪힌 경우에는 제대로 정렬 되지 않는 경우가 발생합니다. 이번 글에서는 엔코더만으로 구동하는 BLDC나 스탭 모터에서 모터의 움직임을 최소로 하면서 전기각을 찾을 수 있는 방법에 대하여 설명해보겠습니다. 초기 전기각 추정 스탭모터의 회전자 d축으로 전류(i)를 흘릴 때 전기각(ф) 위치에 따라 발생하는 토크(τ)는 다음과 같습니다. 여기서 Kτ는 토크 상수입니다. 만일 토크의 최대 크기가 되는 위치를 찾으면 그 위치가 q축의 위치(d축

모터 구동 중 전기각 보정 [내부링크]

이전 글(https://blog.naver.com/pg365/223029427404)에서 BLDC나 스탭 모터의 초기 전기각을 추정하는 방법에 대해 알아보았습니다. 그런데 이 방법은 부하 토크나 마찰력 등으로 인해 추정한 전기각에 약간의 오차가 포함될 수 있습니다. 이 오차는 모터를 구동 하면서 모터의 전기식으로부터 전기각의 오차를 계산하여 보정하면 됩니다. 먼저 PMSM 모터의 d와 q축에 대한 전기식을 가져옵니다. 아래 식에서 αerror 값이 전기각 오차입니다. sin, cos αerror 에 대하여 식을 정리하면 다음과 같습니다. 다시 위 두 식을 하나로 정리합니다. 이제 atan을 계산하면 αerror를 계산할 수 있습니다. 그런데 아래 식에서 한가지 문제가 있습니다. d축과 q축 전류는 측정 노이즈를 많이 포함하고 있어 전류를 시간에 대해 미분할 수 없다는 겁니다. 그래서 과감히 무시합니다. 대신 d축과 q축 전류가 많이 변할 때는 전기각 보정을 수행하지 말아야합니다. 이

스탭 모터의 엔코더 편심에 의한 전기각 편향 보정 [내부링크]

일반 서보모터와 달리 스탭 모터에 엔코더를 붙여 사용할 경우 주의할 점이 있습니다. 스탭 모터는 폴페어(Pole pairs) 수가 50 또는 100으로 일반 서보모터(서보 모터는 폴페어가 보통 3~5)에 비해 상당히 큽니다. 그러다보니 모터 축에 수작업으로 엔코더를 조립하는 경우, 엔코더에 약간의 편심이 생기면 전기각 오차가 증폭되어 모터의 진동원인이 됩니다. 무두나사의 고정으로 인한 약간의 편심이 발생할 수 있음 실제로 전기각 오차로 인한 d/q축 전류 흔들림이 어떻게 나타나는지 보겠습니다. 아래 그래프는 q축 전압을 5V에서 4V로, 다시 3V로 낮추면서 가할 때 d/q축 전류 파형입니다. q축 전압이 클 수록 회전 속도도 빠르고 전류 리플도 심하게 나타나는 것을 볼 수 있습니다. 이번 글에서는 엔코더 편심에 의한 전기각 오차를 보상하여 모터의 진동유발 원인을 제거하는 방법에 대해 다루어보겠습니다. 엔코더 편심에 의한 전기각 오차 스탭 모터 축에 장착된 엔코더가 약간의 편심을 가

DC 모터에서 인덱스 신호 없이 엔코더 해상도를 찾는 방법 [내부링크]

모터의 회전량이나 회전속도를 계산하기 위해서는 엔코더 해상도(encoder resolution)를 알아야 합니다. 엔코더가 인덱스 체널을 가지고 있다면, 엔코더를 회전하면서 인덱스 신호가 발생할 때마다 엔코더 카운트 값을 기록해 두었다가, 연속되는 카운트 값의 변위를 계산하면 엔코더의 해상도를 구할 수 있습니다. 하지만 엔코더에 인덱스 체널이 없는 경우에는 이 방법을 사용할 수 없습니다. 이번 글에서는 엔코더의 인덱스 신호가 없을 때 엔코더 해상도를 찾을 수 있는 방법에 대하여 설명드려 보겠습니다. 간단한 예시 DC 모터의 회전자 슬롯 모양과 슬롯에 감긴 코일, 고정자 자석의 특성이 미소하게 차이가 있기때문에 일정한 전압을 가하더라도 전류의 파형은 아래 그림과 같이 진동하는 형태가 됩니다. 모터가 한 바퀴 회전할 때마다 동일한 회전자와 고정자의 구조가 만나기 때문에, 진동하는 전류 패턴에서 특정한 패턴이 주기적으로 반복될 것으로 예상할 수 있습니다. 4V의 전압을 가할 때 대략 60

BLDC 모터의 홀센서 신호로부터 전기각 계산(1차원 칼만필터 사용) [내부링크]

BLDC 모터는 홀센서를 가지고 있습니다. 그래서 Hall sensors 신호가 바뀌는 순간에 전기각을 알 수 있습니다. 홀센서 신호가 일정하게 유지될 때는 모터의 속도(ω)와 시간(Δt)를 곱해 전기각의 변화량을 적분해 나감으로 전기각을 추정하게 됩니다. 홀센서 신호가 균일할 경우 이상적인 전기각 추정 그래프 그런데, 이 방법에 문제가 있습니다. 여러가지 원인으로 인해 Hallsensor 신호가 일정하게 60도 간격으로 바뀌지 않는다는 것입니다. 홀센서 신호가 바뀌는 시점이 아래 그래프와 같이 좀 들쑥날쑥 합니다. 이럴 때는 아래 그래프와 같이 홀센서 신호가 바뀔 때 전기각이 점프하는 현상이 발생합니다. 이럴 경우는 어떻게 해야할까요? 홀센서 신호가 균일하지 않을 경우 실제 전기각 추정 그래프 간단한 방법이 1차원 칼만필터를 이용하는겁니다. 칼만 필터는 예측(prediction)과 업데이트(update)를 반복적으로 수행하며 어떠한 물리적 상태를 계산하는데 사용됩니다. 예측단계는

키보드/마우스 매크로 V2.3 - 이미지 인식하여 더블클릭하고 다시 원래 위치로 복귀 [내부링크]

키보드/마우스 매크로 V2.3 - 이미지 인식 기능을 사용하는 간단한 예를 들어보겠습니다. 이미지가 포함된 윈도우 창을 이리저리 끌고 다닐 때, 매크로 프로그램이 창 내부의 이미지를 인식하여 이미지를 더블클릭하고 원위치로 복귀하는 예제입니다. 1. 마우스로 이미지가 포함된 창을 끌고 움직일 때, 2. 매크로 프로그램이 창 내부의 이미지를 인식하여 3. 이미지 창에서 버튼을 떼고 4. 이미지 중앙으로 마우스를 이동하여 5. 마우스로 더블클릭 하고 6. 시작 위치로 복귀하여 7. 이미지 창을 눌러 다시 창을 끌고 움직일 수 있도록 매크로를 작성해 보겠습니다. 먼저, 매크로 '시작/중지 조건'에서 인식할 이미지를 선택합니다. 여기서 '이미지 중앙으로 마우스 위치 설정' 옵션은 체크하지 않습니다. 왜냐하면 이미지 중앙으로 마우스 위치를 이동하기 전에 현재 잡고 있는 창의 버튼을 떼야 하기때문입니다. 그리고 '매크로 편집' 대화상자에서 다음과 같이 매크로를 작성합니다. 여기서 마우스_절대위치

NTRIP Client 프로그램 소스코드 (Windows 10/11, Visual Studio C++) [내부링크]

Windows 10/11 에서 구동되는, Visual Studio C++ 2022로 작성된 NTRIP Client 프로그램 소스코드 입니다. GNSS 모듈의 정밀도를 높이려면 RTK 보정이 필요합니다. NTRIP Client 프로그램은 NTRIP Caster에 연결하여 GNSS 보정 데이터를 받아옵니다. 이 프로그램은 U-blox ZED-F9P 모듈과 같은 GNSS 수신 장치가 필요합니다. 첨부파일 NTRIP_client.zip 파일 다운로드 Visual Studio에서 프로젝트를 읽어와 빌드하여 실행할 때는 Solution Platform을 다음과 같이 x86으로 바꾸어 실행하십시오. 프로그램을 컴파일 하여 실행하기 전에 소스코드의 definition.h 파일의 설정을 조정해야합니다. 3가지의 NTRIP Caster를 선택할 수 있는데, 여기서는 gnssdata.or.kr 이 선택되어 있습니다. 필요에 따라 선택을 바꾸면 됩니다. #define GNSSDATA //#define R

모터 드라이버의 성능을 높이려면? [내부링크]

파나소닉 AC Servo Motor & Driver 카탈로그를 보면 주파수 응답(Frequency response)을 3.2 kHz 까지 달성했다는 내용이 있습니다. 그러니까 모터 드라이버가 3.2 kHz 신호까지 따라 갈 수 있다는 말인데요. 이렇게 응답성이 높게 모터 드라이버를 만드려면 뭘 해야할까요? 먼저 위치-속도-전류 제어기가 실행되는 주기를 올려야합니다. Cutoff frequency가 3.2 kHz 정도 되려면 제어 주기(셈플링 주기)는 최소 2배가 되어야 하고 통상적으로 서보 드라이버에서는 10배 정도인 32 kHz 이상 되어야합니다. 그리고 제어 주기가 높아지면 PWM 주기도 따라 올라가야합니다. 그런데 이렇게 PWM 주파수와 제어 주기가 높아지면 두 가지 문제가 발생합니다. 첫번째로 모터의 파워 스테이지에서 FET의 고속 스위칭으로 인해 측정 전류의 노이즈가 커집니다. 두번째로는 엔코더 값을 차분하여 속도를 얻는데, 분모의 시간이 작아져 속도 차분값의 양자화 잡음이

자이로 센서, 가속도 센서, 지자기 센서의 조합으로 AHRS 센서 만들기 (상보 필터와 쿼터니언 사용) [내부링크]

이전 글에서 자이로 센서와 가속도 센서 조합으로 ARS 센서를 설계해 보았습니다. 이번에는 회전행렬 대신 쿼터니언을 사용해 보겠습니다. 그리고 방위(Heading)을 추가하여 AHRS 센서를 만들어 보겠습니다. 상보 필터와 회전행렬로 ARS 센서 만들기 1차 상보 필터(Complementary Filter)와 회전 행렬(Rotation Matrix)로 ARS(Attitude Reference ... blog.naver.com 1차 상보 필터(Complementary Filter)와 쿼터니언(Quaternion)으로 AHRS(Attitude Heading Reference System)를 설계해봅니다. 자이로 센서에서 측정한 각속도를 적분하고 가속도 센서와 지자기 센서에서 측정한 각도로 보정하는 과정을 반복하도록 만들면 됩니다. 이전 글에서 상보필터의 구조는 설명하였으니, 여기서는 상보필터의 가속도가 입력 되는 부분에 지자기도 같이 입력하는 모양으로 바뀌었다는 것만 유의하면 됩니다.

바이오 메디컬 로봇 소개 [내부링크]

그동안 산업용 로봇은 공장 내에서 사람을 대신하여 또는 사람이 못하는 일들을 수행해 왔습니다. 육중한 로봇이 빠르고 정교하게 움직이는데 사람이 가까이오면 안되기때문에 펜스가 쳐진 상태로 하루 종일 티칭된 작업을 무한 반복합니다. 요즘은 협동로봇이라고 사람과 함께 작업하는 것이 가능한 로봇들이 만들어지고 있습니다. 사람과 같이 일하려면 사람의 안전이 가장 중요합니다. 그리고 사람과 협동하여 유연한 작업이 가능해야합니다. 그러다 보니 로봇 크기도 작고 가볍고 저속으로 움직입니다. 빠르고 정교한 작업을 포기하고 안전성과 유연성을 우선적으로 채택한겁니다. 앞으로의 로봇 시장은 어떻게 변해갈까요? 코로나 펜데믹으로 인한 의료분야의 자동화, 인구 감소와 고령화로 인한 제약·바이오 산업의 성장이 기대됩니다. 그래서 바이오 메디컬 분야를 타겟으로 로봇을 만들어 보았습니다. 로봇의 구조는 협동로봇과 유사한 모듈러 타입으로 개발하였습니다. 그래서 사용자 요구에 따라 커스트마이징이 가능한 구조입니다.

BLDC 모터의 PID 속도 제어기 설계 [내부링크]

BLDC 모터의 홀센서 입력 패턴 찾기와 6-step 구동(https://blog.naver.com/pg365/222038637843) 글을 참조하여 6-step 구동까지 된다고 하면, 이제 BLDC 모터도 DC 모터와 동일하게 제어기를 구성하면 됩니다. DC 모터의 브러쉬와 정류자가 하는 일을 BLDC 모터 드라이버의 알고리즘이 6-step 구동으로 수행하기 때문입니다. DC 모터에서와 같이 모터의 모델을 가져오겠습니다. 제어 대상을 알아야 제어기를 설계할 수 있습니다. R은 모터 권선의 저항, L은 모터 권선의 인덕턴스, KT는 토크상수 Ke는 역기전력 상수, J는 모터와 부하의 관성모멘트, B는 마찰계수 입니다. 여기서 회색으로 표시한 부분은 무시하는 부분입니다. 블록선도가 이해에는 용이하지만 문제를 풀려면 수식이 필요합니다. 위 블록선도의 Open-loop와 Closed-loop 전달함수는 다음과 같습니다. 위 모터 모델을 단순하게 플랜트로 놓고 PID 제어기를 붙여 피드백을

DC 모터의 저항, 인덕턴스, 역기전력 상수 측정에 LCR미터를 사용하면 안됩니다. [내부링크]

DC 모터의 저항과 인덕턴스를 가장 심플한 방법으로 측정하는 것은 LCR 미터를 사용하는 것입니다. 그런데 LCR 미터로 측정한 값이 모터의 데이터시트와도 차이가 좀 납니다. 과연 이 측정 결과를 믿고 모터 드라이버 파라미터로 세팅하여 사용할 수 있을까요? 모터의 저항과 인덕턴스, 역기전력 상수는 모터 드라이버 내부에서 각종 피드 포워드 제어기 이득과 피드백 제어기 이득을 결정하는 중요한 파라미터이기때문에 올바른 값을 사용하는 것이 무엇보다 중요합니다. LCR 미터는 모터 권선의 저항과 인덕턴스를 측정하기 위해 소량의 전류를 흘립니다. 왜냐하면, 커패시터나 저항 등의 부품들은 낮은 전압과 전류로도 특성을 파악할 수 있기때문이죠. 그런데 부하가 걸린 모터를 회전시키려면 수 암페어의 전류를 흘려야 합니다. 모터 권선의 저항이나 인덕턴스를 측정할 때도 실제 모터가 동작하는 상황을 고려하여 측정할 때에 올바른 값을 얻을 것입니다. 모터 권선의 저항 측정 저항을 측정하려면 모터 축을 고정하여

PMSM 모터 권선의 d/q축 인덕턴스를 정확하게 측정해보자. [내부링크]

이전 글(https://blog.naver.com/pg365/223018447728)에 이어 모터의 인덕턴스를 드라이버에서 직접 측정할 수 있도록 해 보겠습니다. 방법을 알고 있기때문에 측정하는 것은 어렵지 않습니다. 그런데, 측정할 때 주의할 점이 있습니다. d나 q축으로 전압을 가한 후 흐르는 전류를 순간적으로 셈플링 해와야합니다. 수 밀리초 동안 수백개의 전류 데이터 샘플을 얻어올 수 있도록 만들어야합니다. 모터의 Electrical part의 전압과 전류에 대한 s 도메인의 전달함수(I(s)/V(s))에 전압 V의 스탭 입력(E(s))을 가한 식으로부터 라플라스 역변환 하여 타임 도메인에서 전류의 식 i(t)을 얻어옵니다. 그리고 한 번 미분하여 i´(t) 로 만듭니다. 이제 시간 t = 0일 때 전류의 미분치, 즉, 기울기를 알면 인덕턴스 L을 계산가능합니다. 실제로 모터 드라이버에서 각각 d축과 q축으로 한 번씩 전압 V을 짧은 시간동안 가하고 흐르는 전류 i(t)를 최대

MEMS 기반 자이로 센서와 가속도 센서의 온도 보정 방법 [내부링크]

스마트폰 같은데 사용되는 초소형 MEMS 기반 IMU 센서로 ARS 센서나 AHRS 센서를 만듭니다. 초소형이지만 IMU 센서 내부에는 보통 자이로와 가속도, 지자기, 온도 센서를 포함하고 있습니다. 항공기나 잠수함 등에 사용되는 정밀한 광학식 자이로 또는 기계식 자이로에 비하여 MEMS 기반 IMU 센서는 정밀도가 수천배에서 수십만배 떨어집니다. 대신 가격이 싸다는 장점이 있습니다. MEMS 기반 가속도와 자이로 센서의 출력값들은 온도 변화에 영향을 많이 받으며, 각 센서의 출력값은 바이어스와 스케일 변화도 큽니다. 이러한 센서의 정밀도를 높이기 위해서는 온도 변화에 따른 출력값의 변화율을 측정하여 관계 식을 구하고, 실제 센서의 온도 변화에 따라 출력값을 보정하여 온도의 변화에 대한 영향을 최소화 해야합니다. 온도 변화에 따른 센서 출력값의 영향 다음 그림은 HyperTerminal로 AHRS 센서에 연결하여 온도 변화에 따른 센서 출력값의 변화를 모니터링한 화면입니다. 냉각 및

MEMS 기반 자이로 센서와 가속도 센서의 바이어스와 스케일 보정 방법 [내부링크]

MEMS 기반 관성센서는 소형이고 가격이 저렴하여 스마트폰, 무인항공기, 로봇 등에서 주로 사용됩니다. 그런데 센서의 가속도와 각속도 출력 값에 바이어스와 스케일 오차가 있어 적분 각도의 정확성을 떨어뜨리게 됩니다. 이번 글에서는 가속도와 자이로 센서 고유의 bias와 scale을 실험적으로 구하는 방법에 대해 설명해 보겠습니다. 각속도 센서의 바이어스와 스케일 각속도 센서의 바이어스를 보정하는 방법은 간단합니다. 센서를 움직이지 않는 정반과 같은 곳에 고정해 두고 각속도 데이터를 몇 초간 누적하면 약간의 편향이 나타납니다. 이 값을 bias 값으로 사용하면 됩니다. MEMS 기반 자이로 센서는 보통 지구 자전을 감지할 정도로 정밀하지가 않습니다. 지구의 자전에 의한 각속도에 비하여 센서 노이즈 레벨이 보통 수백에서 수천배 높기 때문에, bias 보정 시 지구 자전에 의한 영향을 고려하지 않았습니다. 각속도의 스케일을 보정하는 방법은 센서를 한 바퀴(360도) 회전하면서 각속도를 적

AHRS 센서 캘리브레이션의 자동화 - 3축 짐벌 제작 [내부링크]

이전글(https://blog.naver.com/pg365/223019543082)에서 가속도와 자이로 센서의 바이어스와 스케일을 보정하는 방법에 대해 알아보았습니다. 수동으로 하나하나 진행하려니 순서가 헷갈리고 손이 떨려 캘리브레이션이 잘 안됩니다. 그렇다면 3축 짐벌을 만들어 자동으로 AHRS 센서를 캘리브레이션 하게 하면 어떨까요? 대충 3축 짐벌 구조를 ppt로 그려서 주변 기구쟁이들한테 보내 견적을 받아 봅니다. 기계 공차도 최대한 줄여 달라고 부탁합니다. ppt로 설계한 3축 짐벌 짜잔~~ 만들어져 왔습니다. 만들 때 몇 가지 주의할 점이 있습니다. 구동 축 감속기에 백레쉬가 없어야 합니다. 그리고 스탭 모터를 사용해야 합니다. 왜냐하면 센서를 캘리브레이션 할 때 모터가 떨면 안되기때문입니다. 그래서 보통 광학 장비들은 Open-loop microstepping 구동하는 스탭모터를 채용하는 경우가 종종 있습니다. 이렇게 스탭모터로 만들면 한 가지 문제가 발생합니다. Ope

푸른 하트 [내부링크]

혹시 아래 사진 본 적 있나요? 이 사진이 추억의 싸이월드를 통해 퍼져 유명했던 적이 있었습니다. 20여년 전에는 사진이 취미였습니다. 어디를 가나 항상 카메라를 들고 다녔죠. 위 사진은 여의도 공원에서 소나기가 퍼부을것 같다가 잠깐 하늘이 열리면서 하트를 만들어 주었을 때 찰칵~ 한 사진입니다. 물론 뽀샵으로 구름을 약간 정리하긴 했습니다. 그래도 거의 원본 그대로입니다. 예전에는 시간도 많고 여유가 있었는데, 요즘은 할일이 넘쳐납니다. 좋은 건지도 모르겠습니다. 머릿속에 잡념이 없으니까요. 예전에 참 좋아하던 사진 사이트였죠. RaySoda, 지금도 좋아합니다. https://raysoda.com/user/page365

Dual GNSS와 자이로 센서의 결합으로 초기 위치와 방위까지 해결 [내부링크]

GPS는 많이 들어봤는데 GNSS는 좀 생소합니다. GNSS(Global Navigation Satellite System)은 GPS를 포괄하는 용어입니다. 미국에서 만든 GPS, 중국의 BeiDou, 유럽의 Galileo, 러시아의 Glonass 등을 모두 포함아여 GNSS 라고 부릅니다. Dual GNSS Dual GNSS라면 GNSS가 두 개라는 의미 같은데, 왜 두 개가 필요할까요? 차가 처음 출발할 때 GNSS 하나 만으로는 방위를 알 수 없기때문입니다. 만일 두 개라면 서로의 위치 관계로 차가 멈춘 상태에서도 방위를 알게 됩니다. 우리는 여기다 자이로 센서까지 더합니다. Dual GNSS로 계산하는 방위는 좀 심하게 흔들립니다. 그러니 yaw 각도를 안정시키기 위해서 자이로 센서가 필요합니다. 각속도는 자이로 센서에서 받아오고 각도는 Dual GNSS 에서 받아와 Kalman filter 같은걸로 합치면 됩니다. 만일 차량의 바퀴에 엔코더가 붙어있다면, 차의 이동량은 엔코

키보드/마우스 매크로 프로그램 V2.3c (이미지 서치 기능 추가) [내부링크]

키보드/마우스 매크로 프로그램 V2 버젼에 이미지 서치 기능을 추가하였습니다. 특정 이미지를 매크로 시작 조건으로 설정하고 화면에서 유사한 이미지가 검색되면 매크로를 시작합니다. 이미지 서치를 위해 OpenCV 4.7.0 라이브러리를 사용하였습니다. 프로그램 다운로드(Version 2.3d, 2023.3.2): 첨부파일 key_macro_v23.exe 파일 다운로드 * exe 파일을 실행하려면 OpenCV dll을 같은 폴더에 다운로드 해야합니다. OpenCV dll 다운로드: opencv_world470.dll pg365님이 공유한 파일을 확인하세요. naver.me 사용하는 방법은 다음과 같습니다. 먼저 key_macro_v23.exe 프로그램을 실행합니다. "실행 중단과 편집" 상태에서 [추가] 버튼을 눌러 '매크로 추가' 대화상자를 오픈합니다. 대화상자에서 [시작/중지 조건] 버튼을 클릭하여 '매크로 시작/중지 조건 설정' 대화상자를 오픈합니다. 여기서 '이미지' 탭을 선택하

모터 관련 용어: 자속(Magnetic flux), 쇄교자속(Flux linkage), 인덕턴스(Inductance) [내부링크]

자속(Magnetic flux)은 어떤 면을 통과하는 자기력선의 수를 의미합니다. 자속의 단위는 웨버[Wb]를 사용합니다. 1[Wb] = 1[V·s] = 1[J/A] 쇄교자속(Flux linkage)은 코일의 턴 수 N과 자속의 곱으로 정의됩니다. 인덕턴스(Inductance)는 쇄교 자속과 자속을 만든 전류 i와의 비를 나타냅니다. 인덕턴스의 단위는 헨리[H]를 사용합니. 코일의 인덕턴스가 크면 작은 전류로 큰 쇄교 자속을 만들 수 있습니다. 유도기전력 e는 쇄교 자속의 시간에 따른 변화율입니다. 아래 식에서는 인덕턴스를 상수로 고려하였습니다. 전력(Power)은 단위시간당 전류가 하는 일의 양을 말합니다. 전력의 단위는 와트[W]를 사용합니다. 전기 에너지(Energy)는 일정 시간(t) 동안 전류가 흘러 만들어진 에너지를 말합니다. 에너지의 단위는 줄[J] 입니다. * 모터를 제어할 때 항상 사용하는 식들이니 기억해두면 좋습니다.

전기와 회전운동, 직선운동에서의 (돌림)힘, 일률과 일 비교 [내부링크]

모터는 전기 에너지를 기계적인 운동으로 바꾸어 일을 하는 장치입니다. 모터가 하는 일도 다양합니다. 선풍기 같은 팬을 돌리거나 엘리베이터를 들어올리거나 전기차를 굴리기도 합니다. 모터의 쓰임새에 따라 모터의 여러 특성들(정격 전압, 정격 전류, 정격 토크, 정격 속도 등)을 도출할 수 있어야 올바른 모터를 선정할 수 있게 됩니다. 여기서는 모터 선정에 필요한 계산식들을 유도하는데 필요한 기본 식들에 대해 알아보겠습니다. 정역학 문제는 한 점에 작용하는 힘들의 평형을 이용하여 풀고, 동역학 문제는 에너지의 등가 원리로 풀게 됩니다. 그러기 위해서는 전기와 운동에서의 힘과 에너지에 대한 기본 식들이 필요합니다. 전기와 회전운동, 직선운동에서 물리량들을 비교해보겠습니다. 비교할 물리량은 운동량(Momentum), 충격량(Impulse), (돌림)힘(Force, Torque), 전력, 일률(Power), 에너지, 일(Energy, Work) 입니다. 다음 표를 보시기바랍니다 여기서 전력(e

BLDC 모터 홀센서 배선 순서 찾기 [내부링크]

BLDC 모터 드라이버와 BLDC 모터를 따로 구매하게 되면 발생하는 문제입니다. 데이터시트를 보고 BLDC 모터의 U, V, W 구동선과 홀센서 신호 H1, H2, H3를 모터 드라이버에 올바르게 연결했는데도 모터가 안도는 경우가 종종 발생합니다. 이때는 모터의 U, V, W 구동선 순서를 이리저리 바꿔보거나, 홀센서 신호선 H1, H2, H3를 바꿔보면 도는 경우가 있습니다. 만일 모터의 구동선을 고정시킨다면, 홀센서 신호선 H1, H2, H3를 바꿔서 제일 잘 도는 경우를 찾으면 되는데 다음과 같이 6가지 경우가 있습니다. 누리로봇의 BLDC 모터 드라이버를 예로 보겠습니다. Case 1 Case 2 Case 3 Case 4 Case 5 Case 6 BLDC 드라이버의 H1 - Red Red Green Green White White BLDC 드라이버의 H2 - Green White Red White Red Green BLDC 드라이버의 H3 - White Green White

고속 Pick and place 용 델타봇 제작 [내부링크]

고속 Pick and place 용 소형 델타봇을 만들었습니다. 델타봇은 구동부가 베이스에 붙어 3개의 젓가락 같은 팔을 구동합니다. 로봇을 이렇게 만든 이유는, 팔의 관성을 줄여 모터의 적은 토크로 빠른 가감속을 하여 고속으로 움직이기 위함입니다. 델타봇과 같이 고속 Pick and place 용에 적합한 로봇이 SCARA 로봇입니다. 이 로봇도 팔의 관성을 줄이기 위해 모터는 되도록 로어 암 쪽에 배치하게 됩니다. 빠른 로봇은 초당 3번 정도 작업이 가능합니다. 한 번 움직이는데 300ms 정도이니 굉장합니다. 이번에 만든 델타봇은 Payload가 크지 않아 인코더 있는 스텝 모터를 사용했고 18:1의 Pinion 일체형 감속기를 사용했습니다. 설계 사양은 아래 표와 같습니다. 항목 사양 구동 축 수 3축 구동 모터 2상 Stepper 인코더 해상도 10,000 [cpr] 감속기 종류 Pinion 일체형 감속비 18 : 1 감속기 위치 정밀도 ±15 sec (0.004º) 말단

역기전력으로 인한 과전압을 처리하는 잘못된 방법 [내부링크]

모터가 발전기로 동작하여 모터 드라이버의 DC-link 단에 높은 전압이 만들어질 수가 있습니다. 이 전압을 제대로 처리하지 않으면 모터 드라이버 회로 자체가 타거나 모터 드라이버와 전원을 공유하는 다른 부품들이 타는 경우가 발생합니다. 제경우도 역기전력으로 인한 과전압으로 모터 드라이버를 태워먹은적이 있습니다. 자율주행 로봇을 개발하던 때였습니다. 로봇을 손으로 밀어 옮기다보니 모터 드라이버가 켜지면서 LED가 깜박였습니다. 그러다 PCB 타는 냄새가 나고 LED가 모두 꺼졌습니다. 다시 전원을 넣어도 아무런 반응이 없더군요. 모터 드라이버 뿐만이 아니라 천만원 가까이 하는 레이저 스캐너 센서도 망가져 난감했던적이 있었습니다. 그 때는 모터 드라이버에 관한 지식의 거의 없었던 때라, 제가 생각했던 대책이 '역기전력으로 인한 과전압을 처리하는 잘못된 방법'이었습니다. 이 글을 보시는 분들은 저와 같은 엉터리 대책을 세우지 않기를 바랍니다. 첫 번째, 이렇게 생각할 수 있습니다. '역

엘모 드라이버를 셋업하고 튜닝해봅시다 [내부링크]

국내에서는 엘모 드라이버가 성능이 우수하다고 알려져 있습니다. 그래서 뭔가 중요한 프로젝트를 할 때는 우선적으로 엘모 드라이버를 적용해 보는데요. 엘모 드라이버가 다양한 모터와 엔코더 타입을 지원하기 때문에 범용으로 쓰기에는 적합한것같습니다. 대신 가격이 비싼게 흠이랄까요. 제가 사용한 드라이버는 Gold DC whistle 입니다. 모터를 구동해보려면 먼저 전원과 모터를 연결해야합니다. 엘모 홈페이지에서 Installation guide를 다운로드 받아서 와이어링 도면을 확인하고 모터의 U,V,W 구동선과 Encoder, Hall sensors 신호선들을 연결하면 됩니다. 모터를 구동하려면 STO(Safe Torque OFF) 선을 꼭 연결해야합니다. 안전을 위해 STO 에 들어오는 신호가 끊어지면 모터의 출력을 차단하는 기능입니다. 보통 Emergency switch 같은게 연결된다고 생각하면 됩니다. STO1과 STO2 에는 항상 24V 신호가 들어가야합니다. 둘 중 하나의 신

엔코더 스탭 모터를 폐루프로 제어하는 방법 [내부링크]

스탭 모터는 엔코더 없이도 위치제어를 할 수 있다는 장점이 있습니다. Open-loop microstepping으로 정밀하게 위치를 제어할 수 있는데, 왜 엔코더를 붙여 Closed-loop로 제어할까요? 왜냐하면, 스탭 모터에 Holding torque보다 큰 외력이 작용하면 모터가 탈조할 수 있고, 탈조 했는지 알수가 없다는 문제가 있습니다. 그리고 마이크로 스태핑으로 정밀하게 위치를 제어하더라도 외력에 의해 위치가 틀어지고 이를 보정할 수가 없습니다. 그래서 서보모터와 같이 엔코더 피드백을 받아 위치제어를 하게 됩니다. 스탭 모터로 폐루프 제어하는 3가지 방법에 대해서 알아보겠습니다. 먼저 가장 간단하게 구현가능한 방법입니다. 엔코더 피드백으로부터 모터의 탈조를 감시하다 탈조가 발생하면, 이동이 끝난후 잃어버린 펄스 수 만큼 더 이동하여 위치를 보정하는 방법입니다. 이 방법은 A4988과 같은 스탭모터 구동 전용 칩을 사용하면 구현이 용이합니다. 모터의 A상과 B상에 대한 전류

모터의 코깅 토크를 탐지하는 방법 [내부링크]

모터를 손으로 돌리면 툭툭 끊어지며 손에 뭔가 걸리는 듯한 느낌이 듭니다. 모터의 이런 형상을 코깅이라고 합니다. 이렇게 모터에서 토크가 균일하게 작용하지 않으면 속도 리플을 만들게 되고 정밀한 제어가 어렵게 됩니다. 코깅 토크란 회전자의 영구 자석이 고정자의 슬롯 철심을 끌어당기는 인력에 의해 발생하는 토크입니다. 자석의 극수와 고정자의 슬롯 수에 따라 회전할 때마다 주기적으로 발생하여 속도 리플을 만들어냅니다. 특히 모터가 저속 회전할 때 현상이 잘 나타나며 고속으로 갈수록 줄어듭니다. 코깅 토크는 어떻게 탐지할 까요? 모터를 천천히 돌리면서 모터에 작용하는 토크를 계산해 보면 됩니다. 첫번째 방법으로는, 모터를 Open-loop microstepping 구동하면서 모터의 회전자 위치(θe-encoder)가 목표 위치(θe-dest)를 따라오지 못하는 오차 각(θΔ)으로부터 코깅 토크를 계산할 수 있습니다. 두번째 방법으로는, 모터를 천천히 구동하면서 모터에 작용하는 토크를 측정

자이로 센서와 가속도 센서 조합으로 ARS 센서 만들기 (상보 필터와 회전행렬 사용) [내부링크]

1차 상보 필터(Complementary Filter)와 회전 행렬(Rotation Matrix)로 ARS(Attitude Reference System)를 만들어보겠습니다. 하드웨어 제작에는 TDK사의 ICM-20948과 같은 IMU 센서가 필요합니다. 여기서는 하드웨어 제작 관련해서는 다루지 않겠습니다. IMU 센서로부터 자이로 센서 값과 가속도 센서 값을 얻어온 후, 필터를 거쳐 각도를 계산하는 과정에 대해 설명하겠습니다. IMU 센서, ICM-20948 1차 상보필터 설계 자이로 센서 값에는 바이어스가 있지만 각도의 변화에 민감하게 반응하기 때문에 고역통과필터(high pass filter)를 사용합니다. 그리고 가속도 센서에서 측정한 각도는 센서에 작용하는 외력에 의해 쉽게 영향을 받기 때문에 저역통과필터(low pass filter)를 사용합니다. 이 두 값을 합치기 위해 1차 상보필터를 사용합니다. 위 식에서 фg닷은 자이로 센서 값에서 바이어스를 제거한 값이고, фa는

ASCII 코드 to 2진수, 8진수, 10진수, 16진수 변환 프로그램 [내부링크]

ASCII 코드를 2진수(Binary number), 8진수(Octal number), 10진수(Decimal number), 16진수(Hexadecimal number)로 선택 변환하는 프로그램입니다. 제가 C로 통신 프로그램을 구성할 때 통신으로 주고받는 패킷 코드를 생성하는 용도로 만들었습니다. 실행파일 다운로드: 첨부파일 ASCII2NUM.exe 파일 다운로드 소스코드 다운로드: 첨부파일 ASCII2NUM.zip 파일 다운로드 실행파일을 다운로드 받고 실행하면 다음과 같은 화면이 뜹니다. 사용 방법은 간단하며 직관적으로 알 수 있게 화면을 구성하였습니다. 제일 윗칸에다 변환하고자 하는 문장을 입력합니다. 여기서 이스케이프 시퀀스를 사용가능한데, C 계열의 프로그래밍에 익숙하신 분들께서는 문자열이나 문자에서 다루는 내용이기때문에 알고계실것입니다. 이스케이프 시퀀스는 문자열 내에 컴퓨터를 제어하기 위한 문자를 삽입하는 방법인데, 우리가 가장 익숙하게 사용하는 문자가 바로 줄바꿈

시리얼 포트, TCP/IP, UDP/IP 터미널 프로그램 (시리얼 통신 프로그램) [내부링크]

이 프로그램은 시리얼 포트(COM port)나 TCP/IP, UDP/IP 프로토콜로 데이터를 주고받을 수 있는 프로그램입니다. 시리얼이나 TCP, UDP 프로토콜로 통신하는 장비를 연결하는 프로그램을 작성하기 전에 프로토콜이 어떻게 동작하는지 간단히 테스트 하는 용도로 이 프로그램을 사용해 볼 수 있습니다. 그동안 제가 하이퍼터미널(hyperterm)이나 테라텀(TeraTerm)을 사용하면서 불편하게 생각했던 여러 기능들을 추가하여 만들었습니다. 아마도 저와 같은 각종 디바이스를 다루고 통신 프로토콜을 구현하는 개발자들에게 유용한 프로그램이 될것으로 봅니다. 프로그램 다운로드: 첨부파일 SerialPortMon.exe 파일 다운로드 소스코드 다운로드: 첨부파일 SerialPortMon.zip 파일 다운로드 다음은 프로그램을 실행하고 [Connect] 버튼을 눌러 COM 포트로 연결한 그림입니다. 기본적으로 텍스트로 보여주면서 HEX를 선택할 경우 16진수로도 보여줍니다. 여기서 제가

비활성 윈도우 매크로 프로그램 [내부링크]

비활성 윈도우 매크로 프로그램은 사용자와 상호작용 없이 백그라운드에서 대상 윈도우에 키보드와 마우스 이벤트를 보내는 용도로 만들어진 프로그램 입니다. 그래서 키보드/마우스 매크로 프로그램 V1, V2과는 실행 방법에 차이가 있습니다. 키보드/마우스 매크로 프로그램에서는 사용자가 대상 프로그램의 실행에 시작/중지 단축키로 지속적으로 개입하게 됩니다. 단순히 반복적이고 손이 많이 가는 키보드 마우스 입력 작업을 녹화해 두었다가 상황에 따라 적절한 단축키를 눌러 이를 재생하는 식입니다. 그렇기 때문에 사용자는 대상 프로그램과 계속 상호작용 하여야 합니다. 하지만 비활성 윈도우 매크로 프로그램에서는 대상 프로그램을 조작하는 키보드/마우스 이벤트를 녹화해 두었다가 이를 실행하는데, 사용자는 여기에 관심을 두지 않고 다른 작업을 하고싶은 경우에 사용합니다. 비활성 윈도우 매크로 프로그램에서는 시작, 중지 단축키와 같이 매크로의 시작과 종료에 되도록이면 사용자의 개입을 배제하려 합니다. 하지만

키보드/마우스 매크로 프로그램 V1.33 (쉬운 버전 - 버그픽스) [내부링크]

키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 입력되는 키보드나 마우스 입력을 기록해 두었다가 원하는 시점에 기록한 것을 실행함으로 단순한 반복작업을 줄여주거나 윈도우의 작업을 일괄처리 할 수 있도록 합니다. 매크로 프로그램을 처음 사용하시는 분들께서는 키보드/마우스 매크로 프로그램 V1(쉬운 버전)을 사용하시기 바랍니다. 만일 V1에 익숙하신 분들이라면 키보드/마우스 매크로 프로그램 V2(다기능 버전)을 사용하시기 바랍니다. V2에서는 V1에 없는 많은 기능들이 구현되어 있습니다. 키보드/마우스 매크로 프로그램 V2(다기능 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 비활성 윈도우 매크로 프로그램 비활성 윈도우 매크로 프로그램은 사용자와 상호작용 없이 백그라운드에서 대상 윈도우에 키보드와 마우스 ... blog.naver.com 다운

키보드/마우스 매크로 프로그램 V2.23(다기능 버전-버그픽스) [내부링크]

키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 입력되는 키보드나 마우스 입력을 기록해 두었다가 원하는 시점에 기록한 것을 실행함으로 단순한 반복작업을 줄여주거나 윈도우의 작업을 일괄처리 할 수 있도록 합니다. 매크로 프로그램을 처음 사용하시는 분들께서는 키보드/마우스 매크로 프로그램 V1(쉬운 버전)을 사용하시기 바랍니다. 만일 V1에 익숙하신 분들이라면 키보드/마우스 매크로 프로그램 V2(다기능 버전)을 사용하시기 바랍니다. V2에서는 V1에 없는 많은 기능들이 구현되어 있습니다. 키보드/마우스 매크로 프로그램 V2.3 (이미지 서치 기능 추가) 키보드/마우스 매크로 프로그램 V2 버젼에 이미지 서치 기능을 추가하였습니다. 특정 이미지를 매크로 시... blog.naver.com 키보드/마우스 매크로 프로그램 V1(쉬운 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 .

전기차용 모터 드라이버(인버터) 만들기 [내부링크]

전기차용 모터 드라이버를 만들고 있습니다. 75V 600A 급 BLDC/PMSM 모터 드라이버 입니다. 소형 전기차나 골프카트 정도의 차량을 견인할 수 있습니다. 전류가 무지막지하게 높다보니 하드웨어적으로 가장 신경써야할 부분이 PCB 패턴과 방열 구조입니다. 모터 드라이버가 탔습니다 차량용 모터 드라이버인데 차량 운행도중 탔습니다. 아주 화끈하게 타버렸습니다. 원인을 분석해보고 차기... blog.naver.com 큰 용량의 모터 드라이버는 방열설계가 중요합니다. 모터 드라이버 태워먹은 이야기는 여기를 참고하세요: https://blog.naver.com/pg365/223004537794 사고를 ... blog.naver.com 차량의 속도를 높이기 위해 약자속운전을 해야 합니다. 그래서 차량용 모터는 I-PMSM (Interior Permanent Magnet Synchronous Motor) 으로 만들어집니다. 모터 드라이버는 STM32F4 시리즈 MCU를 사용하여 만들어졌고

전기차 인버터 고장, 열전도 패드 너무 믿으면 안됨 [내부링크]

전기차용 모터 드라이버(인버터)를 개발중인데 차량 장착 실험도중 불이 붙었습니다. 아주 화끈하게 타버렸습니다. 원인을 분석해보고 차기버젼 드라이버를 만들 때 개선해야합니다. 다음에 또 태우면 안되니까요... 다음 3가지 정도의 문제가 있는것같습니다: FET의 열이 Drain 금속판으로 빠지는데, Drain에 연결된 PCB 패턴이 충분히 넓지 않음 PCB 패턴에 코팅 되어있어 열이 방열 패드로 전달이 잘 안됨 방열 패드가 PCB 패턴에 거의 닿지 않음 결국 FET에서 발생하는 열을 방열판으로 빼내야하는데, 열 전달 경로에 문제가 있는것 같습니다. 열 전달 경로는 다음 그림과 같습니다. FET junction --> Encapsulate --> Thermal Interface Material --> Heat sink --> 차체 샤시 --> Ambient 여기서 FET Encapsulate와 방열패드(Thermal Interface Material) 이 두 경로에 문제가 있는것같습니다.

큰 용량의 모터 드라이버는 방열설계가 중요합니다. [내부링크]

모터 드라이버 태워먹은 이야기는 여기를 참고하세요: https://blog.naver.com/pg365/223004537794 사고를 크게 한 번 쳤으니, 제대로 만들어야겠습니다. 저처럼 주먹구구식으로 만들었다가는 돈도 날리고 시간도 날리고 손해가 막심합니다. 최대한 계산으로 한계치를 예측해보고 모든 부품들이 허용 범위 내에서 선정되도록 해야합니다. 부품들의 데이터시트를 뒤져보면 계산에 필요한 값들을 뽑을 수 있습니다. 모터 드라이버는 75[V] 600[A]의 용량입니다. 한 체널당 6개의 FET가 병렬로 연결되어 있습니다. FET에서 발생하는 열을 방열패드를 거치지 않고 바로 빼기위해 알루미늄 PCB를 사용합니다. PCB와 Heat Sink를 거쳐 차체 샤시에 전달되고 대기 중으로 방출됩니다. 위 그림에서 열 전달되는 경로는 다음과 같습니다: FET Junction --> Base Plate(Case) --> PCB Pattern --> Insulation --> 알루미늄 PCB

쉽게 써먹을 수 있는 PID 제어기 설계법 [내부링크]

PID 제어기는 너무나도 익숙한 제어기입니다. 현대 제어이론이 다양하게 발전했지만, 산업에서 대부분 고전적인 PID 제어기를 사용하고 있습니다. 뭔가 제어해야할 대상이 있으면 아무생각없이 PID 제어기를 구성하고 원하는 결과가 나올때까지 P, I, D 이득을 조금씩 조절하게 됩니다. 지금 설명드리는 방법을 이해하고 본인의 분야에 응용할 수 있게 되면 PID 제어의 전문가가 될 수 있습니다. 제 경우는 주로 다루는 분야가 모터 제어다보니, 모터 드라이버의 제어기를 구성하는 예로 진행해 보겠습니다. DC 모터를 모델링 하면 아래 그림과 같이 Electrical part와 Mechanical part로 구성됩니다. 모터 드라이버의 전류 제어기는 Electrical part를 제어하게 됩니다. 그리고 속도제어기는 Mechanical part를 제어합니다. 전류 제어기는 PI로 구성되고 Electrical part의 전단에서 전압(v)을 가해 Electrical part에 흐르는 전류(i)

바이너리 파일을 16진수로 변환하는 프로그램 [내부링크]

BIN2HEX 컨버터는 binary 파일을 hexadecimal(16진수) 코드로 변환하는 유틸리티 입니다. 파일 시스템이 없는 임베디드 장비에서 웹페이지와 관련된 프로그래밍을 하다보면 소스코드 내에 파일의 내용을 포함할 필요가 있습니다. 저의 경우는 마이크로 컨트롤러에 내장된 웹서버를 C++언어로 만들면서 html 파일이나 jpg, gif 등의 이미지 파일들을 소스코드에 집어넣을 일이 생기게 되었습니다. 그래서 간단히 다음 프로그램을 만들어 보았습니다. BIN2HEX 실행파일 다운로드: 첨부파일 BIN2HEX.exe 파일 다운로드 BIN2HEX 소스코드 다운로드: (Visual Studio 2008, C++로 작성됨) 첨부파일 BIN2HEX.zip 파일 다운로드 기능은 다음 그림과 같이 선택된 파일을 16진수 코드로 변환하여 cpp 파일로 만드는 것입니다. 그러면 빌드 한 바이너리에 웹 서버에서 사용할 각종 html 파일이나 이미지 파일들이 들어가 마이크로컨트롤러에 다운로드 하여

DC 모터 구동원리 파보기 [내부링크]

DC 모터에 대해 공부해 보겠습니다. DC 모터로 엘리베이터를 올리고 내리는 구조를 모델링 하면 다음 그림과 같습니다. 오른쪽 회로에서 v와 i는 베터리에서 공급하는 전압과 전류, R과 L은 DC모터 권선의 저항과 인덕턴스, e는 모터가 발전기가 되어 만들어내는 역기전력, Te와 ω는 모터가 만들어내는 토크와 각속도, B, J는 부하의 마찰과 관성모멘트, TL은 부하토크입니다. 위 그림을 모터에 대한 전기자 식과 기계시스템 식으로 표현할 수 있습니다. 아래 식에서 역기전력 e가 VB-EMF로 바뀌었습니다. 그리고 마찰력 B를 생락하였습니다. Ke와 Kt는 역기전력 상수와 토크상수입니다. 수식에 미분연산자가 있어 수식만으로는 DC 모터가 어떻게 움직이는지 잘 파악이 안되네요. 위 식을 라플라스 변환하여 블록선도로 바꿔 보겠습니다. 블록선도에서 개루프 구조만 살펴보면 전압(v) 입력이 로패스 필터(1/(R+sL))와 적분기(1/Js)를 통과하여 속도(ω)를 출력하고 속도를 적분하여(1/

모터의 역기전력 상수(Back EMF constant)와 토크 상수(Torque constant)가 같은 값인가요? [내부링크]

모터의 역기전력(Back Electro Motive Force) 상수와 토크 상수가 같은 값이라구요? "흠... 단위부터 다른데요. 역기전력 상수는 단위가 [V/rpm] 이고 토크 상수는 단위가 [Nm/A] 인데 어떻게 같나요" 라고 생각할 수 있습니다. 하지만 같습니다. 역기전력 상수와 토크상수에 관한 식으로부터 증명해 보겠습니다. 증명... 걱정안하셔도 됩니다. 심플하게 증명 됩니다. 먼저 토크 상수와 역기전력 상수에 관한 식입니다. Kt = Ke 임을 보이기 위해 파워에 대한 전기와 기계 식을 가져옵니다. 전압(V)과 전류(I)를 곱하면 전력(P) 이 됩니다. 그리고 토크(τ)와 각속도(ω)를 곱하면 힘(power)이 됩니다. 힘이 기계적으로 만들어지든 전기적으로 만들어지든 두 힘은 같습니다. 단위만 다를 뿐이지요. 두 파워에 관한 식을 같게 놓고 토크 상수와 역기전력 상수에 관한 식을 대입합니다. 간단하게 증명이 되었습니다. 정말 모터에서도 토크 상수와 역기전력 상수가 같은지

스탭 모터 데이터시트의 정격 전압 [내부링크]

스탭 모터의 데이터시트에 표시된 정격 전압은 상당히 낮은 값으로 표시되어있습니다. 다음 데이터시트를 보더라도 VOLTS = 3.2 로 표시되어 있습니다. 데이터시트에서 전압의 의미는 "스탭 모터 축을 고정하여 모터가 정지한 상태에서 3.2[V]를 걸어주면 전류(AMPS)가 2[A] 흐른다"는 말입니다. 확인해볼까요? 모터 권선의 저항은 3.2/2 = 1.6 (R = V/I)이 되겠네요. 데이터시트에 WINDING RESISTANCE = 1.6 으로 기록되어있습니다. 스탭 모터의 정격 전압이 3.2[V] 라면 48V 모터 드라이버로 이 모터를 돌리면 모터가 타버릴것같습니다. 하지만 그런 일은 일어나지 않는다는 것을 경험상 알고 있습니다. 왜그럴까요? 스탭 모터에 48V를 가하면 모터가 회전하면서 48V에 가까운 역기전력을 만들어내기때문입니다. 실제로 모터에 걸리는 전압은 가한전압에서 역기전력을 뺀 전압입니다. 스탭 모터 드라이버의 전류 제어기가 스탭 모터 속도에 맞는 전압을 만들어냅니

스탭 모터의 속도를 높이려면? [내부링크]

스탭 모터의 구동 속도가 원하는 속도에 도달하지 못하는 경우가 종종 있습니다. 장비의 텍타임을 줄이기 위해서는 모터 속도를 꼭 올려야 하는데 이미 장비의 조립이 끝나 모터를 바꿀 수 없는 상황이라고 하네요. BLDC 모터로 바꾸기만 하면 바로 해결될 것 같은데 말입니다. 이런 경우 어떻게 해야 할까요? 제일 쉬운 방법은 스탭 모터의 구동 전압을 올려주면 바로 해결됩니다. 아래 스탭 모터의 Speed-torque curve를 보십시오. 모터의 전압을 24V에서 48V로 올리면 속도-토크 커브가 우측 위로 이동하게 됩니다. 같은 토크에서 속도는 두 배 정도 증가합니다(파란색 화살표). 그리고 같은 속도에서 토크도 약 두 배 정도 증가합니다(빨간색 화살표). 모터 드라이버가 24 ~ 48V를 사용할 수 있고, 24V SMPS를 사용하고 있다면 SMPS를 48V로 바꾸면 될 것 같습니다. 아... SMPS도 못 바꾼다고요? 그렇다면 SMPS와 모터 드라이버 사이에 DC-DC voltage

스탭 모터와 PMSM 모터 중 어느 모터를 사용해야하나요? [내부링크]

스탭 모터와 PMSM 모터의 Speed-torque curve를 보면 차이를 알게 됩니다. 스탭 모터는 저속에서 토크가 좋은데 속도가 올라갈 수록 토크가 떨어지는 모양입니다. PMSM 모터는 속도 변동이 있어도 토크가 일정하게 유지되다가 갑자기 토크가 뚝 떨어집니다. (아래 그림에서 왼쪽이 스탭 모터, 오른 쪽이 PMSM 모터) 아래 오른쪽 그림과 같이 스탭 모터는 저속에서 가감속을 빠르게 할 수 있기때문에 짧은 구간을 빠르게 이동할 경우 스탭모터가 유리합니다(단피치 이동에 적합). 하지만 속도가 올라가면 토크가 급격히 떨어지기때문에 고속으로 먼 거리를 이동하는데는 적합하지 않습니다. 반대로 PMSM 모터는 전구간에서 토크가 일정하기 때문에 먼 거리를 고속으로 이동하는데 PMSM 모터가 유리합니다. PMSM 모터는 속도의 한계가 있습니다. 반면 스탭 모터의 속도-토크 그래프는 속도가 올라면서 토크가 떨어지지만 0이 되지는 않습니다. 이론상 마찰이 없다면 무한대의 속도도 가능합니다.

파나소닉 서보 모터를 범용 모터 드라이버로 돌리기 [내부링크]

Panasonic 서보 모터는 3상 PMSM(Permanent Magnet Synchronous Motor) 모터입니다. Encoder 통신만 뚫으면 파나소닉 모터도 일반 PMSM 모터와 같이 제어가 가능합니다. 파나소닉 모터의 엔코더 인터페이스부터 알아보겠습니다. 위 그림의 모터는 엔코더 케이블이 6핀 몰랙스 커넥터로 체결됩니다. 인터넷을 뒤져 커넥터 핀 기능과 결선도를 구했습니다. E0V와 E5V에 5V 전원을 공급합니다. 그리고 PS와 /PS 는 RS-485 통신으로 모터 드라이버에 연결합니다. 통신 속도는 2.5Mbps 입니다. 그러니 모터 드라이버의 485 트랜시버 칩의 속도가 2.5M 이상 되도록 선정해야합니다. 아직 통신 프로토콜을 모릅니다. 그래서 0x00 부터 0xFF 까지 한 문자씩 보내면서 어떤 응답이 돌아오는지 확인합니다. 이때 모터 축을 손으로 살살 돌리면서 응답문자열에서 뭔가 바뀌는게 있는지 확인해야합니다. 저의 경우는 0x2A 에서 위치값 같은게 리턴되었습

모터 드라이버를 만드려면 뭘 해야하나요? [내부링크]

먼저 책으로 모터의 구동원리와 제어기를 구성하는 법을 공부해야합니다. 아래 3권의 책을 추천드립니다. 김상훈 저 "모터제어"는 DC, BLDC, PMSM, Induction 모터의 구동 원리와 제어기를 구성하는 방법에 대해 체계적으로 설명합니다. 대학에서 제어공학을 수강했다면 어렵지 않게 볼 수 있습니다. 설승기 저 "전기기기 제어론"은 모터 제어관련 여러 논문을 모아 책으로 구성하여 모터 제어관련 다양한 테크닉들을 배울 수 있습니다. 마지막 책은 절판이라 구하기 어렵습니다. 설승기 저 "전기기기 제어론" 김상훈 저 "모터제어" 김정한 저 "DSP로 리니어 모터 제어하기" 어느정도 모터 구동에 대한 개념이 탑재되었다면 모터 드라이버를 만들어봐야죠. 전자쟁이라면, 처음부터 회로 그리고 아트웍 해서 PCB 주문하고 부품구해서 모터드라이버를 만들어봐도 좋을텐데요. 저는 회로와 PCB 제작에는 재주가 없어 미리 만들어진 보드를 구매하는 방법으로 진행했습니다. 인터넷에서 DC + Encode

모터 드라이버가 망가지는 3가지 이유 [내부링크]

모터드라이버가 고장나는 경우는 어떤 경우가 있을까요? 보통 다음 3가지로 크게 구분할 수 있습니다. 과전류(over current)에 의한 고장 과전압(over voltage)에 의한 고장 과열(over heat)에 의한 고장 잘 만들어진 모터 드라이버는 상기 고장 원인에 대한 대책이 마련되어 있습니다. 그런데도 이런 사고가 발생하였다면, 사용자가 fault detection 옵션을 꺼두었거나 드라이버 내부의 펌웨어 오류나 드라이버를 구성하는 부품(특히 전류센서나 FET)의 고장 등으로 발생한다고 봐야할겁니다. 1. 과전류에 의한 고장은 보통 스위칭 소자인 FET나 IGBT의 drain 단자로 허용치 이상의 전류가 단시간에 흐른 경우입니다. High side와 low side FET가 동시에 켜지거나 모터 단자가 전원에 쇼트 되거나 모터 드라이버의 전류제어기가 제대로 작동하지 못한 경우입니다. 일단 여기까지만 하고 좀 더 자세한 설명은 FET의 데이터시트를 보면서 하는게 좋겠습니다.

과전압(over voltage), 과전류(over current), 과열(over heat) 발생 원인과 대책 [내부링크]

1) 과전압(Over voltage) 베터리나 SMPS에서 공급되는 전압이 모터 드라이버의 최대전압 이상으로 올라가면 과전압 에러가 발생됩니다. 모터 드라이버의 최대 전압은 모터 드라이버를 구성하는 부품들(FET, IGBT, DC-DC converter, Capacitor)의 내압으로 결정됩니다. 모터 드라이버의 정격이 48[V] 라면 내압이 대략 80~100[V] 이상의 부품들로 회로를 구성합니다. 과전압의 원인은 어떤 경우가 있을까요? 전력 공급 장치의 고장 다른 고전압 장치와 전력 라인 쇼트 모터가 관성이나 외력에 의해 발전기 상태로 구동 상기 예에서 3번째가 가장 흔하고 자주 발생합니다. 큰 관성의 모터를 급히 감속할 때 과전압 에러가 발생합니다. 이때는 모션 프로파일의 감속도(deceleration)를 낮추어 모터가 천천히 감속하도록 해야합니다. 그런데 모터가 움직이는 시간제약이 있어 가감속 프로파일을 빠르게 유지해야한다면 어떻게 해야할까요? 이런 경우는 모터 드라이버와 S

사다리꼴 속도 프로파일을 사용한 스탭모터 구동 펄스 폭 계산 [내부링크]

모터를 제어할 때 속도 프로파일을 사용한다는 것은 모터의 가감속 제어에 일정한 형상의 가속도 그래프를 사용하는 것과 같습니다. 가속도는 모터의 출력 토크와 비례하기 때문에 모터의 부하를 통제할 수 있게 됩니다. 그럼으로 기계 시스템을 일정한 힘으로 통제할 수 있고 수명을 연장하는 효과도 있습니다. 여기서는 사다리꼴 형상의 속도 프로파일을 사용하게 되는데, 속도의 가감속 구간에서 가속도 그래프는 구형파(square wave) 모양이 됩니다. 그런데 구형파에는 기본 주파수의 정수 배(1, 3, 5, 7, ...)에 해당하는 고조파(harmonic)가 존재하게 됩니다. 만일 이러한 고조파 중 한 성분이 기계시스템의 고유진동수와 일치하게 되면 공진을 일으켜 시스템을 불안하게 만들어버립니다. 하지만 사다리꼴 속도 프로파일은 수식이 단순하고 계산량이 적기 때문에 소형 MCU로 만들어지는 모터 제어기에서 기본적으로 지원하는 속도 프로파일입니다. 1) 프로파일 생성과 속도 제어기의 구성 사용자에

모터 드라이버가 Boost/Buck converter 처럼 동작한다구요? [내부링크]

DC 모터를 구동하는 H-bridge 를 Boost/Buck converter로 바꿔보겠습니다. 먼저 아래 왼편 그림과 같이 H-bridge에 펄스를 보내 스위치를 켜고끄는 경우를 상상해 보겠습니다. 모터를 한쪽 방향으로만 돌린다면 H-bridge의 오른쪽 상단 스위치는 OFF, 하단 스위치는 ON 으로 고정하고, 왼쪽 상단과 하단 스위치만 번갈아 켜고끄면 됩니다. 왼쪽 회로에서 사용하지 않는 스위치를 없애고 모터 내부를 까면 코일(L)과 발전기(VM)가 튀어나옵니다. 보통 저항도 고려해 주는데 설명을 쉽게 하기위해 날려버렸습니다. 이제 스위치가 하나만 남은 Buck converter 모양이 되었습니다. 이렇게 이해할 수도 있을것같습니다: 모터 드라이버는 H-bridge를 통해 모터에 공급되는 전압을 0에서 VB까지 조절하여 모터를 제어하는구나... Buck converter를 거울상으로 뒤집어 보겠습니다. 그러면 Boost converter가 됩니다. 어라?? 그렇다면 VB에 큰

세상에서 가장 쉬운 방법으로 사다리꼴 모양 속도 프로파일 만들기 [내부링크]

모터를 목적 위치로 보내기 위해 제어할 때, 사다리꼴 모양의 속도 프로파일을 만들고 모터의 속도가 이를 따라가도록 제어하게 됩니다. 일정한 가속도(a)로 속도를 증가하여 이동 하다가 최고 속도(vmax)에 다다르면 최고속도를 유지하며 이동하다 목적지에 도착하기 전에 일정한 감속도(d)로 속도를 감속하여 목적지에 도착한 순간 속도가 0이 되도록 사다리꼴 모양의 속도 프로파일을 만들기란 의외로 쉽습니다. 방금 설명한 내용을 그래프로 그리면 다음과 같습니다. 빨간색이 가속하는 구간이고 초록색이 최고속도, 파란색이 감속하는 구간입니다. 3개의 그래프에서 최소값만 구하면 사다리꼴 모양의 속도 프로파일이 됩니다. 1) 가속할 때 시간이 증가할 수록 가속도 a에 의해 속도가 증가합니다. 수식으로 나타내면 다음과 같습니다. 2) 일정 속도 구간 이 때는 속도가 vmax이상 못올라가게 제한하면 됩니다. 3) 감속할 때 도착지에서 시간을 거꾸로 돌린다고 생각하겠습니다. 감속도 d에 의해 속도가 증가한

문자 위에 사용되는 캐럿(^), 하이픈(-), 틸드(~) 기호의 의미 [내부링크]

문자 위에 캐럿(^)이 붙으면 추정치를 의미합니다. Kalman filter가 작동할 때, 모델로 추정치를 계산하고 실제 값과 비교하여 추정치를 보정하는 방식으로 동작하는데요, 이때 모델로 계산해낸 추정치에는 캐럿을 붙입니다. 문자 위에 하이픈(-)을 붙이면 평균을 의미합니다. 문자 위에 틸드(~)를 붙이면 차이를 의미합니다. 제어 분야에서는 별표(*)를 문자의 윗첨자로 붙여서 '명령'을 의미하기도 합니다.

모터와 발전기의 차이는? [내부링크]

모터는 전기 에너지를 기계 에너지로 변환하는 장치고 발전기는 기계 에너지를 전기 에너지로 변환하는 장치입니다. 즉, 모터에 전기를 흘리면 회전력을 만들어 기계장치를 움직이게 하고 수력이나 풍력에 의해 발전기를 돌려 전기를 생산합니다. DC 모터를 분해해 보면 안에서 돌아가는 쇠뭉치에 코일이 감겨있고 바깥 하우징에 자석이 붙어있습니다. 그리고 정류자나 브러쉬 같은게 있는데요. 발전기도 자석 사이의 코일을 회전시켜 전기를 만들어냅니다. 모터와 발전기를 비교해보면 자석과 코일 등 구성부품들이 유사합니다. 그렇다면, 모터를 돌려서 발전을 할 수 있을까요? 반대로 발전기에 전기를 밀어넣으면 돌아갈까요? 주변에서 발전기는 구하기 어려우니, 우선 주변에서 구하기 쉬운 DC 모터를 구해 간단한 실험을 해보겠습니다. 네, 한쪽 모터를 손으로 돌리니 반대쪽 모터가 돌아갑니다. 두 모터를 전선으로 연결했을 뿐인데 동력이 전달된 것입니다. 그렇다면 이렇게 생각할 수 있습니다. 손으로 돌리는 모터가 발전기

키보드/마우스 매크로 V2에서 한글 사용하기 [내부링크]

키보드/마우스 매크로 프로그램 V2(다기능 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 프로그램 V1(쉬운 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 V2의 Version 2.20부터 한글을 쉽게 사용할 수 있게 되었습니다. 여기서는 매크로 프로그램에서 한글을 출력하는 방법에 대해 설명합니다. 먼저 윈도우에 설정된 한글 입력 자판이 어떻게 설정되었는지 확인해 봅니다. 대부분 두벌식 자판을 사용하도록 설정되어 있겠지만, 저는 세벌식 390 자판을 사용하기에 다음과 같이 설정되어 있습니다. 매크로 프로그램에서는 한글을 지원하기 위해 두 가지 설정이 추가되었습니다. 아래 설정 창을 보시면 윈도우 IME 한글 입력기를 설정하게 되어있습니다. 이를 윈도우 시

키보드/마우스 매크로 V2에서 매크로 호출 사용하기 [내부링크]

키보드/마우스 매크로 프로그램 V2(다기능 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 프로그램 V1(쉬운 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 프로그램의 장점 중 하나로 매크로에서 다른 매크로를 호출하거나 중단할 수 있다는 것입니다. 이 기능은 상황에 따라 여러 매크로를 만들어 두고 필요에 따라 이를 조합하여 사용함으로, 각종 프로그래밍 언어에서 함수호출과 같은 역할을 제공하는 것입니다. 여기서는 한 매크로에서 다른 매크로를 호출하고 중단하는 방법에 대해 이해하기 쉽도록 예제와 함께 설명하도록 하겠습니다. 먼저 매크로 호출에는 다음과 같이 '순차적 실행', '병렬 실행', '실행 중단'의 3가지 옵션 중 하나를 줄 수가 있습니다. 이 옵션들을

두 개 이상의 매크로를 동시에 실행할 때 이벤트가 겹치는 문제 [내부링크]

키보드/마우스 매크로 프로그램 V2(다기능 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 프로그램 V1(쉬운 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 여러 매크로를 작성하여 실행하다 보면, 각각의 매크로에서 동시에 키보드와 마우스 이벤트가 출력되어 실행 결과가 뒤죽박죽이 되는 경우가 있습니다. 이런 경우에는 독점영역을 사용하여 여러 매크로에서 출력되는 이벤트가 섞이지 않도록 해야합니다. 만일 프로그래밍에 경험이 있다면 Critical Section이나 세마포어, 뮤텍스 등에 대해 들어보셨을 것입니다. 매크로 프로그램에서 사용하는 독점영역이 바로 Critical Section이라고 이해하시면 됩니다. 이해를 돕기 위해 간단한 예를 만들어보겠습니다. 먼저 키보드 키 0, 1

키보드/마우스 매크로 V2에서 반복구간 사용하기 [내부링크]

키보드/마우스 매크로 프로그램 V2(다기능 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 프로그램 V1(쉬운 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com PC로 하는 작업에서 반복은 상당히 지루한 작업입니다. 매크로 또한 이러한 반복적으로 해야 하는 작업들을 기록해 두었다가 한 번에 일괄 처리하도록 만든 것인데요. 여기서는 키보드/마우스 매크로 V2에서 제공하는 반복구간에 대해 간단한 예제와 함께 설명하려 합니다. 한 예로, 엑셀에서 다음 그림과 같이 A1부터 K1까지 숫자를 1000, 1100, 1200, … 이렇게 2000까지 입력해야 하는 상황을 고려해 보겠습니다. 물론 엑셀에서 지원하는 기능으로도 간단히 해결할 수 있지만 여기서는 매크로 프로그램의 기능을 설명하기 위

키보드/마우스 매크로 V2에서 문장 출력 [내부링크]

키보드/마우스 매크로 프로그램 V2(다기능 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 프로그램 V1(쉬운 버전) 키보드/마우스 매크로 프로그램은 키보드나 마우스 입력을 자동화하기 위한 프로그램 입니다. 순차적으로 ... blog.naver.com 키보드/마우스 매크로 프로그램에서 한글이나 영어를 출력하기 위해 키보드 키를 하나하나 추가하거나 매크로 기록을 사용하여 사용자가 입력하는 키를 녹화할 수도 있습니다. 다음 그림은 매크로 기록 창에서 "Hello World 안녕하세요."를 녹화한 화면입니다. 기록된 매크로는 다음과 같습니다. (시작) 키보드 SHIFT key 누르기 [영어] 키보드 H key 누르기 [영어] 키보드 SHIFT key 떼기 [영어] 키보드 H key 떼기 [영어] 키보드 E key [영어] 키보드 L key [영어] 키보드 L key [영어]

DC 모터는 전압으로 속도제어가 가능한가요? [내부링크]

DC 모터는 가격이 저렴하여 속도제어가 필요한 곳에 주로 사용됩니다. DC 모터를 위치제어에 사용하려면 엔코더를 붙여야하기때문에 모터 가격이 올라갑니다. 그래서 위치제어가 필요한 곳에는 주로 스탭 모터를 사용합니다. DC 모터는 엔코더 없이도 어떻게 속도제어가 가능할까요? 상기 그림과 같이 DC모터를 파워 서플라이에 연결하고 전압을 조금씩 올리면서 모터의 속도를 관찰하면, 전압에 비례하여 속도가 증가하는 것을 볼 수 있습니다. 왜이런지 모터의 전기회로 등가모델로 살펴보겠습니다. (이해도를 높이려면 다음 글을 보십시오: https://blog.naver.com/pg365/222031579807) DC 모터는 코일에 전류를 흘려 회전력을 얻습니다. 코일에는 인덕턴스 L과 저항 R이 있습니다. 그리고 모터가 회전하면 스스로 발전기가 되어 역기전력 e를 만들어냅니다. DC 모터에 전압을 살짝 걸어주면 모터는 어떻게 동작하는지 다음 그래프를 보면서 설명하겠습니다. 먼저 Voltage (v)를

모터에 흐르는 전류와 베터리에서 공급하는 전류가 같을까요? [내부링크]

H 브릿지에서 유니폴라 방식으로 DC 모터를 구동하는 경우, 아래 두 그림과 같이 스위치를 ON/OFF 하면서 모터를 회전합니다. (a)와 같이 스위치를 조작하면 모터가 회전하게 되고 (b)와 같이 조작하면 코일의 전류관성에 의해 전류가 계속 H 브릿지 내에서 흐르고 회전도 유지됩니다. 단, 모터 코일의 인덕턴스가 수 [mH] 이기때문에 스위치의 ON/OFF 주기는 아주 빨라야합니다. 상기 그림을 좀 간단하게 그려보면 다음과 같이 트랜지스터 하나로 모터를 ON/OFF 하는 상황이 됩니다. PWM duty ratio 50% 정도의 펄스로 트랜지스터를 켜고끄면 우측과 같은 파형을 얻게 됩니다. 트랜지스터가 ON 되었을때는 베터리 전원이 모터 코일에 자기 에너지를 저장하는 동시에 모터를 돌리는 힘을 만들어냅니다. 반대로 OFF 되있을때는 모터 코일에 저장된 자기 에너지가 프리휠 다이오드를 통해 방출되면서 계속해서 전류가 흐릅니다. 그래서 ① Motor Current는 연속해서 흐르게 되고

모터의 저항, 인덕턴스, 역기전력 상수에 대한 이해 [내부링크]

DC 모터의 등가 모델은 다음 그림과 같습니다. DC 모터는 코일에 전류를 흘려 회전력을 얻습니다. 코일에는 인덕턴스 L과 저항 R이 있습니다. 그리고 모터가 회전하면 스스로 발전기가 되어 역기전력 e를 만들어냅니다. 모터의 저항, 인덕턴스, 역기전력 상수는 모터의 전기적 특성을 결정짓는 중요한 파라미터입니다. 여기서 이 수치들의 기본 의미를 파악해 보도록 하겠습니다. 1) 모터 권선의 저항 모터의 저항은 권선 저항과 브러쉬의 접촉 저항으로 구분됩니다. 보통 모터의 권선에 의한 저항이 크기 때문에 여기서는 이 저항성분만 고려하겠습니다. 모터의 권선 저항은 낮을수록 좋습니다. 모터의 권선 저항이 클 때는 동일한 전압을 가한다고 가정할 때 모터에 흘릴 수 있는 전류가 줄어들고 그만큼 토크도 떨어지게 됩니다. 또한 다음 식에 의해 권선에서 발생하는 열은 모터의 저항에 비례하여 증가한다고 생각할 수 있지만, 저항이 커지면 전류가 반비례하여 제곱으로 줄기 때문에 실제로 발생하는 열은 줄게 됩

유도성 부하(inductive loads)의 구동 [내부링크]

모터에 베터리를 연결하고 스위치로 전원을 껏다 켰다 하면서 모터를 구동하는 실험을 많이들 해봤을겁니다. 다음 그림에서와 같이 스위치가 붙을 때는 괜찮은데 스위치가 떨어질 때 불꽃이 튀는 것을 볼 수 있습니다. 왜그럴까요? 바로 모터 내부에서 뱅글뱅글 도는 회전자에 코일이 감겨있고 이 코일을 통해 모터가 힘을 만들어내기때문입니다. 예... 코일을 다룰 때는 항상 명심해야할 것이 있습니다. 스위치가 꺼질 때도 전류가 흐를 수 있도록 우회로를 항상 준비해 두어야합니다. 이런 우회로 역할을 하는 것이 바로 Freewheel diode 입니다. Freewheel diode 유도성 부하(인덕터, 코일)를 스위치(or 트랜지스터)로 켜고 끌 때는 보통 Freewheel diode라는 것을 유도성 부하에 병렬로 연결합니다. 스위치가 ON 되어 부하의 인덕터에 전류가 흐르다가 스위치가 OFF 되면 인덕터에 저장된 자기 에너지로부터 유도된 전류가 freewheel diode를 통해 흐르게 됩니다. 만

모터를 멈추는 방법: 다이나믹 제동과 회생 제동 [내부링크]

모터에 걸어준 전압에서의 속도보다 더 빨리 회전하거나(내리막길에서 구동), 감속하는 경우 모터는 발전기로 바뀝니다. 이때 회생 전류가 전원으로 역류해서 제어기나 주변 회로의 손상을 가져오기도 합니다. 따라서 모터 드라이버의 전원으로는 회생 전력을 다시 저장할 수 있는 충전 가능한 배터리 사용하면 좋습니다. 배터리가 아닌 SMPS와 같은 파워서플라이를 사용할 경우 회생 전력은 파워서플라이로 역류하여 전원공급회로에 손상을 줄 수도 있습니다. 1) 모터의 축을 기구적으로 구속 모터의 축을 기구적으로 구속 하는 방법은 보통 상하 운동을 하는 엘리베이터나 로봇의 다리를 움직이는 관절 모터에 사용됩니다. 공급 전원이 끊어지면 모터는 자유롭게 회전하여 엘리베이터가 자유낙하 하거나 로봇이 쓰러지게 됩니다. 보통 모터의 축에 브레이크가 달려 있는 경우, 브레이크에 전원이 투입 되면 브레이크가 열리게 되어 모터가 회전 가능하게 됩니다. 브레이크에 전원이 끊어지면 브레이크는 닫히게 되어 모터가 회전하지

모터의 정격 전류, 정격 전압, 데이터 시트 [내부링크]

모터의 정격 전류, 정격 전압, 정격 토크, 정격 회전속도 등에서 사용되는 정격(rated)은 모터의 제조사가 보증하는 값들을 말합니다. 즉, 정격의 범위 내에서 모터를 무리없이 사용할 수 있다는 의미입니다. 모터의 정격 값들은 모터 명판으로부터 또는 데이터 시트로부터 얻을 수 있습니다. 각종 정격값들 중 가장 중요한 두 값은 정격 전류와 정격 전압입니다. 각종 정격값들에 대해 살펴보기 전에 다음 두 가지를 기억해야합니다. 모터에 가하는 전압 --> 모터의 속도 모터에 흐르는 전류 --> 모터의 토크 모터에 전압을 걸어주면 모터는 돌아갑니다. 낮은 전압을 걸면 천천히 돌고 높은 전압을 걸면 빨리 돕니다. 모터에 흐르는 전류의 크기에 따라 모터의 토크가 결정됩니다. 전류가 조금 흐르면 모터의 토크는 작아지고 전류를 많이 흘리면 토크는 커집니다. 1) 정격 a) 정격 전압(Rated voltage) 모터에서 정격 전압(rated voltage)은 모터에 가할 수 있는 최대 전압으로, 보

모터 드라이버 수동 이득 조정(gain tuning) [내부링크]

먼저 링크의 글을 읽으면 도움이 됩니다: https://blog.naver.com/pg365/222032943130 모터 드라이버 내부의 제어기 구성을 보면 위치제어기 – 속도제어기 – 전류제어기가 직렬로 연결되는 캐스캐이드형 제어구조를 사용합니다. 각각의 제어기는 PI 제어기 또는 PID 제어기로 구성됩니다. 각각의 제어기를 수동으로 동조(tuning)하는 과정을 설명하기 위해 상기 제어구조를 가지는 제어기와 모터 모델을 Matlab Simulink로 구성하여 시뮬레이션 하였습니다. 모터를 다음 그림과 같이 블록선도로 만들어줍니다. (참고: 김상훈 저 "모터제어" 책) 1) Current Gain Tuning 전류제어기는 PI제어기로 구성합니다. 그리고 Anti-windup 구조도 만들어줍니다. 전류제어기는 직렬로 연결된 제어기 구조에서 제일 안쪽에 위치하기때문에 가장 먼저 튜닝해야합니다. B = 1 [Nm/(rad/s)] (점성 마찰(Viscous Friction)력) J = 0

모터 드라이버의 PID 제어기 [내부링크]

1) 제어기란? 1-1) 피드백 제어 제어(control) 란 어떤 장치나 시스템의 출력신호가 원하는 상태를 따라가도록 입력신호를 적절히 조절하는 방법(Ref: MATLAB 제어시스템 해석 및 설계 정헌술) 이라고 정의할 수 있습니다 . 다음 그림과 같이 파워 서플라이에 DC 모터를 연결하 고 모터 축에는 속도계를 붙여 DC 모터의 원하는 속도를 설정한다고 생각해 보겠습니다. 속도계로부터 모터의 속도를 읽고 원하는 속도보다 낮으면 파워 서플라이의 전압을 올려 모터의 속도를 높이고 원하는 속도보다 높으면 파워 서플라이의 전압을 내려 모터의 속도를 낮출 것입니다. 원하는 속도에 도달할 때까지 이러한 과정을 반복하게 됩니다. 이처럼 센서에서 측정한 결과를 사용하여 제어 대상의 입력을 조절하는 과정을 반복적으로 수행하는 것을 피드백 제어 라고 합니다. 지금은 컴퓨터가 발전해서 예전에 사람 이나 기계가 하던 일들을 간단하게 소프트웨어로 처리할 수 있습니다. 모터 제어기가 하는 일도 위와 같은

DC Motor 제어기 모델링과 시뮬레이션 [내부링크]

모터 제어기 모델링과 시뮬레이션은 김상훈 저, “DC, AC, BLDC 모터제어” 책을 참고하였습니다. DC 모터는 구조가 간단하여 제어가 쉽고 속도제어의 범위가 넓다는 장점으로 인하여 가변속 구동 또는 가변 토크 제어에 가장 많이 사용되고 있습니다. 그러나 구조상 요구되는 정류자(commutator)와 브러시(brush)로 인해 고속 운용에 부적합하고 정기적인 유지보수가 필요합니다. DC 모터는 전기 에너지를 회전 기계에너지로 변환시키는데, 모터의 회전자(armature)에 발생된 대부분의 토크가 외부 부하를 구동하는데 쓰입니다. 다음 그림과 같이 고정자로 영구자석을 사용하고 회전자로 코일을 사용하여 구성된다. 회전자 코일은 모터의 회전을 유지하기 위하여 맥동하는 형태의 직류전원에 의해 여자 되며, 이러한 펄스 형태의 직류전원을 기계적인 정류자를 사용하여 전원을 공급합니다. 1) 모터 모델 유도 일반적인 DC 모터의 회로에 대한 블록선도와 방정식은 다음과 같습니다. 전기자 회로의

모터 드라이버에서 발생하는 열과 방열 대책 [내부링크]

모터를 한참 돌리다 모터나 모터 드라이버에 손이 닿았을 때 너무 뜨거워 손에서 오징어 타는 냄새가 나는 경험을 한두번씩 해봤을것입니다. 모터와 모터 드라이버에서는 왜 열이 날까요? 1) 모터는 코일에 전류를 흘려 축을 회전시키기때문에 저항이 있는 권선에 전류가 흐름으로 P=V*I=R*I2 의 열이 납니다. 모터 권선에 흐르는 전류가 커질 수록 제곱에 비례하여 열이 납니다. 만일 큰 전류를 흘린다면 모터의 방열도 고려해야합니다. 2) 모터 드라이버와 모터간 배선, 파워 서플라이와 모터 드라이버간 배선에서도 용량에 못미치는 규격의 선을 사용하면 열이 납니다. 저는 수년 전 600A급 차량용 드라이버를 만든 적이 있었는데, 배선을 대충하고 구동 테스트하다 모터와 드라이버간 배선에서 불이 붙은 경험이 있었습니다. 경황이 없어 옆에 있는 빗자루를 주워 불을 끈다고 두드렸더니 불길이 점점 활활 타오르더군요. 멀리서 지나가던 직원이 소화기를 들고와 불을 끄긴 했습니다. 휴~~ 아래 그림에서 붉은

모터 권선의 코일(inductor)에 대한 이해 [내부링크]

도선에 전류가 흐르면 도선 주위에 동심원 분포를 가지는 자기장(magnetic field)가 형성됩니다. 코일(inductor)이란 도선을 나선 모양으로 감은 것을 말하는데, 감은 수가 증가할수록 자기장은 비례하여 증가합니다. 인덕턴스(inductance)는 코일에 공급된 전류에 의해 코일 주위에 형성되는 자기장의 강도를 나타내는 척도이며, 인덕턴스 값은 코일을 감은 수의 제곱에 비례합니다. 코일은 전기 회로에서 L로 표기하며 단위는 H (헨리, henry)를 사용합니다. 예로, 코일을 통해 흐르는 전류가 초당 1A씩 변하며 코일 양단에 1V의 전압이 걸릴 때 1H가 됩니다. 모든 코일은 저항 성분을 가지고 있으며, 코일에 전류가 흐르게 되면 코일 전선 사이에 부유용량(커패시터 성분)이 존재하게 됩니다. 하지만 부유용량은 무시할 수 있을 정도로 작기 때문에 실제적으로 코일에 사용되는 등가회로는 R과 L로 결정됩니다. (C는 무시) RL 회로에서 코일은 흐르는 전류에 의해 형성되는 자

모터 권선의 코일(inductor) 시뮬레이션 [내부링크]

앞 글(https://blog.naver.com/pg365/222036701203)에서 코일에 일정한 전압을 가했을 때 흐르는 전류는 코일을 모델링 한 미분방정식을 라플라스 변환으로 풀어 시간에 대한 전류 변화 그래프로 그릴 수가 있었습다. 그런데 PWM duty 비를 가지는 구형파 전압을 가하는 것을 수식으로 모델링 하여 풀기에는 좀 난해할 것 같아, 수치해석적인 방법으로 쉽게 풀어보겠습니다. 1) 일정한 전압에서의 전류 먼저 일정한 전압 E가 코일에 가해질 때 전류에 대한 미분방정식을 Euler method로 수치 적분해보겠습니다. 상기 수치 적분을 C로 코딩하여 시뮬레이션 합니다. double i = 0; // 코일에 흐르는 전류 double di = 0; // 전류의 변화량(delta i) double dt = 0.000001; // 시간의 변화량(delta t) double L = 0.001; // 코일의 인덕턴스 double R = 5; // 코일의 저항 double E

위치제어기만으로 구성되는 모터 제어 구조 설계 [내부링크]

주의) 여기서 설명하는 제어기 구조는 교과서에 나오는 어떤 정형화된 제어기 구조가 아님을 밝혀 둡니다. 모터 제어기의 요구사항과 제 경험에 따라 구성된 제어기이며, 제어기를 이런 방식으로도 구성할 수 있겠구나 하는 참조용으로 이해해 주시기를 부탁드립니다. 1) Overall Controller Structures 보통 모터제어관련 서적에서는 위치 제어기, 속도 제어기, 전류 제어기를 직렬로 연결한 Cascade형 제어 구조를 사용하고 있습니다[DC, AC, BLDC 모터제어, 김상훈 저]. 하지만 이렇게 연결한 경우에는 전류 제어기, 속도 제어기, 위치 제어기의 이득을 각각 설정해야 하기 때문에, 모터 제어기를 처음 세팅하는 사용자에게 어려움이 있습니다. 여기서는 되도록 제어기의 제어 구조를 단순하게 만드는 것이 목적입니다. 일반적으로 모션 컨트롤러에 연결하여 사용하는 모터 제어기는 위치 제어만 필요하기 때문에, 다음과 같이 위치 제어기(Position controller)를 전단에

저해상도 엔코더나 홀센서를 차분하여 속도를 계산하는 방법 [내부링크]

모터가 회전한 위치와 속도를 측정하기 위해 엔코더를 사용합니다. 모터 드라이버는 엔코더로부터 위치를 읽어와 이를 차분하여 속도를 얻습니다. 그런데 여기서 문제가 발생합니다. 모터의 위치는 엔코더 펄스를 카운트 한 값이기때문에 정수값입니다. 만일 제어기의 동작 주파수가 1000Hz라면 속도를 측정하는 시간 간격은 1ms가 됩니다. 그래서 엔코더 카운트 값을 미분하면 다음과 같은 속도 그래프를 얻게 됩니다. 계산한 속도에서 0을 제외한 최소 값은 ±1000이 되며, 보여지는 속도 또한 불연속적입니다. 엔코더 해상도가 낮을 수록, 제어 주기가 빠를 수록 속도의 양자화 잡음이 커지게 됩니다. 속도에 노이즈(양자화 잡음)가 포함되면 어떻게 될까요? 속도 제어기 이득을 낮추어 사용해야합니다. 이득이 낮으면 목표 속도를 빨리 추종하지 못하겠죠. 결국 성능이 떨어지는 그렇고그런 모터 드라이버가 됩니다. 이번 글에서는 이전 위치 데이터까지 활용하여 좀 더 정밀한 속도 측정 방법을 제안해보겠습니다.

BLDC 모터 홀센서(Hall sensor) 입력 패턴 찾기, 6-step 구동 [내부링크]

BLDC 모터는 DC 모터와 달리 회전자의 위치를 파악하기 위해 Hall Sensors를 사용합니다. DC모터를 구동할 때는 모터의 +, - 두 단자만 연결하면 바로 구동이 가능합니다. 하지만 BLDC 모터는 U, V, W 세 개의 단자를 연결해야 하고 3 가닥의 홀센서 신호선도 연결해야 합니다. 그러다보니 BLDC 모터를 처음 접하는 사용자들은 연결에 어려움을 겪게 됩니다. 이번 글에서는 이러한 배선 문제를 쉽게 해결할 수 있는 방법에 대하여 설명합니다. 1) Hall Sensors의 배열 BLDC 모터를 테스트 해보면, 모터 제조사마다 Hall Sensors 신호(H1, H2, H3)가 반전되어 있거나, H1, H2, H3 신호선의 연결 순서가 다른 경우를 볼 수 있습니다. 그래서 사용자들은 BLDC 모터의 Hall Sensors를 모터 제어기에 올바르게 연결하는데 어려움을 겪습니다. 다음 그림은 BLDC 모터를 제어하는 타이밍 차트로, 홀센서 신호 출력에 대한 BLDC 모터의

모터의 전기 파라메터(Resistance, Inductance, Back-EMF const.) 찾기 [내부링크]

모터의 전기 파라메터를 추정하는 방법에 대하여 알아보겠습니다. 여기서 설명하는 방법 말고도 다양한 방법들이 있습니다. 1) 실험으로 Inductance(L), Resistance(R), Back-EMF const.(Ke) 계산 모터의 전기 모델을 결정하는 L, R, Ke값을 실험으로 구하는 방법을 설명합니다. 다음 식은 모터 전기 회로의 수학적 등가 모델입니다. 위 식에서 각속도 ω와 전류의 미분 di/dt가 사용되는데요, 엔코더의 펄스를 카운트 하여 정확한 속도를 계산하는데 어려움이 있습니다. 그리고 전류센서로부터 측정된 전류 값에도 노이즈가 많이 포함되어 있기 때문에 전류의 미분치를 계산하는 것도 어렵습니다. 그래서 상기 식을 적분하여 다음과 같이 바꿉니다. 그러면 속도는 위치로 바뀌고 전류의 미분도 없어집니다. 이 식에서 ∫E(t)dt는 모터에 가하는 전압을 적분하여 구하고, i(t)는 전류 센서로부터 측정합니다. 그리고 ∫i(t)dt는 전류를 적분하여 구합니다. 또 p(t)는

모터의 기계 파라메터(Moment of Inertia, Friction, Load Torque) 찾기 [내부링크]

이번에는 모터의 기계 파라메터 값을 실험으로 구하는 방법을 알아보겠습니다. 다음 식은 모터가 구동하는 기구 모델의 수학적 등가 모델입니다. 이전 글에서 언급 했듯이 엔코더의 펄스를 카운트 하여 정확한 속도와 가속도를 계산하는데 어려움이 있습니다. 그리고 전류센서로부터 측정된 전류 값에도 노이즈가 많이 포함되어 있기 때문에 가해지는 토크를 계산하는 것도 어렵습니다. 그래서 상기 식을 적분하여 다음과 같이 바꿉니다. 그러면, 속도는 위치로 바뀌고 가속도는 속도로 바뀌게 됩니다. 이제 모터에 주파수가 변하는 파형을 가하여 상기 데이터를 시간에 따라 수집합니다. 그러면 다음과 같이 행렬로 표시할 수 있습니다. 이제 최소제곱법으로 x를 계산하기 위해 A의 의사역행렬을 B에 곱해주면 됩니다. 이렇게 구한 J, B, TL 값으로부터 Feed-forward 제어기를 구성할 수 있습니다. Feed-forward 제어기를 Feed-back 제어기와 병렬로 사용하여 제어 성능을 향상할 수 있게 됩니다.

BLDC 모터의 정현파 제어와 홀센서로 속도 계산 방법 [내부링크]

BLDC 모터를 구동하기 위해서는 U, V, W 각 단자에 구형파 전압을 가하게 됩니다(6-step 구동: https://blog.naver.com/pg365/222038637843). 이는 BLDC 모터가 회전하면서 발생하는 역기전력의 파형이 사다리꼴 모양을 하고 있기때문입니다. 그런데 구형파 전압을 가하게 되면 섹터의 경계에서 전압이 순간적으로 변하기 때문에 약간의 토크 리플이 발생하게 됩니다. 그래서 BLDC 모터를 구형파가 아닌 정현파로 제어하기도 하는데, 이렇게 하려면 회전자의 정확한 회전 위치를 알아야만 합니다. 여기서는 Hall Sensor나 Encoder를 사용하여 회전자의 정확한 회전각을 추정하는 방법에 대하여 설명합니다. BLDC 모터를 구동하는 기본적인 방법은 Six-step(Trapezoidal) commutation 입니다. 먼저 Hall Sensors 입력으로부터 회전자가 위치한 섹터를 찾고 다음 그림과 같이 해당 섹터에 대한 3상(U, V, W) 단자에 전