สารบัญ:

Arduino Sinewave สำหรับอินเวอร์เตอร์: 4 ขั้นตอน
Arduino Sinewave สำหรับอินเวอร์เตอร์: 4 ขั้นตอน

วีดีโอ: Arduino Sinewave สำหรับอินเวอร์เตอร์: 4 ขั้นตอน

วีดีโอ: Arduino Sinewave สำหรับอินเวอร์เตอร์: 4 ขั้นตอน
วีดีโอ: Sine Wave Inverter || Using Arduino || Update 2024, กรกฎาคม
Anonim
Arduino Sinewave สำหรับอินเวอร์เตอร์
Arduino Sinewave สำหรับอินเวอร์เตอร์

ในโครงการนี้ ฉันได้สร้างสัญญาณ SPWM (มอดูเลตแบบกว้างคลื่นไซน์) จากเอาต์พุตดิจิตอล Arduino pwm สองช่อง

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

eprojectszone

ขั้นตอนที่ 1: การสร้างสัญญาณ Pwm สำหรับ 50Hz

ในการสร้างสัญญาณ 50Hz ที่ความถี่สูง จำเป็นต้องทำการคำนวณบางอย่าง ความถี่จาก Arduino สามารถอยู่ที่ 8MHz แต่เราต้องการสัญญาณที่มีวัฏจักรหน้าที่ผันแปร

เพื่อให้เข้าใจถึงประเภทของวัฏจักรหน้าที่ผันแปรของ Arduino คุณสามารถอ่าน 3 ส่วนนี้ของโพสต์ 1, 2 และ 3 เดียวกัน

สมมติว่าความถี่ของเราคือ 50Hz ซึ่งหมายความว่าช่วงเวลาคือ 20ms ดังนั้น 10ms จึงเป็นช่วงครึ่งรอบ ใน 10 มิลลิวินาทีนั้น เราจำเป็นต้องมีพัลส์จำนวนมากที่มีรอบการทำงานที่แตกต่างกันโดยเริ่มจากรอบการทำงานเล็กๆ ตรงกลางของสัญญาณ เรามีรอบการทำงานสูงสุดและสิ้นสุดด้วยรอบการทำงานเล็กๆ ด้วย ในการสร้างคลื่นไซน์ เราจะใช้หมุดสองตัวหนึ่งอันสำหรับ ครึ่งวงจรบวกและหนึ่งรอบสำหรับครึ่งรอบเชิงลบ ในโพสต์ของเราเราใช้พิน 5 และ 6 ซึ่งหมายถึงตัวจับเวลา 0

สำหรับสัญญาณที่ราบรื่น เราเลือก pwm ที่ถูกต้องของเฟสที่ความถี่ 31372 Hz-ดูโพสต์ก่อนหน้า หนึ่งในปัญหาที่ใหญ่ที่สุดคือวิธีที่เราคำนวณรอบการทำงานที่จำเป็นสำหรับแต่ละพัลส์ ดังนั้น เนื่องจากความถี่ของเราคือ f=31372Hz ช่วงเวลาสำหรับแต่ละพัลส์คือ T=1/31372=31.8 เรา ดังนั้นจำนวนพัลส์สำหรับครึ่งรอบคือ N=10ms/31.8us=314 พัลส์ ตอนนี้เพื่อคำนวณรอบการทำงานสำหรับแต่ละพัลส์ เรามี y=sinx แต่ในสมการนี้ เราต้องการองศา ดังนั้นครึ่งรอบจะมี 180 องศาสำหรับ 314 พัลส์ สำหรับแต่ละชีพจร เรามี 180/314=0.57deg/pulse นั่นหมายถึงทุก ๆ ชีพจรที่เราก้าวไปข้างหน้าด้วย 0.57 องศา

y คือรอบการทำงานและ x ค่าของตำแหน่งในครึ่งรอบการทำงาน ในตอนแรก x คือ 0, หลังจาก x=0.57, x=1.14 และไปเรื่อยๆ จนถึง x= 180

หากเราคำนวณค่าทั้งหมด 314 ค่า เราจะได้องค์ประกอบอาร์เรย์ 314 (ประเภท "int" เพื่อให้ Arduino คำนวณได้ง่ายขึ้น)

อาร์เรย์ดังกล่าวคือ:

