جدول المحتويات:

اردوينو Sinewave للعواكس: 4 خطوات
اردوينو Sinewave للعواكس: 4 خطوات

فيديو: اردوينو Sinewave للعواكس: 4 خطوات

فيديو: اردوينو Sinewave للعواكس: 4 خطوات
فيديو: Sine Wave Inverter || Using Arduino || 50Hz 2024, يوليو
Anonim
اردوينو Sinewave للمحولات
اردوينو Sinewave للمحولات

في هذا المشروع ، قمت بتوليد إشارة SPWM (موجة جيبية معدلة على نطاق واسع) من مخرجات رقمية اردوينو pwm.

نظرًا لعمل مثل هذا البرنامج ، يجب أن أتحدث عن العديد من وظائف وخصائص Arduino الأخرى ، المشروع الكامل بما في ذلك صور الذبذبات والترددات المختلفة ، يرجى زيارة موقع الويب الخاص بي:

eprojectszone

الخطوة 1: توليد إشارة Pwm لـ 50 هرتز

لتوليد إشارة 50 هرتز بتردد أعلى ، من الضروري إجراء بعض الحسابات. يمكن أن تكون الترددات من arduino في 8 ميجا هرتز ، لكننا نريد إشارة ذات دورة عمل متغيرة.

لفهم أنواع دورات المهام المتغيرة في اردوينو ، يمكنك قراءة هذه الأجزاء الثلاثة من نفس المنشور 1 و 2 و 3.

لنفترض أن التردد لدينا هو 50 هرتز مما يعني أن الفترة الزمنية هي 20 مللي ثانية. لذا فإن 10 مللي ثانية هي نصف دورة. في تلك العشر ملي ثانية نحتاج إلى العديد من النبضات بدورات عمل مختلفة تبدأ بدورات عمل صغيرة ، في منتصف الإشارة لدينا دورات عمل قصوى وننتهي أيضًا بدورات عمل صغيرة. لتوليد موجة جيبية ، سنستخدم دبابيس واحدة من أجل نصف دورة موجبة وواحد لنصف دورة سالبة. في منشورنا لهذا نستخدم الدبابيس 5 و 6 وهذا يعني Timer 0.

للحصول على إشارة سلسة ، نختار الطور الصحيح pwm عند تردد 31372 هرتز - انظر الوظيفة السابقة. واحدة من أكبر المشاكل هي كيف نحسب دورة العمل اللازمة لكل نبضة. لذلك ، نظرًا لأن التردد لدينا هو f = 31372 هرتز ، فإن الفترة الزمنية لكل نبضة هي T = 1/31372 = 31.8 لنا ، لذا فإن عدد النبضات لنصف دورة هو N = 10ms / 31.8us = 314 نبضة. الآن لحساب دورة العمل لكل نبضة ، لدينا y = sinx ، لكن في هذه المعادلة نحتاج إلى درجات ، لذا فإن نصف دورة بها 180 درجة مقابل 314 نبضة. لكل نبضة لدينا 180/314 = 0.57deg / نبضة. هذا يعني أنه لكل نبضة نتحرك للأمام بمقدار 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

إذا (i> 313 && OK == 0) {// القيمة النهائية من المتجه للدبوس 6

أنا = 0 ؛ // انتقل إلى القيمة الأولى للمتجه (مجموعة)

OK = 1 ؛ // تمكين الدبوس 5

}

x = sinPWM ؛ // x تأخذ القيمة من المتجه المقابل للموضع i (i مفهرس صفر) - قيمة دورة العمل

i = i + 1 ؛ // انتقل إلى الموضع التالي

}

الخطوة 3: التبديل عند 50 هرتز Arduino Pins

بالتناوب عند 50 هرتز Arduino دبابيس
بالتناوب عند 50 هرتز Arduino دبابيس

نظرًا لأن كل دبوس يولد نصف دورة عمل فقط لعمل موجة جيبية كاملة ، فإننا نستخدم دبابيس تتناوب واحدة تلو الأخرى بعد 10 مللي ثانية بالضبط (لـ 50 هرتز). يتم إجراء هذا التغيير في المسامير في نهاية المصفوفة - لنفترض أن الدبوس 5 قد أنتج 314 نبضة ، يتم إيقاف تشغيل هذا الدبوس وتمكين الطرف 6 مما يجعل نفس الشيء ولكن لدورة العمل السلبية.

نظرًا لأن اردوينو يمكن أن يولد إشارات إيجابية فقط ، فإن دورة العمل السلبية مصنوعة في جسر h- يمكنك أن تقرأ عنها هنا

برنامج تغيير الدبابيس:

sei () ؛ // تمكين المقاطعات

}

ISR (TIMER1_COMPA_vect) {// المقاطعة عندما يتطابق المؤقت 1 مع قيمة OCR1A

if (i> 313 && OK == 0) {// القيمة النهائية من المتجه للدبوس 6

أنا = 0 ؛ // انتقل إلى القيمة الأولى للمتجه

OK = 1 ؛ // تمكين الدبوس 5

}

if (i> 313 && OK == 1) {// القيمة النهائية من المتجه للدبوس 5

أنا = 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 هنا.

تم اختبار مرشح الترددات المنخفضة بمحركات التيار المتردد الصغيرة هنا.

موصى به: