|
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초 중 선택
}
}
|
|