int sinPWM={1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

คุณจะเห็นได้ว่าวัฏจักรหน้าที่ต่ำที่สุดที่องค์ประกอบแรกและสุดท้ายและสูงที่สุดที่อยู่ตรงกลาง เช่นเดียวกับคลื่นไซน์

ขั้นตอนที่ 2: โปรแกรม Arduino สำหรับวัฏจักรหน้าที่ตัวแปร

โปรแกรม Arduino สำหรับวัฏจักรหน้าที่ตัวแปร
โปรแกรม Arduino สำหรับวัฏจักรหน้าที่ตัวแปร

ในภาพด้านบน เรามีสัญญาณวัฏจักรหน้าที่ผันแปรพร้อมค่าจากอาร์เรย์

แต่จะสร้างสัญญาณดังกล่าวได้อย่างไร??

ส่วนของโปรแกรมด้านล่างใช้อินเตอร์รัปต์เพื่อเปลี่ยนค่าของรอบการทำงาน

sei();// เปิดใช้งานการขัดจังหวะ

}

ISR(TIMER1_COMPA_vect){// ขัดจังหวะเมื่อตัวจับเวลา 1 ตรงกับค่า OCR1A

if(i>313 && OK==0){// ค่าสุดท้ายจากเวกเตอร์สำหรับพิน 6

i=0;// ไปที่ค่าแรกของ vector(array)

OK=1;//เปิดใช้งานพิน 5

}

x=sinPWM;// x นำค่าจากเวกเตอร์ที่สอดคล้องกับตำแหน่ง i (i เป็นศูนย์ที่จัดทำดัชนี) - ค่าของรอบการทำงาน

i=i+1;// ไปยังตำแหน่งถัดไป

}

ขั้นตอนที่ 3: สลับที่ 50Hz Arduino Pins

สลับที่ 50Hz Arduino Pins
สลับที่ 50Hz Arduino Pins

เนื่องจากแต่ละพินสร้างเพียงครึ่งรอบการทำงานเพื่อสร้างคลื่นไซน์เต็มรูปแบบ เราใช้พินสองพินซึ่งสลับกันหลังจาก 10mseconds ที่แน่นอน (สำหรับ 50Hz) การเปลี่ยนแปลงของพินนี้ทำขึ้นที่ส่วนท้ายของอาร์เรย์ - หลังจากที่สมมติว่าพิน 5 สร้าง 314 พัลส์ พินนี้ถูกปิดและเปิดใช้งานพิน 6 ซึ่งทำให้สิ่งเดียวกัน แต่สำหรับรอบการทำงานเชิงลบ

เนื่องจาก Arduino สามารถสร้างสัญญาณบวกได้เฉพาะวงจรการทำงานเชิงลบที่สร้างขึ้นในสะพาน h- คุณสามารถอ่านได้ที่นี่

โปรแกรมสำหรับเปลี่ยนพิน:

sei();// เปิดใช้งานการขัดจังหวะ

}

ISR(TIMER1_COMPA_vect){// ขัดจังหวะเมื่อตัวจับเวลา 1 ตรงกับค่า OCR1A

if(i>313 && OK==0){// ค่าสุดท้ายจากเวกเตอร์สำหรับพิน 6

i=0;// ไปที่ค่าแรกของเวกเตอร์

OK=1;//เปิดใช้งานพิน 5

}

if(i>313 && OK==1){// ค่าสุดท้ายจากเวกเตอร์สำหรับพิน 5

i=0;//ไปที่ค่าแรกของเวกเตอร์

OK=0;//เปิดใช้งานพิน 6

}

x=sinPWM;// x รับค่าจากเวกเตอร์ที่สอดคล้องกับตำแหน่ง i (i ถูกสร้างดัชนีเป็นศูนย์)

i=i+1;// ไปยังตำแหน่งถัดไป

ถ้า(ตกลง==0){

OCR0B=0;//สร้างพิน 5 0

OCR0A=x;//เปิดใช้งานพิน 6 กับรอบการทำงานที่สอดคล้องกัน

ถ้า(ตกลง==1){

OCR0A=0;//ทำพิน 6 0

OCR0B=x;//เปิดใช้งานพิน 5 ไปยังรอบการทำงานที่สอดคล้องกัน

}

}

ขั้นตอนที่ 4: ขับสะพาน H และกรองสัญญาณ Pwm

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

H-bridge ถูกนำเสนอที่นี่

ตัวกรองความถี่ต่ำผ่านทดสอบกับมอเตอร์ไฟฟ้ากระแสสลับขนาดเล็กที่นี่

แนะนำ: