วันศุกร์ที่ 30 กันยายน พ.ศ. 2559

การฝึกใจให้ฉลาด ให้เข้าใจ ความจริงของโลก เข้าใจ ความจริงของชีวิตกราบขอบพระคุณและอนุโมทนาท่านอาจารย์มากครับ ที่ให้โอกาส หลวงพ่อได้รับทราบถึงความห่วงใยและความปรารถนาดีของทุกคนแล้ว ขออนุโมทนากับทุกคนสำหรับคำอวยพรทั้งปวง หลวงพ่อเริ่มอาพาธครั้งนี้ตั้งแต่ช่วงสงกรานต์ มีอาการเหนื่อยหอบ ไอ และต่อมน้ำเหลืองโต จึงได้เข้ารับการตรวจอาการเบื้องต้นในโรงพยาบาลในย่านพัทยา ถัดจากนั้นจึงเดินทางเข้ามาตรวจรักษาในโรงพยาบาลของรัฐในกรุงเทพ ผลการตรวจชิ้นเนื้อออกมาเมื่อวานนี้ (31 พฤษภาคม 2559) สรุปได้ว่าเป็นมะเร็งต่อมน้ำเหลือง จำเป็นจะต้องรักษาตัวนานราว 8 เดือน ระหว่างนี้ภูมิต้านทานจะต่ำมาก แพทย์ผู้ดูแลจึงแนะนำให้งดการแสดงธรรมทั้งที่วัดและนอกสถานที่ รวมทั้งไม่ต้องการให้มีการเยี่ยมไข้เพราะเป็นผลเสียต่อหลวงพ่อมากกว่าผลดี หลวงพ่อตรากตรำทำงานเผยแผ่มานานแล้ว ช่วงนี้ต้องขอลาป่วยชั่วคราว ระหว่างนี้ขอให้ทุกคนตั้งใจภาวนาเพราะโลกนี้หาความแน่นอนใดๆ ไม่ได้เลย ไม่ต้องกังวลว่าจะภาวนาไม่ได้ เพราะหลวงพ่อได้ถ่ายทอดธรรมะภาคปฏิบัติไว้ครบถ้วนแล้ว ให้ใช้โยนิโสมนสิการคือความแยบคายในการสังเกตการปฏิบัติของตนให้มาก ว่าถูกตรงตามคำสอนของพระพุทธเจ้าหรือไม่ ถ้าติดขัดจริงๆ ก็ให้ปรึกษาบุคคลที่หลวงพ่อมอบหมายให้ช่วยสอนได้ อย่าฉวยโอกาสที่หลวงพ่ออาพาธไปเที่ยวเถลไถลหรือขี้เกียจปฏิบัติก็แล้วกัน หลวงพ่อไม่ได้ต้องการสิ่งใดจากพวกเรา นอกจากให้พวกเราขยันภาวนาเพื่อผ่อนคลายความทุกข์ของตนเอง และเพื่อช่วยกันรักษาสืบทอดพระพุทธศาสนาต่อไป ถ้าคิดถึงหลวงพ่อ ก็ขอให้คิดถึงธรรม

ศีลเป็นเยี่ยมในโลก สมถะ อันบุคคลเจริญแล้ว อบรมแล้ว ย่อมทำให้ละราคะ หลุดพ.กราบขอบพระคุณและอนุโมทนาท่านอาจารย์มากครับ ที่ให้โอกาส หลวงพ่อได้รับทราบถึงความห่วงใยและความปรารถนาดีของทุกคนแล้ว ขออนุโมทนากับทุกคนสำหรับคำอวยพรทั้งปวง หลวงพ่อเริ่มอาพาธครั้งนี้ตั้งแต่ช่วงสงกรานต์ มีอาการเหนื่อยหอบ ไอ และต่อมน้ำเหลืองโต จึงได้เข้ารับการตรวจอาการเบื้องต้นในโรงพยาบาลในย่านพัทยา ถัดจากนั้นจึงเดินทางเข้ามาตรวจรักษาในโรงพยาบาลของรัฐในกรุงเทพ ผลการตรวจชิ้นเนื้อออกมาเมื่อวานนี้ (31 พฤษภาคม 2559) สรุปได้ว่าเป็นมะเร็งต่อมน้ำเหลือง จำเป็นจะต้องรักษาตัวนานราว 8 เดือน ระหว่างนี้ภูมิต้านทานจะต่ำมาก แพทย์ผู้ดูแลจึงแนะนำให้งดการแสดงธรรมทั้งที่วัดและนอกสถานที่ รวมทั้งไม่ต้องการให้มีการเยี่ยมไข้เพราะเป็นผลเสียต่อหลวงพ่อมากกว่าผลดี หลวงพ่อตรากตรำทำงานเผยแผ่มานานแล้ว ช่วงนี้ต้องขอลาป่วยชั่วคราว ระหว่างนี้ขอให้ทุกคนตั้งใจภาวนาเพราะโลกนี้หาความแน่นอนใดๆ ไม่ได้เลย ไม่ต้องกังวลว่าจะภาวนาไม่ได้ เพราะหลวงพ่อได้ถ่ายทอดธรรมะภาคปฏิบัติไว้ครบถ้วนแล้ว ให้ใช้โยนิโสมนสิการคือความแยบคายในการสังเกตการปฏิบัติของตนให้มาก ว่าถูกตรงตามคำสอนของพระพุทธเจ้าหรือไม่ ถ้าติดขัดจริงๆ ก็ให้ปรึกษาบุคคลที่หลวงพ่อมอบหมายให้ช่วยสอนได้ อย่าฉวยโอกาสที่หลวงพ่ออาพาธไปเที่ยวเถลไถลหรือขี้เกียจปฏิบัติก็แล้วกัน หลวงพ่อไม่ได้ต้องการสิ่งใดจากพวกเรา นอกจากให้พวกเราขยันภาวนาเพื่อผ่อนคลายความทุกข์ของตนเอง และเพื่อช่วยกันรักษาสืบทอดพระพุทธศาสนาต่อไป ถ้าคิดถึงหลวงพ่อ ก็ขอให้คิดถึงธรรม..

Arduino VFD Variable Frequency Drive อุปกรณ์ ตามคลิป มีจำหน่าย ที่ sompong industrial electronics 02-951-1356 Line pornpimon 1411 Email sompongindustrial@gmail.com. รุ่นใหม่ ราคา1000 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino UNO ลงโปรแกรม VFD Variable Frequency Drive และทดสอบแล้ว 1 บอร์ด ราคา 800 บาท และ PS219A2 1 ตัว ราคา 200 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 48 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts ใช้กับ PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D สำหรับท่านที่ซื้ออุปกรณ์นี้ไปแล้วหรือกำลังคิดจะซื้อ..ที่ยังหาวงจรสำหรับขับไม่ได้ ให้ใช้วงจรนี้ได้นะครับ.. 02-951-1356 ยินดีและขอบพระคุณทุกท่าน.มากครับ TOSHIBA GT15J331 ราคา ตัวละ 300 บาท 4 ตัว ราคา ตัวละ 250 บาทครับ บอร์ด drive l6569 บอร์ดละ 100 บาท แกนเฟอไรท์ มีหลาย ขนาด TOSHIBA Insulated Gate Bipolar Transistor Silicon N Channel IGBT GT15J331High Power Switching ApplicationsMotor Control Applications The 4th Generation Enhancement-Mode High Speed: tf = 0.10 µs (typ.) Low Saturation Voltage: VCE (sat) = 1.75 V (typ.) FRD included between Emitter and collector.Maximum Ratings (Ta 25°C)Characteristic Symbol Rating UnitCollector-emitter voltage VCES 600 VGate-emitter voltage VGES 20 VDC IC 15Collector current 1 ms ICP 30ADC IF 15 A Emitter-collector forward current 1 ms IFM 30 WCollector power dissipation(Tc 25°C) PC 70 WJunction temperature Tj 150 °CStorage temperature range Tstg 55~150 °C Equiท่านที่ส่งงานให้ผมซ่อมให้ส่งเฉพาะแผงวงจร..มาทางไปรษณีย์...ติดต่อที่ 02-951-1356 มือถือ 081-803-6553 LINE IDคือ pornpimon1411 ครับ...email mrsompongt@hotmail.com sompongindustrial@gmail.comส่ง สมพงค์ ทุ่งมีผล 69/6 ซอยปิ่นประภาคม 3 ติวานนท์ 18 แยก 5 ถนนติวานนท์ ตำบลตลาดขวัญ อำเภอเมือง จังหวัดนนทบุรี 11000 จำหน่าย Mosfet 2SK2698 2SK2611 TOSHIBA JAPAN แท้ ราคา ตัวละ 35 บาท 3 ตัว 100 บาท สำหรับ ท่านที่ทำงาน ซ่อม ตู้เชื่อม อินเวอร์เตอร์ ครับ.. จำหน่าย TLP3506 TOSHIBA Photocoupler GaAs Ired & Photo-Triac TLP3506 Triac Driver Programmable Controllers. ทีีใช้ในเครื่องซักผ้า ราคาตัวละ 30 บาทครับ...ใช้แทน R23MF1 ไดัครับ. จำหน่าย Power Module PS21244 PS21963 PS219A2 6DI15S-050 ราคาตัวละ 300 บาท ใช้สำหรับ สร้าง ซ่อม อินเวอร์เตอร์ สามเฟส. เครื่องควบคุมความเร็วมอเตอร์สามเฟสแบบอินเวอร์เตอร์ (Inverter) สามารถควบคุมความเร็ว (Speed) ได้ตั้งแต่ศูนย์จนถึงความเร็วตามพิกัดของมอเตอร์ นิยมใช้กันมาก ในเครื่องใช้ไฟฟ้าที่มีมอเตอร์ ยุคปัจจุบัน เช่น แอร์อินเวอร์เตอร์ ตู้เย็น อินเวอร์เตอร์ เครื่องซักผ้า อินเวอร์เตอร์ ปั๊มน้ำ อินเวอร์เตอร์ เครื่อง สูบน้ำ อินเวอร์เตอร์ รถ จักรยาน ไฟฟ้า รถยนต์ไฟฟ้า เรือไฟฟ้า ยานพาหนะ ในยุคปัจจุบันและอนาคต ล้วนต้องใช้ อินเวอร์เตอร์

