บ้านเลขที่5ซอยติวานนท์18แยก5ถนนติวานนท์อำเภอเมืองนนทบุรี11000 *ใช้ขับมอเตอร์สามเฟส ได้พร้อมกัน 5 ตัว * DDS Sine Generator mit ATMEGS 2560 * generates the 3.9 KHz PWM 3 PHASE * Interrupt to change duty cycle for the output PWM signals * D. Tolken * 120 degress out of phase signals for 3 phase BLDC motor controller * CPUT, South Africa a Huge thumbs up and thanks must be given to Martin Nawrath for the developement of the original code to generate a sine wave using PWM and a LPF. Link: http://interface.khm.de/index.php/lab/experiments/arduino-dds-sinewave-generator/ */ #include "arduino.h" //Store data in flash (program) memory instead of SRAM #include "avr/pgmspace.h" #include "avr/io.h" // Look Up table of a single sine period divied up into 256 values. Refer to PWM to sine.xls on how the values was calculated //PROGMEM prog_uchar sine256[] PROGMEM = { //const uint8_t sine256[] PROGMEM = { //const unsigned char sine256[] PROGMEM = { // const byte sine256[] PROGMEM = { // Look Up table of a single sine period divied up into 256 values. Refer to PWM to sine.xls on how the values was calculated //PROGMEM prog_uchar sine256[] const byte sine256[] PROGMEM = { 127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240, 242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223, 221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78, 76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31, 33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124 }; #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) //define a bit to have the properties of a clear bit operator #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))//define a bit to have the properties of a set bit operator int PWM1= 2;// PWM1 output, phase 1 int PWM2 = 3; //[WM2 ouput, phase 2 int PWM3 = 4; //PWM3 output, phase 3 int PWM4= 5;// PWM1 output, phase 1 int PWM5 = 6; //[WM2 ouput, phase 2 int PWM6 = 7; //PWM3 output, phase 3 int PWM7 = 8;// PWM1 output, phase 1 int PWM8 = 9; //[WM2 ouput, phase 2 int PWM9 = 10; //PWM3 output, phase 3 int PWM10 = 11;// PWM1 output, phase 1 int PWM11 = 12; //[WM2 ouput, phase 2 int PWM12 = 13; //PWM3 output, phase 3 int PWM13 = 44;// PWM1 output, phase 1 int PWM14 = 45; //[WM2 ouput, phase 2 int PWM15 = 46; //PWM3 output, phase 3 int offset_1 = 85; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls int offset_2 = 170; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls int program_exec_time = 52; //monitor how quickly the interrupt trigger int ISR_exec_time = 53; //monitor how long the interrupt takes double dfreq; const double refclk=31376.6; // measured output frequency // variables used inside interrupt service declared as voilatile volatile byte current_count; // Keep track of where the current count is in sine 256 array volatile byte ms4_delay; //variable used to generate a 4ms delay volatile byte c4ms; // after every 4ms this variable is incremented, its used to create a delay of 1 second volatile unsigned long phase_accumulator; // pahse accumulator volatile unsigned long tword_m; // dds tuning word m, refer to DDS_calculator (from Martin Nawrath) for explination. void setup() { pinMode(PWM1, OUTPUT); //sets the digital pin as output pinMode(PWM2, OUTPUT); //sets the digital pin as output pinMode(PWM3, OUTPUT); pinMode(PWM4, OUTPUT); //sets the digital pin as output pinMode(PWM5, OUTPUT); //sets the digital pin as output pinMode(PWM6, OUTPUT); //sets the digital pin as output pinMode(PWM7, OUTPUT); //sets the digital pin as output pinMode(PWM8, OUTPUT); //sets the digital pin as output pinMode(PWM9, OUTPUT); pinMode(PWM10, OUTPUT); //sets the digital pin as output pinMode(PWM11, OUTPUT); //sets the digital pin as output pinMode(PWM12, OUTPUT); pinMode(PWM13, OUTPUT); //sets the digital pin as output pinMode(PWM14, OUTPUT); //sets the digital pin as output pinMode(PWM15, OUTPUT); pinMode(50, OUTPUT); //sets the digital pin as output pinMode(52, OUTPUT); //sets the digital pin as output pinMode(53, OUTPUT); //pinMode(program_exec_time, OUTPUT); //sets the digital pin as output //pinMode(52, OUTPUT); //sets the digital pin as output sbi(PORTB,program_exec_time); //Sets the pin Setup_timer0(); Setup_timer1(); Setup_timer2(); Setup_timer3(); Setup_timer4(); Setup_timer5(); //Disable Timer 1 interrupt to avoid any timing delays cbi (TIMSK0,TOIE0); //disable Timer0 !!! delay() is now not available sbi (TIMSK2,TOIE2); //enable Timer2 Interrupt //dfreq=1000; //dfreq=10000; //initial output frequency = 1000.o Hz tword_m=pow(2,32)*dfreq/refclk; //calulate DDS new tuning word } void loop() { while(1) { sbi(PORTB,program_exec_time); //Sets the pin if (c4ms > 0) // c4ms = 4ms, thus 4ms *250 = 1 second delay { c4ms=0; //Reset c4ms //dfreq=map(analogRead(0),0,1230,0,1000); dfreq=map(analogRead(0),0,1023,0,1000); //Read voltage on analog 1 to see desired output frequency, 0V = 0Hz, 5V = 1.023kHz cbi (TIMSK2,TOIE2); //Disable Timer2 Interrupt tword_m=pow(2,32)*dfreq/refclk; //Calulate DDS new tuning word sbi (TIMSK2,TOIE2); //Enable Timer2 Interrupt } } } void Setup_timer0(void) { // Timer1 Clock Prescaler to : 1 //sbi (TCCR0B, CS01)|1<<(CS00); //cbi (TCCR0B, CS01); //cbi (TCCR0B, CS02); TCCR0B = (TCCR0B & 0b11111000) | 0x02; // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR0A, COM0A0); sbi (TCCR0A, COM0A1); cbi (TCCR0A, COM0B0); sbi (TCCR0A, COM0B1); // Mode 1 / Phase Correct PWM sbi (TCCR0A, WGM00); cbi (TCCR0A, WGM01); //cbi (TCCR0B, WGM02); //cbi (TCCR0B, WGM03); } //Set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock void Setup_timer1(void) { TCCR1B = (TCCR1B & 0b11111000) |0x02; // Timer1 Clock Prescaler to : 1 //sbi (TCCR1B, CS10); //cbi (TCCR1B, CS11); //cbi (TCCR1B, CS12); // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR1A, COM1A0); sbi (TCCR1A, COM1A1); cbi (TCCR1A, COM1B0); sbi (TCCR1A, COM1B1); // Mode 1 / Phase Correct PWM sbi (TCCR1A, WGM10); cbi (TCCR1A, WGM11); cbi (TCCR1B, WGM12); cbi (TCCR1B, WGM13); } //Timer 1 setup //Set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock void Setup_timer2() { TCCR2B = (TCCR2B & 0b11111000) | 0x02;// Timer2 Clock Prescaler to : 1 // sbi (TCCR2B, CS20); //cbi (TCCR2B, CS21); //cbi (TCCR2B, CS22); // Timer2 PWM Mode set to Phase Correct PWM cbi (TCCR2A, COM2A0); // clear Compare Match sbi (TCCR2A, COM2A1); cbi (TCCR2A, COM2B0); sbi (TCCR2A, COM2B1); // Mode 1 / Phase Correct PWM sbi (TCCR2A, WGM20); cbi (TCCR2A, WGM21); cbi (TCCR2B, WGM22); } void Setup_timer3(void) { TCCR3B = (TCCR3B & 0b11111000) |0x02;// Timer1 Clock Prescaler to : 1 //sbi (TCCR3B, CS30); //cbi (TCCR3B, CS31); //cbi (TCCR3B, CS32); // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR3A, COM3A0); sbi (TCCR3A, COM3A1); cbi (TCCR3A, COM3B0); sbi (TCCR3A, COM3B1); cbi (TCCR3A, COM3C0); sbi (TCCR3A, COM3C1); // Mode 1 / Phase Correct PWM sbi (TCCR3A, WGM30); cbi (TCCR3A, WGM31); cbi (TCCR3B, WGM32); cbi (TCCR3B, WGM33); cbi (TCCR3C, WGM33); cbi (TCCR3C, WGM33); } //Timer 1 setup //Set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock void Setup_timer4() { TCCR4B = (TCCR4B & 0b11111000) | 0x02;// Timer2 Clock Prescaler to : 1 //sbi (TCCR4B, CS40); //cbi (TCCR4B, CS41); //cbi (TCCR4B, CS42); // Timer2 PWM Mode set to Phase Correct PWM cbi (TCCR4A, COM4A0); // clear Compare Match sbi (TCCR4A, COM4A1); cbi (TCCR4A, COM4B0); sbi (TCCR4A, COM4B1); cbi (TCCR4A, COM4C0); sbi (TCCR4A, COM4C1); // Mode 1 / Phase Correct PWM sbi (TCCR4A, WGM40); cbi (TCCR4A, WGM41); cbi (TCCR4B, WGM42); cbi (TCCR4C, WGM43); cbi (TCCR4C, WGM43); } void Setup_timer5(void) { TCCR5B = (TCCR5B & 0b11111000) |0x02;// Timer1 Clock Prescaler to : 1 //sbi (TCCR5B, CS50); //cbi (TCCR5B, CS51); // // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR5A, COM5A0); sbi (TCCR5A, COM5A1); cbi (TCCR5A, COM5B0); sbi (TCCR5A, COM5B1); cbi (TCCR5A, COM5C0); sbi (TCCR5A, COM5C1); // Mode 1 / Phase Correct PWM sbi (TCCR5A, WGM50); cbi (TCCR5A, WGM51); cbi (TCCR5B, WGM52); cbi (TCCR5B, WGM53); cbi (TCCR5C, WGM50); } //This is the timebase REFCLOCK for the DDS generator //FOUT = (M (REFCLK)) / (2 exp 32) //Runtime : 8 microseconds ISR(TIMER2_OVF_vect) { cbi(PORTD,program_exec_time); //Clear the pin sbi(PORTD,ISR_exec_time); // Sets the pin phase_accumulator=phase_accumulator+tword_m; //Adds tuning M word to previoud phase accumulator. refer to DDS_calculator (from Martin Nawrath) for explination. current_count=phase_accumulator >> 24; // use upper 8 bits of phase_accumulator as frequency information //motor 1 OCR3B = pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR3C = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR0B = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 2 OCR3A = OCR3B; //OCR0A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR4A = OCR3C;//OCR0B;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR4B = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 3 OCR4C = OCR3B; //OCR0A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR2B = OCR3C;//OCR0B;///pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR2A = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 4 OCR1A = OCR3B; //OCR0A;//OCR2A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR1B = OCR3C;//OCR0B;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR0A = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 5 OCR5A = OCR3B; //OCR0A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR5B = OCR3C;//OCR0B;///pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR5C = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //increment variable ms4_delay every 4mS/125 = milliseconds 32uS if(ms4_delay++ == 125) { c4ms++; ms4_delay=0; //reset count } cbi(PORTD,ISR_exec_time); //Clear the pin } เขียนโดย เอวัมเม สุตัง ฯ เอกัง สะมะยัง ภะคะวา สาวัตถิยัง วิหะระติ เชตะวะเน อะนาถะปิณฑิกัสสะ อาราเม ฯ อะถะโข อัญญะตะรา เทวะตา อะภิกกันตายะ รัตติยา อะภิกกันตะวัณณา เกวะละกัปปัง เชตะวะนัง โอภาเสตวา เยนะ ภะคะวา เต ที่ 07:18 ส่งอีเมลข้อมูลนี้ BlogThis! แชร์ไปที่ Twitter แชร์ไปที่ Facebook แชร์ใน Pinterest ไม่มีความคิดเห็น: โพสต์ความคิดเห็น บทความใหม่กว่าบทความที่เก่ากว่าหน้าแรก สมัครสมาชิก: ส่งความคิดเห็น (Atom) ผู้ติดตาม ที่เก็บของบล็อก ► 2021 (4) ► 2020 (29) ▼ 2017 (722) ► กรกฎาคม (38) ► มิถุนายน (355) ► พฤษภาคม (26) ► เมษายน (61) ▼ มีนาคม (74) อัปนาสมาธิ สมาธิเข้าสู่ มรรคผล นิพพาน เอโกทิภาวะห... วิธีเจริญวิปัสสนากรรมฐานที่ถูกต้องสอนคนให้เข้าใจถึ... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... เข้าเฝ้าพระพุทธเจ้า โดย หลวงพ่อปราโมทย์ ปาโมชฺโช ลูกพระพุทธเจ้า ศิษย์ตถาคตพระพุทธเจ้า...กับ...มังสว... ลูกพระพุทธเจ้า ศิษย์ตถาคตพระพุทธเจ้า...กับ...มังสว... เพลงคาถามงคลจักรวาล 8 ทิศอิมัสมิง มงคลจักรวาฬทั้งแ... เพลงคาถามงคลจักรวาล 8 ทิศอิมัสมิง มงคลจักรวาฬทั้งแ... กำเนิดเอกภพ part1ดวงดาวนับไม่ถ้วน เพราะไม่มีที่สิ้... กำเนิดเอกภพ part1ดวงดาวนับไม่ถ้วน เพราะไม่มีที่สิ้... หลวงปู่ขาว อนาลโย หลวงปู่ขาว อนาลโย หลวงปู่ขาว อนาลโย ความประพฤติของพระโพธิสัตว์อนึ่ง พระมหาบุรุษเมื่อให... พุทโธ ระลึกจิตเศรษฐีมุ่งหน้าเข้าสู่ป่าสีตวัน อันเป... พุทโธ ระลึกจิตเศรษฐีมุ่งหน้าเข้าสู่ป่าสีตวัน อันเป... STM32 5kW 3 Phase Motor Controller Original Video ... พระศาสดาผู้เป็นสัพพัญญู รู้เห็นธรรมทั้งปวง ผู้พิชิ... ทางพ้นทุกข์ ก ไก่ ถึง ฮ นกฮูก โดย หลวงพ่อปราโมทย์ ... ทางพ้นทุกข์ ก ไก่ ถึง ฮ นกฮูก โดย หลวงพ่อปราโมทย์ ... กามภพ รูปภพ อรูปภพจิตของเรามันทำงานทั้งวันทั้งคืน ... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... อาหาร 15 ชนิด ที่เซลล์มะเร็งเกลียดและกลัวมากๆSAMSA... อาหาร 15 ชนิด ที่เซลล์มะเร็งเกลียดและกลัวมากๆSAMSA... อาหาร 15 ชนิด ที่เซลล์มะเร็งเกลียดและกลัวมากๆSAMSA... ถ้าเราทิ้งการรู้กายรู้ใจเราไม่มีวันบรรลุมรรคผลนิพพ... กายนี้ไม่ใช่เรา ใจที่ทำงานอยู่นี้ไม่ใช่เรา จิตที่เ... Arduino variable sine wave max 1000Hz เราไม่มีการโน้มเอียงไปสู่การเกิดใหม่อีกแม้แต่นิดเด... ทางแห่งความหลุดพ้นเวลาที่สติที่แท้จริงเกิดนะ เดี๋ย... ทางแห่งความหลุดพ้นเวลาที่สติที่แท้จริงเกิดนะ เดี๋ย... เครื่องปรับรอบมอเตอร์สามเฟสกำลังสูงเพื่อใช้สูบน้ำจ... การขับมอเตอร์สามเฟสแรงดันต่ำ STM32 5kW 3-Phase Motor Controller จิตของเราถึงธรรมปราศจากเครื่องปรุงแต่งแล้วจิตใจของ... car generator 3 phase motor car generator 3 phase motor car generator 3 phase motor วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไร วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไร วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไรหลวงพ่อปราโ... โลกุตตระชน Buddhist Chant Maha Mangla Suttua 2มังคะละสุตตัง ... วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไรท่านสอนให้ร... STM32-based ultimate 3-Phase Motor Controller - Te... Arduino 3 Phase Sine Wave GeneratorPower electro... ตัวธาตุรู้นั้นแหละเป็นตัวไปเห็นพระนิพพาน ตรงนี้เรี... มั่งคงในพระพุทธศาสนาเรารักตัวเองมากที่สุดนะเราต้อง... ไม่มีใครทำจิตให้บรรลุมรรคผลนิพพานได้จิตเขาบรรลุของ... วิธีซ่อมไดสตาร์ทรถยนต์วิธีซ่อมไดสตาร์ทรถยนต์ คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า จิตปกติของมนุษย์ เพื่อนร่วมทาง ใน สังสารวัฏโดยธรรม... จิตปกติของมนุษย์ เพื่อนร่วมทาง ใน สังสารวัฏโดยธรรม... บรรลุช้า บรรลุเร็ว*~ บรรลุช้า-บรรลุเร็ว ~*~ เมื่อเ... วันใดที่จิตมันเดินปัญญาแก่รอบถึงขนาดนี้แล้ว จิตมัน... วันใดที่จิตมันเดินปัญญาแก่รอบถึงขนาดนี้แล้ว จิตมัน... รู้ทุกข์ จิตรวมเข้าอัปปนาสมาธิไม่ว่าเราจะเห็นสภาวะอะไรเกิดข... จิตรวมเข้าอัปปนาสมาธิไม่ว่าเราจะเห็นสภาวะอะไรเกิดข... จิตมหัศจรรย์ อริยมรรค จิตไม่ว่าเราจะเห็นสภาวะอะไรเ... คอมพิวเตอร์เครื่องนี้จะไม่ได้รับการอัพเดทอีกต่อไปเ... การควบคุมมอเตอร์ไฟฟ้ากระแสตรงสัญญาณ PWM ย่อจาก Pul... เครื่องควบคุมควมเร็วสำหรับมอเตอร์ 3 เฟส 5 แรงม้า S... เครื่องควบคุมควมเร็วสำหรับมอเตอร์ 3 เฟส 5 แรงม้า S... เราต้องรู้กายรู้ใจของเราไปเรื่อยๆ แล้ววันหนึ่งเราจ... จิตของเราจะก้าวเข้าสู่สันติสุขและรุ่งเรืองแล้วก็จบ... รูป เวทนา สัญญา สังขาร วิญญาณ เกิดขึ้น แล้ว ก็ดับไป ธรรมเครื่องกำจัดกิเลสพระบรมศาสดาได้ประทานผ้าสังฆาฏ... ธรรมเครื่องกำจัดกิเลสพระบรมศาสดาได้ประทานผ้าสังฆาฏ... ► กุมภาพันธ์ (55) ► มกราคม (113) ► 2016 (837) ► 2015 (6) ► 2014 (115) ► 2013 (1) ► 2012 (1) ► 2010 (1) เกี่ยวกับฉัน รูปภาพของฉัน เอวัมเม สุตัง ฯ เอกัง สะมะยัง ภะคะวา สาวัตถิยัง วิหะระติ เชตะวะเน อะนาถะปิณฑิกัสสะ อาราเม ฯ อะถะโข อัญญะตะรา เทวะตา อะภิกกันตายะ รัตติยา อะภิกกันตะวัณณา เกวะละกัปปัง เชตะวะนัง โอภาเสตวา เยนะ ภะคะวา เต จิตที่เดินมาถึงสังขารุเปกขาญาณ ดูโปรไฟล์ทั้งหมดของฉัน ท่องเที่ยว ธีม. ขับเคลื่อนโดย Blogger.

