OrCAD 파일 정보

OrCAD 2013. 2. 24. 19:59


 

 

 

 

 

.opj (OrCAD Project file)

– 프로젝트에 관련된 모든 데이터에 대한 정보를 가짐 (즉, 프로젝트 파일)

 

 

 

.dsn (OrCAD Design file)

– 회로도 Design 파일

 

 

 

.olb (OrCAD Library file)

– 파트와 심볼정보 파일 (OrCAD 라이브러리 파일)

 

 

 

.upd (Property Update file)

– 회로도에 쓰인 부품 내부의 파트 속성을 포괄적으로 집어넣을 때 사용되는 파일(캐쉬 파일)

 

 

 

.swp (back annotate file)

- Layout 상에서 변경된 정보를 capture 상에 적용시키는 파일 (PCB 작업할 때 관련 있는 파일)

 

 

 

.drc (Design rule check report file)

– 회로 rule의 검사결과 파일 (회로가 불량인지 검사한 결과 파일)

 

 

 

.bom (Bill of material file)

– 회로도에 사용된 부품 목록 파일

 

 

 

.xrf (Cross Reference part report file)

– 회로도에 사용된 part정보 파일

 

 

 

.mnl (Netlist file)

– 핀과 핀간의 연결 정보와 Footprint 정보 파일 (Artwork 작업할 때 관련 있는 파일)


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

 

 

 

 

'OrCAD' 카테고리의 다른 글

단축키, Orcad Capture  (0) 2013.05.29
Tool palette bar, OrCAD Capture for Windows  (0) 2013.05.16
OrCAD Capture for Windows [Option menu]  (0) 2013.03.30
OrCAD Capture for Windows  (0) 2013.03.18
OrCAD 란?  (0) 2013.02.01
Posted by WhiteAT
,

 

WAT-CURRENT 매뉴얼: 다운로드



제품 소개

   

 

 

 

WAT-LED Driver 2 모듈은 0 ~ 2A 사이의 전류를 제어할 수 있는 모듈입니다. 주로 파워 LED 밝기 제어, DC 모터 속도 등에 사용되며 MCU의 PWM으로 제어됩니다. 본 제품의 가장 큰 장점은 타 제품에 비해 열이 거의 발생하지 않는 것입니다.

 

 

항목

내용

출력 전류

0 ~ 2 A

최대 입력전압

35V

크기

50 mm x 40 mm

커넥터

3.5mm 터미널 단자

 

 

 

 

구조

    

 

 

 

 

 

크기

 

 

 

 

 

 

 

 

 

파워 LED 제어

 

 

ATEMGA128의 PWM 듀티비를 변경하여 파워 LED 밝기를 정밀하게 제어할 수 있습니다. ATMEGA128와 정전류 모듈 입력 커넥터를 아래와 같이 연결합니다.

 

 

번호

핀명

설명

1

VCC

ATMEGA128 의 5V에 연결

2

PWM

ATMEGA128 PORTB.5(OC1A) 에 연결

3

OE

ATMEGA128 PORTB.4 에 연결

4

GND

ATMEGA128 그라운드

5

VCC_LED

LED 전원(12V 별도 전원)

6

GND_LED

LED 그라운드

 

 

듀티(duty)를 변경하면 파워 LED 밝기의 변화를 확인 할 수 있습니다. Duty 비를 10% 로 하면 출력 전류는 200 mA 가 됩니다.

 

< 듀티비 10% (약 200mA)일 때의 밝기 >

 

 

 

 

< 듀티비 30% (약 600mA)일 때의 밝기 >

 

 

 

 

 

< 듀티비 100% (약 2A)일 때의 밝기 >

 

 

'정전류 모듈' 카테고리의 다른 글

정전류 모듈, WAT-CURRENT VER1  (0) 2011.12.23
Posted by WhiteAT
,

OrCAD 란?

OrCAD 2013. 2. 1. 14:32

 

CAD의 정의

 

CAD는 Computer Aided Designed의 약자입니다.

CAD의 종류에는 크게 Electronic CAD와 Mechanical CAD가 있는데, 전자회로 설계에는 Electronic CAD가 사용되며 종류에는 OrCAD, PCAD 등이 있습니다.

 

