سلام
من می خواهم در مد Fast PWM پالسی با فرکانس 50 هرتز درست کنم که بتوانم عرض (دوره) پالس رو از 1 تا 2 میلی ثانیه تغییر بدم.
(مثلا با 1 شدن PB1، با هر بار یک شدن PB2 ، یک دهم میلی ثانیه کاهش و در صورت 0 شدن PB1 ، با هر بار یک شدن آن یک دهم میلی ثانیه کاهش یابد.)
در واقع من می خواهم برای کنترل موتور براشلس از طریق دادن این سیگنال به اسپید کنترلر استفاده کنم...
- اصلا می شه با TCNT0 این کار رو انجام داد؟ (با توجه به این که نیاز به سینوسی بودن اون نیست برای ورود به اسپید کنترلر)
- آیا با تغییر مقدار OCR0 در همین MODE می شه زمانش رو تغییر داد؟ (منظورم همون عرض پالسه)
یه برنامه هم نوشتم ولی فکر کنم (:redface
که مشکل داره!! (در اینجا مقدار اولیه ی duty cycle بیست درصده و همین طور میشه افزایشش داد)
از کریستال 16 مگاهرتز هم استفاده شده. و از atmega16
لطفا اساتید راهنمایی کنن و اگه فقط درست و غلطش رو هم بگین خیلی ممنونم!! :agree:
من می خواهم در مد Fast PWM پالسی با فرکانس 50 هرتز درست کنم که بتوانم عرض (دوره) پالس رو از 1 تا 2 میلی ثانیه تغییر بدم.
(مثلا با 1 شدن PB1، با هر بار یک شدن PB2 ، یک دهم میلی ثانیه کاهش و در صورت 0 شدن PB1 ، با هر بار یک شدن آن یک دهم میلی ثانیه کاهش یابد.)
در واقع من می خواهم برای کنترل موتور براشلس از طریق دادن این سیگنال به اسپید کنترلر استفاده کنم...
- اصلا می شه با TCNT0 این کار رو انجام داد؟ (با توجه به این که نیاز به سینوسی بودن اون نیست برای ورود به اسپید کنترلر)
- آیا با تغییر مقدار OCR0 در همین MODE می شه زمانش رو تغییر داد؟ (منظورم همون عرض پالسه)
یه برنامه هم نوشتم ولی فکر کنم (:redface
که مشکل داره!! (در اینجا مقدار اولیه ی duty cycle بیست درصده و همین طور میشه افزایشش داد)از کریستال 16 مگاهرتز هم استفاده شده. و از atmega16
کد:
#include <mega16.h>
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x06;
}
void main(void)
{
PORTB=0x00;
DDRB=0x08;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 250.000 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x6B;
TCNT0=0xf5; //TCNT0 = 245
OCR0=0x38; //OCR0 = 56
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Global enable interrupts
#asm("sei")
while (1){
if(PIND.0==0)OCR0=++OCR0;
if(PIND.1==0)OCR0=--OCR0;
delay_ms(200);
};
}




دیدگاه