뉴티씨



  • HOME
  • 고객지원
  • 질문답변

 

 
AM-DC2-2D모터가 PWM 조절이 안되네요. 뭐가 불량인지 모르겠습니다. 뭐자 잘못된는지 좀 알려주세요.
 글쓴이 : 홍진만
작성일 : 19-10-14 14:14
조회 : 4,034  
이프로그램시 동작품은 AM-DC2-2D, SE-DM, SE-WDC2, AVR USB-JTAG 사용했는데요.

소스상으로는 main 함수에 무한반복문에서 속도선택 값과 딜레이 시간이 나와서 PWM제어가
TCCR2에 의해서 제어가 되어야 하는데 제어가 안되는데요.

AM-DC2-2D드라이버를 사용할때 아래와 같이 프로그램 하는것이 틀리나요?
틀린것이라면 뭐가 잘못된것인지 알려주세요.

(프로그램 내용은 저속, 중속, 고속, 정지의 기능을 가지며, 각 기능이 임의의 순서, 임의의 시간,(최소 3초,
최대 6초)만큼 동작하는 선풍기를 제작한다. LED 4개는 고속, 중속, 저속, 정지의 상태를 알수 있도록 순서대로 대응되게 할당하여 모터를 움직이도록 프로그램 하는 내용입니다.)

#include <stdlib.h>
#include <avr/io.h>
#define F_CPU 16000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include <util/delay.h>

    // motor speed
#define  stop_speed      0 // duty cycle  0%의 값
#define low_speed     77 // duty cycle 30%의 값(255*0.3)                                                                               
#define  midle_speed 153 // duty cycle 60%의 값(255*0.6)
#define  high_speed     230 // duty cycle 90%의 값(255*0.9)


// 모터제어
// PB2=/ENABLE, PB1=DIR1, PB0=PWM1
#define MOTOR_CW    0x03      // 모터 Foward        : /ENABLE1=0, DIR1=1, PWM1=1
#define MOTOR_CCW   0x01 // 모터 Reverse      : /ENABLE1=0, DIR1=0, PWM1=1
#define MOTOR_CW_STOP 0x02 // 모터 Foward STOP  : /ENABLE1=0, DIR1=1, PWM1=0
#define MOTOR_CCW_STOP 0x00 // 모터 Reverse STOP  : /ENABLE1=0, DIR1=0, PWM1=0
//#define  MOTOR_STADBY 0x04    // 모터 Standby   : /ENABLE1=1, DIR1=0, PWM1=0
        // PWM신호는 모터 속도결정, DIR신호는 모터 방향 결정, /ENABLE = 0 신호는 모터 모터 활성화
        // 모터 정지시키는 /ENABLE=1 로 만들면 모터 비활성화(모터 정지)

volatile int count = 0, value = 0;
int Motor_speed[4] = {stop_speed, low_speed, midle_speed, high_speed};

int main(void)
{
DDRB = 0x0F;
DDRA = 0x0F; // LED 출력
PORTB = MOTOR_CCW_STOP;
TCCR2 = 0x6B;

PORTB = MOTOR_CW;
while(1)
{
value = rand() % 4;                  // 랜덤값 추출
OCR2 = Motor_speed[value];  // 속도선택, 정지, 저속, 중속, 고속중 선택
PORTA = 1<<value;                // LED에 현재 속도 디스플레이
value = (rand() % 4) + 3;     // 랜덤값 추출
_delay_ms(value*1000);          // 딜레이 시간 선택, 3초, 4초, 5초, 6초 중 선택
}
}

 
   
 

 


1