داستان از آنجایی شروع شد که میخواستم دو تا موتور سه فاز که با درایوهای تک به سه، از برق تکفاز تغذیه میشدند رو با ای وی آر کنترل کنم
کد ها رو توی arduino ide نوشتم، روی یه آردینو اونو تست کردم و پی سی بی رو طراحی و مونتاژ کردم . پی سی بی رو هم تست کردم و مثل بنز کار میکرد.وقتی تو تابلو نصبش کردم و میخواستم ابراز رضایت کنم یه حرکت تو مخی رو شروع کرد.
موتور دائما وایمیستاد و یه سری عملگرها هم بدون دلیل کار میکردند.
نتیجه اینکه «نویز» این دشمن دیرین سراغ پی سی بی من آمده بود و اون رو مورد عنایت خاص خودش قرار داده بود.
کار با تست سیم ها تعویضشون و فویل پیچ کردن و از این کارها شروع و با جا به جایی درایو از مجاورت تابلو متوقف شد
متوجه شدیم درایو که دور میشه تعداد این خطاها خیلی کم میشه . اممما بااازم هست.
آخر شب شده بود و زمان خداحافظی، به کارفرما سپردم که درایو رو فویل پیچ کن ببینیم خدا چی میخواد . خبرش رو به من بده
اما تو چشماش خواندم که حال این کارها رو نداره.
فردا ظهرش به من زنگ زد و اعلام کرد که ایراد از کار شماست و این کارها فایدهای نداره
من هم که ضرر رو توی جیب شلوار لمس کردم یه بار دیگه سراغ کد ها رفتم و مشکل رو این دیدم :
if(digitalRead(sensor)==1){
digitalWrite(invert, HIGH);
.
.
.
.
}
else {
digitalWrite(invert, LOW);
digitalWrite(JACK, HIGH);
lcd.clear();
lcd.setCursor(0,1);
.
.
.
.
}
تیکه دوم بعد از else بود که بدون کنترل تکرار میشد.
و اینک این else بود که ما را در دام نویز انداخته بود:
وقتی مینویسیم else یعنی هر چیزی که if نباشه و« هر چیزی » در میکرو کنترلر معادل نویزه
بهتر بگم وقتی else بدون شرط مهار استفاده میشه هر مقدار تصادفی غیر از شرط اصلی_ اینجا digitalRead(sensor)==1 _ که روی پایه فرمان پذیر ما میفته, شرط درست برای اجرای دستورات خودش میدونه و اون دستورات رو اجرا میکنه .
و اینجا همون مقدار میدان مغناطیسی حاصل از فرکانس درایو کافی بود تا تعداد این مقادیر رو زیاد کنه .
به جای else از else if و شرطی که دقیقا مد نظرتون هست استفاده کنید. میکرو رو یتیم رها نکنید
if(digitalRead(sensor)==1){
digitalWrite(invert, HIGH);
.
.
.
}
else if(digitalRead(sensor)==0){
digitalWrite(invert, LOW);
digitalWrite(JACK, HIGH);
lcd.clear();
lcd.setCursor(0,1);
.
.
.
}
همانا میکرو هم آدم است و اگر نداند خطا میکند.
دوست عزیزم آقای مهندی احسان باقری هم این نظر رو داشتند:
اون شرط رو که توی else گذاشتید خودش شبیه به یه فیلتر داره عمل میکنه