Arduino VFD Variable Frequency Driveอุปกรณ์ ตามคลิป มีจำหน่าย ที่ sompong industrial electronics 02-951-1356 Line pornpimon 1411 Email sompongindustrial@gmail.com. รุ่นใหม่ ราคา1000 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino UNO ลงโปรแกรม VFD Variable Frequency Drive และทดสอบแล้ว 1 บอร์ด ราคา 800 บาท และ PS219A2 1 ตัว ราคา 200 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 48 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts ใช้กับ PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D สำหรับท่านที่ซื้ออุปกรณ์นี้ไปแล้วหรือกำลังคิดจะซื้อ..ที่ยังหาวงจรสำหรับขับไม่ได้ ให้ใช้วงจรนี้ได้นะครับ.. 02-951-1356 ยินดีและขอบพระคุณทุกท่าน.มากครับ TOSHIBA GT15J331 ราคา ตัวละ 300 บาท 4 ตัว ราคา ตัวละ 250 บาทครับ บอร์ด drive l6569 บอร์ดละ 100 บาท แกนเฟอไรท์ มีหลาย ขนาด TOSHIBA Insulated Gate Bipolar Transistor Silicon N Channel IGBT GT15J331High Power Switching ApplicationsMotor Control Applications The 4th Generation Enhancement-Mode High Speed: tf = 0.10 µs (typ.) Low Saturation Voltage: VCE (sat) = 1.75 V (typ.) FRD included between Emitter and collector.Maximum Ratings (Ta 25°C)Characteristic Symbol Rating UnitCollector-emitter voltage VCES 600 VGate-emitter voltage VGES 20 VDC IC 15Collector current 1 ms ICP 30ADC IF 15 A Emitter-collector forward current 1 ms IFM 30 WCollector power dissipation(Tc 25°C) PC 70 WJunction temperature Tj 150 °CStorage temperature range Tstg 55~150 °C Equiท่านที่ส่งงานให้ผมซ่อมให้ส่งเฉพาะแผงวงจร..มาทางไปรษณีย์...ติดต่อที่ 02-951-1356 มือถือ 081-803-6553 LINE IDคือ pornpimon1411 ครับ...email mrsompongt@hotmail.com sompongindustrial@gmail.comส่ง สมพงค์ ทุ่งมีผล 69/6 ซอยปิ่นประภาคม 3 ติวานนท์ 18 แยก 5 ถนนติวานนท์ ตำบลตลาดขวัญ อำเภอเมือง จังหวัดนนทบุรี 11000 จำหน่าย Mosfet 2SK2698 2SK2611 TOSHIBA JAPAN แท้ ราคา ตัวละ 35 บาท 3 ตัว 100 บาท สำหรับ ท่านที่ทำงาน ซ่อม ตู้เชื่อม อินเวอร์เตอร์ ครับ.. จำหน่าย TLP3506 TOSHIBA Photocoupler GaAs Ired & Photo-Triac TLP3506 Triac Driver Programmable Controllers. ทีีใช้ในเครื่องซักผ้า ราคาตัวละ 30 บาทครับ...ใช้แทน R23MF1 ไดัครับ. จำหน่าย Power Module PS21244 PS21963 PS219A2 6DI15S-050 ราคาตัวละ 300 บาท ใช้สำหรับ สร้าง ซ่อม อินเวอร์เตอร์ สามเฟส. เครื่องควบคุมความเร็วมอเตอร์สามเฟสแบบอินเวอร์เตอร์ (Inverter) สามารถควบคุมความเร็ว (Speed) ได้ตั้งแต่ศูนย์จนถึงความเร็วตามพิกัดของมอเตอร์ นิยมใช้กันมาก ในเครื่องใช้ไฟฟ้าที่มีมอเตอร์ ยุคปัจจุบัน เช่น แอร์อินเวอร์เตอร์ ตู้เย็น อินเวอร์เตอร์ เครื่องซักผ้า อินเวอร์เตอร์ ปั๊มน้ำ อินเวอร์เตอร์ เครื่อง สูบน้ำ อินเวอร์เตอร์ รถ จักรยาน ไฟฟ้า รถยนต์ไฟฟ้า เรือไฟฟ้า ยานพาหนะ ในยุคปัจจุบันและอนาคต ล้วนต้องใช้ อินเวอร์เตอร์

Arduino VFD Variable Frequency Driveอุปกรณ์ ตามคลิป มีจำหน่าย ที่ sompong industrial electronics 02-951-1356 Line pornpimon 1411 Email sompongindustrial@gmail.com. รุ่นใหม่ ราคา1000 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino UNO ลงโปรแกรม VFD Variable Frequency Drive และทดสอบแล้ว 1 บอร์ด ราคา 800 บาท และ PS219A2 1 ตัว ราคา 200 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 48 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts ใช้กับ PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D สำหรับท่านที่ซื้ออุปกรณ์นี้ไปแล้วหรือกำลังคิดจะซื้อ..ที่ยังหาวงจรสำหรับขับไม่ได้ ให้ใช้วงจรนี้ได้นะครับ.. 02-951-1356 ยินดีและขอบพระคุณทุกท่าน.มากครับ TOSHIBA GT15J331 ราคา ตัวละ 300 บาท 4 ตัว ราคา ตัวละ 250 บาทครับ บอร์ด drive l6569 บอร์ดละ 100 บาท แกนเฟอไรท์ มีหลาย ขนาด TOSHIBA Insulated Gate Bipolar Transistor Silicon N Channel IGBT GT15J331High Power Switching ApplicationsMotor Control Applications The 4th Generation Enhancement-Mode High Speed: tf = 0.10 µs (typ.) Low Saturation Voltage: VCE (sat) = 1.75 V (typ.) FRD included between Emitter and collector.Maximum Ratings (Ta 25°C)Characteristic Symbol Rating UnitCollector-emitter voltage VCES 600 VGate-emitter voltage VGES 20 VDC IC 15Collector current 1 ms ICP 30ADC IF 15 A Emitter-collector forward current 1 ms IFM 30 WCollector power dissipation(Tc 25°C) PC 70 WJunction temperature Tj 150 °CStorage temperature range Tstg 55~150 °C Equiท่านที่ส่งงานให้ผมซ่อมให้ส่งเฉพาะแผงวงจร..มาทางไปรษณีย์...ติดต่อที่ 02-951-1356 มือถือ 081-803-6553 LINE IDคือ pornpimon1411 ครับ...email mrsompongt@hotmail.com sompongindustrial@gmail.comส่ง สมพงค์ ทุ่งมีผล 69/6 ซอยปิ่นประภาคม 3 ติวานนท์ 18 แยก 5 ถนนติวานนท์ ตำบลตลาดขวัญ อำเภอเมือง จังหวัดนนทบุรี 11000 จำหน่าย Mosfet 2SK2698 2SK2611 TOSHIBA JAPAN แท้ ราคา ตัวละ 35 บาท 3 ตัว 100 บาท สำหรับ ท่านที่ทำงาน ซ่อม ตู้เชื่อม อินเวอร์เตอร์ ครับ.. จำหน่าย TLP3506 TOSHIBA Photocoupler GaAs Ired & Photo-Triac TLP3506 Triac Driver Programmable Controllers. ทีีใช้ในเครื่องซักผ้า ราคาตัวละ 30 บาทครับ...ใช้แทน R23MF1 ไดัครับ. จำหน่าย Power Module PS21244 PS21963 PS219A2 6DI15S-050 ราคาตัวละ 300 บาท ใช้สำหรับ สร้าง ซ่อม อินเวอร์เตอร์ สามเฟส. เครื่องควบคุมความเร็วมอเตอร์สามเฟสแบบอินเวอร์เตอร์ (Inverter) สามารถควบคุมความเร็ว (Speed) ได้ตั้งแต่ศูนย์จนถึงความเร็วตามพิกัดของมอเตอร์ นิยมใช้กันมาก ในเครื่องใช้ไฟฟ้าที่มีมอเตอร์ ยุคปัจจุบัน เช่น แอร์อินเวอร์เตอร์ ตู้เย็น อินเวอร์เตอร์ เครื่องซักผ้า อินเวอร์เตอร์ ปั๊มน้ำ อินเวอร์เตอร์ เครื่อง สูบน้ำ อินเวอร์เตอร์ รถ จักรยาน ไฟฟ้า รถยนต์ไฟฟ้า เรือไฟฟ้า ยานพาหนะ ในยุคปัจจุบันและอนาคต ล้วนต้องใช้ อินเวอร์เตอร์

วิธีสร้างเครื่องอินเวอร์เตอร์สำหรับมอเตอร์สามเฟสใช้เองเพื่อสูบน้ำบาดาลด้...รุ่นใหม่ ราคา1000 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino UNO ลงโปรแกรม VFD Variable Frequency Drive และทดสอบแล้ว 1 บอร์ด ราคา 800 บาท และ PS219A2 1 ตัว ราคา 200 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 48 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts เพื่อนำไปจ่ายให้กับ TM 52 A ครับ TM 52 A จะทำหน้าที่ขับมอเตอร์ สามเฟส 220/380 Volts สูงสุดที่ประมาณ 3- 5 แรงม้าแนะนำให้ใช้ที่..3 แรงม้าครับ..บอร์ด MC3PHAC ทำหน้าที่ สร้างและกำหนดค่าของสัญญาณ สามเฟส SINE WAVE แบบ PWM ครับ..มีจำหน่ายหลายที่ครับ ติดต่อกันเองก็แล้วกัน ถ้าหาไม่ได้ ลองโทรไปที่ 02 951 1356 และ 081-803-6553 นะครับ...หรือ ติดต่อที่ s o m p o n g i n d u s t r i a l @ g mail .com m r s o m p o n g t @h o t mail.comm ก็ได้ครับ จำหน่าย PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D TM 51 สำหรับท่านที่ซื้ออุปกรณ์นี้ไปแล้วหรือกำลังคิดจะซื้อ..ที่ยังหาวงจรสำหรับขับไม่ได้ ให้ใช้วงจรนี้ได้นะครับ.. 02-951-1356 ยินดีและขอบพระคุณทุกท่าน.มากครับ TOSHIBA GT15J331 ราคา ตัวละ 300 บาท 4 ตัว ราคา ตัวละ 250 บาทครับ บอร์ด drive l6569 บอร์ดละ 100 บาท แกนเฟอไรท์ มีหลาย ขนาด TOSHIBA Insulated Gate Bipolar Transistor Silicon N Channel IGBT GT15J331High Power Switching ApplicationsMotor Control Applications The 4th Generation Enhancement-Mode High Speed: tf = 0.10 µs (typ.) Low Saturation Voltage: VCE (sat) = 1.75 V (typ.) FRD included between Emitter and collector.Maximum Ratings (Ta 25°C)Characteristic Symbol Rating UnitCollector-emitter voltage VCES 600 VGate-emitter voltage VGES 20 VDC IC 15Collector current 1 ms ICP 30ADC IF 15 A Emitter-collector forward current 1 ms IFM 30 WCollector power dissipation(Tc 25°C) PC 70 WJunction temperature Tj 150 °CStorage temperature range Tstg 55~150 °C Equiท่านที่ส่งงานให้ผมซ่อมให้ส่งเฉพาะแผงวงจร..มาทางไปรษณีย์...ติดต่อที่ 02-951-1356 มือถือ 081-803-6553 LINE IDคือ pornpimon1411 ครับ...email mrsompongt@hotmail.com sompongindustrial@gmail.comส่ง สมพงค์ ทุ่งมีผล 69/6 ซอยปิ่นประภาคม 3 ติวานนท์ 18 แยก 5 ถนนติวานนท์ ตำบลตลาดขวัญ อำเภอเมือง จังหวัดนนทบุรี 11000 จำหน่าย Mosfet 2SK2698 2SK2611 TOSHIBA JAPAN แท้ ราคา ตัวละ 35 บาท 3 ตัว 100 บาท สำหรับ ท่านที่ทำงาน ซ่อม ตู้เชื่อม อินเวอร์เตอร์ ครับ.. จำหน่าย TLP3506 TOSHIBA Photocoupler GaAs Ired & Photo-Triac TLP3506 Triac Driver Programmable Controllers. ทีีใช้ในเครื่องซักผ้า ราคาตัวละ 30 บาทครับ...ใช้แทน R23MF1 ไดัครับ. จำหน่าย Power Module PS21244 PS21963 PS219A2 6DI15S-050 ราคาตัวละ 300 บาท ใช้สำหรับ สร้าง ซ่อม อินเวอร์เตอร์ สามเฟส. เครื่องควบคุมความเร็วมอเตอร์สามเฟสแบบอินเวอร์เตอร์ (Inverter) สามารถควบคุมความเร็ว (Speed) ได้ตั้งแต่ศูนย์จนถึงความเร็วตามพิกัดของมอเตอร์ นิยมใช้กันมาก ในเครื่องใช้ไฟฟ้าที่มีมอเตอร์ ยุคปัจจุบัน เช่น แอร์อินเวอร์เตอร์ ตู้เย็น อินเวอร์เตอร์ เครื่องซักผ้า อินเวอร์เตอร์ ปั๊มน้ำ อินเวอร์เตอร์ เครื่อง สูบน้ำ อินเวอร์เตอร์ รถ จักรยาน ไฟฟ้า รถยนต์ไฟฟ้า เรือไฟฟ้า ยานพาหนะ ในยุคปัจจุบันและอนาคต ล้วนต้องใช้ อินเวอร์เตอร์

