دائرة التحكم في المحرك ذات التيار العالي باستخدام Arduino

جرب أداة القضاء على المشاكل





في هذا المشروع ، نناقش كيفية التحكم في سرعة المحرك باستخدام دائرة Arduino PWM ، وكيفية تنفيذ التحكم في الأمام أو الاتجاه العكسي في محرك DC باستخدام Arduino من خلال زوجين من مفاتيح الضغط. يمكن التحكم في أي محرك عالي التيار حتى 30 أمبير باستخدام هذا الإعداد

بواسطةعنكيت نيجي



يعد المحرك مكونًا أساسيًا جدًا في مجال الكهرباء والإلكترونيات حيث يتم استخدامه كمشغلات في العديد من المجالات.

نحتاج إلى محركات للتطبيقات الصغيرة مثل الروبوتات وكذلك في المناطق التي تستخدم فيها المحركات الثقيلة (الصناعات وما إلى ذلك).



يمكن الآن التحكم في المحركات المستخدمة للتطبيقات الصغيرة بسهولة لأنها لا تأخذ الكثير من التيار (أقل من 2 أمبير).

ويمكن التحكم في هذه المحركات بسهولة باستخدام متحكم مثل اردوينو سائق المحرك ic مثل L298 أو L293D .

لكن لا يمكن التحكم في المحركات التي تستخدم للأغراض الثقيلة (أكبر من 10 أمبير) باستخدام هذه الصور حيث يمكنهم توفير تيار محدود (بحد أقصى 2 أمبير). فكيف يتم التحكم في هذه المحركات من؟

الجواب بسيط: باستخدام التبديلات ، والتي تعمل كمفاتيح ، أي تبديل التيار الكبير باستخدام تيار صغير. بهذه الطريقة يمكن تحقيق شيئين:

1. تشغيل محرك التيار العالي نفسه.

2. عزل الدائرة وبالتالي منع حدوث أي صدمات.

الآن يمكن استخدام أي متحكم دقيق لتبديل هذه المرحلات. سنستخدم اردوينو UNO هنا.

المكونات المطلوبة لهذا المشروع:

1. ARDUINO UNO: لإعطاء منطق الإدخال للجانب الأساسي للترحيل.

2. SPDT RELAY -2: مرحلان مطلوبان للدوران في كلا الاتجاهين. يجب تصنيف جهات الاتصال للتعامل مع مواصفات المحرك الحالية العالية

ترحيل صورة زرقاء اللون تتابع يظهر N / O N / C وتفاصيل القطب3.Power Mosfet: يمكنك استخدام IRF1010 mosfet ضغط زر التبديل المجهري

4. البطارية (12 فولت): لتزويد المحرك بالطاقة.

5. زران ضغطان: لإعطاء مدخلات لاردوينو (أي عند الضغط عليه وعند عدم الضغط عليه)

10 كيلو 1/4 واط المقاوم

6. اثنان من المقاومات 10K: للتخلص (موضح أدناه)

دائرة التحكم في المحرك ذات التيار العالي باستخدام Arduino

7. توصيل الأسلاك: لعمل التوصيلات.

تخطيطي:

دائرة التحكم في محرك PWM Arduino

قم بإجراء الاتصالات كما هو موضح في الشكل.

1. قم بتوصيل الطرف المفتوح عادة لكل من المرحل إلى الطرف الموجب للبطارية والطرف المغلق عادة بالطرف السالب للبطارية.

2. قم بتوصيل المحرك بين الأطراف المتبقية (من أصل ثلاثة) لكل مرحل.

3. قم بتوصيل أحد طرفي جانب أساسي من المرحلات بدبابيس إخراج اردوينو كما هو محدد في الكود والطرف الآخر بالأرض.

4. قم بتوصيل أحد طرفي كل من الأزرار الانضغاطية بدبوس 5 فولت من اردوينو ومحطة أخرى بدبابيس الإدخال كما هو محدد في الكود.

4. ** لا تنس توصيل المقاومات لأنها مهمة جدًا لعمل هذه الدائرة كما هو موضح أدناه:

لماذا المقاومات متصلة؟

قد تجد أنه لا يوجد شيء على الإطلاق متصل بدبابيس الإدخال في Arduino ، لكن هذا لا يعني أن هذه pinouts قد تكون صفرًا منطقيًا عندما يكون المفتاح المشار إليه مفتوحًا

بل يعني أنه عندما يكون المفتاح مفتوحًا ، يمكن أن يأخذ Arduino أي قيمة عشوائية بين المنطق 0 والمنطق 1 ، وهو أمر غير جيد على الإطلاق (وهذا ما يسمى الارتداد).

إذن ما نريده هنا هو أنه عندما لا يكون هناك شيء متصل بدبوس الإدخال ، أي أن زر الضغط مفتوح ، فإن اردوينو يأخذ 0 مدخلات من الدبوس.

ولتحقيق ذلك ، يتم توصيل الدبوس مباشرة بالأرض قبل الزر الانضغاطي عبر المقاوم. إذا كان متصلاً مباشرة بالأرض بدون مقاومة ، فهناك فرص جيدة في أن يحترق حيث سيتم تقصير الدبوس إلى الأرض وسوف تتدفق كمية هائلة من التيار. لمنع ذلك ، يتم توصيل المقاوم بينهما.

يسمى هذا المقاوم بالمقاومة المنسدلة لأنه يسحب المنطق على الدبوس إلى 0. وتسمى هذه العملية بخفض الضغط.

الشفرة:

انسخ هذا الرمز في اردوينو الخاص بك.

int x// initialise variables
int y
int z
int w
void setup() {
pinMode(6,OUTPUT)//initialise pin 6 as output to RL1
pinMode(9,OUTPUT)//initialise pin 9 as output to RL2
pinMode(3,INPUT)//initialise pin 3 as input
pinMode(4,INPUT)//initialise pin 4 as input
pinMode(10,OUTPUT)//initialise PWM pin 8 as output to gate of mosfet
pinMode(A0,INPUT)//initialise pin A0 as input from pot.
Serial.begin(9600)
}
void loop() {
z=analogRead(A0)// read values from potentiometer in terms of voltage
w= map(z,0,1023,0,255)// map those values from 0 to 255
analogWrite(10,w)// write the mapped value to 10thpin as output
delay(1)//on time period of mosfet
analogWrite(10,w)
delay(1)//off time period of ,mosfet
Serial.println(z)//print value from pot to serial monitor
Serial.println(w)//print mapped value to serial monitor
x= digitalRead(3)
y= digitalRead(4)
if(x==0 && y==0){digitalWrite(6,LOW)//hault motor
digitalWrite(9,LOW)}
if(x==1 && y==0){digitalWrite(6,HIGH)// clockwise rotation of motor
digitalWrite(9,LOW)}
if(x==0 && y==1){digitalWrite(6,LOW)// anticlockwise rotation of motor
digitalWrite(9,HIGH)}
if(x==1 && y==1){digitalWrite(6,LOW)//hault motor
digitalWrite(9,LOW)
}
}

العمل (فهم الكود):

• التحكم في الاتجاه:

أ. عند عدم الضغط على كلا الزرين الانضغاطيين:

في هذه الحالة ، يأخذ اردوينو 0 مدخلات من كلا الدبابيس. كما هو محدد في الكود في هذه الحالة ، يعطي كلا دبابيس الإخراج 0 منطق (منخفض):

إذا (x == 0 && y == 0) {digitalWrite (6، LOW)

digitalWrite (9، منخفض)}

نظرًا لأن جهد الإدخال إلى الابتدائي لكل من المرحلات هو صفر طرف ثانوي لكلاهما يظل في وضع مغلق بشكل طبيعي. وبالتالي لا يوجد فولت في كلا طرفي المحرك ، مما يؤدي إلى عدم الدوران.

ب. عند الضغط على الزر الانضغاطي X ولكن لا يتم الضغط على Y:

في هذه الحالة ، يأخذ اردوينو 0 مدخلات من الدبوس 4 لكن المدخلات 1 من pin3. كما هو محدد في الكود في هذا الشرط ، يجب أن يكون الطرف 6 في المنطق 1 (HIGH) بينما دبوس 9 في المنطق 0 (LOW):

إذا (x == 1 && y == 0) {digitalWrite (6، HIGH)

digitalWrite (9، منخفض)}