*ใช้ขับมอเตอร์สามเฟส ได้พร้อมกัน 5 ตัว * DDS Sine Generator mit ATMEGS 2560 * generates the 3.9 KHz PWM 3 PHASE * Interrupt to change duty cycle for the output PWM signals * D. Tolken * 120 degress out of phase signals for 3 phase BLDC motor controller * CPUT, South Africa a Huge thumbs up and thanks must be given to Martin Nawrath for the developement of the original code to generate a sine wave using PWM and a LPF. Link: http://interface.khm.de/index.php/lab/experiments/arduino-dds-sinewave-generator/ */ #include "arduino.h" //Store data in flash (program) memory instead of SRAM #include "avr/pgmspace.h" #include "avr/io.h" // Look Up table of a single sine period divied up into 256 values. Refer to PWM to sine.xls on how the values was calculated //PROGMEM prog_uchar sine256[] PROGMEM = { //const uint8_t sine256[] PROGMEM = { //const unsigned char sine256[] PROGMEM = { // const byte sine256[] PROGMEM = { // Look Up table of a single sine period divied up into 256 values. Refer to PWM to sine.xls on how the values was calculated //PROGMEM prog_uchar sine256[] const byte sine256[] PROGMEM = { 127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240, 242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223, 221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78, 76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31, 33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124 }; #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) //define a bit to have the properties of a clear bit operator #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))//define a bit to have the properties of a set bit operator int PWM1= 2;// PWM1 output, phase 1 int PWM2 = 3; //[WM2 ouput, phase 2 int PWM3 = 4; //PWM3 output, phase 3 int PWM4= 5;// PWM1 output, phase 1 int PWM5 = 6; //[WM2 ouput, phase 2 int PWM6 = 7; //PWM3 output, phase 3 int PWM7 = 8;// PWM1 output, phase 1 int PWM8 = 9; //[WM2 ouput, phase 2 int PWM9 = 10; //PWM3 output, phase 3 int PWM10 = 11;// PWM1 output, phase 1 int PWM11 = 12; //[WM2 ouput, phase 2 int PWM12 = 13; //PWM3 output, phase 3 int PWM13 = 44;// PWM1 output, phase 1 int PWM14 = 45; //[WM2 ouput, phase 2 int PWM15 = 46; //PWM3 output, phase 3 int offset_1 = 85; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls int offset_2 = 170; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls int program_exec_time = 52; //monitor how quickly the interrupt trigger int ISR_exec_time = 53; //monitor how long the interrupt takes double dfreq; const double refclk=31376.6; // measured output frequency // variables used inside interrupt service declared as voilatile volatile byte current_count; // Keep track of where the current count is in sine 256 array volatile byte ms4_delay; //variable used to generate a 4ms delay volatile byte c4ms; // after every 4ms this variable is incremented, its used to create a delay of 1 second volatile unsigned long phase_accumulator; // pahse accumulator volatile unsigned long tword_m; // dds tuning word m, refer to DDS_calculator (from Martin Nawrath) for explination. void setup() { pinMode(PWM1, OUTPUT); //sets the digital pin as output pinMode(PWM2, OUTPUT); //sets the digital pin as output pinMode(PWM3, OUTPUT); pinMode(PWM4, OUTPUT); //sets the digital pin as output pinMode(PWM5, OUTPUT); //sets the digital pin as output pinMode(PWM6, OUTPUT); //sets the digital pin as output pinMode(PWM7, OUTPUT); //sets the digital pin as output pinMode(PWM8, OUTPUT); //sets the digital pin as output pinMode(PWM9, OUTPUT); pinMode(PWM10, OUTPUT); //sets the digital pin as output pinMode(PWM11, OUTPUT); //sets the digital pin as output pinMode(PWM12, OUTPUT); pinMode(PWM13, OUTPUT); //sets the digital pin as output pinMode(PWM14, OUTPUT); //sets the digital pin as output pinMode(PWM15, OUTPUT); pinMode(50, OUTPUT); //sets the digital pin as output pinMode(52, OUTPUT); //sets the digital pin as output pinMode(53, OUTPUT); //pinMode(program_exec_time, OUTPUT); //sets the digital pin as output //pinMode(52, OUTPUT); //sets the digital pin as output sbi(PORTB,program_exec_time); //Sets the pin Setup_timer0(); Setup_timer1(); Setup_timer2(); Setup_timer3(); Setup_timer4(); Setup_timer5(); //Disable Timer 1 interrupt to avoid any timing delays cbi (TIMSK0,TOIE0); //disable Timer0 !!! delay() is now not available sbi (TIMSK2,TOIE2); //enable Timer2 Interrupt //dfreq=1000; //dfreq=10000; //initial output frequency = 1000.o Hz tword_m=pow(2,32)*dfreq/refclk; //calulate DDS new tuning word } void loop() { while(1) { sbi(PORTB,program_exec_time); //Sets the pin if (c4ms > 0) // c4ms = 4ms, thus 4ms *250 = 1 second delay { c4ms=0; //Reset c4ms //dfreq=map(analogRead(0),0,1230,0,1000); dfreq=map(analogRead(0),0,1023,0,1000); //Read voltage on analog 1 to see desired output frequency, 0V = 0Hz, 5V = 1.023kHz cbi (TIMSK2,TOIE2); //Disable Timer2 Interrupt tword_m=pow(2,32)*dfreq/refclk; //Calulate DDS new tuning word sbi (TIMSK2,TOIE2); //Enable Timer2 Interrupt } } } void Setup_timer0(void) { // Timer1 Clock Prescaler to : 1 //sbi (TCCR0B, CS01)|1<<(CS00); //cbi (TCCR0B, CS01); //cbi (TCCR0B, CS02); TCCR0B = (TCCR0B & 0b11111000) | 0x02; // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR0A, COM0A0); sbi (TCCR0A, COM0A1); cbi (TCCR0A, COM0B0); sbi (TCCR0A, COM0B1); // Mode 1 / Phase Correct PWM sbi (TCCR0A, WGM00); cbi (TCCR0A, WGM01); //cbi (TCCR0B, WGM02); //cbi (TCCR0B, WGM03); } //Set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock void Setup_timer1(void) { TCCR1B = (TCCR1B & 0b11111000) |0x02; // Timer1 Clock Prescaler to : 1 //sbi (TCCR1B, CS10); //cbi (TCCR1B, CS11); //cbi (TCCR1B, CS12); // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR1A, COM1A0); sbi (TCCR1A, COM1A1); cbi (TCCR1A, COM1B0); sbi (TCCR1A, COM1B1); // Mode 1 / Phase Correct PWM sbi (TCCR1A, WGM10); cbi (TCCR1A, WGM11); cbi (TCCR1B, WGM12); cbi (TCCR1B, WGM13); } //Timer 1 setup //Set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock void Setup_timer2() { TCCR2B = (TCCR2B & 0b11111000) | 0x02;// Timer2 Clock Prescaler to : 1 // sbi (TCCR2B, CS20); //cbi (TCCR2B, CS21); //cbi (TCCR2B, CS22); // Timer2 PWM Mode set to Phase Correct PWM cbi (TCCR2A, COM2A0); // clear Compare Match sbi (TCCR2A, COM2A1); cbi (TCCR2A, COM2B0); sbi (TCCR2A, COM2B1); // Mode 1 / Phase Correct PWM sbi (TCCR2A, WGM20); cbi (TCCR2A, WGM21); cbi (TCCR2B, WGM22); } void Setup_timer3(void) { TCCR3B = (TCCR3B & 0b11111000) |0x02;// Timer1 Clock Prescaler to : 1 //sbi (TCCR3B, CS30); //cbi (TCCR3B, CS31); //cbi (TCCR3B, CS32); // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR3A, COM3A0); sbi (TCCR3A, COM3A1); cbi (TCCR3A, COM3B0); sbi (TCCR3A, COM3B1); cbi (TCCR3A, COM3C0); sbi (TCCR3A, COM3C1); // Mode 1 / Phase Correct PWM sbi (TCCR3A, WGM30); cbi (TCCR3A, WGM31); cbi (TCCR3B, WGM32); cbi (TCCR3B, WGM33); cbi (TCCR3C, WGM33); cbi (TCCR3C, WGM33); } //Timer 1 setup //Set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock void Setup_timer4() { TCCR4B = (TCCR4B & 0b11111000) | 0x02;// Timer2 Clock Prescaler to : 1 //sbi (TCCR4B, CS40); //cbi (TCCR4B, CS41); //cbi (TCCR4B, CS42); // Timer2 PWM Mode set to Phase Correct PWM cbi (TCCR4A, COM4A0); // clear Compare Match sbi (TCCR4A, COM4A1); cbi (TCCR4A, COM4B0); sbi (TCCR4A, COM4B1); cbi (TCCR4A, COM4C0); sbi (TCCR4A, COM4C1); // Mode 1 / Phase Correct PWM sbi (TCCR4A, WGM40); cbi (TCCR4A, WGM41); cbi (TCCR4B, WGM42); cbi (TCCR4C, WGM43); cbi (TCCR4C, WGM43); } void Setup_timer5(void) { TCCR5B = (TCCR5B & 0b11111000) |0x02;// Timer1 Clock Prescaler to : 1 //sbi (TCCR5B, CS50); //cbi (TCCR5B, CS51); // // Timer1 PWM Mode set to Phase Correct PWM cbi (TCCR5A, COM5A0); sbi (TCCR5A, COM5A1); cbi (TCCR5A, COM5B0); sbi (TCCR5A, COM5B1); cbi (TCCR5A, COM5C0); sbi (TCCR5A, COM5C1); // Mode 1 / Phase Correct PWM sbi (TCCR5A, WGM50); cbi (TCCR5A, WGM51); cbi (TCCR5B, WGM52); cbi (TCCR5B, WGM53); cbi (TCCR5C, WGM50); } //This is the timebase REFCLOCK for the DDS generator //FOUT = (M (REFCLK)) / (2 exp 32) //Runtime : 8 microseconds ISR(TIMER2_OVF_vect) { cbi(PORTD,program_exec_time); //Clear the pin sbi(PORTD,ISR_exec_time); // Sets the pin phase_accumulator=phase_accumulator+tword_m; //Adds tuning M word to previoud phase accumulator. refer to DDS_calculator (from Martin Nawrath) for explination. current_count=phase_accumulator >> 24; // use upper 8 bits of phase_accumulator as frequency information //motor 1 OCR3B = pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR3C = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR0B = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 2 OCR3A = OCR3B; //OCR0A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR4A = OCR3C;//OCR0B;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR4B = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 3 OCR4C = OCR3B; //OCR0A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR2B = OCR3C;//OCR0B;///pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR2A = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 4 OCR1A = OCR3B; //OCR0A;//OCR2A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR1B = OCR3C;//OCR0B;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR0A = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //motor 5 OCR5A = OCR3B; //OCR0A;//pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM OCR5B = OCR3C;//OCR0B;///pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1 OCR5C = OCR0B;//OCR1A;//pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2 //increment variable ms4_delay every 4mS/125 = milliseconds 32uS if(ms4_delay++ == 125) { c4ms++; ms4_delay=0; //reset count } cbi(PORTD,ISR_exec_time); //Clear the pin } เขียนโดย เอวัมเม สุตัง ฯ เอกัง สะมะยัง ภะคะวา สาวัตถิยัง วิหะระติ เชตะวะเน อะนาถะปิณฑิกัสสะ อาราเม ฯ อะถะโข อัญญะตะรา เทวะตา อะภิกกันตายะ รัตติยา อะภิกกันตะวัณณา เกวะละกัปปัง เชตะวะนัง โอภาเสตวา เยนะ ภะคะวา เต ที่ 07:18 ส่งอีเมลข้อมูลนี้ BlogThis! แชร์ไปที่ Twitter แชร์ไปที่ Facebook แชร์ใน Pinterest ไม่มีความคิดเห็น: โพสต์ความคิดเห็น บทความใหม่กว่าบทความที่เก่ากว่าหน้าแรก สมัครสมาชิก: ส่งความคิดเห็น (Atom) ผู้ติดตาม ที่เก็บของบล็อก ► 2021 (4) ► 2020 (29) ▼ 2017 (722) ► กรกฎาคม (38) ► มิถุนายน (355) ► พฤษภาคม (26) ► เมษายน (61) ▼ มีนาคม (74) อัปนาสมาธิ สมาธิเข้าสู่ มรรคผล นิพพาน เอโกทิภาวะห... วิธีเจริญวิปัสสนากรรมฐานที่ถูกต้องสอนคนให้เข้าใจถึ... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... เข้าเฝ้าพระพุทธเจ้า โดย หลวงพ่อปราโมทย์ ปาโมชฺโช ลูกพระพุทธเจ้า ศิษย์ตถาคตพระพุทธเจ้า...กับ...มังสว... ลูกพระพุทธเจ้า ศิษย์ตถาคตพระพุทธเจ้า...กับ...มังสว... เพลงคาถามงคลจักรวาล 8 ทิศอิมัสมิง มงคลจักรวาฬทั้งแ... เพลงคาถามงคลจักรวาล 8 ทิศอิมัสมิง มงคลจักรวาฬทั้งแ... กำเนิดเอกภพ part1ดวงดาวนับไม่ถ้วน เพราะไม่มีที่สิ้... กำเนิดเอกภพ part1ดวงดาวนับไม่ถ้วน เพราะไม่มีที่สิ้... หลวงปู่ขาว อนาลโย หลวงปู่ขาว อนาลโย หลวงปู่ขาว อนาลโย ความประพฤติของพระโพธิสัตว์อนึ่ง พระมหาบุรุษเมื่อให... พุทโธ ระลึกจิตเศรษฐีมุ่งหน้าเข้าสู่ป่าสีตวัน อันเป... พุทโธ ระลึกจิตเศรษฐีมุ่งหน้าเข้าสู่ป่าสีตวัน อันเป... STM32 5kW 3 Phase Motor Controller Original Video ... พระศาสดาผู้เป็นสัพพัญญู รู้เห็นธรรมทั้งปวง ผู้พิชิ... ทางพ้นทุกข์ ก ไก่ ถึง ฮ นกฮูก โดย หลวงพ่อปราโมทย์ ... ทางพ้นทุกข์ ก ไก่ ถึง ฮ นกฮูก โดย หลวงพ่อปราโมทย์ ... กามภพ รูปภพ อรูปภพจิตของเรามันทำงานทั้งวันทั้งคืน ... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... ขอนอบน้อมแด่พระผู้มีพระภาคเจ้าพระองค์นั้นด้วยเศียร... อาหาร 15 ชนิด ที่เซลล์มะเร็งเกลียดและกลัวมากๆSAMSA... อาหาร 15 ชนิด ที่เซลล์มะเร็งเกลียดและกลัวมากๆSAMSA... อาหาร 15 ชนิด ที่เซลล์มะเร็งเกลียดและกลัวมากๆSAMSA... ถ้าเราทิ้งการรู้กายรู้ใจเราไม่มีวันบรรลุมรรคผลนิพพ... กายนี้ไม่ใช่เรา ใจที่ทำงานอยู่นี้ไม่ใช่เรา จิตที่เ... Arduino variable sine wave max 1000Hz เราไม่มีการโน้มเอียงไปสู่การเกิดใหม่อีกแม้แต่นิดเด... ทางแห่งความหลุดพ้นเวลาที่สติที่แท้จริงเกิดนะ เดี๋ย... ทางแห่งความหลุดพ้นเวลาที่สติที่แท้จริงเกิดนะ เดี๋ย... เครื่องปรับรอบมอเตอร์สามเฟสกำลังสูงเพื่อใช้สูบน้ำจ... การขับมอเตอร์สามเฟสแรงดันต่ำ STM32 5kW 3-Phase Motor Controller จิตของเราถึงธรรมปราศจากเครื่องปรุงแต่งแล้วจิตใจของ... car generator 3 phase motor car generator 3 phase motor car generator 3 phase motor วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไร วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไร วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไรหลวงพ่อปราโ... โลกุตตระชน Buddhist Chant Maha Mangla Suttua 2มังคะละสุตตัง ... วิปัสสนา กรรมฐาน ไม่ใช่เรื่องลึกลับอะไรท่านสอนให้ร... STM32-based ultimate 3-Phase Motor Controller - Te... Arduino 3 Phase Sine Wave GeneratorPower electro... ตัวธาตุรู้นั้นแหละเป็นตัวไปเห็นพระนิพพาน ตรงนี้เรี... มั่งคงในพระพุทธศาสนาเรารักตัวเองมากที่สุดนะเราต้อง... ไม่มีใครทำจิตให้บรรลุมรรคผลนิพพานได้จิตเขาบรรลุของ... วิธีซ่อมไดสตาร์ทรถยนต์วิธีซ่อมไดสตาร์ทรถยนต์ คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า คิดเอง เออเอง เรื่อง มอเตอร์ ไฟฟ้า จิตปกติของมนุษย์ เพื่อนร่วมทาง ใน สังสารวัฏโดยธรรม... จิตปกติของมนุษย์ เพื่อนร่วมทาง ใน สังสารวัฏโดยธรรม... บรรลุช้า บรรลุเร็ว*~ บรรลุช้า-บรรลุเร็ว ~*~ เมื่อเ... วันใดที่จิตมันเดินปัญญาแก่รอบถึงขนาดนี้แล้ว จิตมัน... วันใดที่จิตมันเดินปัญญาแก่รอบถึงขนาดนี้แล้ว จิตมัน... รู้ทุกข์ จิตรวมเข้าอัปปนาสมาธิไม่ว่าเราจะเห็นสภาวะอะไรเกิดข... จิตรวมเข้าอัปปนาสมาธิไม่ว่าเราจะเห็นสภาวะอะไรเกิดข... จิตมหัศจรรย์ อริยมรรค จิตไม่ว่าเราจะเห็นสภาวะอะไรเ... คอมพิวเตอร์เครื่องนี้จะไม่ได้รับการอัพเดทอีกต่อไปเ... การควบคุมมอเตอร์ไฟฟ้ากระแสตรงสัญญาณ PWM ย่อจาก Pul... เครื่องควบคุมควมเร็วสำหรับมอเตอร์ 3 เฟส 5 แรงม้า S... เครื่องควบคุมควมเร็วสำหรับมอเตอร์ 3 เฟส 5 แรงม้า S... เราต้องรู้กายรู้ใจของเราไปเรื่อยๆ แล้ววันหนึ่งเราจ... จิตของเราจะก้าวเข้าสู่สันติสุขและรุ่งเรืองแล้วก็จบ... รูป เวทนา สัญญา สังขาร วิญญาณ เกิดขึ้น แล้ว ก็ดับไป ธรรมเครื่องกำจัดกิเลสพระบรมศาสดาได้ประทานผ้าสังฆาฏ... ธรรมเครื่องกำจัดกิเลสพระบรมศาสดาได้ประทานผ้าสังฆาฏ... ► กุมภาพันธ์ (55) ► มกราคม (113) ► 2016 (837) ► 2015 (6) ► 2014 (115) ► 2013 (1) ► 2012 (1) ► 2010 (1) เกี่ยวกับฉัน รูปภาพของฉัน เอวัมเม สุตัง ฯ เอกัง สะมะยัง ภะคะวา สาวัตถิยัง วิหะระติ เชตะวะเน อะนาถะปิณฑิกัสสะ อาราเม ฯ อะถะโข อัญญะตะรา เทวะตา อะภิกกันตายะ รัตติยา อะภิกกันตะวัณณา เกวะละกัปปัง เชตะวะนัง โอภาเสตวา เยนะ ภะคะวา เต จิตที่เดินมาถึงสังขารุเปกขาญาณ ดูโปรไฟล์ทั้งหมดของฉัน ท่องเที่ยว ธีม. ขับเคลื่อนโดย Blogger.

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ความดับทุกข์#อนิมิตตวิโมกข์#อัปปณิหิตวิโมกข์#สุญญตวิโมกข์#เธออย่าได้กล่า...เข้าสู่ระบบหรือลงทะเบียน หน้าแรก เว็บบอร์ด > พุทธศาสนา > พระไตรปิฎก > เรื่องเด่นคนกิเลสหนากับการบรรลุธรรม ในห้อง 'พระไตรปิฎก' ตั้งกระทู้โดย rachotp, 4 พฤศจิกายน 2021. แท็ก: เพิ่มแท็ก rachotp rachotp เป็นที่รู้จักกันดี สมาชิก Premium ผู้สนับสนุนเว็บพลังจิต วันที่สมัครสมาชิก:9 ตุลาคม 2020 โพสต์:1,214 กระทู้เรื่องเด่น:251 ค่าพลัง:+23,278 A.PNG การบรรลุธรรมของคนที่มีกิเลสหนา เรื่องน่าคิดจากพระไตรปิฎก หลายท่านอาจจะสงสัยว่า “คนที่มีกิเลสหนา บรรลุธรรมไม่ได้” และเชื่อกันมาแบบนี้ แต่พระพุทธเจ้าตรัสถึงเรื่องนี้ไว้ในพระสูตรที่มีชื่อว่า วิตถารสูตร ถึงการบรรลุธรรมของคนที่มีกิเลสหนา ไว้ว่า… บุคคลบางคนในโลกนี้ ตามปกติเป็นผู้มีความกำหนัดยินดีในกาม (ราคะ) ย่อมได้เสวยทุกข์โทมนัสอันเกิดจากความกำหนัดยินดีในกามตลอด เป็นผู้มีความโกรธ (โทสะ) รุนแรง ย่อมได้เสวยทุกข์โทมนัสที่เกิดจากความโกรธตลอด เป็นผู้ที่มีความหลง (โมหะ) รุนแรง ย่อมได้เสวยทุกข์โทมนัสที่เกิดจากความหลงตลอด G.PNG แต่อินทรีย์ 5 ประการ ได้แก่ ศรัทธา วิริยะ สติ สมาธิ และปัญญา เหล่านี้มีความแรงกล้า เขาย่อมบรรลุธรรมอย่างฉับพลัน แต่หากคนผู้นั้นมีกิเลสเป็นราคะ โทสะ และโมหะเบาบาง ไม่ได้มีความทุกข์โทมนัสจากราคะ โทสะ และโมหะ แต่อินทรีย์ทั้ง 5 ประการนี้อ่อน เขาย่อมได้บรรลุมรรคผลล่าช้า การบรรลุธรรมจึงขึ้นอยู่กับอินทรีย์ 5 ประการ F.PNG ระดับของการบรรลุธรรม การบรรลุธรรมของคนที่มีกิเลสหนาถึงจะขึ้นอยู่กับอินทรีย์ 5 แต่ก็มีความช้าและความเร็วแตกต่างกันไป พระพุทธเจ้าทรงจัดระดับไว้ 4 ระดับด้วยกันคือ 1) ทุกขาปฏิปทา ทันธาภิญญา หมายถึง ผู้ที่มีกิเลสหนา แต่มีอินทรีย์ 5 ประการบาง จึงบรรลุธรรมได้ช้า 2) ทุกขาปฏิปทา ขิปปาภิญญา หมายถึง ผู้ที่มีกิเลสหนา แต่มีอินทรีย์ 5 ประการแรงกล้า จึงบรรลุธรรมได้ไว 3) สุขาปฏิปทา ทันธาภิญญา หมายถึง ผู้ที่ไม่มีกิเลส แต่มีอินทรีย์ 5 ประการบาง จึงบรรลุธรรมช้า 4) สุขาปฏิปทา ขิปปาภิญญา หมายถึง ผู้ที่ไม่มีกิเลส และมีอินทรีย์ 5 ประการแรงกล้า จึงบรรลุธรรมได้ไว H.png ทำไมการบรรลุธรรมจึงเกี่ยวข้องกับอินทรีย์ 5 ประการ? อินทรีย์ 5 ได้แก่ ศรัทธา วิริยะ สติ สมาธิ และปัญญา เป็นองค์ธรรมที่ช่วยให้โลภะ โทสะ และโมหะ ลดลง เมื่อมีความเชื่อมั่น (ศรัทธา) ต่อคำสอนของพระพุทธเจ้า จะเกิดความเพียร (วิริยะ) การระลึกรู้ได้ก็จะตามมา (สติ) เมื่อเกิดการระลึกได้สมาธิก็จะตามมา เมื่อมีสมาธิผลที่ได้คือปัญญา ผู้บรรลุอรหันต์ล้วนผ่านองค์ธรรม 5 ประการนี้ D.PNG ตัวอย่างเช่น เจ้าหญิงอภิรูปนันทา เป็นสตรีชนชั้นสูงที่มีความงามเป็นเลิศ จึงมีอุปนิสัยรักสวยรักงาม พอผนวชเป็นภิกษุณี ก็ยังไม่ทรงละอุปนิสัยรักสวยรักงามอยู่ดี พระพุทธเจ้าทรงต้องการโปรดเจ้าหญิงอภิรูปนันทาให้ทราบถึงโทษของการรักสวยรักงาม พระพุทธเจ้าทรงเนรมิตสตรีนางหนึ่งขึ้นมาให้มีความงามประดุจนางฟ้า เจ้าหญิงทรงหลงใหลแล้วชมว่า สตรีนางนี้ช่างมีความงดงามมากกว่าสตรีใดๆที่้เคยพบเห็นมา ไม่นานสตรีนางนี้ก็ค่อยๆ แก่ลง แล้วตายกลายสภาพเป็นศพ และเริ่มเน่าส่งกลิ่นเหม็น แล้วกลายเป็นโครงกระดูกในที่สุด E.PNG เมื่อเจ้าหญิงอภิรูปนันทาทอดพระเนตรดังนั้นแล้วทรงเชื่อ (ศรัทธา) ในคำสอนของพระพุทธเจ้าแล้วว่าการยึดติดในความงามเป็นสิ่งที่เที่ยง แท้ที่จริงแล้วมันเป็นสิ่งที่ไม่เที่ยง เมื่อเจ้าหญิงทรงพิจารณาร่างของสตรีนางนั้นด้วยความตั้งใจ (วิริยะ) เมื่อทรงสังเกตพินิจพิจารณาจนถึงตอนที่สตรีนางนั้นสิ้นลม การระลึกรู้ (สติ) ถึงคำสอนของพระพุทธเจ้าก็บังเกิดขึ้นในบัดนั้นทันที พอทรงมีสติพิจารณาใคร่ครวญอย่างถี่ถ้วนดีแล้ว จึงบังเกิดความสงบ (สมาธิ) ขึ้น เจ้าหญิงอภิรูปนันทาเกิดความเข้าพระทัยว่า สิ่งที่พระนางหลงใหล (โลภะ) ในความงามนั้น เป็นความเขลาเบาปัญญา ทำให้พระนางตรึงอยู่ในกระแสแห่งการเวียนว่ายตายเกิดต่อไป B.PNG พระนางทรงข้ามฝั่งแห่งน่านน้ำอวิชชามาถึงฝั่งแห่งวิชชา อันเกิดจากการพิจารณาร่างของสตรีซึ่งถูกเนรมิต จนทำให้พระนางบรรลุธรรม เจ้าหญิงอภิรูปนันทา เป็นตัวอย่างที่ทำให้เห็นว่าคนที่มีกิเลสหนา ที่บรรลุธรรมได้นั้นมีอยู่จริง แต่อินทรีย์ 5 ประการของพระนางถึงพร้อม พระพุทธเจ้าทรงเห็นจึงได้มาโปรดพระนางด้วยวิธีนี้จนพระนางบรรลุธรรม C.PNG Credit: ขอขอบพระคุณที่มาจาก วิตถารสูตร ว่าด้วยปฏิปทาโดยพิสดาร พระไตรปิฎกเล่มที่ ๒๑ พระสุตตันตปิฎกเล่มที่ ๑๓ [ฉบับมหาจุฬาฯ] อังคุตตรนิกาย จตุกกนิบาต "นะโม วิมุตตานัง นะโม วิมุตติยา" "ชินะปัญชะระ ปะริตตังมัง รักขะตุสัพพะทา" "มะอะอุ นะโม วิมุตตานัง นะโมวิมุตติยา ราหุ สุริยัง จันทัง ปะมุจจะสุ" "พุท ธะ สัง วิ หะ ระ ตัง ปุญ ญัง วะ ทา มิ"