วันพฤหัสบดีที่ 29 กันยายน พ.ศ. 2559

สร้างออกแบบแผงวงจรอิเล็กทรอนิกส์ ปรับรอบมอเตอร์ไฟฟ้าสามเฟสสำหรับท่านที่ซื้ออุปกรณ์นี้ไปแล้วหรือกำลังคิดจะซื้อ..ที่ยังหาวงจรสำหรับขับไม่ได้ ให้ใช้วงจรนี้ได้นะครับ.. 02-951-1356 ยินดีและขอบพระคุณทุกท่าน.มากครับ TOSHIBA GT15J331 ราคา ตัวละ 300 บาท 4 ตัว ราคา ตัวละ 250 บาทครับ บอร์ด drive l6569 บอร์ดละ 100 บาท แกนเฟอไรท์ มีหลาย ขนาดที่ใหญ่สุดที่มีเป็นขนาดเส้นผ่าศูนย์กลาง 5 นิ้ว ราคา 400 บาท ครับ TOSHIBA Insulated Gate Bipolar Transistor Silicon N Channel IGBT GT15J331High Power Switching ApplicationsMotor Control Applications The 4th Generation Enhancement-Mode High Speed: tf = 0.10 µs (typ.) Low Saturation Voltage: VCE (sat) = 1.75 V (typ.) FRD included between Emitter and collector.Maximum Ratings (Ta 25°C)Characteristic Symbol Rating UnitCollector-emitter voltage VCES 600 VGate-emitter voltage VGES 20 VDC IC 15Collector current 1 ms ICP 30ADC IF 15 A Emitter-collector forward current 1 ms IFM 30 WCollector power dissipation(Tc 25°C) PC 70 WJunction temperature Tj 150 °CStorage temperature range Tstg 55~150 °C Equiท่านที่ส่งงานให้ผมซ่อมให้ส่งเฉพาะแผงวงจร..มาทางไปรษณีย์...ติดต่อที่ 02-951-1356 มือถือ 081-803-6553 LINE IDคือ pornpimon1411 ครับ...email mrsompongt@hotmail.com sompongindustrial@gmail.comส่ง สมพงค์ ทุ่งมีผล 69/6 ซอยปิ่นประภาคม 3 ติวานนท์ 18 แยก 5 ถนนติวานนท์ ตำบลตลาดขวัญ อำเภอเมือง จังหวัดนนทบุรี 11000 จำหน่าย Mosfet 2SK2698 2SK2611 TOSHIBA JAPAN แท้ ราคา ตัวละ 35 บาท 3 ตัว 100 บาท สำหรับ ท่านที่ทำงาน ซ่อม ตู้เชื่อม อินเวอร์เตอร์ ครับ.. จำหน่าย TLP3506 TOSHIBA Photocoupler GaAs Ired & Photo-Triac TLP3506 Triac Driver Programmable Controllers. ทีีใช้ในเครื่องซักผ้า ราคาตัวละ 30 บาทครับ...ใช้แทน R23MF1 ไดัครับ. จำหน่าย Power Module PS21244 PS21963 PS219A2 6DI15S-050 ราคาตัวละ 300 บาท ใช้สำหรับ สร้าง ซ่อม อินเวอร์เตอร์ สามเฟส. เครื่องควบคุมความเร็วมอเตอร์สามเฟสแบบอินเวอร์เตอร์ (Inverter) สามารถควบคุมความเร็ว (Speed) ได้ตั้งแต่ศูนย์จนถึงความเร็วตามพิกัดของมอเตอร์ นิยมใช้กันมาก ในเครื่องใช้ไฟฟ้าที่มีมอเตอร์ ยุคปัจจุบัน เช่น แอร์อินเวอร์เตอร์ ตู้เย็น อินเวอร์เตอร์ เครื่องซักผ้า อินเวอร์เตอร์ ปั๊มน้ำ อินเวอร์เตอร์ เครื่อง สูบน้ำ อินเวอร์เตอร์ รถ จักรยาน ไฟฟ้า รถยนต์ไฟฟ้า เรือไฟฟ้า ยานพาหนะ ในยุคปัจจุบันและอนาคต ล้วนต้องใช้ อินเวอร์เตอร์

ความรู้สู่เยาวชน การสร้าง PURE SINE INVERTER แบบ PWMตอนที่ 1สำหรับท่านที่ซื้ออุปกรณ์นี้ไปแล้วหรือกำลังคิดจะซื้อ..ที่ยังหาวงจรสำหรับขับไม่ได้ ให้ใช้วงจรนี้ได้นะครับ.. 02-951-1356 ยินดีและขอบพระคุณทุกท่าน.มากครับ TOSHIBA GT15J331 ราคา ตัวละ 300 บาท 4 ตัว ราคา ตัวละ 250 บาทครับ บอร์ด drive l6569 บอร์ดละ 100 บาท แกนเฟอไรท์ มีหลาย ขนาดที่ใหญ่สุดที่มีเป็นขนาดเส้นผ่าศูนย์กลาง 5 นิ้ว ราคา 400 บาท ครับ TOSHIBA Insulated Gate Bipolar Transistor Silicon N Channel IGBT GT15J331High Power Switching ApplicationsMotor Control Applications The 4th Generation Enhancement-Mode High Speed: tf = 0.10 µs (typ.) Low Saturation Voltage: VCE (sat) = 1.75 V (typ.) FRD included between Emitter and collector.Maximum Ratings (Ta 25°C)Characteristic Symbol Rating UnitCollector-emitter voltage VCES 600 VGate-emitter voltage VGES 20 VDC IC 15Collector current 1 ms ICP 30ADC IF 15 A Emitter-collector forward current 1 ms IFM 30 WCollector power dissipation(Tc 25°C) PC 70 WJunction temperature Tj 150 °CStorage temperature range Tstg 55~150 °C Equiท่านที่ส่งงานให้ผมซ่อมให้ส่งเฉพาะแผงวงจร..มาทางไปรษณีย์...ติดต่อที่ 02-951-1356 มือถือ 081-803-6553 LINE IDคือ pornpimon1411 ครับ...email mrsompongt@hotmail.com sompongindustrial@gmail.comส่ง สมพงค์ ทุ่งมีผล 69/6 ซอยปิ่นประภาคม 3 ติวานนท์ 18 แยก 5 ถนนติวานนท์ ตำบลตลาดขวัญ อำเภอเมือง จังหวัดนนทบุรี 11000 จำหน่าย Mosfet 2SK2698 2SK2611 TOSHIBA JAPAN แท้ ราคา ตัวละ 35 บาท 3 ตัว 100 บาท สำหรับ ท่านที่ทำงาน ซ่อม ตู้เชื่อม อินเวอร์เตอร์ ครับ.. จำหน่าย TLP3506 TOSHIBA Photocoupler GaAs Ired & Photo-Triac TLP3506 Triac Driver Programmable Controllers. ทีีใช้ในเครื่องซักผ้า ราคาตัวละ 30 บาทครับ...ใช้แทน R23MF1 ไดัครับ. จำหน่าย Power Module PS21244 PS21963 PS219A2 6DI15S-050 ราคาตัวละ 300 บาท ใช้สำหรับ สร้าง ซ่อม อินเวอร์เตอร์ สามเฟส. เครื่องควบคุมความเร็วมอเตอร์สามเฟสแบบอินเวอร์เตอร์ (Inverter) สามารถควบคุมความเร็ว (Speed) ได้ตั้งแต่ศูนย์จนถึงความเร็วตามพิกัดของมอเตอร์ นิยมใช้กันมาก ในเครื่องใช้ไฟฟ้าที่มีมอเตอร์ ยุคปัจจุบัน เช่น แอร์อินเวอร์เตอร์ ตู้เย็น อินเวอร์เตอร์ เครื่องซักผ้า อินเวอร์เตอร์ ปั๊มน้ำ อินเวอร์เตอร์ เครื่อง สูบน้ำ อินเวอร์เตอร์ รถ จักรยาน ไฟฟ้า รถยนต์ไฟฟ้า เรือไฟฟ้า ยานพาหนะ ในยุคปัจจุบันและอนาคต ล้วนต้องใช้ อินเวอร์เตอร์

