주원인이 모터 전압문제 입니다.
5볼트에서도 동작되는건 임꼐치여서 부하저항에 따라서 어떤건 동작하고 어던건 동작 안 하고 했던겁니다.
정석은 9V 배터리로 동작시키는게 좋습니다.
즉 모터 전원은 9V 정도를 넣어주는게 좋은데 구찮아서 기냥 5V에 연결했더니 임계치에 걸려서 부하저항에 따라서
어던때는 동작하고 어떤때는 동작 안하고 했던겁니다.
PWM도 마이컴 모드로 해서 12Bit로 올렸습니다.
// Timer1 정지
TCCR1A = 0;
TCCR1B = 0;
// Fast PWM Mode 14
// TOP = ICR1
TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);
// 12-bit 해상도
ICR1 = 4095; //1.9553khz
// 초기 듀티
// OCR1A = 2048; // 50%
// OCR1B = 1024; // 25%
// pwm Control
void cw(uint16_t pwm_buf)
{
//d_out(M1_CW, ON); //1
//d_out(M1_CCW, OFF); //0
//analogWrite(M1_CW, pwm_buf);//8bit
OCR1A = pwm_buf;
OCR1B = 0;
Serial.println("cw");
}
void ccw(uint16_t pwm_buf)
{
//d_out(M1_CW, OFF);
//d_out(M1_CCW, ON);
//analogWrite(M1_CW, 0);
OCR1A = 0;
OCR1B = pwm_buf;
Serial.println("ccw");
}
void stop()
{
//d_out(M1_CW, OFF);
//d_out(M1_CCW, OFF);
OCR1A = 0;
OCR1B = 0;
Serial.println("stop");
}
//=============================================
void loop() {
// put your main code here, to run repeatedly:
// pwm Control
for(int i = 255; i<= 300; i++) // 3800
{
cw(i);
delay(100);
Serial.println(i);
}
stop();
delay(2000);
for(int i = 255; i<= 300; i++)
{
ccw(i);
delay(100);
Serial.println(i);
}
stop();
delay(2000);