
안녕하세요 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
해당 소스에 PWM핀의 제어가 들어가 있지 않은 것 같습니다.
현재는 메인 while문에서 전부다 제어를 하고 있는데, while 루프문에
PB0(PWM1)관련된 내용이 없습니다.
타이머값을 조절하셔서 하시는 것 같은데,
해당 타이머의 인터럽트를 작성하셔서, 인터럽트가 발생할 때 핀을 ON,OFF하시면서
PWM파형을 만드시면 될 것 같습니다.
타이머가 가변으로 조절됨에 따라 발동시간이 다를 것이고,
발동시간에 따라서 ON된시간, OFF된 시간이 길고 짧아지면서
듀티비가 정해질 것입니다.
관련 사진 첨부해드립니다.
감사합니다.
>
>
> 이프로그램시 동작품은 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초 중 선택
> }
> }
>
|