สำหรับท่านที่ซื้ออุปกรณ์นี้ไปแล้วหรือกำลังคิดจะซื้อ..ที่ยังหาวงจรสำหรับขับไม่ได้ ให้ใช้วงจรนี้ได้นะครับ.. 02-951-1356 ยินดีและขอบพระคุณทุกท่าน.มากครับ TOSHIBA GT15J331 ราคา ตัวละ 300 บาท 4 ตัว ราคา ตัวละ 250 บาทครับ บอร์ด drive l6569 บอร์ดละ 100 บาท แกนเฟอไรท์ มีหลาย ขนาดที่ใหญ่สุดที่มีเป็นขนาดเส้นผ่าศูนย์กลาง 5 นิ้ว ราคา 400 บาท ครับ TOSHIBA Insulated Gate Bipolar Transistor Silicon N Channel IGBT GT15J331High Power Switching ApplicationsMotor Control Applications The 4th Generation Enhancement-Mode High Speed: tf = 0.10 µs (typ.) Low Saturation Voltage: VCE (sat) = 1.75 V (typ.) FRD included between Emitter and collector.Maximum Ratings (Ta 25°C)Characteristic Symbol Rating UnitCollector-emitter voltage VCES 600 VGate-emitter voltage VGES 20 VDC IC 15Collector current 1 ms ICP 30ADC IF 15 A Emitter-collector forward current 1 ms IFM 30 WCollector power dissipation(Tc 25°C) PC 70 WJunction temperature Tj 150 °CStorage temperature range Tstg 55~150 °C Equiท่านที่ส่งงานให้ผมซ่อมให้ส่งเฉพาะแผงวงจร..มาทางไปรษณีย์...ติดต่อที่ 02-951-1356 มือถือ 081-803-6553 LINE IDคือ pornpimon1411 ครับ...email mrsompongt@hotmail.com sompongindustrial@gmail.comส่ง สมพงค์ ทุ่งมีผล 69/6 ซอยปิ่นประภาคม 3 ติวานนท์ 18 แยก 5 ถนนติวานนท์ ตำบลตลาดขวัญ อำเภอเมือง จังหวัดนนทบุรี 11000 จำหน่าย Mosfet 2SK2698 2SK2611 TOSHIBA JAPAN แท้ ราคา ตัวละ 35 บาท 3 ตัว 100 บาท สำหรับ ท่านที่ทำงาน ซ่อม ตู้เชื่อม อินเวอร์เตอร์ ครับ.. จำหน่าย TLP3506 TOSHIBA Photocoupler GaAs Ired & Photo-Triac TLP3506 Triac Driver Programmable Controllers. ทีีใช้ในเครื่องซักผ้า ราคาตัวละ 30 บาทครับ...ใช้แทน R23MF1 ไดัครับ. จำหน่าย Power Module PS21244 PS21963 PS219A2 6DI15S-050 ราคาตัวละ 300 บาท ใช้สำหรับ สร้าง ซ่อม อินเวอร์เตอร์ สามเฟส. เครื่องควบคุมความเร็วมอเตอร์สามเฟสแบบอินเวอร์เตอร์ (Inverter) สามารถควบคุมความเร็ว (Speed) ได้ตั้งแต่ศูนย์จนถึงความเร็วตามพิกัดของมอเตอร์ นิยมใช้กันมาก ในเครื่องใช้ไฟฟ้าที่มีมอเตอร์ ยุคปัจจุบัน เช่น แอร์อินเวอร์เตอร์ ตู้เย็น อินเวอร์เตอร์ เครื่องซักผ้า อินเวอร์เตอร์ ปั๊มน้ำ อินเวอร์เตอร์ เครื่อง สูบน้ำ อินเวอร์เตอร์ รถ จักรยาน ไฟฟ้า รถยนต์ไฟฟ้า เรือไฟฟ้า ยานพาหนะ ในยุคปัจจุบันและอนาคต ล้วนต้องใช้ อินเวอร์เตอร์variable frequency 3 phase AC induction motor V/F Motor (Voltage/Freque...

ลมหายใจออกลมหายใจเข้าและพุทโธในขณะแห่งโสดาปัตติมรรค อนัญญาตัญญัสสามีตินทรีย์ มีสัทธินทรีย์ซึ่งมีความน้อมใจเชื่อเป็นบริวาร วิริยินทรีย์มีความประคองไว้เป็นบริวาร สตินทรีย์มีความตั้งมั่นเป็นบริวาร สมาธินทรีย์มีความไม่ฟุ้งซ่านเป็นบริวาร ปัญญินทรีย์มีความเห็นเป็นบริวาร มนินทรีย์มีความรู้แจ้งเป็นบริวาร โสมนัสสิน ทรีย์มีความยินดียิ่งเป็นบริวาร ชีวิตินทรีย์มีความเป็นใหญ่ในการสืบต่อแห่ง ความเป็นไปเป็นบริวาร ธรรมทั้งหลายที่เกิดในขณะโสดาปัตติมรรค เว้นรูปที่มี จิตเป็นสมุฏฐาน ล้วนเป็นกุศลทั้งนั้น ล้วนไม่มีอาสวะ ล้วนเป็นธรรมที่นำ ออก ล้วนเป็นเครื่องให้ถึงความไม่สั่งสม ล้วนเป็นโลกุตระ ล้วนเป็นธรรมมี นิพพานเป็นอารมณ์ ในขณะโสดาปัตติมรรค อนัญญาตัญญัสสามีตินทรีย์มี อินทรีย์ทั้ง ๘ นี้ ซึ่งมีสหชาตธรรมเป็นบริวาร มีธรรมอื่นเป็นบริวาร มีธรรม ที่อาศัยเป็นบริวาร มีสัมปยุตธรรมเป็นบริวาร เป็นสหคตธรรม เป็น สหชาตธรรม เป็นธรรมเกี่ยวข้องกัน เป็นธรรมประกอบกัน ธรรมเหล่านั้น แลเป็นอาการและเป็นบริวารแห่งอนัญญาตัญญัสสามีตินทรีย์ ในขณะโสดา- *ปัตติผล ฯลฯ ฯ ในขณะอรหัตผล อัญญาตาวินทรีย์ มีสัทธินทรีย์ซึ่งมีความน้อมใจ เชื่อเป็นบริวาร ฯลฯ ชีวิตินทรีย์มีความเป็นใหญ่ในความสืบเนื่องแห่งความเป็น ไปเป็นบริวาร ฯลฯ ธรรมทั้งหลายที่เกิดในขณะอรหัตผล เว้นรูปอันมีจิตเป็น สมุฏฐาน ล้วนเป็นอัพยากฤตทั้งนั้น ล้วนไม่มีอาสวะ ล้วนเป็นโลกุตระ ล้วนมีนิพพานเป็นอารมณ์ ฯลฯ ในขณะอรหัตผล อัญญาตาวินทรีย์มี อินทรีย์ทั้ง ๘๘ นี้ซึ่งมีสหชาตธรรมเป็นบริวาร ฯลฯ ธรรมเหล่านั้นแลเป็น อาการและเป็นบริวารแห่งอัญญาตาวินทรีย์นั้น อินทรีย์ ๘ หมวดนี้รวมเป็น อินทรีย์ ๖๔ ด้วยประการฉะนี้ 

3 phase inverter controlled by an Arduino ATmega328 HDVariable Frequency Drives New Version THANK YOU VERY MUCH SIR FOR HELPING ME

3 phase inverter controlled by an Arduino ATmega328 HDVariable Frequency Drives New Version THANK YOU VERY MUCH SIR FOR HELPING ME

3 phase inverter controlled by an Arduino ATmega328 HD

การใช้ Arduino 2560 และ ARDUINO 328 แทน MC3PHACการใช้ Arduino 2560 และ ARDUINO 328 แทน MC3PHAC เนื่องจาก MC3PHAC เลิกผลิต จึงทำตัวใหม่ มาจำหน่าย แทนครับ ราคาลง โปรแกรมและทดสอบแล้ว มีวงจรและค่าของอุปกรณ์ประกอบ จะมีราคา ไม่เกิน 800 บาท ครับ ส่วนการจำหน่าย ทรานซิสเตอร์ ไอจีบีที สำหรับ สร้าง ซ่อม เครื่องปรับรอบมอเตอร์ไฟฟ้ากระแสสลับสามเฟส ขนาด 200 วัตต์ ถึง1 แรงม้า ยังมีสินค้าอีก หลายพันชิ้นครับ เช่น PS21963 PS219A2 6DI15S-050 MP6501A ราคา 300 บาท เท่ากัน ทุกเบอร์ครับ หากต้องการขับมอเตอร์ เกินหนึ่งแรงม้า ใช้ วิธี ขนาน กันได้ครับ ขอบคุณทุกท่านมากครับที่กรุณาอุดหนุน สินค้า และติดตามผลงาน ช่วงนี้ ขอเวลา ออกแบบ และทดลอง ต้นแบบ คำนวนราคา งบ ประมาณ ค่าใช้จ่าย จะให้ การใช้งาน และราคา ใกล้เคียง MC3PHAC ครับ คิดว่า อาจจะถูกกว่า MC3PHAC ครับ... 02-951-1356 Line pornpimon 1411 Email sompongindustrial@gmail.comรายละเอียด ราคา ตามที่แจ้งในคลิป

การต่อสายไฟฟ้า

induction motor speed website

การสร้างเครื่องควบคุมมอเตอร์สามเฟส ไฟฟ้า อิเล็กทรอนิกส์ เบื้องต้น สำหรับ...ข้อดีของการใช้อุปกรณ์ปรับความเร็วรอบมอเต­อร์ - การสตาร์ทที่นุ่มนวล (Soft Start) - ไม่มีการกระชากของกระแส (Inrush Current) - สามารถปรับอัตราเร่งและอัตราหน่วงได้ (Adjustable Acceleration and Deceleration time) - สามารถควบคุมได้จากระยะไกล (Remote Control) - สามารถควบคุมการทำงานโดยกต่อเชื่อมกับคอมพ­ิวเตอร์ - มีระบบ Protection - ประหยัดพลังงาน (Energy Saving) - ลดค่าใช้จ่ายในการซ่อมบำรุง (Reduce Maintenance Cost)

การสร้างเครื่องควบคุมมอเตอร์สามเฟส ด้วย ARDUINO ใช้แทน MC3PHAC



รุ่นใหม่ ราคา1100 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino  1 บอร์ด ราคา 800 บาท และ PS21244 1 ตัว ราคา 300 บาท ครับ  ลงวันที่   30 กันยายน 2559

TM 51 พร้อม ขดลวด (ราคา ชุดละ 500 บาท)รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 24 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts เพื่อนำไปจ่ายให้กับ TM 52 A ครับ TM 52 A TM52A หมดแล้วนะครับ ให้ใช้ ps21244 ps21963 ph 219a2 จะทำหน้าที่ขับมอเตอร์ สามเฟส 220/380 Volts ..บอร์ด Arduino (ราคา บอร์ดละ 8000 บาท )ทำหน้าที่ สร้างและกำหนดค่าของสัญญาณ สามเฟส SINE WAVE แบบ PWM ครับ..มีจำหน่ายหลายที่ครับ ติดต่อกันเองก็แล้วกัน ถ้าหาไม่ได้ ลองโทรไปที่ 02 951 1356 และ 081-803-6553 นะครับ...LINE  ID:pornpimon1411 หรือ ติดต่อที่ s o m p o n g i n d u s t r i a l @ g mail .com m r s o m p o n g t @h o t mail.comm ก็ได้ครับ จำหน่าย PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE

6 DI 15 S -050 C 6 DI 15 S-050 D TM 51 (TM 52 A จำหน่ายไปหมดแล้วครับ...ให้ใช้ PS21244 ราคาตัวละ 300 บาท ใช้ได้ หนึ่งแรงม้า ต่อ 1 ตัวครับ ขนานกันได้ ตามขนานมอเตอร์ครับ )สำหรับสร้างเครื่องควบคุมมอเตอร์สามเฟส...

arduino 3 phase sine wave generatorรุ่นใหม่ ราคา1100 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino 1 บอร์ด ราคา 800 บาท และ PS21244 1 ตัว ราคา 300 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 พร้อม ขดลวด (ราคา ชุดละ 500 บาท)รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 24 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts เพื่อนำไปจ่ายให้กับ TM 52 A ครับ TM 52 A TM52A หมดแล้วนะครับ ให้ใช้ ps21244 ps21963 ph 219a2 จะทำหน้าที่ขับมอเตอร์ สามเฟส 220/380 Volts ..บอร์ด Arduino (ราคา บอร์ดละ 8000 บาท )ทำหน้าที่ สร้างและกำหนดค่าของสัญญาณ สามเฟส SINE WAVE แบบ PWM ครับ..มีจำหน่ายหลายที่ครับ ติดต่อกันเองก็แล้วกัน ถ้าหาไม่ได้ ลองโทรไปที่ 02 951 1356 และ 081-803-6553 นะครับ...LINE ID:pornpimon1411 หรือ ติดต่อที่ s o m p o n g i n d u s t r i a l @ g mail .com m r s o m p o n g t @h o t mail.comm ก็ได้ครับ จำหน่าย PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D TM 51 (TM 52 A จำหน่ายไปหมดแล้วครับ...ให้ใช้ PS21244 ราคาตัวละ 300 บาท ใช้ได้ หนึ่งแรงม้า ต่อ 1 ตัวครับ ขนานกันได้ ตามขนานมอเตอร์ครับ )สำหรับสร้างเครื่องควบคุมมอเตอร์สามเฟส...

arduino 3 phase sine wave generatorรุ่นใหม่ ราคา1100 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino 1 บอร์ด ราคา 800 บาท และ PS21244 1 ตัว ราคา 300 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 พร้อม ขดลวด (ราคา ชุดละ 500 บาท)รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 24 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts เพื่อนำไปจ่ายให้กับ TM 52 A ครับ TM 52 A TM52A หมดแล้วนะครับ ให้ใช้ ps21244 ps21963 ph 219a2 จะทำหน้าที่ขับมอเตอร์ สามเฟส 220/380 Volts ..บอร์ด Arduino (ราคา บอร์ดละ 8000 บาท )ทำหน้าที่ สร้างและกำหนดค่าของสัญญาณ สามเฟส SINE WAVE แบบ PWM ครับ..มีจำหน่ายหลายที่ครับ ติดต่อกันเองก็แล้วกัน ถ้าหาไม่ได้ ลองโทรไปที่ 02 951 1356 และ 081-803-6553 นะครับ...LINE ID:pornpimon1411 หรือ ติดต่อที่ s o m p o n g i n d u s t r i a l @ g mail .com m r s o m p o n g t @h o t mail.comm ก็ได้ครับ จำหน่าย PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D TM 51 (TM 52 A จำหน่ายไปหมดแล้วครับ...ให้ใช้ PS21244 ราคาตัวละ 300 บาท ใช้ได้ หนึ่งแรงม้า ต่อ 1 ตัวครับ ขนานกันได้ ตามขนานมอเตอร์ครับ )สำหรับสร้างเครื่องควบคุมมอเตอร์สามเฟส...

arduino mega 1280 2560 3 phase sine wave pwmรุ่นใหม่ ราคา1100 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino 1 บอร์ด ราคา 800 บาท และ PS21244 1 ตัว ราคา 300 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 พร้อม ขดลวด (ราคา ชุดละ 500 บาท)รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 24 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts เพื่อนำไปจ่ายให้กับ TM 52 A ครับ TM 52 A TM52A หมดแล้วนะครับ ให้ใช้ ps21244 ps21963 ph 219a2 จะทำหน้าที่ขับมอเตอร์ สามเฟส 220/380 Volts ..บอร์ด Arduino (ราคา บอร์ดละ 8000 บาท )ทำหน้าที่ สร้างและกำหนดค่าของสัญญาณ สามเฟส SINE WAVE แบบ PWM ครับ..มีจำหน่ายหลายที่ครับ ติดต่อกันเองก็แล้วกัน ถ้าหาไม่ได้ ลองโทรไปที่ 02 951 1356 และ 081-803-6553 นะครับ...LINE ID:pornpimon1411 หรือ ติดต่อที่ s o m p o n g i n d u s t r i a l @ g mail .com m r s o m p o n g t @h o t mail.comm ก็ได้ครับ จำหน่าย PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D TM 51 (TM 52 A จำหน่ายไปหมดแล้วครับ...ให้ใช้ PS21244 ราคาตัวละ 300 บาท ใช้ได้ หนึ่งแรงม้า ต่อ 1 ตัวครับ ขนานกันได้ ตามขนานมอเตอร์ครับ )สำหรับสร้างเครื่องควบคุมมอเตอร์สามเฟส...

arduino mega 1280 2560 3 phase sine wave pwmรุ่นใหม่ ราคา1100 บาท ครับ นำไปบัดกรีและต่อเติมตามถนัดครับ..มี บอร์ด Arduino 1 บอร์ด ราคา 800 บาท และ PS21244 1 ตัว ราคา 300 บาท ครับ ลงวันที่ 30 กันยายน 2559 TM 51 พร้อม ขดลวด (ราคา ชุดละ 500 บาท)รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 24 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts เพื่อนำไปจ่ายให้กับ TM 52 A ครับ TM 52 A TM52A หมดแล้วนะครับ ให้ใช้ ps21244 ps21963 ph 219a2 จะทำหน้าที่ขับมอเตอร์ สามเฟส 220/380 Volts ..บอร์ด Arduino (ราคา บอร์ดละ 8000 บาท )ทำหน้าที่ สร้างและกำหนดค่าของสัญญาณ สามเฟส SINE WAVE แบบ PWM ครับ..มีจำหน่ายหลายที่ครับ ติดต่อกันเองก็แล้วกัน ถ้าหาไม่ได้ ลองโทรไปที่ 02 951 1356 และ 081-803-6553 นะครับ...LINE ID:pornpimon1411 หรือ ติดต่อที่ s o m p o n g i n d u s t r i a l @ g mail .com m r s o m p o n g t @h o t mail.comm ก็ได้ครับ จำหน่าย PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE 6 DI 15 S -050 C 6 DI 15 S-050 D TM 51 (TM 52 A จำหน่ายไปหมดแล้วครับ...ให้ใช้ PS21244 ราคาตัวละ 300 บาท ใช้ได้ หนึ่งแรงม้า ต่อ 1 ตัวครับ ขนานกันได้ ตามขนานมอเตอร์ครับ )สำหรับสร้างเครื่องควบคุมมอเตอร์สามเฟส...

แก่แล้วเรียนลัด อิเล็กทรอนิกส์ ยุคใหม่ เครื่องเพิ่มแรงดันไฟฟ้ากระแสตรงรวมคลิป การสร้าง อินเวอร์เตอร์

ประเทศไทยยุคพัฒนาแล้วรวมคลิป การสร้าง อินเวอร์เตอร์

พลังงานทดแทน สสาร และพลังงาน ภัยเศรษฐกิจ ภัยธรรมชาติ ออกแบบ อินเวอร์เตอร์

ถ้าเราจะกลับมานั้นไม่ยากคืออย่าไปดูที่อารมณ์ที่จิตสร้างและผุดรู้ขึ้นมาให...ดูตัวนี้ พิจารณาในร่างกายของเรานี่แหละ ตั้งแต่ อวิชชา ปัจจยา สังขารา สังขารา ปัจจยา ดูไป ตามลำดับไป แท้ที่จริง ถ้าหากว่า เราพิจารณาตามแบบ เป็นส่วนส่วนไป มันยาวไป ที่จริง ให้เห็นอวิชชาให้ชัดเจน ด้วยปัญญา มันดับไป ตามลำดับไป มันดับเอง มันเป็น แวบ ไป แวบ เดียวไป มันหมดแล้วกัน อวิชชาทั้งหมดน่ะ สามสิบสอง มันดับๆไป มันดับไปเอง

Full Bribge Half Bridge Inverter Converter การคำนวน แรงดันไฟฟ้า สองตัวบน สองตัวล่าง High Side Gate Driver Low Side Gate Driver https://www.youtube.com/watch?v=ZZDdl... Gate จะไปนำกระแส ต้องมีแรงดัน 8 โวลต์ ขึ้นไป สูงสุดที่ 20 โวลต์ ไม่เกิน 30 โวลต์ ใช้ได้ สูครนี้ใช้ได้ ทั้ง mosfet และ igbt ครับ

วิธี การ ซ่อม ตู้เชื่อม ตอน การทดสอบแผงวงจร welding inverter TEST LAMP







เรื่อง อินเวอเตอร์ คอนเวอเตอร์ เกี่ยวกับ การนำกระแสของ Igbt และ mosfet ครับ
การคำนวน แรงดันไฟฟ้า สองตัวบน สองตัวล่าง High Side Gate Driver Low Side Gate Driver
https://www..com/watch?v=ZZDdlAgZfvI
Gate จะไปนำกระแส ต้องมีแรงดัน 8 โวลต์ ขึ้นไป สูงสุดที่ 20 โวลต์ ไม่เกิน 30 โวลต์ ใช้ได้ สูครนี้ใช้ได้ ทั้ง mosfet และ igbt ครับ

การซ่อมตู้เชื่อมอินเวอร์เตอร์ อุปกรณ์ ตามคลิป มีจำหน่าย ที่ sompong indu...เรื่อง อินเวอเตอร์ คอนเวอเตอร์ เกี่ยวกับ การนำกระแสของ Igbt และ mosfet ครับ การคำนวน แรงดันไฟฟ้า สองตัวบน สองตัวล่าง High Side Gate Driver Low Side Gate Driver https://www..com/watch?v=ZZDdlAgZfvI Gate จะไปนำกระแส ต้องมีแรงดัน 8 โวลต์ ขึ้นไป สูงสุดที่ 20 โวลต์ ไม่เกิน 30 โวลต์ ใช้ได้ สูครนี้ใช้ได้ ทั้ง mosfet และ igbt ครับ

POWER MOSFET อุปกรณ์ ตามคลิป มีจำหน่าย ที่ sompong industrial electronic...







เรื่อง อินเวอเตอร์ คอนเวอเตอร์ เกี่ยวกับ การนำกระแสของ Igbt และ mosfet ครับ
การคำนวน แรงดันไฟฟ้า สองตัวบน สองตัวล่าง High Side Gate Driver Low Side Gate Driver
https://www..com/watch?v=ZZDdlAgZfvI
Gate จะไปนำกระแส ต้องมีแรงดัน 8 โวลต์ ขึ้นไป สูงสุดที่ 20 โวลต์ ไม่เกิน 30 โวลต์ ใช้ได้ สูครนี้ใช้ได้ ทั้ง mosfet และ igbt ครับ

STM32 Arduino (STM32F103C8 / Programming STM32 with Arduino and Mac)

STM32 Arduino (STM32F103C8 / Programming STM32 with Arduino and Mac)

STM32 Arduino (STM32F103C8 / Programming STM32 with Arduino and Mac)

STM32 Arduino (STM32F103C8 / Programming STM32 with Arduino and Mac)

3-phase DC/AC inverter / 3-fazowy falownik / STM32Asynchronous Induction Motor control by arduino

3-phase DC/AC inverter / 3-fazowy falownik / STM32Asynchronous Induction Motor control by arduino

Asynchronous Induction Motor control by arduino3 phase frequency drive SPWM, test with 3 phase asynchronous inductio mo...

induction motor speed website #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 */ /* */







#include <avr/pgmspace.h>

#include <avr/io.h>



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<readpot && TCNT2 > 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

  */

  /*

  */

 


induction motor speed website



/*

 * VTx - transistors

 * -------------------<<  + DC voltage (i.e. 250 V)

 *    |     |     |

 *    |     |     |

 *   VT1   VT2   VT3

 *    |     |     |

 *    *--------------------a

 *    |     |     |

 *    |     *--------------b

 *    |     |     |

 *    |     |     *--------c

 *   VT4   VT5   VT6

 *    |     |     |

 *    |     |     |

 * -------------------<<   GND

*/



/*

 * transistor - pin

 */

#define VT1 6

#define VT2 7

#define VT3 8

#define VT4 9

#define VT5 10

#define VT6 11

#define RELAY 2



/*

 * max and min delay in microsecond

 * must be <16300

 * use for setup frequency

*/

#define MAX_FREQ 12150 // ~15 Hz

#define MIN_FREQ 1575  // ~100 Hz



/*

 * pin A0 - SET_FREQ frequency setup potentiometer

 * pin A1 - SET_K_ZAP filling factor setup potetiometer

*/

#define SET_FREQ A0

#define SET_K_ZAP A1



void setup() {

  // put your setup code here, to run once:

  pinMode(VT1, OUTPUT);

  pinMode(VT2, OUTPUT);

  pinMode(VT3, OUTPUT);

  pinMode(VT4, OUTPUT);

  pinMode(VT5, OUTPUT);

  pinMode(VT6, OUTPUT);

  pinMode(RELAY, OUTPUT);



  //Serial.begin(9600);//закомментировать!



  digitalWrite(RELAY, LOW); /*IR2132 off on setup time*/



  analogWrite(VT1, 255);/*all VTx close*/

  analogWrite(VT2, 255);/*on HINx, LINx (inputs IR2132) +5 V*/

  analogWrite(VT3, 255);

  analogWrite(VT4, 255);

  analogWrite(VT5, 255);

  analogWrite(VT6, 255);



  pinMode(SET_FREQ, INPUT);

  pinMode(SET_K_ZAP, INPUT);



  /*set 4-5kHz frequncy for PWM*/

  TCCR1B = TCCR1B & 0b11111000 | 0x02;

  TCCR2B = TCCR1B & 0b11111000 | 0x02;

  TCCR3B = TCCR1B & 0b11111000 | 0x02;

  TCCR4B = TCCR1B & 0b11111000 | 0x02;



  delay(5000);

  digitalWrite(RELAY, HIGH); /*turn on relay and wait 5 seconds*/

  delay(5000);

}



int sw_time = 60;

int K_zap = 130;

//int time_start;





void pwm_loop_fwd_a2(void)/*alpha/2 mode - transistors work 1/2 of period. three of them simultaneously */

{

  int iteration;



  for (iteration = 1; iteration <= 6; iteration++)

  {

    switch ( iteration )

    {

      case 1:

        analogWrite(VT1, 255);/*all VTx close*/

        analogWrite(VT2, 255);/*on HINx, LINx (inputs IR2132) +5 V*/

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT1, K_zap);/*open VTx on K_zap value 255 = close, 0 = full open (inverse logic)*/

        analogWrite(VT3, K_zap);

        analogWrite(VT5, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 2:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT1, K_zap);

        analogWrite(VT5, K_zap);

        analogWrite(VT6, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 3:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT1, K_zap);

        analogWrite(VT2, K_zap);

        analogWrite(VT6, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 4:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT4, K_zap);

        analogWrite(VT2, K_zap);

        analogWrite(VT6, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 5:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT4, K_zap);

        analogWrite(VT2, K_zap);

        analogWrite(VT3, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 6:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT4, K_zap);

        analogWrite(VT5, K_zap);

        analogWrite(VT3, K_zap);



        delayMicroseconds(sw_time);

        break;



      default:

        delayMicroseconds(sw_time);

        break;



    }

  }

}





