หากเรามองจาก ท้องฟ้า เราจะเห็น สิ่งที่เคลื่อนไหว ภายใต้ ของความคิดเรา ถ้าเรามองขึ้นไปจากใจเรา เราจะเห็น ทุกชีวิต กำลังดิ้นรน เพื่อ แสวงหา อาหาร เพื่อ หล่อเลี้ยง ชีวิตของตนเอง และ สิ่งที่ตนรัก และเป็นที่รัก ของตนเอง และแล้ว ทุกชีวิต ก็ พบว่า ความกระหายใคร่ ได้ ใคร่มี ใคร่เป็น หรือ ความทะยานอยาก นี่เอง ที่เป็นสาเหตุ ให้มนุษย์ ต้องเดินทางอยู่ ตลอดชีวิต ลองหยุดเดินทางด้วยยานพาหนะ แล้วหันมาเดินทาง ด้วยจิตวิญญาณ แล้วการ เดินทางไกล จะใกล้เข้าทุกขณะจิต หายใจเข้า ตามรู้ หายใจออก ตามรู้
วันอาทิตย์ที่ 2 ตุลาคม พ.ศ. 2559
arduino mega 1280 2560 3 phase sine wave pwm #include #include PROGMEM const uint16_t sine512[] = {250,256,262,269,275,281,288,294,301,308,314,319,326,332,339,344,350,356,362,367,374,379,384,389,395,400,404,410,414,419,423,428,433,436,440,445,449,452,455,458,463,466,468,471,474,476,478,481,483,485,487,488,490,491,493,494,495,496,496,498,499,499,499,500,500,499,499,499,498,498,496,496,495,494,493,493,492,491,489,488,487,486,484,483,481,480,478,476,474,473,471,470,468,466,465,463,460,459,457,455,453,452,450,449,447,446,445,443,442,440,439,438,436,435,434,433,432,432,431,430,430,429,428,428,428,428,427,427,427,427,427,428,428,428,428,429,430,430,431,432,432,433,434,435,436,438,439,440,442,443,445,446,447,449,450,452,453,455,457,459,460,463,465,466,468,470,471,473,474,476,478,480,481,483,484,486,487,488,489,491,492,493,493,494,495,496,496,498,498,499,499,499,500,500,499,499,499,498,496,496,495,494,493,491,490,488,487,485,483,481,478,476,474,471,468,466,463,458,455,452,449,445,440,436,433,428,423,419,414,410,404,400,395,389,384,379,374,367,362,356,350,344,339,332,326,319,314,308,301,294,288,281,275,269,262,256,250,244,238,231,225,219,212,206,199,192,186,181,174,168,161,156,150,144,138,133,126,121,116,111,105,100,96,90,86,81,77,72,67,64,60,55,51,48,45,42,37,34,32,29,26,24,22,19,17,15,13,12,10,9,7,6,5,4,4,2,1,1,1,0,0,1,1,1,2,2,4,4,5,6,7,7,8,9,11,12,13,14,16,17,19,20,22,24,26,27,29,30,32,34,35,37,40,41,43,45,47,48,50,51,53,54,55,57,58,60,61,62,64,65,66,67,68,68,69,70,70,71,72,72,72,72,73,73,73,73,73,72,72,72,72,71,70,70,69,68,68,67,66,65,64,62,61,60,58,57,55,54,53,51,50,48,47,45,43,41,40,37,35,34,32,30,29,27,26,24,22,20,19,17,16,14,13,12,11,9,8,7,7,6,5,4,4,2,2,1,1,1,0,0,1,1,1,2,4,4,5,6,7,9,10,12,13,15,17,19,22,24,26,29,32,34,37,42,45,48,51,55,60,64,67,72,77,81,86,90,96,100,105,111,116,121,126,133,138,144,150,156,161,168,174,181,186,192,199,206,212,219,225,231,238,244}; #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) //vyssi refclk == vyssi frekout const unsigned long refclk=1562960; const unsigned long refclk=781480; volatile int current_count; volatile unsigned long phase_accumulator; volatile unsigned long tword_m; volatile unsigned long stepm; volatile word count = 0; volatile byte DT = 10; volatile byte ampl = 13; volatile word offset_1 = 171; volatile word offset_2 = 341; word fnom = 5000; word fzad = 0; word boost = 600; word readpot; word calc; boolean ISR_exec_time = 1; boolean RUN = 0; byte bufclr = 0; void setup() { pinMode(6, OUTPUT); //OC4A pinMode(7, OUTPUT); //OC4B pinMode(8, OUTPUT); //OC4C pinMode(11, OUTPUT); //OC1A pinMode(12, OUTPUT); //OC1B pinMode(13, OUTPUT); //OC1C //pinMode(5, OUTPUT); //OC3A //pinMode(2, OUTPUT); //OC3B //pinMode(3, OUTPUT); //OC3C pinMode(52, OUTPUT); pinMode(53, OUTPUT); pinMode(22, INPUT_PULLUP); pinMode(23, INPUT_PULLUP); sbi (GTCCR, TSM); sbi (GTCCR, PSRASY); sbi (GTCCR, PSRSYNC); Setup_timer1(); Setup_timer2(); Setup_timer4(); //Setup_timer3(); //Setup_timer5(); TCNT1 = 0; //TCNT3 = 0; TCNT4 = 0; //TCNT5 = 0; GTCCR = 0; //Disable Timer 0 cbi (TIMSK0,TOIE0); tword_m=pow(2,32)*fzad/refclk; sbi (TIMSK4,TOIE4); Serial.begin(9600); } void loop() { while(1) { readpot = 0; for (int i=0; i <= 9; i++) { readpot = readpot + analogRead(0); } if (digitalRead(22)==0 && fzad==0) { offset_1 = 341; offset_2 = 171; } if (digitalRead(22)==1 && fzad==0 ) { offset_1 = 171; offset_2 = 341; } //=============================================== if (digitalRead(23)==1 && fzad!=readpot) { //================================================ if (fzad>readpot && TCNT2 > 10) { fzad = fzad-1; TCNT2=0; } if (fzad 10) { fzad = fzad+1; TCNT2=0; } //================================================ stepm = pow(2,32)*fzad/refclk; calc = ((1280/(fnom/100))*(fzad/100))/10; if (fzad > fnom) //*500 { calc = 128; } if (fzad < boost) { calc = 14; } cbi (TIMSK4,TOIE4); ampl = calc; //*5 tword_m = stepm; sbi (TIMSK4,TOIE4); } //=============================================== /* */ if (count > 7000) { bufclr = bufclr+1; count = 0; Serial.println(bufclr); Serial.println(fzad); Serial.println(ampl); } } } ISR(TIMER4_OVF_vect) { sbi(PORTB,ISR_exec_time); phase_accumulator=phase_accumulator+tword_m; current_count=phase_accumulator >> 23; word offs; word offs1; word offs2; offs= current_count + offset_1; offs2 = current_count + offset_2; if (offs > 511) { offs = offs - 512; } if (offs2 > 511) { offs2 = offs2 - 512; } offs = (pgm_read_word_near(sine512 + offs)*ampl) >> 6; offs1 = (pgm_read_word_near(sine512 + current_count)*ampl) >> 6; offs2 = (pgm_read_word_near(sine512 + offs2)*ampl) >> 6; if (tword_m > 0) { OCR4B = offs + DT; OCR1B = offs; OCR4A = offs1 + DT; OCR1A = offs1; OCR4C = offs2 + DT; OCR1C = offs2; } else { OCR4B = 1023; OCR1B = 0; OCR4A = 1023; OCR1A = 0; OCR4C = 1023; OCR1C = 0; } cbi(PORTB,ISR_exec_time); count = count+1; /* */ } void Setup_timer1(void) { //Clock Prescaler : 1 sbi (TCCR1B, CS10); cbi (TCCR1B, CS11); cbi (TCCR1B, CS12); // Timer1 Phase Correct PWM sbi (TCCR1A, COM1A0); sbi (TCCR1A, COM1A1); sbi (TCCR1A, COM1B0); sbi (TCCR1A, COM1B1); sbi (TCCR1A, COM1C0); //tretireg sbi (TCCR1A, COM1C1); //tretireg // Mode 1 / Phase Correct PWM sbi (TCCR1A, WGM10); sbi (TCCR1A, WGM11); cbi (TCCR1B, WGM12); cbi (TCCR1B, WGM13); } void Setup_timer4(void) { sbi (TCCR4B, CS40); cbi (TCCR4B, CS41); cbi (TCCR4B, CS42); cbi (TCCR4A, COM4A0); sbi (TCCR4A, COM4A1); cbi (TCCR4A, COM4B0); sbi (TCCR4A, COM4B1); cbi (TCCR4A, COM4C0); sbi (TCCR4A, COM4C1); sbi (TCCR4A, WGM40); sbi (TCCR4A, WGM41); cbi (TCCR4B, WGM42); cbi (TCCR4B, WGM43); } void Setup_timer2(void) { //Prescaler : 1 cbi (TCCR2B, CS20); cbi (TCCR2B, CS21); sbi (TCCR2B, CS22); // Phase Correct PWM cbi (TCCR2A, COM2A0); // clear Compare Match cbi (TCCR2A, COM2A1); cbi (TCCR2A, COM2B0); cbi (TCCR2A, COM2B1); //Phase Correct PWM cbi (TCCR2A, WGM20); cbi (TCCR2A, WGM21); cbi (TCCR2B, WGM22); } /* void Setup_timer3(void) { sbi (TCCR3B, CS30); cbi (TCCR3B, CS31); cbi (TCCR3B, CS32); cbi (TCCR3A, COM3A0); sbi (TCCR3A, COM3A1); cbi (TCCR3A, COM3B0); sbi (TCCR3A, COM3B1); cbi (TCCR3A, COM3C0); sbi (TCCR3A, COM3C1); sbi (TCCR3A, WGM30); sbi (TCCR3A, WGM31); cbi (TCCR3B, WGM32); cbi (TCCR3B, WGM33); } void Setup_timer5(void) { sbi (TCCR5B, CS50); cbi (TCCR5B, CS51); cbi (TCCR5B, CS52); cbi (TCCR5A, COM5A0); sbi (TCCR5A, COM5A1); cbi (TCCR5A, COM5B0); sbi (TCCR5A, COM5B1); cbi (TCCR5A, COM5C0); sbi (TCCR5A, COM5C1); sbi (TCCR5A, WGM50); sbi (TCCR5A, WGM51); cbi (TCCR5B, WGM52); cbi (TCCR5B, WGM53); } Setup_timer2(); void Setup_timer2() { //Prescaler : 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Phase Correct PWM cbi (TCCR2A, COM2A0); // clear Compare Match cbi (TCCR2A, COM2A1); cbi (TCCR2A, COM2B0); cbi (TCCR2A, COM2B1); //Phase Correct PWM sbi (TCCR2A, WGM20); cbi (TCCR2A, WGM21); cbi (TCCR2B, WGM22); } volatile byte ms4_delay; volatile byte c4ms; if (c4ms > 25) { c4ms=0; offset_3=analogRead(0)/4; dfreq=50.0; cbi (TIMSK2,TOIE2); tword_m=pow(2,32)*dfreq/refclk; sbi (TIMSK2,TOIE2); } */ /* if(ms4_delay++ == 125) { c4ms++; ms4_delay=0; //reset count } coffs = pgm_read_word_near(sine512 + coffs2 - 1); OCR1B = ((word)coffs*99)/100; // +1 korekce */ /* */
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น