bldc 속도제어
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

bldc 속도제어에 대한 보고서 자료입니다.

목차

bldc / 홀센서를 이용한 속도제어`~~~ c언어 프로그램 포함~~도면 해석

본문내용

1B);
outp(0x00, TCNT1H);
outp(0x00, TCNT1L);
outp(0x00, OCR1AH);
outp(0x00, OCR1AL);
} // 대입
//-------------------- STOP_MODE -------------------------------------
void STOP_MODE(void)
{
cli();
OCR1A=0;// OCR1A에 0
RUN_FLAG=0;// RUN_FLAG에 0
//DUTY=0X00
sei();
}
//-------------------- RUN_MODE -------------------------------------
void RUN_MODE(void)
{
cli();
sei();
}
//-------------------- T0_INIT -------------------------------------
void T0_INIT(void)
{
outp(0x02, TCCR0);// TCCR0에 02
outp(-100,TCNT0);// TCNT0에 -100
outp(0x01, TIMSK);// TIMSK에 01
}
//-------------------- VAL_INIT -------------------------------------
void VAL_INIT(void)
{
RUN_FLAG=0;// RUN_FLAG에 0
HALL_DATA=0;// HALL_DATA에 0
SWITCH_DATA=0;// SWITCH_DATA에 0
KEY_DATA=0;// KEY_DATA에 0
}
//-------------------- KEY_MODE -------------------------------------
void KEY_MODE(void)
{
KEY_DATA=(inp(PINB)&0x03);
switch(KEY_DATA)
{
case 1:// KEY_DATA의 값이 1
RUN_FLAG=1;
break;
case 2:// KEY_DATA의 값이 2
RUN_FLAG=0;// RUN_FLAG에 0
break;
}
}
//-------------------- HALL_SCAN -------------------------------------
void HALL_SCAN(void)
{
HALL_DATA=(inp(PINA)&0xE0);
switch(HALL_DATA)
{
case 0x80:// HALL_DATA의 값이 80
SWITCH_DATA=1;// SWITCH_DATA에 1
break;
case 0xC0:// HALL_DATA의 값이 C0
SWITCH_DATA=2;// SWITCH_DATA에 2
break;
case 0x40:// HALL_DATA의 값이 40
SWITCH_DATA=3;// SWITCH_DATA에 3
break;
case 0x60:// HALL_DATA의 값이 60
SWITCH_DATA=4;// SWITCH_DATA에 4
break;
case 0x20:// HALL_DATA의 값이 20
SWITCH_DATA=5;// SWITCH_DATA에 5
break;
case 0xA0:// HALL_DATA의 값이 A0
SWITCH_DATA=6;// SWITCH_DATA에 6
break;
}
}
//-------------------- AD_INIT -------------------------------------
void AD_INIT(void)
{
outp(0x00,ADMUX);// ADMUX에 00
outp(0x00,ADCSR);// ADCSR에 00
}
//-------------------- VR_ADC -------------------------------------
void VR_ADC(void)
{
outp(0x00,ADMUX);// ADMUX에 00
outp(0xc5,ADCSR);// ADCSR에 C5
// CLOCK/8
}
//-------------------- RUN_SEQ -------------------------------------
void DIRECTION(void)
{
if(RUN_FLAG==0)// RUN_FLAG의 값이 0
{
RUN_DIRECTION=(inp(PINB)&0x0C);
switch(RUN_DIRECTION)
{
case 4:// RUN_DIRECTION의 값이 4
RUN_CW=1;//정회전 ( RUN_CW에 1 )
break;
case 8:
RUN_CW=2;//역회전 ( RUN_CW에 2 )
break;
}
}
else
{
}
}
//======================= INTERRUPT ROUTINE PART =====================
//------------------- TIMER0 OVERFLOW INTERRUPT SUBROUTINE -------------
// TIMER FREQUENCY = 10KHz = 100uS
SIGNAL(SIG_OVERFLOW0)
{
TCNT0=(-99);
HALL_SCAN();
RUN_SEQ();
DIRECTION();
if(RUN_FLAG==1)
{
VR_ADC();
VR_DATA=(ADCL+ADCH*256)/4;
//VR_DATA=256-VA_CAL;
DUTY=0XFF-VR_DATA;
if(DUTY>0xE5)
{
DUTY=0XE5;
}
else if(DUTY<0X19)
{
DUTY=0X19;
}
else OCR1A=DUTY;
}
else STOP_MODE();
}
//=======================* MAIN LOOP *==========================
int main(void)
{
outp(0X02,MCUCR);// MCUCR에 02
outp(0X00,GIFR);// GIFR에 00
IO_INIT();// IO_INIT 함수
VAL_INIT();// VAL_INIT 함수
PWM_INIT();// PWM_INIT 함수
T0_INIT();// T0_INIT 함수
AD_INIT();// AD_INIT 함수
DIRECTION();// DIRECTION 함수
sei();
while(1)
{
KEY_MODE();// KEY_MODE 함수
}
}

키워드

  • 가격2,000
  • 페이지수16페이지
  • 등록일2010.10.12
  • 저작시기2009.6
  • 파일형식한글(hwp)
  • 자료번호#634446
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니