학습    1

학습주제    1

예습내용    1

실습방법    1

        1

PWM으로 모형자동차 속도제어

학습목표

PWM 펄스 듀티비로 모형자동차 속도를 제어한다.

학습주제

PWM에서 발생하는 펄스가 On 되는 동안 모터 드라이버를 On 되게 하여 펄스의 듀티비로 모터의 회전 속도를 제어한다.

예습내용

아래와 같이 PC 자동차를 제어해 보자

[PC 프로그램 내려받기]

실습방법

   

아래 그림은 모터드라이버 LB1630 공급되는 전원을 PB4포트에 연결하여 여기에서 발생하는 펄스가 On 되는 동안 동작하게 하여 모터에 공급되는 전압(전류) 양을 조절하여 모터의 속도를 제어한다.

PB4에서 나오는 펄스의 전류가 작아서 모터를 구동 시킬 없어서 TIP41C 사용하여 전류를 증폭 시켰다.

 

모터의 주파수는 한가지로 고정하고 듀티비를 조정하기로 한다.

듀티비는 EEPROM 저장하고 문자 “a” 전송되면 그값을 1 증가 시키고 “b” 전송되면 1 감소 되도록하다.

 

보기1 모형자동차의 회전과 속도를 RS232 제어하는 프로그램

#include <mega128.h>  

#include <stdio.h>

 

char rxd;

eeprom char vel;

 

// USART0 Receiver interrupt service routine

interrupt [USART0_RXC] void uart0_rx_isr(void)

{

   // 전송전 문자를 받는다.

   rxd=getchar();

   // 문자"0"=정지  문자"1"=전진  문자"2"=좌회전  문자"3"=우회전  문자"4"=후진 

   // 문자"a"=속도증가  문자"b"=속도감소

   if(rxd==0x30)

      PORTC=~0x00;

   else if(rxd==0x31)

      PORTC=~0x05;

   else if(rxd==0x32)

      PORTC=~0x09;

   else if(rxd==0x33)

      PORTC=~0x06;

   else if(rxd==0x34)

      PORTC=~0x0a;

   else if(rxd==0x61){

      if(vel!=0xff)

         vel++;

   }

   else if(rxd==0x62){

      if(vel!=0x00)

         vel--;

   }

   OCR0 = vel;        

}

 

// Declare your global variables here

 

void main(void)

{  

// Port B initialization (출력포트로 지정)

// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out

// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0

PORTB=0x00;

DDRB=0xFF;

 

// Port C initialization (출력포트로 지정)

// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out

// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0

PORTC=0x00;

DDRC=0xFF;

 

// USART0 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART0 Receiver: On

// USART0 Transmitter: On

// USART0 Mode: Asynchronous

// USART0 Baud rate: 9600

UCSR0A=0x00;

UCSR0B=0xD8;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x67;

 

// Global enable interrupts

#asm("sei")  

 

// (1) Fast PWM Mode   ATmega128(L) Data Book P100  주기조절

// 16M(ClkTOS)/1024=15625 Hz

TCCR0 = 0x6f;

// ATmega128(L) Data Book P102   듀티비조절  초기듀티=50    

OCR0 = vel; 

 

while (1)

      {

      // Place your code here

      };

}

 

 

처음