'Duty'에 해당되는 글 3건

  1. 2012.11.16 ZEO-S 모듈로 서보모터 제어
  2. 2012.11.15 서보 모터 제어 방법 1
  3. 2012.11.12 ZEO-S 모듈로 PWM 펄스 11개 제어

 

먼저 서보모터에 대한 설명을 참조하세요

http://whiteat.com/58171

 

 

 

아날로그 서보 모터 제어

 

ZEO-S 모듈로 간단하게 아날로그 서보 모터를 제어할 수 있습니다.

 

 

 

 

ZEO-S 모듈에 연결

 

ZEO-S 모듈

서보 모터

3.3V (우측 1번핀)

VCC

PA0 (PWMA-1)

Control

GND (우측 20번 핀)

GND

 

서보모터 컨트롤 핀을 ZEO-S 모듈의 PA0 핀에 연결합니다.

서보모터의 VCC 핀은 ZEO-S 모듈의 3.3V에 연결하고 GND끼리 연결합니다.

 

 

 

 

C# 소스 코드

 

먼저 C#으로 작성된 전체 소스를 보면 아래와 같습니다.

 

namespace ZEO_SERVOApp

{

public partial class Form1 : Form

{

// ZEO 모듈 제어용 클래스 선언

ZeoLib ZEO = new ZeoLib();

 

UInt16 MAX_PWMA = 0;

 

public Form1()

{

InitializeComponent();

 

// 트랙바(슬라이드바)의 최소, 최대값 설정

this.trackBar1.Minimum = 700;

this.trackBar1.Maximum = 2300;

}

 

private void Form1_Load(object sender, EventArgs e)

{

// ZEO 모듈 열기

this.ZEO.Open();

 

// ZEO 모듈 초기화

this.ZEO.InitZeo(0);

 

// PWMA에 20mS 의 주기의 PWM 생성

this.ZEO.InitPWMA_US(20000, 10, 20, 20, out MAX_PWMA);

}

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

this.ZEO.Close();

}

 

private void trackBar1_Scroll(object sender, EventArgs e)

{

// 700uS 에서 2300uS 의 ON 신호 발생

this.ZEO.UpdatePWMA(1, Convert.ToUInt16((sender as TrackBar).Value));

}

}

}

 

 

윈도우 폼이 열릴 때 ZEO 모듈을 초기화해 주고 (Form1_Load 함수)

윈도우 폼이 닫힐 때 ZEO 모듈을 종료합니다. (Form1_FormClosing 함수)

그리고 트랙바(슬라이드바)를 움직일때마다 PWMA-1번 핀의 ON 값을 변경해 주면 됩니다.

 

 

 

 

서보 모터 제어 동영상

 

아래의 동영상과 같이 ON 값에 따라 -90도 ~ +90도를 회전합니다.

 

 


 

출처: http://whiteat.com/58172

 

Posted by WhiteAT
,


서보 모터 종류

 

서보 모터는 아날로그 서보 모터와 디지털 서보모터가 있습니다.

큰 차이점은 아날로그 서보 모터는 지속적인 PWM 신호를 주어야 하고 디지털 서보 모터는 해당 서보모터에서 제공하는 프로토콜에 맞게 시리얼 데이터를 줘야 하는 것입니다.

 

아날로그 서보 모터는 PWM 입력이 없을 경우 모터가 고정(Lock)되지 않고 풀리(UnLock)게 되어 힘을 받지 못하게 되고

디지털 서보 모터는 한번의 데이터 전송으로도 해당 각도를 유지하게 됩니다.

 

아날로그 서보 모터의 경우 제품 특성상 약간의 차이가 있을 수 있으나 대부분 조작 방법이 거의 동일합니다. 반면 디지털 서보 모터의 경우 공급업체에서 제공하는 프로토콜을 참조하여 작성 가능하며 업체마다 약간의 차이가 있을 수 있습니다.

 

 

 


 

아날로그 서보 모터








 

핀 명

설명

VCC

전원 (3~5V)

CONTROL

컨트롤 신호

GND

그라운드

 


 

PWM 20mS의 주기로 ON 시간을 0.7mS ~ 2.3mS로 하여 -90도 ~ +90도 까지 제어할 수 있습니다.

 

아래는 ON 시간에 따른 위치입니다.

 

ON시간: 0.7mS

축의 위치: -90도

 

서보 모터 -90 도서보 모터 -90 도 이동

 

 

 

 

ON시간: 1.5mS

축의 위치: 0도

 

서보 모터 0 도서보 모터 0 도 이동


 

 

 

 

ON시간: 2.3mS

축의 위치: +90도

 

 

서보 모터 90 도서보 모터 90 도 이동

 

 


