سلام
من می خواهم در مد 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

از کریستال 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); }; }
دیدگاه