PMD30 درایور جریان بالا | کنترل سرعت در دستان شما
۴ اردیبهشت ۱۳۹۷راه اندازی موتور استپر پنج فاز
۴ اردیبهشت ۱۳۹۷موتورهای داینامیکسل یکی از پرکاربردترین موتورها در زمینه رباتیک میباشند. اما مشکلی که در اینجا وجود دارد آن است که بیشترین افرادی که با این موتورها کار میکنند معمولا مهندس مکانیک میباشند که با زبانهای برنامهنویسیی همچون C یا ++C آشنا نیستند. بنابراین ارتباط این موتورها با زبان برنامهنویسی همچون متلب بسیار مفید و حائز اهمیت است. خوشبختانه شرکت ربات سازان توانست این مشکل را برای همیشه حلکرده و این موتورها را با نرم افزار متلب نیز کنترل کند.
سروموتورهای DYNAMIXEL، محصول شرکت روبوتیس میباشند که برای کارهای روباتیک طراحی و راونه بازار شدهاند. این موتورها قابلیت شبکهای شدن دارند و ضمن دریافت فرمان از کنترلر اصلی میتوانند اطلاعات مختلفی نظیر موقعیت، سرعت و بار موتور، دمای داخلی ماژول، ولتاژ ورودی و … به آن برگردانند. برای راهاندازی این سروموتور داینامیکسل با کامپیوتر نیاز به واسط USB2Dynamixel است. این سروموتورها را به علت دارا بودن قابلیت گردش کامل میتوان هم در حالت کنترل موقعیت به عنوان سروموتور و هم در حالت کنترل سرعت به عنوان موتور با فیدبک انکودر استفاده نمود.
در اینجا دو برنامه اصلی و کمکی قرار دارند. در برنامه اصلی بعد باز کردن درگاه و مشخص کردن برخی از تنظیمات مورد نیاز، زوایای موردنظر (load Data.mat) فراخوانی شدهاند. از آنجاییکه در این برنامه شش موتور داینامیکسل کنترل میشوند، بنابراین شش زاویه مشخص شده است. سپس توسط تابع کمکی (goalpos) به موتورها دستور داده میشود که در زاویه مورد نظر قرار گیرد. برای اطلاعات بیشتر میتوانید با ما در ارتباط باشید.
برنامه اصلی
clc; clear all; close all; clear s; %++++++++++++++++++++++++++++++++++++++++++++++++++++++ s = serial('COM4'); set(s, 'BaudRate',1000000); set(s, 'Parity', 'none'); set(s, 'DataBits', 8); set(s, 'StopBit', 1); set(s, 'Timeout',10); fopen(s); load Data.mat m1=AllTheta(:,1) * (1024 / 300); m2=AllTheta(:,2) * (1024 / 300); m3=AllTheta(:,3) * (1024 / 300); m4=AllTheta(:,4) * (1024 / 300); m5=AllTheta(:,5) * (1024 / 300); m6=AllTheta(:,6) * (1024 / 300); for y=1:700 pos = goalpos(1,fix(512 - m1(y))); fprintf(s,pos); pos = goalpos(2,fix(512 + m6(y))); fprintf(s,pos); pos = goalpos(3,fix(512 - m5(y))); fprintf(s,pos); pos = goalpos(4,fix(512 + m4(y))); fprintf(s,pos); pos = goalpos(5,fix(512 - m3(y))); fprintf(s,pos); pos = goalpos(6,fix(512 + m2(y))); fprintf(s,pos); % pause(0.005); end fclose(s); delete(s); clear s; delete(instrfind);
برنامه کمکی
function GoalPos = goalpos(id,pos) packet = [hex2dec('FF'),hex2dec('FF'),id,hex2dec('05'), hex2dec('03'), hex2dec('1E'), hex2dec('12'), hex2dec('92'), hex2dec('00')]; uPos = pos; hexH = floor(uPos / 256); hexL = mod(uPos,256); packet(7) = hexL; packet(8) = hexH; checksum = 0; for i = 3 : 8 checksum = checksum + packet(i); end checksum = (~bitget(checksum,8:-1:1)) & bitget(hex2dec('FF'),8:-1:1); packet(9) = bi2de(checksum & bitget(hex2dec('FF'),8:-1:1),'left-msb'); GoalPos = packet; end
1 Comment
سلام وقتتوون بخیر …
ببخشید من دوتا موتور داینامیکسل دارم که متاسفانه ricovery نمیشه و نرم افزار اونو نمیشناسه همه چی هم سالمه و مشکل هم اینجاست که هیچ اتفاقی هم نیفتاده و برد و همه چی سالمه فقط مثل اینکه برنامه بوتتش به هم خورده احتمالا میتونید راهنمایی کنید که چجوری میتونم از این حالت خارجش کنم