/*

A0 - SET_FREQ frequency setup

A1 - SET_K_ZAP setup K_zap

*/

int repeat_count = 200; /*count of repeats (because on small sw_time high frequency and unstable working*/

int i;//for loop



void loop()

{

  /*set microseconds delay between I..IV phases of work => define frequency */

  sw_time = map(analogRead(SET_FREQ), 0, 1023, 1, 100);



  /*on high frequency greater repeats, without arduino functions. Need for frequency stability*/

  repeat_count = map(sw_time, 1, 100, 400, 100);



  /*calculate K_zap - filling coefficient

  * 255 = close transistor, 0 = full open transistor (inverse logic)

  */

  K_zap = map(analogRead(SET_K_ZAP), 0, 1023, 255, 1);



  if (K_zap > 220)//stop

  {

    analogWrite(VT1, 255);/*all VTx close*/

    analogWrite(VT2, 255);/*on HINx, LINx (inputs IR2132) +5 V*/

    analogWrite(VT3, 255);

    analogWrite(VT4, 255);

    analogWrite(VT5, 255);

    analogWrite(VT6, 255);

    delayMicroseconds(sw_time);

  }

  else //generation ~3-phase voltage

  {

//    time_start = millis();

    for (i = 1; i <= repeat_count; i++)

    {

      pwm_loop_fwd_a2();

      if (!(i % 10))

      {

        sw_time = map(analogRead(SET_FREQ), 0, 1023, MIN_FREQ, MAX_FREQ);

        K_zap = map(analogRead(SET_K_ZAP), 0, 1023, 255, 1);

      }

    }

//    time_start = millis() - time_start;

    //Serial.print("FREQUENCY: "); Serial.println(1000. / time_start * repeat_count);

  }

  //Serial.println(sw_time);

  //Serial.println(K_zap);

  //Serial.println();



}


induction motor speed website



/*

 * VTx - transistors

 * -------------------<<  + DC voltage (i.e. 250 V)

 *    |     |     |

 *    |     |     |

 *   VT1   VT2   VT3

 *    |     |     |

 *    *--------------------a

 *    |     |     |

 *    |     *--------------b

 *    |     |     |

 *    |     |     *--------c

 *   VT4   VT5   VT6

 *    |     |     |

 *    |     |     |

 * -------------------<<   GND

*/



/*

 * transistor - pin

 */

#define VT1 6

#define VT2 7

#define VT3 8

#define VT4 9

#define VT5 10

#define VT6 11

#define RELAY 2



/*

 * max and min delay in microsecond

 * must be <16300

 * use for setup frequency

*/

#define MAX_FREQ 12150 // ~15 Hz

#define MIN_FREQ 1575  // ~100 Hz



/*

 * pin A0 - SET_FREQ frequency setup potentiometer

 * pin A1 - SET_K_ZAP filling factor setup potetiometer

*/

#define SET_FREQ A0

#define SET_K_ZAP A1



void setup() {

  // put your setup code here, to run once:

  pinMode(VT1, OUTPUT);

  pinMode(VT2, OUTPUT);

  pinMode(VT3, OUTPUT);

  pinMode(VT4, OUTPUT);

  pinMode(VT5, OUTPUT);

  pinMode(VT6, OUTPUT);

  pinMode(RELAY, OUTPUT);



  //Serial.begin(9600);//закомментировать!



  digitalWrite(RELAY, LOW); /*IR2132 off on setup time*/



  analogWrite(VT1, 255);/*all VTx close*/

  analogWrite(VT2, 255);/*on HINx, LINx (inputs IR2132) +5 V*/

  analogWrite(VT3, 255);

  analogWrite(VT4, 255);

  analogWrite(VT5, 255);

  analogWrite(VT6, 255);



  pinMode(SET_FREQ, INPUT);

  pinMode(SET_K_ZAP, INPUT);



  /*set 4-5kHz frequncy for PWM*/

  TCCR1B = TCCR1B & 0b11111000 | 0x02;

  TCCR2B = TCCR1B & 0b11111000 | 0x02;

  TCCR3B = TCCR1B & 0b11111000 | 0x02;

  TCCR4B = TCCR1B & 0b11111000 | 0x02;



  delay(5000);

  digitalWrite(RELAY, HIGH); /*turn on relay and wait 5 seconds*/

  delay(5000);

}



int sw_time = 60;

int K_zap = 130;

//int time_start;





void pwm_loop_fwd_a2(void)/*alpha/2 mode - transistors work 1/2 of period. three of them simultaneously */

{

  int iteration;



  for (iteration = 1; iteration <= 6; iteration++)

  {

    switch ( iteration )

    {

      case 1:

        analogWrite(VT1, 255);/*all VTx close*/

        analogWrite(VT2, 255);/*on HINx, LINx (inputs IR2132) +5 V*/

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT1, K_zap);/*open VTx on K_zap value 255 = close, 0 = full open (inverse logic)*/

        analogWrite(VT3, K_zap);

        analogWrite(VT5, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 2:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT1, K_zap);

        analogWrite(VT5, K_zap);

        analogWrite(VT6, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 3:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT1, K_zap);

        analogWrite(VT2, K_zap);

        analogWrite(VT6, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 4:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT4, K_zap);

        analogWrite(VT2, K_zap);

        analogWrite(VT6, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 5:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT4, K_zap);

        analogWrite(VT2, K_zap);

        analogWrite(VT3, K_zap);



        delayMicroseconds(sw_time);

        break;

      case 6:

        analogWrite(VT1, 255);

        analogWrite(VT2, 255);

        analogWrite(VT3, 255);

        analogWrite(VT4, 255);

        analogWrite(VT5, 255);

        analogWrite(VT6, 255);



        analogWrite(VT4, K_zap);

        analogWrite(VT5, K_zap);

        analogWrite(VT3, K_zap);



        delayMicroseconds(sw_time);

        break;



      default:

        delayMicroseconds(sw_time);

        break;



    }

  }

}





/*

A0 - SET_FREQ frequency setup

A1 - SET_K_ZAP setup K_zap

*/

int repeat_count = 200; /*count of repeats (because on small sw_time high frequency and unstable working*/

int i;//for loop



void loop()

