۰۸-مرداد-۱۳۹۳, ۰۱:۰۶:۵۶
سلام . من برنامه ای با کدویژن میخوام که به ازای زاویه ی 10 تا 170 درجه ی سینوسی و 190 تا 350 درجه پالس داشته باشم.و فرکانس این پالس ها هم قابل تغییر باشه.چیکار باید بکنم؟
ممنون میشم اگر سریع کمک کنید.خیلی گیرم
ميخوام مثل اين برنامه اي که اينجا هست باشد : در اين برنامه نمونه هاي سينوسي رو دارم و ديوتي سايکل با اونها تغيير ميکنه .من خودم فکر کردم به نظرم اومد که از مد phase correct استفاده کنم و مثه برنامه ي زير جدول درجه ها يي رو که به ازاي اون ميخوام پالس داشته باشم رو هم به عنوان ocr بدم و بعد با تغيير icr1l فرکانسمو تغيير بدم.ولي جواب نداد :sad:
در واقع ميخوام در کل دوره ي يک سينوسي 2 پالس به جاي اين 255 پالس داشته باشم و فرکانس سينوسي ام هم تغيير بکنه . به زباني ميخوام spwm درست کنم.نميدونم تونستم منظورمو برسونم؟؟؟
ممنون میشم اگر سریع کمک کنید.خیلی گیرم

ميخوام مثل اين برنامه اي که اينجا هست باشد : در اين برنامه نمونه هاي سينوسي رو دارم و ديوتي سايکل با اونها تغيير ميکنه .من خودم فکر کردم به نظرم اومد که از مد phase correct استفاده کنم و مثه برنامه ي زير جدول درجه ها يي رو که به ازاي اون ميخوام پالس داشته باشم رو هم به عنوان ocr بدم و بعد با تغيير icr1l فرکانسمو تغيير بدم.ولي جواب نداد :sad:
در واقع ميخوام در کل دوره ي يک سينوسي 2 پالس به جاي اين 255 پالس داشته باشم و فرکانس سينوسي ام هم تغيير بکنه . به زباني ميخوام spwm درست کنم.نميدونم تونستم منظورمو برسونم؟؟؟
کد php:
#include <mega16.h>
flash char sinewave[]={
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01
};
char i=0;
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
OCR1A=sinewave;
i++;
if(i==255)
i=0;
}
void main(void) {
DDRD=0xFF;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000.000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x81;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
//enable global interrups
#asm("sei");
while (1);
}