참고로 기구, 건축 설계에는 Mechanical CAD가 사용되며 주로 AutoCAD가 사용됩니다.

 

 

 

 

CAD의 목적

 

예전에는 종이를 이용하여 제도를 하고 나서 전자회로도면이 완성되면 도면을 사진 찍어 그 필름을 인쇄회로기판에 접착하여 이를 부식시키는 과정이었습니다.

 

이러한 과정을 거치다 보니 샘플 하나를 만드는데 많은 비용과 시간이 소요되고, 많은 시행착오, 큰 오차율이 발생하였는데, 이러한 문제점을 극복하기 위해 CAD 프로그램이 사용됩니다.

 

 

 

 

Orcad Capture for Windows 특징

 

 

 

 

 

 

 

 

전자 회로를 설계할 경우 회로는 정확히 설계되어야 합니다. 이러한 회로를 직접 설계하여 제작할 수도 있지만 이럴 경우에는 회로구성 및 특성해석에 많은 시간과 비용이 발생하게 됩니다.

따라서 회로를 제작하기 전에 컴퓨터 프로그램으로 계산하고 측정, 평가하는 과정을 거쳐 시간과 비용을 절약하는 것은 요즘에 와서 필수적인 사항이 되었습니다.

 

OrCAD Capture program은 회로 분석을 쉽게 하고, 상징적인 전자회로 도면을 그려서 최종적으로 인쇄회로기판 제작하는Netlist file을 생성하는 것입니다.

OrCAD Capture program은 여러 가지 종류의 Netlist 형식을 지원합니다. 기구설계프로그램과 연계하기 위한 AutoCAD, Genertic CAD등에 필요한 DXF 파일을 Netlist 작성시에 생성할 수 있으며, EDIF, VHDL, Verilog HDL과 다른 전자회로 설계 프로그램으로도 Netlist 파일을 생성할 수 있습니다.

 

부품 Library는 약 44,000개 이상이 있으며 새롭게 부품 혹은 심볼을 생성하기 쉽습니다.

아직 데이터에 한글이 사용되면 문제가 종종 발생하는 문제가 있어 영문과 숫자만 사용하는 게 좋습니다.


원문 : http://whiteat.com/60420

 

'OrCAD' 카테고리의 다른 글

단축키, Orcad Capture  (0) 2013.05.29
Tool palette bar, OrCAD Capture for Windows  (0) 2013.05.16
OrCAD Capture for Windows [Option menu]  (0) 2013.03.30
OrCAD Capture for Windows  (0) 2013.03.18
OrCAD 파일 정보  (0) 2013.02.24
Posted by WhiteAT
,

 

실험 키트

 

WAT-AVR128 모듈 알아보기

WAT-IO&ADC 모듈 알아보기

 

 

 

 

 

 

 

ATMEGA128 모듈에 연결

 

WAT-AVR128 모듈의 PORTA는 LED, PORTB는 DIP SWITCH, PORTC는 FND SELECT, PORTE는 FND DATA, PORTE는 ADC 에 연결하여 PC 프로그램에서 제어 및 상태를 실시간으로 모니터링 하는 예제입니다.

 

 

 

WAT-AVR128 모듈

WAT-IO&ADC 모듈

PORTA

FND DATA

PORTB

 

PORTC

FND SELECT, ROTARY SWITCH

PORTD

DIP SWITCH

PORTE

LED

PORTF

ADC

 

 

ATEMGA128 펌웨어 코드

  /*

    USART0 로보드의상태PC로전송

    PC에서LED, BUZZER, FND 제어

    AVRStudio 4.18

*/

 

#include <avr/io.h>

#include "WAT128.h"

 

BYTE g_FNDData[4]={1,2,3,4};

BYTE g_BUZZER = 0;

BYTE g_LED = 0;

 

UINT16 g_adcCDS;    // CDS 값보관

UINT16 g_adcVR;    // 가변저항값보관

 

void OperDisplayFND()

{

    DisplayFND4(g_FNDData[0],g_FNDData[1],g_FNDData[2],g_FNDData[3]);

}

 

