CAFE

한국직업능력교육원

[Arduino 실습 35] DC Motor PWM 제어-2

작성자송명규|작성시간26.06.17|조회수75 목록 댓글 0

주원인이 모터 전압문제 입니다.

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);

 

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