{

  /*set microseconds delay between I..IV phases of work => define frequency */

  sw_time = map(analogRead(SET_FREQ), 0, 1023, 1, 100);



  /*on high frequency greater repeats, without arduino functions. Need for frequency stability*/

  repeat_count = map(sw_time, 1, 100, 400, 100);



  /*calculate K_zap - filling coefficient

  * 255 = close transistor, 0 = full open transistor (inverse logic)

  */

  K_zap = map(analogRead(SET_K_ZAP), 0, 1023, 255, 1);



  if (K_zap > 220)//stop

  {

    analogWrite(VT1, 255);/*all VTx close*/

    analogWrite(VT2, 255);/*on HINx, LINx (inputs IR2132) +5 V*/

    analogWrite(VT3, 255);

    analogWrite(VT4, 255);

    analogWrite(VT5, 255);

    analogWrite(VT6, 255);

    delayMicroseconds(sw_time);

  }

  else //generation ~3-phase voltage

  {

//    time_start = millis();

    for (i = 1; i <= repeat_count; i++)

    {

      pwm_loop_fwd_a2();

      if (!(i % 10))

      {

        sw_time = map(analogRead(SET_FREQ), 0, 1023, MIN_FREQ, MAX_FREQ);

        K_zap = map(analogRead(SET_K_ZAP), 0, 1023, 255, 1);

      }

    }

//    time_start = millis() - time_start;

    //Serial.print("FREQUENCY: "); Serial.println(1000. / time_start * repeat_count);

  }

  //Serial.println(sw_time);

  //Serial.println(K_zap);

  //Serial.println();



}


induction motor speed website #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 */ /* */

การใช้ Arduino 2560 และ ARDUINO 328 แทน MC3PHACการใช้ Arduino 2560 และ ARDUINO 328 แทน MC3PHAC เนื่องจาก MC3PHAC เลิกผลิต จึงทำตัวใหม่ มาจำหน่าย แทนครับ ราคาลง โปรแกรมและทดสอบแล้ว มีวงจรและค่าของอุปกรณ์ประกอบ จะมีราคา ไม่เกิน 800 บาท ครับ ส่วนการจำหน่าย ทรานซิสเตอร์ ไอจีบีที สำหรับ สร้าง ซ่อม เครื่องปรับรอบมอเตอร์ไฟฟ้ากระแสสลับสามเฟส ขนาด 200 วัตต์ ถึง1 แรงม้า ยังมีสินค้าอีก หลายพันชิ้นครับ เช่น PS21963 PS219A2 6DI15S-050 MP6501A ราคา 300 บาท เท่ากัน ทุกเบอร์ครับ หากต้องการขับมอเตอร์ เกินหนึ่งแรงม้า ใช้ วิธี ขนาน กันได้ครับ ขอบคุณทุกท่านมากครับที่กรุณาอุดหนุน สินค้า และติดตามผลงาน ช่วงนี้ ขอเวลา ออกแบบ และทดลอง ต้นแบบ คำนวนราคา งบ ประมาณ ค่าใช้จ่าย จะให้ การใช้งาน และราคา ใกล้เคียง MC3PHAC ครับ คิดว่า อาจจะถูกกว่า MC3PHAC ครับ... 02-951-1356 Line pornpimon 1411 Email sompongindustrial@gmail.comรายละเอียด ราคา ตามที่แจ้งในคลิป

วันพุธที่ 28 กันยายน พ.ศ. 2559

arduino 2560 3phase induction motor controlTHANK YOU VERY MUCH FOR HELPING ME... ARDUINO 3 PHASE INDUCTION MOTOR SPEED CONTROL BY Sejnym Schematic of complete tree phase motor bridge is in STK541UC62K datasheet and application note http://www.onsemi.com/pub_link/Collateral/ENA2355-D.PDF http://www.onsemi.com/pub_link/Collateral/ANDSTK541UC62K-E-D.PDF https://drive.google.com/file/d/0B8CYrcs_6fxFdXJka3Vjb2lmbUE/view

arduino 2560 3phase induction motor controlTHANK YOU VERY MUCH FOR HELPING ME... ARDUINO 3 PHASE INDUCTION MOTOR SPEED CONTROL BY Sejnym Schematic of complete tree phase motor bridge is in STK541UC62K datasheet and application note http://www.onsemi.com/pub_link/Collateral/ENA2355-D.PDF http://www.onsemi.com/pub_link/Collateral/ANDSTK541UC62K-E-D.PDF https://drive.google.com/file/d/0B8CYrcs_6fxFdXJka3Vjb2lmbUE/view

วันอังคารที่ 27 กันยายน พ.ศ. 2559

ร่างกาย คือก้อนทุกข์ จิตคือตัวทุกข์ ครูบาอาจารย์ก็อยู่ไกล เราไหว้พระสวดมนต์ เราตามรู้ตามดูของเราไป บางทีธรรมะจะถ่ายทอดออกจากใจของเราเอง หรือบางคนมีภาพประกอบ บางคนมีเสียง เห็นพระพุทธเจ้าไปบอกบ้าง เลยคิดว่าพระพุทธเจ้ามาจริงๆ นะ จริงๆ จิตนั่นเองมันถ่ายทอดธรรมะออกมา จิตใจโน้มเอียงที่จะอยู่กับธรรมะ เวลาติดขัดขึ้นมาจิตจะสอนธรรมะได้ เป็นเรื่องแปลกนะ ค่อยๆ ดู ท้าให้พิสูจน์นะ ไม่ได้ชวนให้เชื่อ ลองภาวนาดู เอาซีดี เอาหนังสือหลวงพ่อไป ไปฟังไปอ่าน แจกให้ฟรีนะ ไปฟังไปอ่านแล้วค่อยๆ สังเกตจิตใจของเราไป

arduino 3 phase induction motor speed control

#define UN        (400.0)    //Rate motor voltage
#define FN        (50.0)     //Rate motor frequency
#define P         (UN/FN)    // et.al specifies the proportion of voltage to the rated frequency
#define T_PWM     (0.000355) //period of PWM signal - set by prescaler counters
#define T_MAX     (4.0)      //Determination of the maximum period of the output voltage
#define T_MIN     (0.03)     //the minimum period of the output voltage
#define K_MAX     floor(T_MAX/T_PWM)  //the number of values for the period of  T_MAX
#define K_MIN     ceil(T_MIN/T_PWM)   //the number of values for the  period of  T_MIN

volatile static unsigned int dlugosc_tab_sin;   //variable containing the number of values in full
                                                //the period of the output voltage
static unsigned int i = 0;                      //variable auxiliary
volatile static unsigned int licznik_glowny = 0;//Variables in periodically interrupted
                                                //^ wath time T_PWM increasing its value by 1
static unsigned int next_value_sin = 0; //variable whose value should calculate sin
static double t_param=100;              //parameter specifies the period of the output voltage
static float t = T_PWM;                 //T_PWM
static float omega_t;                   //pulsation of the output voltage multiplied by T_PWM
static float t_out;                     //Output voltage period
static float U_o_param;                 //size parameter specified output voltage
                                        //^ calculated on the basis t_out and U_in
static unsigned int ocr0a, ocr0b, ocr1a;//auxiliary variables for storing calculated filling material
static unsigned int ocr1b, ocr2a, ocr2b;//^
static double sin_in;         //variable containing the parameter of the function sin
static double blad = 1;       // variable deck used to stop generating voltage of overloading
static unsigned int analog=0; //variable containing the measured value
static double U_in = 0;       //variable stores the measurement voltage cardiovascular middleware
static double U_rms_max;      //the maximum currently possible after generation of the effective voltage
static bool a=0;              //Boolean to perform two alternate measurements
int main()
{
  io_init();     //initialization inputs and outputs
  timers_init(); //initializing the counter PWM
  adc_init();    //initialization transducer ADC
  while(1)                                //infinite loop of the main program
  {
    if (i==185)                            //the condition concerning the entry to change function
    {                                     //parameters of the output voltage , the call approximately every 100 ms
      zmien_predkosc();                   //change function parameters of the output voltage
      i=0;
    }
    next_value_sin = licznik_glowny%dlugosc_tab_sin;  //kolejna wartoœๆ sinusa do obliczenia
    sin_in=omega_t*next_value_sin;

/*obliczenie wartosci do rejestrow okreslajacych wypelnienie sygnalu wyjscioweg*/
    ocr0a = round(blad*(U_o_param*(sin(sin_in)+1)*254/2)+1);//pin 6
    ocr0b = ocr0a - 1;
    ocr1a = round(blad*(U_o_param*(sin(sin_in-2.09)+1)*254/2)+1);//pin 9
    ocr1b = ocr1a - 1;
    ocr2a = round(blad*(U_o_param*(sin(sin_in+2.09)+1)*254/2)+1);//pin 11
    ocr2b = ocr2a - 1;
     
/*uaktualnienie wartosci w rejestrach*/
    cli();                              //prohibit to handle interrupts in case
                                        //when you upgrade an interrupt
    OCR0A = ocr0a;    //pin 6
    OCR0B = ocr0b;    //pin 5
    OCR1AL = ocr1a;   //pin 9
    OCR1BL = ocr1b;   //pin 10
    OCR2A = ocr2a;    //pin 11
    OCR2B = ocr2b;    //pin 3
    sei();                              //Permission to interrupt service
    i++;
    }
}
void adc_init()
{
ADCSRA |= _BV(ADEN);//launching transducer
ADCSRA |= _BV(ADPS2);//setting prescaler
ADCSRA |= _BV(ADPS1);//^
ADCSRA |= _BV(ADPS0);//^
ADMUX |= _BV(REFS0);// voltage reference set as a voltage supply
ADMUX |= ADMUX &= 0b11110000; //selecting ADC0 input 0 to measure
}
void timers_init()
{
cli();  // service interrupts prohibited
//timer0 init
TCCR0A |= _BV(COM0A1) | _BV(COM0B0) | _BV(COM0B1) | _BV(WGM00);              
TCCR0B |= _BV(CS01);              //preskaler 8
TIMSK0 |= _BV(TOIE0);             //flag of value 0 switched on
//timer1 init
TCCR1A |= _BV(COM1A1) | _BV(COM1B0) | _BV(COM1B1)  | _BV(WGM10);    
TCCR1B |= _BV(CS11);              //preskaler 8
//timer2 init
TCCR2A |= _BV(COM2A1) | _BV(COM2B0) | _BV(COM2B1)  | _BV(WGM20);    
TCCR2B |= _BV(CS21);              //preskaler 8
//reset value of the counter
TCNT0 = 0;
TCNT1L = 0;
TCNT2 = 0;
/* licznik zlicza w g๓re do 255, nastepnie w d๓ณ: /\/\/\
przy wartosci 255 jest przerwanie przy ktorym dokonuje sie
pomiarow napiec i pradow
*/
sei();  //permission to interrupt service
}
void io_init()
{
  pinMode(6, OUTPUT); //OC0A
  pinMode(5, OUTPUT); //OC0B
  pinMode(9, OUTPUT); //OC1A
  pinMode(10, OUTPUT);//OC1B
  pinMode(11, OUTPUT);//OC2A
  pinMode(3, OUTPUT); //OC2B
  pinMode(2, INPUT);
  pinMode(4, INPUT);
  pinMode(12, OUTPUT);
}
ISR(TIMER0_OVF_vect)  //interruption of the value of the counter 00
{
    analog = ADC;
      if(a)
      {
        U_in = 0.0709*analog;
        ADMUX |= _BV(MUX0);           //select input  ADC1 to measure the current                                    
      }
      else
      {
        ADMUX |= ADMUX &= 0b11110000; //select input  ADC0 to measure voltage
        if(analog>579)          
        {
          blad = 0;               // If the overload voltage generation Exclusion
          digitalWrite(12, HIGH); //diode led สีแดงขา 12
        }
      }
      ADCSRA |= _BV(ADSC);//  start reading measurement
      a=a^1;              //bramka XOR neguje wartosc logiczna a              
 licznik_glowny++;
 if(licznik_glowny>=dlugosc_tab_sin) licznik_glowny = 0;
}
void zmien_predkosc()
{
  U_rms_max = U_in*0.62;  //0.62 value determined experimentally
  bool up;          //boolean informs about holding down the button increases the frequency
  bool down;        //boolean inform the button is pressed , reduce frequency
  up =  digitalRead(4);     //read:if pressed increases the frequency
  down = digitalRead(2);    //read:if you pressed the button reduce the frequency
  if(up==1) t_param--;      //If you press the button increases the frequency decrease the period
  if(down==1) t_param++;    //If you press the button to decrease the frequency increases the service life
  if(t_param<0) t_param=0;    //protection exceeding the extreme values
  if(t_param>100) t_param=100;//^
  dlugosc_tab_sin = ceil((K_MAX-K_MIN)*t_param/50+K_MIN);//number of padded values in one period
  t_out = T_PWM*dlugosc_tab_sin;                          //calculation of  period of the output voltage
  omega_t = t*2*PI/t_out;                                 //calculate the output ripple voltage
  U_o_param = (P/t_out)/U_rms_max;  //calculation of the parameter defining an output voltage
  if(t_out>1) U_o_param = 0.5*(18.5/U_rms_max); //the voltage at the output at low frequency 10V
  if(U_o_param>1) U_o_param=1;                  //protection exceeding the extreme values
}