-90도 +90도 사이의 임의의 각으로 이동하려면 ON 시간을 적당히 조절하면 됩니다. 
전체 움직이는 각도(180도)와 ON 시간의 차이(2.3mS -  0.7ms) 는 1.6mS/180도 = 0.0088888mS/1도 가 됩니다.
(즉, 펄스의 HIGH 시간을 0.0088888ms 늘릴수록 서보모터는 1도씩 더 이동하게 됩니다.)
예를 들어 30도에 위치하려면 
 1.5mS(0도 기준) + 0.26mS(30도 이동하려면  0.0088888*30 = 0.26mS ) 이니 1.76mS 만큼 HIGH 를 유지하면 됩니다.

 

 

 

 

파형은 어떻게 만드나요?

 

PWM 파형은 AVR 이나 PIC 등의 MCU으로 구현할 수 있습니다.

만약 PWM 파형 구현이 어려우시다면 Output 포트를 직접 구동할 수도 있습니다.

 

 

// -90 도 이동 예제

PORT = 1 // ON 시킵

Delay(700);// // 700uS 딜레이

PORT = 0;//

Delay(19300);// 19.3mS 딜레이







출처: http://whiteat.com/58171 



 

 

'전자/일반' 카테고리의 다른 글

빵판에서 사용 가능한 푸쉬,리셋 스위치  (0) 2016.04.20
USB2.0 MINI 5p cable 미니5핀 케이블  (0) 2016.03.31
다양한 저항 종류 – 용량  (0) 2016.03.31
체리, ON/OFF 제어 방식  (2) 2012.11.28
PID 제어  (4) 2012.11.28
Posted by WhiteAT
,

 

ZEO 모듈을 처음 사용하시는 분은 http://whiteat.com/57501 를 참조하여 드라이버를 설치하시고, 프로그래밍 가이드를 따라 해 보시기 바랍니다.

 

 

 

 

하드웨어 연결

 

 

 

데이터시트의 핀명을 참조하여 아래 사진처럼 PWMA-1,2,3, PWMB-1,2,3,4, PWMC-1,2,3,4 에 각각 적색 LED와 1K옴 저항을 연결합니다.

(VCC – 1K옴저항 – 포트로 연결 합니다.)

 

 

 

 

Visual Studio 2008 의 C#으로 PWM11App 라는 응용프로그램을 만들어 보겠습니다.

 

먼저 Windows Forms Application Template 으로 PWM11App 라는 프로젝트를 생성합니다.

C#을 처음 접하시는 분은 http://whiteat.com/31559 를 먼저 해보시기 바랍니다.

 

 

 

 

 

라이브러리 추가 & 기본 코드 추가

http://whiteat.com/product/ZEO/ZEO-Programming_Guide.pdf 의 프로그래밍 가이드를 참조하여 라이브러리를 추가합니다.

 

 

라이브러리를 추가하면 아래와 같이 솔루션 창에 ZeoDotNetLib 와 LibUsbDotNet 이 생성됩니다.

 

 

 

 

 

Form_Load 이벤트와 Form_Closing 이벤트에 각각 ZEO 모듈의 초기화코드와 종료 코드를 추가합니다.

 

 

using ZeoDotNetLib;

 

namespace PWM11App

{

public partial class Form1 : Form

{

ZeoLib ZEO = new ZeoLib();

 

public Form1()

{

InitializeComponent();

}

 

private void Form1_Load(object sender, EventArgs e)

{

this.ZEO.Open();

this.ZEO.InitZeo(0);

this.label1.Text = "ZEO-" + this.ZEO.GetZeroType().ToString();

 

// PWM 초기화 모든 LED 를 최대값으로 ON 한다.

this.ZEO.InitPWMA(PWM_Frequency._2Khz, 0, 0, 0);

this.ZEO.InitPWMB(PWM_Frequency._2Khz, 0, 0, 0,0);

this.ZEO.InitPWMC(PWM_Frequency._2Khz, 0, 0, 0,0);

}

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

this.ZEO.Close();

}

}

}

 

 

 

 

컨트롤 추가

11개의 PWM 을 제어하기 위해 11개의 Trackbar ( 슬라이드바)를 추가하고 좌측에 라벨을 붙여 줍니다.

 

 

 

 

 

TrackBar 의 Scroll 이벤트를 걸어 스크롤을 변경할 때마다 LED 밝기를 조절할 수 있습니다.

 

 

private void trbPWMA1_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.A,1,Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMA2_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.A, 2, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMA3_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.A, 3, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB1_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 1, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB2_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 2, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB3_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 3, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB4_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 4, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC1_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 1, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC2_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 2, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC3_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 3, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC4_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 4, Convert.ToUInt16((sender as TrackBar).Value));

}

 

 

 

 

 

위와 같은 설정이 되면 아래의 결과를 얻을 수 있습니다.

 

 

 

 

PWMA-1부터 PWMC-4 의 PWM 을 차례대로 제어하는 동영상입니다.

 




Posted by WhiteAT
,