INT16 g_byteOperPCTXTimer = 0;

void OperPCTX()

{

    if(--g_byteOperPCTXTimer>0)

        return;

 

    PutChar0(0x02);                        // 0 시작신호

    PutChar0(PIND);                        // 1 DIP SWITCH

    PutChar0(GetRotaryInt());             // 2 ROTARY

    PutChar0(g_adcCDS>>8);                // 3 CDS 상위값

    PutChar0(g_adcCDS);                // 4 CDS 하위값

    PutChar0((g_adcVR)>>8 &0xFF); // 5 가변저항상위값

    PutChar0(g_adcVR&0xFF);                // 6 가변저항하위값

    PutChar0(0x03); // 7

    PutChar0(0xCC);                        // 8 체크섬

    PutChar0(0x03);                        // 9 끝신호

 

    g_byteOperPCTXTimer = 20;

 

}

 

// 가변저항, CDS 값을ADC로읽기

void OperReadADC()

{

    INT16 uiTemp; // 임시변수

 

    g_adcCDS = 0;

    // 노이즈를생각해서값을번읽어평균을낸다.

 

    for(uiTemp = 0; uiTemp<16;uiTemp++)

    {

        ADMUX=0x40 | 0x00;

        ADCSRA = 0xD7;

        while((ADCSRA & 0x10) != 0X10);

        g_adcCDS += ADCL + (ADCH*256);

    }

 

    g_adcCDS>>=4;

 

    g_adcVR = 0;

    // 노이즈를생각해서값을번읽어평균을낸다.

 

    for(uiTemp = 0; uiTemp<16;uiTemp++)

    {

        ADMUX=0x40 | 0x01;

        ADCSRA = 0xD7;

        while((ADCSRA & 0x10) != 0X10);

        g_adcVR += ADCL + (ADCH*256);

    }

 

    g_adcVR>>=4;

}

 

int main()

{

 

    BUZZER_INIT; // BUZZER 초기화

    OpenSCI0(115200);    // USART 0 열기 

    InitFND4(); // FND 초기화 

    InitADC();    // ADC 초기화

 

    DisplayFND4(3,4,5,6);

    InitRotary();

    

    DDRD = 0x00; // 딥스위치를입력으로설정

    DDRE = 0xFE; // LED

 

 

    while(1)

    {

        BUZZER_OFF;

        OperDisplayFND();

        OperReadADC();

        

        OperPCTX();

 

        if(0x02 ==GetByte0())

        {

            UINT16 uiData = 0;

            uiData = GetByte0(); //1

            uiData<<=8;

            uiData += GetByte0(); //2

 

            //buzzer

            g_BUZZER = GetByte0();

 

                

            g_LED =    GetByte0(); //4

            GetByte0(); //5

            GetByte0(); //6

            GetByte0(); //7

            if(0xCC == GetByte0() && 0x03 == GetByte0() )

            {

                if( g_BUZZER)

                {

                    BUZZER_ON;

                    DelayMS(2);

                }

 

                // PC에서받은LED 값을출력

                PORTE =~((g_LED)&0xFC);

 

                // FND 표시

                g_FNDData[0]=((uiData/1000)%10);

                g_FNDData[1]=((uiData/100)%10);

                g_FNDData[2]=((uiData/10)%10);

                g_FNDData[3]=(uiData%10);

            }

        }    

    }

} 

 

윈도우 코드(통신 처리 부분)

try

{

        // 이번에 수신된 데이터 m_byteArray(QUEUE) 에 넣기

        for( int i=1; i<=nRcvSize; i++ )

        {

            m_byteArray.Add(m_CommPort.m_byRcvBuf[i]);

        }

        

        // 시작 신호 체크

        while(m_byteArray.GetSize()>0)

        {

            if(m_byteArray.GetAt(0) != 0x02)

            {

                m_byteArray.RemoveAt(0);

                continue;

            }

            else

            {

                break;

            }

        }

        

        CString strData;

        CString strTemp;

        if(m_byteArray.GetSize()>=10)

        {

            if(m_byteArray.GetAt(0) == 0x02 && m_byteArray.GetAt(9) == 0x03)

            {

                // DIP SWITCH 체크

                byteTemp = m_byteArray.GetAt(1);

                

                UpdateData(TRUE);

                m_bDIP8 = ((byteTemp & 0x80)!=0x80);

                m_bDIP7 = ((byteTemp & 0x40)!=0x40);

                m_bDIP6 = ((byteTemp & 0x20)!=0x20);

                m_bDIP5 = ((byteTemp & 0x10)!=0x10);

                m_bDIP4 = ((byteTemp & 0x08)!=0x08);

                m_bDIP3 = ((byteTemp & 0x04)!=0x04);

                m_bDIP2 = ((byteTemp & 0x02)!=0x02);

                m_bDIP1 = ((byteTemp & 0x01)!=0x01);

                

                // 로터리 스위치 값 읽기

                m_strRotary.Format("%d",m_byteArray.GetAt(2));

                

                // CDS 값 읽기

                uiTemp = m_byteArray.GetAt(3);

                uiTemp <<=8;

                uiTemp += m_byteArray.GetAt(4);

                m_prgCDS.SetPos(1023 - uiTemp);

                

                // 가변저항 값 읽기

                uiTemp = m_byteArray.GetAt(5);

                uiTemp <<=8;

                uiTemp += m_byteArray.GetAt(6);

                m_prgVR.SetPos(1023 - uiTemp);

                

                // 화면 갱신

                UpdateData(FALSE);                

            }

            

            // 마지막에 처리한 데이터 보기

            for(int i=0;i<10;i++)

            {

                strTemp.Format( "%02X ", m_byteArray.GetAt(i) );

                strData+=strTemp+ " ";

            }

            strData+= "\n";

            

            m_byteArray.RemoveAt(0,10);            

        }        

        

        m_ReceiveData = strData;        

        UpdateData(FALSE);

        

}

catch (CException* )

{

        

}

 

 

윈도우 프로그램에서 FND에 5634, LED 모두 OFF 값을 전송하며 ATMEGA128 보드에서 딥 스위치4번 OFF, CDS값 최대, 가변저항 값 최소, 로터리 스위치 값 3을 전송되면 아래와 같이 됩니다.

< WAT-IO&ADC에 연결한 윈도우 프로그램 >

윈도우 프로그램에서 FND에 5667, LED 3,5,7번 ON 값을 전송하며 ATMEGA128 보드에서 딥 스위치1,3,5,7,번 ON, CDS값 최대, 가변저항 값 최대, 로터리 스위치 값 9을 전송되면 아래와 같이 됩니다.


 

 

다운로드



매뉴얼: pdf.gif WAT-IO_ADC매뉴얼.pdf

펌웨어EX_09_03.zip

윈도우 프로그램(MFC 6.0):실행파일.EXE

