[AtTiny13 EVM] ADC, PWM 테스트 - PWM을이용한 모터 속도 제어
AtTiny13은 2개의 Output Compare Unit(PB0, PB1)이 있고 이를 이용하면 PWM출력이 가능하다.
AtTiny13 OC0 구조
AtTiny13 PWM을 이용하여 고휘도 LED테스트 진행
LED제어를 위해서는 고속의 PWM보다 저주파의 정밀한 PWN이 피요하다.
소스코드
pwm.c
void InitPWM0_B(void)
{
Sbi(PWM0A_DDR, PWM0B_BIT); //Output for PWM
//고속 PWM모드
//TCCR0A |= (PWM0B_CLEAR|PWM_MODEA_FAST);
//TCCR0B |= (PWM0_PRESCALE_DIV8);
//정밀 PWM 모드
TCCR0A |= (PWM0B_SET|PWM_MODEA_PHASE);
TCCR0B |= (PWM0_PRESCALE_DIV256);
SetPwm0B(0);
}
{
Sbi(PWM0A_DDR, PWM0B_BIT); //Output for PWM
//고속 PWM모드
//TCCR0A |= (PWM0B_CLEAR|PWM_MODEA_FAST);
//TCCR0B |= (PWM0_PRESCALE_DIV8);
//정밀 PWM 모드
TCCR0A |= (PWM0B_SET|PWM_MODEA_PHASE);
TCCR0B |= (PWM0_PRESCALE_DIV256);
SetPwm0B(0);
}
main.c
#include "system.h"
#include "pwm.h"
#include "adc.h"
//-----------------------------------------------------------------------------
int main(void)
{
unsigned char pwm = 0;
unsigned char flag = 0;
//시스템 초기화
SystemInit();
AdcInit();
InitPWM0_B();
while(1)
{
SetPwm0B(~(AdcRead(3)>>2));
Led3Toggle();
Delay(50);
}
}
//-----------------------------------------------------------------------------
#include "pwm.h"
#include "adc.h"
//-----------------------------------------------------------------------------
int main(void)
{
unsigned char pwm = 0;
unsigned char flag = 0;
//시스템 초기화
SystemInit();
AdcInit();
InitPWM0_B();
while(1)
{
SetPwm0B(~(AdcRead(3)>>2));
Led3Toggle();
Delay(50);
}
}
//-----------------------------------------------------------------------------
Attiny13 PWM을 이용한 모터 제어 테스트 동영상
Attiny13 ADC, PWM을 이용한 고휘도 LED제어 테스트 동영상
가변 저항의 변화값에 따라 고휘도 LED의 밝기 조절
반응형