نظرًا لأن جهد الدخل للترحيل رقم 1 مرتفع ، فإن مفتاح هذا المرحل يتم إلقائه في حالة مفتوحة بشكل طبيعي بينما يكون جهد الدخل إلى المرحل 2 منخفضًا ، ويظل مفتاح هذا المرحل في حالة مغلقة بشكل طبيعي مما يتسبب في 12 فولت و 0 فولت على التوالي عبر أطراف المحرك ، مما يتسبب في دوران المحرك في اتجاه واحد.

C. عند الضغط على الزر الانضغاطي Y ولكن لا يتم الضغط على X:

في هذه الحالة ، يأخذ arduino مدخلًا واحدًا من الدبوس 4 ولكن الإدخال 0 من pin3. كما هو محدد في الكود في هذا الشرط ، يجب أن يكون دبوس 6 في المنطق 0 (LOW) بينما الدبوس 9 في المنطق 1 (HIGH):

إذا (x == 1 && y == 0) {digitalWrite (6، LOW)

digitalWrite (9 ، عالية)}

نظرًا لأن جهد الدخل للترحيل رقم 2 مرتفع هذه المرة ، يتم طرح مفتاح هذا المرحل في حالة مفتوحة بشكل طبيعي بينما يكون جهد الدخل للترحيل رقم 1 منخفضًا ، ويظل مفتاح هذا المرحل في حالة مغلقة بشكل طبيعي مما يتسبب في 12 فولت و 0 فولت على التوالي عبر المحرك الأطراف ، مما يتسبب في دوران المحرك في اتجاه آخر.

د. عند الضغط على كلا الزرين الانضغاطيين:

في هذه الحالة ، يأخذ اردوينو مدخلًا واحدًا من كلا الدبابيس. كما هو محدد في الكود في هذه الحالة ، يعطي كلا دبابيس الإخراج 0 منطق (منخفض):

إذا (x == 0 && y == 0) {digitalWrite (6، LOW)

digitalWrite (9، منخفض)}

نظرًا لأن جهد الإدخال إلى الابتدائي لكل من المرحلات هو صفر طرف ثانوي لكلاهما يظل في وضع مغلق بشكل طبيعي. وبالتالي لا يوجد فولت عند كلا طرفي المحرك ، مما يؤدي إلى عدم حدوث دوران.

• التحكم في السرعة:

لنفترض أن مقياس الجهد في هذا الموضع عندما يعطي 0 فولت كمدخل إلى دبوس A0 في اردوينو. نتيجة لهذا ، يقوم arduino بتعيين هذه القيمة على أنها 0 وبالتالي يعطي 0 كإخراج PWM على الطرف رقم 10 ، أي ،

analogWrite (10،0) // اكتب القيمة المعينة إلى الدبوس العاشر كإخراج

ومن ثم تحصل بوابة mosfet على 0 تيار بسبب بقاءها متوقفة والمحرك في وضع الإغلاق.

ومع ذلك ، نظرًا لتدوير القدر وتغيير قيمة الوعاء ، فإن الجهد على الدبوس A0 يختلف أيضًا ، ويتم تعيين هذه القيمة على الدبوس رقم 10 مع زيادة عرض PWM بشكل متناسب ، مما يتسبب في تدفق المزيد من التيار عبر المحرك و mosfet استنزاف ، والذي بدوره يسمح للمحرك باكتساب المزيد من السرعة بشكل متناسب ، ويحدث نفس الشيء بالعكس.

وبالتالي من المناقشة أعلاه ، يمكننا أن نرى كيف يمكن استخدام Arduino للتحكم في السرعة وكذلك الاتجاه (للأمام العكسي) لمحرك تيار مستمر عالي التيار ببساطة عن طريق ضبط الوعاء المحدد ومن خلال زوجين من أزرار الضغط.

تحديث : بالنسبة لمحرك التيار العالي ، يرجى استخدام مرحلات 12 فولت / 30 أمبير ومراحل تشغيل BJT لتشغيل مرحلات الطاقة العالية هذه كما هو موضح في الرسم التخطيطي المعدل التالي:




زوج من: حساس وقوف السيارات العكسي مع إنذار في المادة التالية: دائرة مولد إشارة Arduino PWM