마이크로프로세서 8051 스텝핑모터의 여자방법

마이크로프로세서 80S51을 공부하면서 스테핑 모터의 여자방법에 대해 알아보겠습니다.

먼저 스텝(STEP)모터는 높은 정밀도를 요구하는 프린터나, 디스크드라이버, 테이프 드라이버,

로봇의 관절같은 곳의 제어에 사용됩니다. 또 RC모터는 드라이브 회로가 되장되어 있어 제어가

간단하여 제어시스템에 폭넓게 사용되고 있습니다.

스텝모터의 구조는 간단히 회전하는 부분에 영구자석이 있고 외부에는 스테터 코일이 있습니다.

간단한 구조의 예로 영구자석형 4상 모터의 예를 들어보겠습니다.

4상 영구 자석형모터는 아래처럼 4개의 외부에 전자석과 중간의 회전하는 곳에

영구자석의 축이 있습니다. 이 4개의 전자석에서 한개씩 오른쪽 방향으로 전류를 한개씩 번갈아가며

흘려주면 영구자석이 90도씩 오른쪽으로 4개의 전자석을 따라 오른쪽으로 회전하게 됩니다.

 

스텝모터는 외부의 전자석 스위칭 타이밍에 따라 아래처럼 3가지의 형태로 여자를 할수 있습니다.

1상여자, 1-2상여자, 2상여자의 3가지 형태가 잇으며 이여자 방법에 따라 회전하는 각이 다릅니다.

 

2상여자는 1펄스때마다 바로앞의 코일과 2개씩의 코일에 스위칭하여 영구자석을 돌려주게 됩니다.

또 1-2상 여자 방법은 1상 여자 방법과 2상여자방법을 함께 사용하는 방법입니다.

위의 여자방법의 타이밍도를 유심히 보시면 이해됩니다.

 

또 스텝모터를 구동하는 방법에는 유니폴라(unipolar)와 바이폴라(bipolar) 의 방법으로 구분됩니다.

 

유니폴라의 구동방식의 장점은 고속으로 구동시 토크가 높아 탈조의 위험이 적고 회로가 간단합니다.

단점은 모터코일에 저장된 에너지를 회생하지 않아 효율이 좋지않고, 저속시 토그가 낮습니다.

 

바이폴라 구동방식의 장점은 유니폴라와 반대로 저속으로 구동시 토크가 높고 회생에너지를

사용하여 효율이 좋으며, 단점으로는 고속으로 구동시 토크가 낮아 탈조의 위험이 있으며

회로가 복잡해지게 됩니다.

Posted by it is

8051 마이크로프로세서 캐릭터 LCD 16*2라인

16문자 2라인의 글자나 문자등을 표현할수 있는 LCD에 대해 알아보겠습니다.

캐릭터 LCD에는 LCD컨트롤러와 캐릭터 제네레이터(CG)가 내장되어 있고 8비트 또는 4비트로

인터페이스 할수 있습니다. 글자폰트는 5*7도트, 16글자를 상,하로 2라인을 표현할수 있습니다.

LCD모듈에는 16개의 핀이 있는데요 14개는 인터페이스 2개의 핀은 백라이트에 사용됩니다.

LCD모듈 핀의 기능

 핀의 번호

 기호

 핀의 기능

 1

Vss 

  0V(그라운드)

 2

 Vdd

  +5V(전원)

 3

 V0

  LCD밝기조절

 4

 RS

  H :데이터    L : 명령어

 5

 R/W

  H : 리드      L : 라이트

 6

  H : 인에이블 신호

 7

 D0

 데이터 버스

 4비트 사용시 : D4~D7핀만 사용, D0~D3핀은 사용하지 않음

                   : 8비트 데이터 전송시 상위4비트 전송후 하위4비트  전송

 8비트 사용시 :D0~D7 핀 모두 사용 

 8

 D1

 9

 D2

 10

 D3

 11

 D4

 12

 D5

 13

 D6

 14

 D7

 15

 +

  백라이트 +(5v)

 16

 _

  백라이트 0V

 

 

 

 

 

 

 

 

 

 

 

 

LCD명령어 

BF (Busy Flag) 비지플래그는 LCD모듈이 다음 명령을 받을수 있는 상태인지를 표시합니다. 명령

레지스터를 읽어서 D7핀으로 LCD모듈이 내부적으로 동작하고 있는지 아닌지를 검사할수 있습니다.

BF=1 이면 모둘이 내부 동작중임을 표시하며, 다음 명령을 받을수 없는 상태입니다.

BF=0 이면 다음 명령을 써 넣을 수 있습니다.

즉 명령어를 써 넣으려면 BF 의 상태를 확인하여 동작중이 아닐때 써 넣는 방법과 , 명령어의 실행

시간을 기다린 다음에 명령어를 써 넣는 방법이 있습니다.

 

DD RAM (Display Data RAM)

1개의 컨트롤러에는 8비트 문자로 표시할수 있는 데이터 0ㅌ80(128문자)분을 기억할수 있으며

LCD표시행과 DD RAM 어드레스 관계는

 

글자를 왼쪽으로 시프트 하는경우의 DD RAM과 LCD 표시 행의 관계

 

글자를 오른쪽으로 시프트 하는 경우의 DD RAM과 LCD  표시 행의 관계

 

CG RAM(Character Generator RAM) 은 사용자가 프로그래램으로 문자 패턴을 만들때 사용합니다.

Posted by it is
AT89S51 마이크로 프로세서 타이머 /카운터 (1)

AT89S51 마이크로프로세서 내부에는 2개의 16비트 타이머/카운터가 있어 시간 주기를 측정 또는

외부핀을 이용하여 입력되는 펄스를 측정할수 있으며 트리거 되는 펄스들을 카운트 할 수 있습니다.

또 주기적으로 인터럽트를 발생시킬 때에도 사용됩니다.

8051 에서 타이머/카운터란 1머신사이클(시스템클록을 1/12것)을 세는 것을 타이머, 외부핀

(T0 P3.4)(T1 P3.5) 핀에 입력되는 클럭을 세는것을 카운터라합니다.ㅣ 

타이머/카운터는 SFR의 8비트*2 =>TH(8비트), TL(8비트) 가 T0와  T1에서 각각 사용되며

이 레지스터들은 클록이 입력될 때마다 UP(+1)카운터를 합니다.

이 TH,TL 레지스터가 오버플로(0xff =>0x00)으로 되면 TCON레지스터에 있는 TF(timer control)이 "1"

이 됩니다. 

※ 타이머/카운터 1은 시리얼 포트의 비동기 통신 모드에 있어 보레이트 발생기로 동작할수 있습니다. 

타이머의 사용방법은 ?

=> TMOD(timer mode register)와 TCON(timer control register)의 설정에 의해 결정됩니다.

AT89S51의 타이머/카운터에서 사용되는 핀

 사용되는 핀

      기능 

 T0 (P3.4)

     타이머/카운터 0의 카운터 입력

 T1 (P3.5)

     타이머/카운터 1의 카운터 입력

사용되는 레지스터에 대해 알아봅니다.

1. TMOD(Timer Mode)

상위 4비트는 타이머/카운터 1, 하위 4비트는 타이머/카운터 0 을 제어합니다.

비트 설명 :  GATE :외부인터럽트 단자(T0,T1)핀을 이용하여 정지/동작 제어

                 C/T(timer/countor select) 타이머로 사용할것인지 카운터로 사용할 것인지 모드 결정

                 M1,M0 : 타이머/카운터의 동작모드 결정                

2.TCON(Timer Control)

상위의 4비트만 사용하며 하위 4비트는 인터럽드에 사용됩니다.

비트설명 :TF1,TF0 (timer overflow flag) 타이머 카운터의  TH,TL 이 오버플로 되면 "1"이 됩니다.

              TR1, TR0 (timer run control) 타이머 카운터의 동작(TR1=1), 정지(TR1=0)를 제어합니다.

3. 시정수 레지스터 TH(timer control high), TL(timer control low  

이들 각각의 레지스터들은 모드에 따라 각각 사용되기도 하고 쌍으로 사용되기도 합니다.

AT89s51의 타이머/카운터는 클럭이 입력될 때마다 +1씩 증가하는 업카운터입니다. 

Posted by it is
8051마이크로 프로세서 AT89S51 외부인터럽트 INT0, INT1

마이크로프로세서 8051의 AT89S51에는 2개의 외부인터럽트가 있습니다. 외부인터럽트 신호가 하강

모서리나 레벨(L)입력중에 어느것을 사용할것인지를 소프트웨어로 선택할수 있는 2개의 핀을 가지고

있습니다.  포트 3번 2번과, 3번 (P3.2  P3.3)

외부인터럽트 제어에 사용되는 레지스터는 TCON(Timer/Counter Control) 레지스터에서 하위 4개의

비트를 사용합니다.

이 TCON 레지스터는 각각의 비트 번호를 따로 제어할수 있게 비트 단위로 처리가 가능합니다.

 =>IT0(interrupt 0 type) :인터럽트 0의 외부 신호 결정함

    : INT0=1 _ INT0(P3.2) 핀의 하강 모서리에서 인터럽트를 요청

    :INT0=0 _ INT0(P3.2)핀의  "L"레벨에서 인터럽트를 요청

=>IE0(interrupt 0 Edge flag) 외부인터럽트 0이 검출되면 "1"

=>IT1(interrupt 1 type) :인터럽트 1의 외부 신호 결정함

    : INT1=1 _ INT1(P3.3) 핀의 하강 모서리에서 인터럽트를 요청

    :INT1=0 _ INT1(P3.3)핀의  "L"레벨에서 인터럽트를 요청

=>IE1(interrupt 1 Edge flag) 외부인터럽트 1이 검출되면 "1"

 

사용예)

#include<io89s51.h>

interrupt [0x13] void EX1_interrupt(void)

{

}

void main()

{

IT1=1;    //외부인터럽트1 에지모드

EX=1;    //외부인터럽트 1 인터럽트 인에이블

PX=1;    //외부인터럽트 1 을 높은레벨로 설정함

EA=1;    //모든인터럽트 가능하게 함

.

.

}

외부인터럽트 사용시 하강에지 모드보다  "L"레벨 모드를 사용시 주의하여야 할점은 인터럽트 처리 루틴이 끝난 후에도

계속 "L"레벨로 설정되어 있으므로 인터럽트 처리 루틴이 끝날즘에 "H"레벨로 변경하여주어야 합니다.

Posted by it is
8051기초 인터럽트의 종류를 알아보기

AT89S51 에서는 인터럽트의 종류에는 외부인터럽트, 타이머인터럽트, 시리얼인터럽트가 있습니다.

인터럽트(Interrupt)란, 영어사전에서 말,행동등을 방해하다. 중간에 중단시키다의 뜻이 있는데요

8051 마이크로 프로세서에서도 인터럽트는 실행중인 프로그램을 잠시 중단시키고 정해진 다른

프로그램을 중간에 끼워넣어 실행시키는 것입니다.

즉, 인터럽트가 발생되면 주어진 인터럽트에 해당하는 프로그램을, 실행중인 프로그램을 일시 정지후

인터럽트 프로그램을 실행한뒤 다시 실행중이던 프로그램을 실행하게 됩니니다. 끼어들기죠,

 

인터럽트의 종류 및 처리 시작번지와 우선순위

 인터럽트의 원인

인터럽트 처리 시작번지

우선순위 

 외부인터럽트 0

0x03

1(가장우선)

 타이머/카운터 인터럽트 0

 0x0b

 2

 외부인터럽트 1

 0x13

 3

 타이머/카운터 인터럽트 1

 0x1b

 4

 시리얼 포트 인터럽트

 0x23

 5

intrrupt 에 사용되는 89S51의 레지스터는

TCON(Time Control) : 타이머를 제어하는데 사용되는 레지스터

SCON(Serial Control) : 통신에 사용되는 제리스터

 

===========TCON(Timer/Counter Control)레지스터=== 어드레스 0x88===비트처리가능=========

IE0(interrupt 0 edge flag) : 외부인터럽트 0이 검출되면 "1"

TF0(timer 0 overflow flag) : 타이머/카운터 0 이 검출되면 "1"

IE1interrupt 1 dge flag) : 외부인터럽트 1 검출되면 "1"

TF1(timer 1 verflow flag) : 타이머/카운터 1이 검출되면 "1"

 

===========SCON(Serial Sontrol) 레지스터=== 어드레스 0x98===비트처리가능================

TI(transmit interrupt flag) : 송신을 마치면 "1"

RI(receive interrupt flag) : 수신을 마치면 "1"

위의 TCON 과 SCON레지스터는 비트 단위로 처리가 가능합니다.

 

인터럽트의 레지스터중

IE(Interrupt Enable) 레지스터(어드레스 0xA8)는 비트 처리가능하며

EX0, ET0, EX1, ET1, ES의 5개의 인터럽트 요청에 의해 인터럽트를 받을것인지 안받을 것인지 결정

하게 됩니다. 나머지 EA(Enable All)은 개개의 인터럽트를 제어하진 않지만 전체의 인터럽터를 받을

것인지 안받을 것인지를 결정합니다. EA=이면 다른 EX0, ET0, EX1, ET1, ES의 인터럽트 요청이

있어도 받아들이지 못하게 됩니다.

EA(enable All interrupt) :EA=1 모든인터럽트 요청 가능

ES(enable Serial interrupt) :ES=1 RI or TI 인터럽트 요청 가능

ET1(enable Timer/counter 1 interrupt) :ET1=1 타이머/카운터 1 인터럽트 요청 가능

EX1(enable External 1 interrupt) :EX1=1 외부 1 인터럽트 요청 가능

ET0(enable Timer/counter 0 interrupt) :ET0=1 타이머/카운터 0 인터럽트 요청 가능

EX0(enable External 0 interrupt) :EX0=1 외부 0 인터럽트 요청 가능

 

IP(Interrupt Priority control) 레지스터(어드레스0xB8)는 5개의 외부, 타이머/카운터, 통신

인터럽트중의 우선순위를 정해주는 레지스터로 높은레벨, 낮은레벨로 우선순위를 결정합니다.

각 비트를 "1" 또는 "0"으로 하면 그에 맞는 인터럽트 요구에 의해 높은레벨이나 낮은레벨로 인터럽트

우선 순위를 결정합니다.

만약  낮은 인터럽트의 요구에 의해 인터럽트 프로그램을 실행하는 중에도 높은 레벨의 인터럽트

요청이 들어오면 낮은 인터럽트를 중단하고 높은 레벨의 인터럽트 프로그램을 실행하게 됩니다.

물론 실행하고 있는 레벨보다 낮은 레벨이거나 같은 레벨이면 인터럽트 요청은 무시됩니다.

PS(Priority of Serial port interrupt) PS=1이면 시리얼 포트 인터럽트를 높은 레벨로 설정

PT1(Priority of Timer/Count 1 interrupt) PT1=1이면 타이머/카운터 1 인터럽트를 높은 레벨로 설정

PX1(Priority of eXternal 1 interrupt) PX1=1이면 외부인터럽트 1 인터럽트를 높은 레벨로 설정

PT0(Priority of Timer/Count 0 interrupt) PT0=1이면 타이머/카운터 0 인터럽트를 높은 레벨로 설정

PX0(Priority of eXternal 0 interrupt) PX0=1이면 외부인터럽트 0 인터럽트를 높은 레벨로 설정

Posted by it is

8051 마이크로 프로세서 AT89s51의 pin 기능 알아보기

우리가 일상생활에서 사용하는 세탁기, 냉장고같은 가전제품이나 컴퓨터 등의 제품에는 제어장치들이 들어 있어

편리하게 자동으로 사용하고 있습니다. 이는 여러개의 IC로 구성되어 있느 이를 소형화하여 원칩 마이컴 이라

부릅니다.

이 원칩 마이컴을 우리가 익혀 사용할수 있는데요 사용자가 만든 프로그램을 원칩 마이컴 메모리에 써 넣어

테스트 하여 볼 수 있습니다. 이중 8051 시리즈를 사용하여 볼건데요

그중에서 ATMEL사의 AT89s51에 대하여 알아볼께요 8051 프로세서의 모양은 아래처럼 4가지가 있는데요 그중에

가장 기본인 1번모양 40핀의 PDIP를 가지고 설명하여 보겠습니다.

AT89s51은 아래 그림과 같이 40개의 핀이 있는데요 4포트가 있는데요 각각의 포트 핀 기능을 알아보겠습니다.

    포트 0 (P0.0~P0.7)

8비트 오픈 드레인 양방향서 입, 출력 단자로 1.외부에 메모리를 사용하지 않았을 때에는 범용 이,출력 포트로 사용

할수 있습니다.  2. 외브에 프로그램 메모리와 데이터 메모리를 사용하였을때 하위 어드레스 A0~A7 과 데이이터

버스로 사용됩니다. 이때는 내부적으로 풀업이 되어 있습니다.

    포트 1 (P1.0~P1.7)

내부 풀업이 되어 있는 8비트 양방향서 입,출력 단자로 범용 입, 출력 포트로 사용됩니다.

핀P1.5~P1.7은 내부 플레시 메모리로 프로그램을 쓰기 할때 사용되는 핀으로 이 기능을 ISP(In system programming)

라고 합니다.

 P1.5 => MOSI(master out serial in) ISP 프로그래밍에서 데이터 출력

 P1.6 => MISO(master in serial out) ISP 프로그래밍에서 데이터 입력

 P1.7 => SCK(Serial Clock) ISP 프로그래밍에서 클록 입력

     포트 2(P2.0~P2.7)

내부 풀업을 갖는 8비트 양방향성 입,출력 단자로서

1.외부에 메모리를 사용하지 않았을때는 범용 입,출력 단자로 사용하고, 2. 외부에 메모리를 사용하였을경우 상위

어드레스로 사용A8~A15.

     포트 3(P3.0~P3.7)

내부 풀업을 갖는 8비트 양방향성 입,출력 단자로 이포트는 1.범용 입,출력 포트로 사용할수 있고, 2. 범용 입출력 포트

가 아닐경우

 P3.0 => Rxd(receive data) 수신데이터 입력

 P3.1 =>TxD(transmit data) 송신데이터 출력

 P3.2 => INT0(external interrupt 0) 외부인터럽트 0 입력

 P3.3 => INT1(external interrupt 1) 외부인터럽트 1 입력

 P3.4 => T0( timer 0 external input) 외부 클럭 0 입력

 P3.5 => T1( timer 1 external input) 외부 클럭 1 입력

 P3.6 => WR(write) 외부 데이터 메모리 쓰기 제어 신호

 P3.7 =>RD(read) 외부 데이터 메모리 읽기 제어 신호

     RESET (리셋핀 입력 H)

리셋을 위한 핀으로 2개의 사이클 동안 "H"가 입력되어야 함

    ALE(address latch enable)

외부 프로그램 메모리, 데이터 메모리를 사용할 경우 포트0이 어드레스(A0~A7), 데이터(D0~D7)로 사용됩니다.

ALE 신호는 포트 0이 어드레스 A0~A7로 동작한다는 것을 외부에 알리는 신호입니다.

     PSEN(program strobe enable)

외부 프로그램 메모리에서 데이터를 읽기 위한 리드신호가 되며, 데이터 메모리에서 메모리 데이터를 읽을 때는

동작하지 않습니다.

    EA(external access enable)

외부 프로그램 메모리를 사용할것인지 아닌지를 결정하는데 사용합니ㅏㄷ.

EA =0 :외부메모리 사용을 하겠다는 신호

EA=1 : 8051의 내부 메모리를 사용하겠다는 신호

     XTAL1

발진기 증폭기의 입력, 내부 클록 회로 입력

    XTAL2

인버팅 발진기 증폭기의 출력

    VSS :접지(-)

    VCC : +5V

위와 같이 AT89s51의 40개의 핀 기능에 대해 알아보았습니다. AT89s51은 ISP핀을 통하여 손쉽게 내장4k의 메모리에

자신이 프로그래밍한 프로그램을 쓰기하여 각 핀들의 동작을 제어하거나 다른 IC칩들과의 통신을 통해

외부의 데이터를 읽어들여 다시 입력한 데이터를 분석하여 출력을 내보낼수 있습니다.

Posted by it is