BASIC4MCU | 질문게시판 | pwm DC모터 속도 제어
페이지 정보
작성자 원장 작성일2018-09-30 06:42 조회41,530회 댓글4건본문
드론을 제작하기에 앞서 모터드라이버를 고르는 과정에서
BJT 트랜지스터로 할 수 있다 하여 일단 실험용으로 가지고 있던
2N3904 로 실험을 해보았습니다.
동작하려고 하는 모터의 사양은
모터=전압: 3~5V, 전류: 150mA / 배터리=3.7V, 600mAh
입니다.
회로는 위와 같이 브레드보드에 꾸며 실험을 진행하였습니다.
mcu는 PIC18F452이며, CCS-C를 이용하였습니다.
#include <18F452.h>
#FUSES NOWDT, HS, PUT, NOPROTECT, NOBROWNOUT, NOCPD, NODEBUG
#device *=16 adc=10
#use delay(clock=20000000)
#use RS232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7)
#include
#byte TRISA=0xf92
#byte TRISC=0xf94
#byte PORTC=0xf82
#bit PC2=PORTC.2
#byte T2CON=0xFCA
#byte PR2=0xFCB
#byte CCP1CON=0xFBD
#bit DCxB0=CCP1CON.4
#bit DCxB1=CCP1CON.5
#byte CCPR1L=0xFBE
//Reset Vector Address
#build(reset=0x200)
//Intterupts Vector Address
#build(interrupt=0x208)
//Bootloader Area
#org 0x0000,0x01ff
void bootloader()
{
#asm
nop //No Operation
#endasm
}
void main()
{
long value, data;
char duty[5];
char ch;
TRISA=0x02;
TRISC=0x80;
//CCP1 pin을 출력 할당, PIN_C6 출력할당, PIN_C7입력할당
//PWM주파수: 4.88KHz, 100%Duty rate: 1024
T2CON=0x05;
PR2=255;
PC2=0;
while(1) {
printf("duty값 입력: ");
gets(duty);
value=atol(duty);
puts(duty);
printf("\n\r");
//start
CCP1CON=0x0C;
PC2=1;
data=value;
DCxB0=(short)data;
DCxB1= (short)(data>>1);
CCPR1L=(unsigned int)(value >> 2);
delay_ms(5000);
//stop
CCP1CON=0x00;
PC2=0;
}
}
Duty rate는 1024 , PWM주파수는 4.88kHz, PWM주기는 204.8uS
가 되도록 설정하였고
문자값을 받으면(Duty rate값을 받으면) long형으로 바꿔 value에 저장하고
value값을 이용해 약 5초간 모터가 동작하는 코딩을 작성하였습니다.
결론적으로는 모터는 Duty rate에 따라 속도도 조절되고
동작은 합니다.
다만 문제는 Duty rate의 100%값 즉 1024 까지 주어도
모터가 최대 속도로 동작하지를 않습니다.
배터리에 모터를 직접 연결해서 나오는 속도와
1024까지 준 값과 비교하면 속도가 좀 많이 느립니다.
코딩에 문제는 없는거 같고, 회로에 문제가 있나 싶지만
2N3904의 Ic 값도 데이터시트를 보면 200mA 이니 전류도 충분할 것 같습니다.
코딩에 문제일까요? 아니면 트랜지스터의 문제일까요? 아니면 회로적으로 문제가 있는걸까요?
댓글 4
조회수 41,530master님의 댓글
master 작성일
100% 듀티에서 TR Vce를 측정하세요
TR베이스 저항을 줄여서 베이스 전류를 늘이면 Vce가 줄어듭니다.
2N3904 회로를 두개 병렬로 구성하면 Vce가 줄어듭니다. (2N2222A 1개 회로를 사용하는 것이 더 좋죠)
지난번에 알려드린대로 FET로 구성해서 돌려보세요
원장님의 댓글
원장
데이터시트를 볼 때 DC 전류 이득도 봐야되는걸 자료를 더 검색하다가 알았네요. 작동여부 실험으로 사용한 거긴 하지만 2N3904는 DC 전류 이득을 보면 Vce가 굉장히 낮게 출력되더군요. 이러니 모터에 걸리는 Vc 도 낮아질수 밖에 없었고요. 일단 2N2222A를 구매해서 드론 제작을 진행해 볼 거지만 만약에 경우를 대비해서 MOSFET도 구매해보려고 하는데 보통 모터드라이버로 많이 사용하는 모델이 있나요?
master님의 댓글
master
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=3238
먼저번 글을 안 읽어보셨나봅니다.
//
TR이나 FET 종류도 굉장히 많고
모터 종류가 굉장히 많아서 모터 드라이버용이라는 것이 따로 없습니다.
모터에 맞는 것을 알아서 선택해야합니다.
원장님의 댓글
원장
댓글만 확인했지 답글은 확인 안 했네요..그리고 BJT를 통해 모터동작을 위한 회로를 검색 하던 중 먼저 댓글로 알려주신 것과 똑같이 2N2222A를 사용하길래 흔히 많이들 사용하는 모델이 있나하고 착각했습니다..데이터시트 보는 방법과 모터 동작이 어떻게 되는건지 트랜지스터부터 다시 공부해봐야 겠네요. 답변 감사합니다!