http://www.mikrocontroller.net/

https://www.facebook.com/Mikrocontroller.net

#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 */ /* */


#include <avr/pgmspace.h>
#include <avr/io.h>

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<readpot && TCNT2 > 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
  */
  /*
  */
 

#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 const unsigned char 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 sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) int PWM_OUT_1 = 11; // PWM output on pin 11 int PWM_OUT_2 = 10; // PWM output on pin 10 int PWM_OUT_3 = 12; // PWM output on pin 9 int LED_PIN = 13; // LED status on pin 13 int TEST_PIN = 7; // Scope trigger on pin 7 int POTEN_IN = A0; // Potentiometer on pin 0 int OFFSET_1 = 85; // Offset for second-phase int OFFSET_2 = 170; // Offset for third-phase double dfreq; const double refclk = 31376.6; // measured const uint64_t twoTo32 = pow(2, 32); // compute value at startup and use as constant // variables used inside interrupt service declared as voilatile volatile uint8_t icnt; // var inside interrupt volatile uint8_t icnt1; // var inside interrupt volatile uint8_t c4ms; // counter incremented every 4ms volatile uint32_t phase_accum; // pahse accumulator volatile uint32_t tword_m; // dds tuning word m //****************************************************************** void setup() { pinMode(LED_PIN, OUTPUT); // sets the digital pin as output Serial.begin(115200); // connect to the serial port Serial.println("DDS Test"); pinMode(TEST_PIN, OUTPUT); // sets the digital pin as output pinMode(PWM_OUT_1, OUTPUT); // PWM output / frequency output pinMode(PWM_OUT_2, OUTPUT); // PWM output / frequency output pinMode(PWM_OUT_3, OUTPUT); // PWM output / frequency output // Setup the timers setup_timer1(); setup_timer2(); // disable interrupts to avoid timing distortion cbi (TIMSK0, TOIE0); // disable Timer0 !!! delay() is now not available sbi (TIMSK2, TOIE2); // enable Timer2 Interrupt dfreq = 1000.0; // initial output frequency = 1000.0 Hz tword_m = twoTo32 * dfreq / refclk; // calulate DDS new tuning word } //****************************************************************** void loop() { if (c4ms > 250) // timer / wait for a full second { c4ms = 0; dfreq = analogRead(POTEN_IN); // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz cbi (TIMSK2, TOIE2); // disble Timer2 Interrupt tword_m = twoTo32 * dfreq / refclk; // calulate DDS new tuning word sbi (TIMSK2, TOIE2); // enable Timer2 Interrupt Serial.print(dfreq); Serial.print(" "); Serial.println(tword_m); } } //****************************************************************** // timer1 setup // set prscaler to 1, PWM mode to phase correct PWM, 16000000/512 = 31.25kHz clock void setup_timer1(void) { // Timer1 Clock Prescaler to : 1 sbi (TCCR1B, CS10); cbi (TCCR1B, CS11); cbi (TCCR1B, CS12); // Timer0 PWM Mode set to Phase Correct PWM cbi (TCCR1A, COM1A0); // clear Compare Match sbi (TCCR1A, COM1A1); cbi (TCCR1A, COM1B0); // clear Compare Match sbi (TCCR1A, COM1B1); sbi (TCCR1A, WGM10); // Mode 1 / Phase Correct PWM cbi (TCCR1A, WGM11); cbi (TCCR1B, WGM12); cbi (TCCR1B, WGM13); } //****************************************************************** // timer2 setup // set prscaler to 1, PWM mode to phase correct PWM, 16000000/512 = 31.25kHz clock void setup_timer2() { // 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); sbi (TCCR2A, WGM20); // Mode 1 / Phase Correct PWM cbi (TCCR2A, WGM21); cbi (TCCR2B, WGM22); } //****************************************************************** // Timer2 Interrupt Service at 31.25kHz = 32us // this is the timebase REFCLOCK for the DDS generator // FOUT = (M (REFCLK)) / (2 exp 32) // runtime : 8 microseconds ( inclusive push and pop) ISR(TIMER2_OVF_vect) { sbi(PORTD, TEST_PIN); // Test / set PORTD,TEST_PIN high to observe timing with a oscope phase_accum += tword_m; // soft DDS, phase accu with 32 bits icnt = phase_accum >> 24; // use upper 8 bits for phase accu as frequency information OCR2A = pgm_read_byte_near(sine256 + icnt); // read value fron ROM sine table and send to PWM DAC OCR1A = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_1)); OCR1B = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_2)); if (icnt1++ == 125) // increment variable c4ms every 4 milliseconds { c4ms++; icnt1 = 0; } cbi(PORTD, TEST_PIN); // reset PORTD,TEST_PIN }

#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
const unsigned char 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 sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
int PWM_OUT_1 = 11; // PWM output on pin 11
int PWM_OUT_2 = 10; // PWM output on pin 10
int PWM_OUT_3 = 12; // PWM output on pin 9
int LED_PIN = 13; // LED status on pin 13
int TEST_PIN = 7; // Scope trigger on pin 7
int POTEN_IN = A0; // Potentiometer on pin 0
int OFFSET_1 = 85; // Offset for second-phase
int OFFSET_2 = 170; // Offset for third-phase
double dfreq;
const double refclk = 31376.6; // measured
const uint64_t twoTo32 = pow(2, 32); // compute value at startup and use as constant
// variables used inside interrupt service declared as voilatile
volatile uint8_t icnt; // var inside interrupt
volatile uint8_t icnt1; // var inside interrupt
volatile uint8_t c4ms; // counter incremented every 4ms
volatile uint32_t phase_accum; // pahse accumulator
volatile uint32_t tword_m; // dds tuning word m
//******************************************************************
void setup()
{
  pinMode(LED_PIN, OUTPUT); // sets the digital pin as output
  Serial.begin(115200); // connect to the serial port
  Serial.println("DDS Test");

  pinMode(TEST_PIN, OUTPUT); // sets the digital pin as output
  pinMode(PWM_OUT_1, OUTPUT); // PWM output / frequency output
  pinMode(PWM_OUT_2, OUTPUT); // PWM output / frequency output
  pinMode(PWM_OUT_3, OUTPUT); // PWM output / frequency output
  // Setup the timers
  setup_timer1();
  setup_timer2();
  // disable interrupts to avoid timing distortion
  cbi (TIMSK0, TOIE0); // disable Timer0 !!! delay() is now not available
  sbi (TIMSK2, TOIE2); // enable Timer2 Interrupt
  dfreq = 1000.0; // initial output frequency = 1000.0 Hz
  tword_m = twoTo32 * dfreq / refclk; // calulate DDS new tuning word
}
//******************************************************************
void loop()
{
  if (c4ms > 250) // timer / wait for a full second
  {
    c4ms = 0;
    dfreq = analogRead(POTEN_IN); // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz
    cbi (TIMSK2, TOIE2); // disble Timer2 Interrupt
    tword_m = twoTo32 * dfreq / refclk; // calulate DDS new tuning word
    sbi (TIMSK2, TOIE2); // enable Timer2 Interrupt
    Serial.print(dfreq);
    Serial.print(" ");
    Serial.println(tword_m);
  }
}
//******************************************************************
// timer1 setup
// set prscaler to 1, PWM mode to phase correct PWM, 16000000/512 = 31.25kHz clock
void setup_timer1(void)
{
  // Timer1 Clock Prescaler to : 1
  sbi (TCCR1B, CS10);
  cbi (TCCR1B, CS11);
  cbi (TCCR1B, CS12);
  // Timer0 PWM Mode set to Phase Correct PWM
  cbi (TCCR1A, COM1A0); // clear Compare Match
  sbi (TCCR1A, COM1A1);
  cbi (TCCR1A, COM1B0); // clear Compare Match
  sbi (TCCR1A, COM1B1);
  sbi (TCCR1A, WGM10); // Mode 1 / Phase Correct PWM
  cbi (TCCR1A, WGM11);
  cbi (TCCR1B, WGM12);
  cbi (TCCR1B, WGM13);
}

//******************************************************************
// timer2 setup
// set prscaler to 1, PWM mode to phase correct PWM, 16000000/512 = 31.25kHz clock
void setup_timer2()
{
  // 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);
  sbi (TCCR2A, WGM20); // Mode 1 / Phase Correct PWM
  cbi (TCCR2A, WGM21);
  cbi (TCCR2B, WGM22);
}
//******************************************************************
// Timer2 Interrupt Service at 31.25kHz = 32us
// this is the timebase REFCLOCK for the DDS generator
// FOUT = (M (REFCLK)) / (2 exp 32)
// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER2_OVF_vect)
{
  sbi(PORTD, TEST_PIN); // Test / set PORTD,TEST_PIN high to observe timing with a oscope
  phase_accum += tword_m; // soft DDS, phase accu with 32 bits
  icnt = phase_accum >> 24; // use upper 8 bits for phase accu as frequency information
  OCR2A = pgm_read_byte_near(sine256 + icnt); // read value fron ROM sine table and send to PWM DAC
  OCR1A = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_1));
  OCR1B = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_2));
  if (icnt1++ == 125) // increment variable c4ms every 4 milliseconds
  {
    c4ms++;
    icnt1 = 0;
  }
  cbi(PORTD, TEST_PIN); // reset PORTD,TEST_PIN
}