윈도우 프로그램(C# 2008): 실행파일.EXE
(
실행파일의 소스코드는 제품과 함께 제공됩니다.)

 


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


Posted by WhiteAT
,

 

ON/OFF 제어는 조작량을 -100%와 +100%으로 하기 때문에
조작량의 변화가 너무 크고 목표값에 대해 지나치게 반복하여
목표값의 부근에서 큰 진동 모양으로 반복하는 제어 방식입니
다.

 

제어량이 목표값보다 크면 조작량을 -100%로

그 반대의 경우라면 조작량을 +100% 로 하면 됩니다.

 

   

 

 

 

 

수식

  

 

 

E: 편차(목표값- 제어량)

plus_minus(val1): val1 의 값이 양수이면 +1, 음수이면 -1

 

 

예를 들어 목표값이 200, 제어량이 220이라면 100% 로 냉각을 하게 됩니다.

조작량 = plus_minus(-20) *100 => -100

 

예를 들어 목표값이 200, 제어량이 199이라면 100% 로 가열을 하게 됩니다.

조작량 = plus_minus(1) *100 => +100

 

 

 

 

실험 동영상

 

 

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

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

PID 제어

전자/일반 2012. 11. 28. 12:16

 

자동제어 방식 중에 PID 제어가 있습니다. 

 

 

PID 제어란?


P: proportional(비례) 
I: Integral(적분) 
D: Differential(미분) 
의 3가지 조합으로 제어하는 방식으로 유연한 제어가 가능해 집니다.

 

 

 

ON/OFF 제어, P제어, PI 제어, PID 제어를 비교해 보겠습니다.

 

 

 

 

ON/OFF 제어



단순 ON/OFF 제어는 조작량을 -100%와 +100%으로 하기 때문에
조작량의 변화가 너무 크고 목표값에 대해 지나치게 반복하여
목표값의 부근에서 큰 진동 모양으로 반복하는 제어 방식입니다.

 

 

주변 온도가 15도이며 20도로 설정된 상태입니다.

처음 20도로 온도가 상승한 후 20도를 기준으로 진동을 하게 되는데 주변 온도가 15도라서 평균적으로 약 19도 정도를 유지하게 됩니다.

만약 주변온도가 10도라면 평균온도는 그 이하가 될 것입니다.

 

이 방식은 주변온도에 따라 평균 온도가 달라지며 순간순간의 조작량이 많아 효율이 좋지 않습니다.

 

 

 

 

P 제어



조작량을 목표값과 현재 값과의 차에 비례하게 하여 서서히 조절하는 제어 방법을 비례 제어라고 합니다.


이렇게 하면 목표값에 접근하면 좀더 세밀하게 제어를 가할 수 있기 때문에
ON/OFF 제어보다 세밀하게 목표값에 접근할 수 있습니다.

 

 

얼핏보면 ON/OFF 제어와 비슷해 보이지만 조작량의 최대값을 조절하여 진동폭을 줄일 수 있습니다. 진동폭이 작아져도 여전히 진동하는 문제가 있습니다.

 

 

 

 

PI 제어

 

P 제어 식에 에러의 누적 값을 더해 주면 좀더 안정적인 제어를 할 수 있습니다.

 

 

PI 제어는 빠르게 목표값에 도달한 듯 보이지만 마지막에 약간의 진동이 있습니다.

 

 

PID 제어

 


비례 제어만으로 제어가 잘 될 것이라 생각되겠지만 실제로는 제어량이 목표값에 접근하면 문제가 발생합니다. 조작량이 너무 작아지고, 그 이상 미세하게 제어할 수 없는 상태가 그러합니다.

결과는 목표값에 아주 가까운 제어량의 상태에서 안정한 상태로 될 수 있는데 비례제어만 사용하게 되면 목표값에 가까워지더라도 제어량과 완전히 일치하지 않는 상태로 되고 맙니다.


이 미소한 오차를 "잔류편차"라고 하는데 이 잔류편차를 없애기 위해 사용되는 것이 적분 제어입니다.
즉, 미소한 잔류편차를 시간적으로 누적하여, 그 누적값을 조작량에 증가하여 편차를 없애는 식으로 동작시킬수 있습니다.

이와 같이, 비례 동작에 적분 동작을 추가한 제어를 "PID 제어"라 합니다.

 

 

 

 

PID 제어로 빠르고 작은 진동으로 목표 값에 도달합니다.






Kd 을 0.01 로 했을 때







Kd 을 0.005 로 했을 때






PID 실험 키트


 

PID,CHERRY,실험,ON/OFF/P,PI,PID,제어,자동제어








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


 

 

Posted by WhiteAT
,

 

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

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
,

IRF7389PBF

데이터시트 2012. 11. 6. 14:47

 

IRF7389PBF

 

N채널, P채널 MOSFET 모두 있는 HEXFET Power MOSFET 입니다.

IRF7389 2개로 H-Bridge 를 구성하여 DC 모터를 제어할 수 있는 IC 입니다.

 

 

 

 

 

 

 

 

 

 

DATASHEET

 

 

 

 

 

 

 

 

 

 

H-bridge 회로

 

 

 

 

'데이터시트' 카테고리의 다른 글

USB to RS232 드라이버  (0) 2013.03.17
ATMEGA8A-AU  (0) 2012.03.07
Package information - SO16−28 [WIDE]  (0) 2011.08.28
키 패드 제어, 매트릭스 키, 스위치 제어  (0) 2011.07.15
가변저항(Potentiometer) 3362  (1) 2011.07.07
Posted by WhiteAT
,