Control DC motor

Control DC motor

هدف: این کد برای کنترل سرعت یک موتور DC با استفاده از پتانسیومتر طراحی شده است. با استفاده از این کد، می‌توانید سرعت موتور را با چرخاندن پتانسیومتر تنظیم کنید. همچنین، این کد مقادیر فعلی پتانسیومتر و سرعت موتور را در زمان واقعی رسم می‌کند.

 

قطعات مورد استفاده:

موتور DC: موتوری که سرعت آن توسط پتانسیومتر کنترل می‌شود.

ترانزیستور TIP122: این ترانزیستور برای کنترل سرعت موتور DC با استفاده از مدولاسیون عرض پالس (PWM) استفاده می شود.

پتانسیومتر ده کیلو: یک مقاومت قابل تنظیم که با چرخاندن آن، می‌توان سرعت موتور را تنظیم کرد.

مقاومت یک کلیو:این مقاومت با پایه بیس ترانزیستور سری است تا جریان ورودی به پایه بیس ترانزیستور را محدود کند.

دیود 1n4007: از این دیود برای حفاظت از ترانزیستور در برابر جریانهای برگشتی موتور استفاده می شود.

.

.

مرورگر خود را تغییر دهید.

.

کدبرنامه:

.

clc;clear;

%create an arduino object
a = arduino();

% define the pins
motorPin = 9;
potPin = 0;

% create arrays to store the data
potValues = [];
motorSpeeds = [];

% create a figure and configure it for real-time plotting
figure;
h1 = animatedline('Color', 'r', 'LineWidth', 2);
h2 = animatedline('Color', 'b', 'LineWidth', 2);
legend('Potentiometer', 'Motor Speed(%)');
xlabel('Time (s)');
ylabel('Value');

% get the start time
startTime = datetime('now');

while true
% read the value from the potentiometer
potValue = readVoltage(a, potPin);

% map the potentiometer value to a PWM value
motorSpeed = (potValue - 0) * (1 - 0) / (5 - 0) + 0;

% set the motor speed
writePWMDutyCycle(a, motorPin, motorSpeed);

% store the data in the arrays
potValues(end+1) = potValue;
motorSpeeds(end+1) = motorSpeed;

% get the current time
t = datetime('now') - startTime;

% add the data to the animated lines
addpoints(h1, datenum(t), potValue);
addpoints(h2, datenum(t), motorSpeed);

% update the x-axis limits
xlim([datenum(t-seconds(15)) datenum(t)]);

% update the plot
drawnow;
end

.

 .

توضیحات کد:

a = arduino(); :

این یک متغییر ایجاد میکنیم a ایجاد می کند که به MATLAB اجازه می دهد با برد آردوینو ارتباط برقرار کند.

 

motorPin = 9;

 potPin = 0; اعداد پین موتور و پتانسیومتر را تنظیم می کند.

 

potValues = [];

 motorSpeeds = [];:این آرایه های خالی را برای ذخیره مقادیر پتانسیومتر و سرعت موتور مقداردهی می کند.

 

figure;

h1 = animatedline('Color', 'r', 'LineWidth', 2);

h2 = animatedline('Color', 'b', 'LineWidth', 2); این یک شکل جدید و دو خط متحرک (یکی قرمز و دیگری آبی) برای ترسیم بلادرنگ ایجاد می کند.

 

  legend('Potentiometer', 'Motor Speed(%)');با این دستور این متن ها در پلات چاپ میشوند تا خط ها مشخص شود کدام رنگ هستند.

 

xlabel('Time (s)');

ylabel('Value');:  با این دستورات لیبل به محور عمودی و افقی اضافه میشود.

 

startTime = datetime('now');:

                                                                                                           این زمان فعلی را دریافت می کند و آن را در startTime ذخیره می کند.

while true:  این یک حلقه بی نهایت را شروع می کند.

 

potValue = readVoltage(a, potPin);:  این ولتاژ را از پتانسیومتر می خواند.

 

motorSpeed = (potValue - 0) * (1 - 0) / (5 - 0) + 0;

                                                 این مقدار پتانسیومتر (که از 0 تا 5 ولت متغیر است) را به مقدار PWM (که از 0 تا 1 متغیر است) ترسیم می کند.

 

WritePWMDutyCycle(a, motorPin, motorSpeed);:

                                                                              این کار با نوشتن WritePWMDutyCycle روی پین موتور، سرعت موتور را تنظیم می کند.

 

potValues(end+1) = potValue;

 :motorSpeeds(end+1) = motorSpeed; این مقدار پتانسیومتر فعلی و سرعت موتور را در آرایه ها ذخیره می کند.

 

 t = datetime('now') - startTime; این زمان سپری شده از شروع برنامه را محاسبه می کند.

 

addpoints(h1, datenum(t), potValue);

addpoints(h2, datenum(t), motorSpeed); این مقدار پتانسیومتر فعلی و سرعت موتور را به خطوط متحرک اضافه می کند.

 

xlim([datenum(t-seconds(15)) datenum(t)]);:

                                                                                              این محدودیت های محور x را برای نمایش 15 ثانیه آخر داده به روز می کند.

 

 drawnow; این نمودار را با داده های جدید به روز می کند.

 

end: این حلقه بی نهایت را به پایان می رساند.

.

این کد برای کنترل سرعت موتور با استفاده از یک پتانسیومتر طراحی شده است و مقدار پتانسیومتر و سرعت موتور را در زمان واقعی ترسیم می کند. سرعت موتور با استفاده از مدولاسیون عرض پالس (PWM) کنترل می شود و مقدار پتانسیومتر به عنوان یک ولتاژ خوانده می شود. سپس مقدار پتانسیومتر به مقدار PWM نوشته می شود تا سرعت موتور تنظیم شود. نمودار در زمان واقعی به روز می شود تا مقدار پتانسیومتر فعلی و سرعت موتور را نشان دهد. کد در یک حلقه بی نهایت اجرا می شود تا زمانی که به صورت دستی متوقف شود. لطفا توجه داشته باشید که این کد باید در MATLAB اجرا شود و به بسته پشتیبانی متلب برای سخت افزار آردوینو (Arduino Hardware Support Package) برای اجرای کد نیاز دارید.

۰ ۰ ۰ دیدگاه

دیدگاه‌ها

هیچ نظری هنوز ثبت نشده است.
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی

تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار
bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان
Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران