8.9 고속PWM과 위상정정PWM을 이용한 DC모터 속도제어
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

8.9 고속PWM과 위상정정PWM을 이용한 DC모터 속도제어에 대한 보고서 자료입니다.

목차

1. 실험 목적
2. 실험 부품 및 장치(수정)
3. 실험 이론
4. 고속 PWM 분석
5. 프로그래밍 분석
6. 결과

본문내용

치나 down 스위치일 경우, Timer0 함수를 요청하고 요청시간동안 오버플로 발생횟수를 리턴하여 req[]값에 저장한다. 따라서 for문 동안 req[0]이나 req[1]의 값이 존재할 경우 그 값을 감소시킨다. 오버플로가 발생할 때 마다 수행하게 되는 데 무한루프 내에서 up스위치든 down스위치든 req[]값이 0일 때 if문이 수행되므로 요청시간만큼 지연시키는 역할을 한다. 스위치를 사용할 때 key bounce가 존재하는데 , bounce 수행시간보다 delay시간을 길게하면서 bounce영향을 없앤다.
}
int main()
{
DDRC = 0xFF;
// DDRC : 1
1
1
1
1
1
1
1
포트C의 모든BIT 출력한다.
DDRD = |= 1< // DDRD : 1
1
DR5
DR4
DR3
DR2
DR1
DR0
PD7과 PD6비트 출력
DDRB |= 1< DDRB &= ~(1< // DDRB : 0
0
DDB5
1
DDG3
DDB2
DDB1
DDB0
// 입력 : PB7(UP) , PB6(DOWN) , 출력 : PB4(OC0)
PORTB |= 1< // PORB : 1
1
PB5
PB4
PB3
PB2
PB1
PB0
TCCR0 = 1< TCCR0 |= 1<< CS02 | 1< TCCR0 |= 1<< COMO1;
// FOC0
1
1
COM00
WGM01
1
1
CS00
// WGM01: WGM00=(0,1) : 위상정정 PWM모드
// COM01:COM00=(1,0) : 상향카운터 일 경우 OCR0값과 일치하면 OC0가 0,
// 하향카운터 일 경우 OCR0값과 일치하면 OC0가 1
// T/C control reg의 bit2~0의 3비트를 조절하여서 prescaler 분주종류를 결정
// CS02, CS01, CS00(defalut값 = 0) : (1,1,0) -> clock/256으로 분주
TIMSK |= 1<< TOIE0;
//T/C 의 interrupt의 mask bit를 설정
//타이머/카운터 인터럽트 활성화
timer0 = 0;// timer0=0로 초기화
sei();//Global Interrupt Enable(Set Interrupt)명령으로,
//SREG 최상위(7비트) '1'로set, 전역인터럽트활성화
ms_ov_cycle = MS_OVERFLOW_CYCLE;
OCR0=0;// 비교할 OCR0값의 초기치 설정
number = OCR0*100/256;
//OCR0의 최대값은 255이지만 출력하는 세그먼트는 두자리이므로,
//최소 0x00 과 0x255를 두자리 00 과 99에 매칭되도록 설정
// 즉 0 -> 00, 255 -> 99출력 , 소숫점 이하는 버린다.
while(1)
{
if((req[REQ_UP]==0) && !(PINB & (1 << UP)))
//req[0] = 0 이고, PB7
0
0
0
0
0
0
0
나머지 0이면,
//즉, UP스위치 눌렸을 때(확인) if문 수행
//DEBOUNCE_CYLCE 시간경과 요청 완료 확인
{
req[REQ_UP] = ms_req_timer0(DEBOUNCE_CYCLE);
//50ms 지연시간요청
OCR0 = (OCR0==255) ? 255 : OCR0 + 1;
//up 스위치 눌렀을경우, OCR0값은 최대255까지 1씩증가
}
if((req[REQ_DOWN]==0)&&!(PINB&(1< //req[1] = 0 0
PB6
0
0
0
0
0
0
나머지 0이면,
{
req[REQ_DOWN] = ms_req_timer0(DEBOUNCE_CYCLE);
//50ms 지연시간요청
OCR0 = (OCR0 == 0)? 0 : OCR0 - 1;
//down 스위치 눌렀을 경우, OCR0값은 최대까지 1씩감소
}
number = OCR0 * 100/256;
}
return 0;
}
6. 결과
*고속 PWM모드
구한 OCR0값을 이용하여
위의 식으로 듀티비를 계산해본 결과,
듀티비는 OCR0가 가질 수 있는 256중 1로 출력되는 숫자는 TCNT0의 최댓값 FF부터 0을 지나 100까지 모두 101개 따라서 듀티비는 이와 같이 나온다.
*위상정정 PWM모드
* 20 -> 50 ->90 으로 갈수록 모터의 속도가 빨라진다. (up스위치를 이용함)
* 90-> 50 -> 20 으로 갈수록 모터의 속도가 느려진다 (down스위치를 이용함)
프로그램을 구동해본 결과 UP스위치를 누를 경우 세그먼트 출력값의 증가와 함께 모터속도가 빨라짐을 볼 수 있었고, DOWN스위치를 누를 경우 세그먼트 출력값의 감소와 함께 모터속도가 느려짐을 볼 수 있었다. 타이머/카운터0의 위상정정 PWM모드를 이용하여 주기가 일정하지만 ‘1’을 출력하는 펄스폭이 다
르게 출력되는 OC0 신호를 이용하여 모터속도를 제어할 수 있었다. 펄스폭의 차지 비율을 의미하는 듀티비를 구하기 위해 세그먼트에 디스플레이된 number 값을 이용하여 역으로 OCR0값을 구해보았다.
구한 OCR0값을 이용하여 왼쪽 식으로 듀티비를 계산해본 결과,
number가 39일 경우, OCR0는 약 99.84로써 듀티비가 39.153% 이고
크기 V, 주기 , 듀티비 D인 주기적인 펄스에 의해 공급되는 E를 구하면
왼쪽과 같으므로 듀티비에 비례하여 에너지가 공급된다.
즉 공급되는 시간이 길수록 에너지가 많이 공급되므로 더 높은 속도에 도달할 수 있으므로 모터가 빠르게 돌아갈 수 있다. OC0의 펄스가 on/off를 반복하더라도 이 주기는 로 매우 짧기 때문에 눈으로 확인할 수 없다.
결론은
먼저, OCR0의 값을 7세그먼트(두자리)에서 조절 하기위해 (0~255)인 0CR0의 범위를 두 자리로 나타내기 위해 number=OCR0*100/256을 이용하여 변환해 주었고,
PWM 모드는 OCR0값에서 0으로 clear되기 때문에 들어지는 펄스의 High, Low의 비는 OCRn에 들어있는 값에 비례한 폭이 만들어 진다. 여기서 OCR0의 값이 증가 할수록 HIGH 폭의 넓이가 커지게 되고 모터에 더 많은 DC 전류가 공급되게 된다.
  • 가격1,200
  • 페이지수13페이지
  • 등록일2014.11.15
  • 저작시기2012.11
  • 파일형식한글(hwp)
  • 자료번호#950330
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니