برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

۲۰۲ مطلب با موضوع «برق الکترونیک رباتیک» ثبت شده است

کنترلر P در ربات فوتبالیست

ShahBaz | سه شنبه, ۸ اسفند ۱۳۹۶، ۱۲:۲۴ ب.ظ

کنترلر P در ربات فوتبالیست

دوشنبه, ۴ فروردین ۱۳۹۳، ۱۲:۰۳ ب.ظ

همان طور که گفتیم هدف تمام سیستم‌های کنترلی به حداقل رساندن اندازه خطا در کمترین زمان ممکن است .

همچنین گفتیم اختلاف بین پارامتر سیستم و دستور ورودی را خطای سیستم میگوییم

پارامتر سیستم توسط سنسور اندازه گیری میشود و دستور ورودی هم از یک مدار دیگر به سیستم داده میشود

یاد آوری می‌کنیم که دستور ورودی و پارامتری که می‌خواهیم کنترل کنیم و خروجی سنسور باید از یک جنس باشند و فعال کنند هم باید توانایی تغییر دادن پارامتر را داشته باشد

برای مثال در ربات فوتبالیست وقتی می‌خواهیم ربات رو به دروازهٔ حریف بایستد : پارامتری که می‌خواهیم کنترل کنیم ( زاویه ) جلوی ربات است ، دستور ورودی به ما میگوید که ربات باید در چه جهتی‌ ( چه زاویه‌ای ) بایستد و سنسور هم جهتی‌ که ربات ایستاده ( زاویه ربات ) را اندازه گیری می‌کند . پس هر سه از جنس زاویه هستند و فعال کننده‌های ربات ( موتور‌ها ) میتوانند زاویه را تغییر دهند

همانطور که در شکل پست بالا دیده میشود : خطا در هر لحظه برابر است با مقدار مورد نظر ورودی ( reference ) منهای مقدار سنسور

توجه کنید که مقدار خطا در بعضی‌ از لحظات مثبت و در بعضی‌ از لحظات منفی‌ خواهد بود .

حالا ربات فوتبالیست را فرض کنید که قرار است رو به زاویه ی صفر درجه بایستد یعنی‌ مقدار مورد نظر ورودی ( Reference ) همیشه برابر صفر است . سنسور قطب نما هم در هر لحظه زاویه ی ربات رو اندازه گیری می‌کنه .

فرض کنید در یک لحظه قطب نما زاویه ۱۰ درجه را نشان دهد . ( تمام زوایا در دایره مثلثاتی هستند ) در این حالت خطا برابر صفر منهای ده مساوی ( منفی ده ) میشود . واضح است که در این حالت ربات باید در جهت خلاف مثلثاتی ( منفی‌ ) بچرخد تا این انحراف ( خطا ) تصحیح شود ( کمتر شود تا به صفر برسد )

در حالت بر عکس اگر قطب نما زاویه -۱۰ درجه را نشان دهد . در این حالت خطا برابر صفر منهای منفی‌ ده مساوی ( مثبت ده ) میشود . واضح است که در این حالت ربات باید در جهت مثلثاتی ( مثبت ) بچرخد تا این انحراف ( خطا ) تصحیح شود ( بیشتر شود تا به صفر برسد ) 

خوب پس اگر علامت خطا مثبت شد ربات باید در جهت مثبت بچرخد و اگر منفی‌ شد باید در جهت منفی‌ بچرخد ( واضح است که اگر خطا صفر باشد ربات باید بایستد )

سوال اینجاست که ربات با چه سرعتی بچرخد ؟

جواب واضح است : چون می‌خواهیم در کمترین زمان ممکن به خطای صفر برسیم پس ربات باید با حداکثر سرعت بچرخد

اما چرخیدن با حداکثر سرعت مشکلی‌ به وجود می‌‌آید . 

مشکل : فرض کنید خطا مثبت ده باشد . ربات شروع به چرخیدن می‌کند و خطا کم میشود تا به صفر برسد و وقتی به صفر رسید دستور میدهیم تا موتور‌ها خاموش شوند و ربات بایستد . اما ربات که نمی‌تواند درجا!!! بایستد . چیزی شبیه لختی یا اینرسی باعث میشود تا ربات نتواند درجا بایستد ، بلکه سرعت ربات به تدریج کم میشود تا بایستد . همین باعث میشود تا ربات به جای ایستادن در صفر ، صفر را رد کند و برود در مثلا منفی ۱۵ بایستد . حالا باید دوباره برگردیم و در برگشت نیز همین مشکل تکرار میشود یعنی‌ به جای ایستادن در صفر آن را رد می‌کند و مثلا در مثبت هیجده می‌‌ایستد و ...

راه حل این مشکل استفاده از کنترلر است که در اینجا با استفاده از کنترلر PID می‌خواهیم این مشکل را حل کنیم .

ساده‌ترین کاری که شاید به ذهن خیلی‌‌ها برسد این است که سرعت را کم کنیم اما این کار نه تنها مشکل را حل نمیکند بلکه باعث میشود ربات خیلی‌ کند خطا را تصحیح کند .

کار بهتری که می‌توان انجام داد این است که : وقتی اندازه خطا زیاد است ربات با سرعت زیاد بچرخد و وقتی اندازه خطا کم است ربات با سرعت کم بچرخد . یعنی‌ ربات با دو سرعت متفاوت بچرخد یا حتی وقتی اندازه خطا زیاد است ربات با سرعت زیاد و وقتی اندازه خطا متوسط است با سرعت متوسط و وقتی اندازه خطا کم است با سرعت کم بچرخد ( یعنی‌ با سه سرعت متفاوت ).

پیشنهاد بهتر این است که ربات با n سرعت متفاوت بچرخد یعنی‌ : سرعت ربات = خطا باشد و هر چه خطا کمتر شد سرعت ربات هم کمتر شود و هر چه خطا بیشتر شد سرعت ربات هم بیشتر شود .

در این حالت اگر دیدیم تصحیح خطا خیلی آرام انجام میشود میتوانیم خطا را در عددی ( بزرگتر از قبل ) ضرب کنیم یعنی‌ : سرعت ربات = خطا * K

همچنین ممکن است باز هم مشکله قبلی ( رد کردن صفر و دوباره برگشتن و دوباره رد کردن و ... ) را داشته باشیم که در آن صورت میتوانیم خطا را در عددی ( کوچک تر از قبل ) ضرب کنیم تا مشکل حل شود .

این قاعده کلی‌ را به یاد داشته باشید که در رابطه ( سرعت = خطا * K )  :  هر چه K کوچک تر شود ، سیستم کند تر حرکت می‌کند و هر چه K بزرگ تر شود سیستم بیشتر نوسان ( رد کردن هدف و برگشت دوباره ) می‌کند تا به تعادل برسد ( خطا صفر شود )

( نوسان کردن سیستم کاملا طبیعی است و همیشه وجود دارد ولی هر چه تعداد این نوسانات کمتر شود بهتر است )

چیزی که تا به اینجا توضیح داده شد کنترلر P است . P حرف اول Proportional به معنی‌ تناسب است . یعنی‌ سرعت چرخش ( تغییر زاویه ) ربات با خطا تناسب ( نسبت مستقیم ) دارد . ضریب تناسب ( K ) به کار برده شده در این کنترلر را از این به بعد  Kp می‌نامیم

دوستان اگر سوالی راجع به این پست و یا قبلی دارند بپرسند ولی خواهشا سوالات متفرقه راجع به PID رو بزارید بعد از اینکه توضیحات I و D هم تموم شد بپرسید

  • ShahBaz

کنترلر PI در ربات فوتبالیست

ShahBaz | سه شنبه, ۸ اسفند ۱۳۹۶، ۱۱:۴۵ ق.ظ

کنترلر PI در ربات فوتبالیست

دوشنبه, ۴ فروردین ۱۳۹۳، ۱۲:۰۷ ب.ظ

در پست قبلی کنترلر P توضیح داده شد و گفتیم که با قرار دادن سرعت مساوی خطا ضربدر Kp میتوانیم ربات فوتبالیست را رو به دروازه حریف نگاه داریم زیرا هرگاه ربات به هر دلیلی‌ از زاویه مورد نظر منحرف شد با چرخش ( با سرعت مناسب به دست آمده از کنترلر P ) دوباره به سمت هدف باز می‌‌گردد . ( اگر سرعت موتور‌ها را با PWM بین ۰ تا ۲۵۵ کنترل کنیم Kp مناسب برای ربات فوتبالیست عددی حدوداً بین ۱ تا ۱۰ میشود زیرا اگر Kp بزرگ باشد باعث میشود ربات بیشتر نوسان کند تا جایی‌ که اگر خیلی‌ بزرگ شود نوسانات ربات هیچگاه متوقف نمی‌شود )

حال فرض کنید ربات دقیقا رو به هدف ایستاده و خطا صفر است و سرعت ربات هم صفر است . در این شرایط همه چیز خوب پیش میرود و مشکلی‌ وجود ندارد تا این که ربات را بچرخانیم و شرایط را به هم بزنیم یا به ربات دستور دهیم رو به جهت دیگری بایستد .

در این حالت فرض کنید ربات را به اندازه ۱ درجه منحرف کنیم ، در این صورت PWM ربات برابر ۱ ضربدر Kp می‌‌شود که مقدار خیلی‌ کوچکی است ( مثلا ۵ )

مشکلی‌ که در اینجا وجود دارد این است که وقتی به PWM موتور‌ها عدد ۵ را بدهیم موتور‌ها اصلا حرکت نمی‌‌کنند و نمی‌‌توانند این خطای ۱ درجه را اصلاح کنند . زیرا PWM پنج کمتر از آن است که بتواند بر اصطکاک ایستایی غلبه کند و موتور‌ها را به حرکت در آورد . ( با توجه به موتور‌ها و ربات ممکن است ربات حتی با PWM ده یا پانزده هم نتواند حرکت کند و مثلا از ۱۷ به بالا بتواند حرکت کند ، در این صورت خطای ۲ و ۳ درجه را هم نمی‌‌تواند اصلاح کند ) 
 چون کنترلر P نمی تواند این خطا را اصلاح کند و این خطا در سیستم باقی می‌‌ماند و اصلاح نمی‌شود به آن خطای ماندگار می‌گویند

توجه کنید که اگر ربات در حال حرکت و اصلاح خطا باشد به خطای ۱ یا ۲ یا ۳ درجه خطای ماندگار نمی‌‌گوئیم بلکه زمانی‌ به آن خطای ماندگار می‌‌گوئیم که ربات از حرکت ایستاده ولی‌ هنوز مقدار کمی‌ خطا در آن وجود دارد .

خوب برای حل این مشکل ( خطای ماندگار ) چه کاری باید انجام داد ؟

یکی‌ از کار‌هایی‌ که می‌توان انجام داد این است که برنامه‌ای بنویسیم که اگر برای مدت طولانی ( مثلا ۱۰۰۰ بار اجرا شدن برنامه ) مقدار خطا صفر نبود و تغییری هم نکرد آنگاه متوجه خطای ماندگار شده و ربات شروع به چرخش کند تا خطای ماندگار را اصلاح کند . اما سوال اینجاست که ربات با چه پی‌ دبلیو امی بچرخد تا دوباره هدف را رد نکند ؟ خوب جواب این است که با توجه به این که مقدار خطا بسیار کوچک است با کوچک‌ترین چرخشی این خطا اصلاح میشود پس ربات باید با کمترین پی‌ دبلیو امی که می‌‌تواند حرکت کند ( پی‌ دبلیو ا‌م آستانه حرکت ) بچرخد تا امکان رد کردن آن بسیار کم شود .

اما پی‌ دبلیو ا‌م آستانه حرکت چقدر است ؟ پی‌ دبلیو ا‌م آستانه حرکت یک عدد ثابت نیست و هر چه ربات سنگین تر شود بیشتر می‌‌شود پس امکان محاسبه آن وجود ندارد . ( فرض کنید می‌خواهیم از ربات به عنوان جابجا کننده وسایل مختلف استفاده کنیم پس در این حالت وزن ربات و پی‌ دبلیو ا‌م آستانه حرکت مقدار ثابتی ندارد و با گذاشتن وسایل مختلف روی ربات تغییر می‌‌کند )

حال که مقدار پی‌ دبلیو ا‌م آستانه حرکت را نمی‌‌دانیم بهتر است در برنامه نویسی ابتدا به موتور‌ها پی‌ دبلیو ا‌م ۱ بدهیم اگر نچرخید مقدار پی‌ دبلیو ا‌م را کم کم زیاد کنیم تا جایی‌ که ربات بالاخره شروع به چرخش کند و خطا را اصلاح کند ، در این صورت ربات با کمترین سرعت ممکن حرکت می‌کند و امکان رد کردن هدف بسیار کم می‌‌شود .

حال فرض کنید ربات در موقعیتی بین ۲ درجه و ۳ درجه ایستاده باشه در این صورت عدد خطا مدام بین ۲ و ۳ تغییر می‌کند و دیگر نمی‌توان به روش بالا ( ۱۰۰۰ بار ثابت بودن خطا ) متوجه خطای ماندگار شد . خوب این مشکل را چگونه می‌‌توان حل کرد ؟

این مشکل را می‌‌توان به این صورت حل کرد که بگوییم اگر میانگین خطا برای مدت طولانی غیر صفر بود ربات شروع به چرخش کند . و چون میخواستیم سرعت چرخش هم کمترین مقدار باشد و کم کم بالا برود میتوانیم بگوییم : PWM = میانگین خطا ضربدر مدت زمانی‌ که این خطا وجود داشته . این ضرب کردن در زمان باعث می‌‌شود تا پی‌ دبلیو ا‌م کم کم بالا برود و به محض این که ربات به آستانه حرکت رسید با کمترین سرعت ممکن حرکت کند و احتمال رد کردن هدف بسیار کم شود . ضرب کردن میانگین خطا هم به این خاطر است که هر چه میانگین خطا بالاتر بود با سرعت بیشتری خطا را اصلاح کند .

خوب می‌دانیم که میانگین خطا = مجموع خطا‌ها تقسیم بر تعداد آنهاست پس رابطهٔ بالا به این صورت میشود : PWM = مجموع خطا‌ها ضرب در ( زمانی که این خطا وجود داشته تقسیم بر تعداد خطا‌ها ) .

خوب عبارت داخل پرانتز بالا یک عدد ثابت است چون مثلا هر ۱ ثانیه ۱۰۰ بار خطا اندازه‌گیری می‌‌شود و زمان تقسیم بر تعداد خطا‌ها = یک صدم می‌‌شود و تغییری نمی‌‌کند

حال چون سرعت چرخش و خطا از یک جنس نیستند برای برقراری رابطه بین آن‌ها باید یه ضریب در نظر بگیریم مثلا m . و رابطهٔ بالا به این صورت در می‌‌آید : PWM = مجموع خطا‌ها ضرب در ( m ضرب در زمان تقسیم بر تعداد خطا‌ها ).

چون عبارت داخل پرانتز بالا عدد ثابتی است برای سادگی‌ آن را Ki می‌‌نامیم و می‌‌نویسیم PWM = مجموع خطا * Ki 

چون در این رابطه PWM به مجموع خطا ارتباط دارد و مجموع خطا‌ ها در حالتی که تابع پیوسته خطا را داشته باشیم همان انتگرال تابع خطا می‌‌شود به این قسمت از کنترلر بخش انتگرالی می‌‌گویند . I نیز حرف اول کلمه integral به معنی‌ انتگرال است

همان طور که از ابتدا گفته شد بخش کنترل انتگرالی وظیفه از بین بردن خطای ماندگار را دارد و به تنهایی‌ استفاده نمی‌شود بلکه در کنار کنترلر P استفاده می‌‌شود . ترکیب P و I را کنترل PI می‌گویند و معادله آن به صورت زیر می‌‌شود :

پی دبلیو ام = ( Kp * خطا ) + ( Ki * مجموع خطا‌ها )

استفاده هر دو کنترلر در کنار هم به صورت جمع آن‌ها باعث می‌‌شود تا در حالتی که خطا زیاد است بخش P نقشه اصلی‌ را در اصلاح ایفا کند و در حالتی که خطا خیلی‌ کم است بخش I نقشه اصلی‌ را داشته باشد .

  • ShahBaz

دوره آموزشی الکترونیک و برنامه نویسی میکروکنترلر AVR

ShahBaz | سه شنبه, ۸ اسفند ۱۳۹۶، ۱۱:۴۴ ق.ظ
دوره آموزش الکترونیک و برنامه نویسی AVR در سال تحصیلی 93-94 در دانشگاه صنعتی قم برگزار شد و با استقبال نسبتا خوب دانشجویان همراه بود.
فیلم های این دوره رو برای علاقه مندان قرار میدم. امیدوارم مفید باشند. خوشحال میشم پیشنهادها و انتقاداتتون رو بهم بگید.
لینک فیلم ها در سایت آموزشی تخته سفید :
منتظر دوره های بعدی آموزشی با کیفیت بهتر باشید ...
  • ShahBaz

ساختن کتابخانه (Library) در Arduino (آردوینو)

ShahBaz | جمعه, ۴ اسفند ۱۳۹۶، ۱۰:۴۷ ب.ظ

ساختن کتابخانه (Library) در Arduino (آردوینو)

ساختن کتابخانه (Library) در Arduino (آردوینو)

در واقع کتابخانه مجموعه ایی در دستورات و توابع برای کدنویسی سریعتر و راحتر می باشد. شاید برای شما هم پیش آمده باشد که در برخی موارد بعضی از دستورات پاسخ گوی شما نبود و مجبور به نوشتن توابع اختصاصی برای خودتون شده اید و در اکثر موارد هم این توابع بعد از گذشت زمان فراموش می شود ، ولی اگر این توابع رو در قالب یک کتابخانه جمع آوری کنید:

    هر بار لازم نیست توابع رو از اول بنویسید.
    همه توابع در قالب یک کتابخانه جمع آوری و سازماندهی می شوند.
    به راحتی می توانید در اختیار دیگران قرار بدید.
    و……

در پلت فرم آردوینو برای نوشتن بدنه برنامه از زبان سی و کتابخانه ها از سی ++ استفاده می شه. برای شروع ابتدا به مسیر زیر بروید و یک پوشه با نام مثلا test ایجاد کنید.

C:\Users\your-username\Documents\Arduino\libraries

 برای نوشتن کتابخانه نیاز به دو فایل با پسوند h و cpp می باشد که در فایل با پسوند h (header) کلاس و اعلان های توابع رو تعریف می کنید و در فایل cpp بدنه توابع رو تعریف می کنید.

حالا دو فایل test.h و test.cpp رو در پوشه ایجاد کنید. بعد آردوینو رو اجرا کنید و کتابخانه رو همانند تصویر زیر در خط اول وارد و فراخوانی کنید سپس کامپایل کنید تا از صحت مراحل فوق اطمینان حاصل کنید.

import

حالا دو کتابخانه زیر رو در خط اول فایل h وارد کنید:
#include <SoftwareSerial.h>
#include "Arduino.h"
1
2
    
#include <SoftwareSerial.h>
#include "Arduino.h"

بعد کلاس رو تعریف کنید:
class testlib
{
 public:
  //توابعی که در همه جا میتوان استفاده کرد
 private:
  //توابعی که فقط در خود کتابخانه می شه استفاده کرد
};
1
2
3
4
5
6
7
    
class testlib
{
public:
  //توابعی که در همه جا میتوان استفاده کرد
private:
  //توابعی که فقط در خود کتابخانه می شه استفاده کرد
};

توی این فایل شما فقط اعلان های توابع رو تعریف می کنید و بدنه توابع رو در فایل cpp ایجاد می کنید. حالا مثلا ایجاد من می خوام یه تابع تعریف کنید که با ارسال کلمه hello در سریال به میکرو یا ماژول کلمه hi رو به ما برگردونه.

اول باید توی قسمت public اعلان های توابع رو تعریف کنید به عنوان مثال
testlib(int rxPin, int txPin);
void check(String comm);
1
2
    
testlib(int rxPin, int txPin);
void check(String comm);

توجه کنید که در خط اول یک نوع تعریف شده است و نام این نوع باید برابر با نام کلاس باشد.

و در قسمت private هم یه پورت به صورت نرم افزار تعریف کنید مثل زیر (اسم پورت رو اینجا TPORT گذاشتم شما هر اسمی رو می تونید بزارید ولی توجه کنید که کامپایلر به بزرگ و کوچک بودن حروف حساس است)
SoftwareSerial * TPORT;
1
    
SoftwareSerial * TPORT;

بعد میریم سراغ فایل cpp و سه خط زیر رو اضافه می کنید.
#include <SoftwareSerial.h>
#include "Arduino.h"
#include "test.h"
1
2
3
    
#include <SoftwareSerial.h>
#include "Arduino.h"
#include "test.h"

سپس بدنه توابع رو اضافه کنید….
testlib::testlib(int txPin, int rxPin) {
    TPORT = new SoftwareSerial(rxPin, txPin);
    TPORT->begin(9600);
}

void testlib::check(String comm) {
 
}
1
2
3
4
5
6
7
8
    
testlib::testlib(int txPin, int rxPin) {
    TPORT = new SoftwareSerial(rxPin, txPin);
    TPORT->begin(9600);
}
 
void testlib::check(String comm) {

}

دقت کنید که testlib نام کلاسی هست که اعلان های توابع در آن تعریف شده و باید با ۲ کالن قبل از تابع قرار بگیره.

در تابع اول که config نام داره و در بدنه برنامه می توانیم استفاده کنیم ، TPORT رو می تونیم به صورت نرم افزاری پایه های tx و rx رو به دلخواه تعیین کنیم. و در خط بعدش پورت روی باود ریت ۹۶۰۰ تنظیم شده و باز می شود.

در تابع دوم دستورات دلخواه رو می نویسیم ، به عنوان مثال کدهای زیر رو به تابع اضافه کنید:
if (TPORT->available()){
        String str = TPORT->readString();
        if (str == comm){
           TPORT->println("hi");
        }
}
1
2
3
4
5
6
    
if (TPORT->available()){
        String str = TPORT->readString();
        if (str == comm){
           TPORT->println("hi");
        }
}

توی چند خط کد بالا گفتیم اگه به بافر پورت سریال چیزی ارسال شد مقدار اونو در متغیر str بریز و در یک شرط گفتیم اگر مقدار str برابر با comm (که مقدار تعیین شده توسط شما در بدنه برنامه است) بود رشته hi رو به پورت سریال ارسال کن.

حالا به آردوینو برید و قبل از تابع setup خط زیر رو اضافه کنید:
testlib serial(1, 3);
1
    
testlib serial(1, 3);

 

با این خط serial رو از نوع testlib که پورت سریال تعریف شده قرار می دید و پایه های tx و rx رو هم مشخص می کنید. در حلقه loop هم خط زیر رو اضافه کنید و بعد برنامه رو کامپایل سپس آپلود کنید ، تست کنید.
serial.check("hello");
1
    
serial.check("hello");

بعد از تست کدها برنامه رو با نام دلخواه ذخیره کنید و در پوشه ایی به نام examples در پوشه کتابخانه test قرار بدید تا نمونه کد شما در آردوینو به قسمت Examples اضافه باشه. شاید نیاز باشه یکبار آردوینو رو ببندید بعد باز کنید. کتابخانه رو اینجا می تونید دانلود کنید.

امیدوارم مفید واقع شده باشه
در تاریخ ۱۵/مرداد/۱۳۹۵ یک دیدگاه برچسب ها : ،arduino،library،آردوینو،کتابخانه،

نوشته شده توسط امیر امرایی

  • ShahBaz

نوشتن کتابخانه برای آردوینو (قسمت دوم)

ShahBaz | جمعه, ۴ اسفند ۱۳۹۶، ۱۰:۴۰ ب.ظ

نوشتن کتابخانه برای آردوینو (قسمت دوم)

جمعه, 29 دی 1396 ساعت 19:57

این مورد را ارزیابی کنید
(1 رای)

این آموزش توضیح می‌دهد که چگونه برای آردوینو یک کتابخانه بسازیم. این آموزش با یک طرح از کد flashing Morse شروع می‌کند و توضیح می‌دهد که چگونه عملکردش را به یک کتابخانه تغییر دهیم.

در قسمت اول این آموزش در "نوشتن کتابخانه برای آردوینو (قسمت اول)" فایل هدر کتابخانه مدنظر را ساختیم. اکنون به قسمت‌های مختلف فایل منبع Morse.cpp می‌رویم.

در ابتدا تعدادی دستور #include می‌آید. این‌ها اجازه دسترسی بقیه کد را به توابع استاندارد آردوینو می‌دهد و فایل هدر خود را تعریف می‌کند:

#include "Arduino.h"
#include "Morse.h"

سپس سازنده می‌آید. دوباره این عمل توضیح می‌دهد که زمانی که کسی مثالی از کلاس شما بسازد، چه اتفاقی می‌افتد. در این مورد، کاربر مشخص می‌کند که می‌خواهد از کدام پین استفاده کند. ما پین را به‌عنوآن‌یک خروجی پیکربندی می‌کنیم، آن را در یک متغیر خصوصی برای استفاده در دیگر توابع ذخیره می‌کنیم:

Morse::Morse(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}

تعدادی دستور عجیب در این کد وجود دارد. اول اینکه Morse:: قبل از نام تابع آمده است. این دستور می‌گوید که تابع بخشی از کلاس Morse است. شما این را دوباره در دیگر توابع در کلاس می‌بینید. دومین چیز غیرعادی خط تیره در کنار اسم متغیر خصوصی ماست،  _pin. درواقع این  متغیر می‌تواند هر نامی که شما بخواهید را داشته باشد تا زمانی که با تعریف موجود در فایل هدر همخوانی داشته باشد. قرار دادن خط تیره قبل از اسم متغیر روش معمولی است که متغیرهای خصوصی را مشخص می‌کند و هم‌چنین اسم را ازآنچه در تابع موردبحث آمده است متمایز می‌سازد (که در این مورد آن را از pin جدا می‌سازد).

سپس کد واقعی از طرح که شما آن را به کتابخانه تبدیل کرده‌اید می‌آید. این خیلی شبیه به قبل است با این تفاوت که Morse:: قبل از اسم توابع قرار می‌گیرد و _pin به‌جای pin می‌نشیند:

void Morse::dot()
{
  digitalWrite(_pin, HIGH);
  delay(250);
  digitalWrite(_pin, LOW);
  delay(250);  
}

void Morse::dash()
{
  digitalWrite(_pin, HIGH);
  delay(1000);
  digitalWrite(_pin, LOW);
  delay(250);
}

درنهایت بسیار رایج است که در بالای فایل منبع نیز کامنت بیاید. بیایید همه‌چیز را ببینیم:

/*
  Morse.cpp - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/

#include "Arduino.h"
#include "Morse.h"

Morse::Morse(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}

void Morse::dot()
{
  digitalWrite(_pin, HIGH);
  delay(250);
  digitalWrite(_pin, LOW);
  delay(250);  
}

void Morse::dash()
{
  digitalWrite(_pin, HIGH);
  delay(1000);
  digitalWrite(_pin, LOW);
  delay(250);
}

و این همه‌چیزی است که شما نیاز دارید (چیزهای اختیاری دیگری نیز وجود دارد، اما ما بعداً درباره آن‌ها صحبت می‌کنیم) اکنون ببینیم که چگونه از کتابخانه استفاده کنیم.

اول یک کتاب راهنمای Morse در زیرشاخه‌های کتاب راهنمای کتابخانه‌های مربوط به کتاب راهنمای sketchbook خود بسازید. کد Morse.h و Morse.cpp را به آن کتاب راهنما جابه‌جا و یا کپی کنید. اکنون محیط آردوینو راه‌اندازی کنید. از منو sketch>Import Library را بازکنید باید Morse را درون آن ببینید. کتابخانه با طرح‌هایی که از آن استفاده می‌شود کامپایل می‌شود. اگر به نظر می‌رسد کتابخانه ساخته نشده است اطمینان حاصل کنید که فایل‌ها با .h و  .cpp پایان‌یافته‌اند (بدون هیچ‌گونه افزودنی اضافی مانند .tet یا .pde)

اکنون ببینیم چگونه ما می‌توانیم طرح قدیمی SOS خود را با استفاده از کتابخانه جدید شبیه‌سازی کنیم:

#include <Morse.h>

Morse morse(13);

void setup()
{
}

void loop()
{
  morse.dot(); morse.dot(); morse.dot();
  morse.dash(); morse.dash(); morse.dash();
  morse.dot(); morse.dot(); morse.dot();
  delay(3000);
}

تعداد کمی تغییر نسبت به طرح قدیمی وجود دارد (هم‌چنین مقداری از کد به کتابخانه انتقال داده‌شده است).

در ابتدا ما یک دستور #include به بالای طرح اضافه کرده‌ایم. این موجب می‌شود تا کتابخانه مورس برای طرح در دسترس باشد و شامل کدها می‌شود و به برد فرستاده می‌شود. این به این معنی است که اگر شما دیگر به کتابخانه نیاز ندارید باید #include را پاک‌کنید تا مقداری فضا ذخیره کنید.

ما اکنون یک مثال از کلاس Morse به نام morse ساختیم:

Morse morse(13);

وقتی این خط اجرا می‌شود (که درواقع این حتی قبل از تابع setup() اتفاق می‌افتد) سازنده کلاس Morse فراخوانده می‌شود و آرایه‌ای که شما در اینجا آورده‌اید را منتقل می‌کند (در این مورد فقط 13).
توجه داشته باشید که setup() ما اکنون خالی است، این به این دلیل است که فراخوانی pinMode() درون کتابخانه اتفاق می‌افتد. (زمانی که نمونه ساخته‌شده است).

در آخر، برای فراخوانی توابع dot() و dash() ما نیاز داریم که پیشوند morse. را به آن‌ها بیفزاییم. (اسم مثالی که ما می‌خواهیم از آن استفاده کنیم). ما می‌توانیم چند نمونه از کلاس Morse داشته باشیم، هرکدام از آن‌ها روی پین خود ذخیره‌شده‌اند در این مثال در متغیر خصوصی _pin ذخیره می‌شوند. با فراخوانی یک تابع در یک نمونه خاص، ما مشخص می‌کنیم که کدام‌یک از متغیرهای مثال باید در طول فراخوانی یک تابع استفاده شود. اگر ما هر دو را داشته باشیم به‌صورت زیر می‌شود:

Morse morse(13);
Morse morse2(12);

پس در یک فراخوانی morse2.dot()، -pin، 12 خواهد بود.

اگر شما طرح جدیدی امتحان کردید، احتمالاً متوجه شدید که هیچ‌چیزی از کتابخانه ما توسط محیط شناخته‌شده نیست و به‌صورت رنگی مشخص‌شده است. متأسفانه نرم‌افزار آردوینو نمی‌تواند به‌طور خودکار چیزی را که شما در کتابخانه خود تعریف کرده‌اید شناسایی کند (هرچند این می‌تواند یک ویژگی خوب باشد)؛ بنابراین، شما باید اندکی به آن کمک کنید. به این منظور یک فایلی را به نام keywords.txt در کتاب راهنمای Morse ایجاد کنید. این باید مشابه زیر باشد:

Morse   KEYWORD1
dash    KEYWORD2
dot     KEYWORD2

هر خط به نام یک کلیدواژه است که به دنبال آن‌یک tap آمده است (نه space) و بعد از یک نوع کلیدواژه دیگر آمده است. کلاس‌ها باید KEYWORD1 باشند و رنگ آن‌ها نارنجی است. توابع باید KEYWORD2 باشند و رنگ آن‌ها قهوه‌ای است. شما باید آردوینو را مجدداً راه‌اندازی کنید تا بتواند کلیدواژه‌های جدید را شناسایی کند.

این بسیار خوب است طرحی فراهم آورید تا مردم با استفاده از آن از کتابخانه شما استفاده کنند. برای انجام این کار، یک کتاب راهنمای مثال‌ها را درون کتاب راهنمای Morse ایجاد کنید. سپس کتاب راهنمای شامل طرح را (بیایید آن را SOS بنامیم) که ما در بالا آن را نوشتیم به کتاب راهنمای مثال‌ها منتقل و یا کپی کنید. (شما می‌توانید طرح را با استفاده از فرمان Sketch> Show sketch Folder بیابید) اگر محیط آردوینو را مجدداً راه‌اندازی کنید یک کتابخانه Morse را درون منو File>Sketchbook>Examples شامل مثال‌هایتان ببینید. ممکن است شما بخواهید برای توضیح چگونگی استفاده از کتابخانه خود کامنتی بگذارید.

اگر شما می‌خواهید که یک کتابخانه کامل را بررسی کنید (با کلمات کلیدی و مثال‌ها) می‌توانید فایل زیر را دانلود کنید:

Morse.zip

نظرات و سؤالات خود را با ما مطرح کنید. اگر کتابخانه‌ای را به این روش نوشتید برای استفاده با ما هم در اشتراک بگذارید.

 

 

نظرات، پیشنهادات و انتقادات خود را برای بهتر شدن محتوای مطالب با ما در میان بگذارید...

 


ترجمه شده توسط تیم الکترونیک صنعت بازار | منبع: سایت arduino.cc

  • ShahBaz

نوشتن کتابخانه برای آردوینو (قسمت اول)

ShahBaz | جمعه, ۴ اسفند ۱۳۹۶، ۱۰:۳۸ ب.ظ

نوشتن کتابخانه برای آردوینو (قسمت اول)

پنج شنبه, 28 دی 1396 ساعت 19:47

این مورد را ارزیابی کنید
(2 رای‌ها)

این آموزش توضیح می‌دهد که چگونه برای آردوینو یک کتابخانه بسازیم. این آموزش با یک طرح از کد flashing Morse شروع می‌کند و توضیح می‌دهد که چگونه عملکردش را به یک کتابخانه تغییر دهیم. این اجازه می‌دهد دیگران به‌راحتی از کدی که شما نوشته‌اید استفاده کنند همچنین شما به‌راحتی آن را به‌روزرسانی کنید و کتابخانه را بهبود ببخشید.

ما با یک طرح که کد مورس ساده‌ای است، شروع می‌کنیم:

int pin = 13;

void setup()
{
  pinMode(pin, OUTPUT);
}

void loop()
{
  dot(); dot(); dot();
  dash(); dash(); dash();
  dot(); dot(); dot();
  delay(3000);
}

void dot()
{
  digitalWrite(pin, HIGH);
  delay(250);
  digitalWrite(pin, LOW);
  delay(250);
}

void dash()
{
  digitalWrite(pin, HIGH);
  delay(1000);
  digitalWrite(pin, LOW);
  delay(250);
}

اگر شما این طرح را اجرا کنید، فلاش می‌زند تا کد ساده مورس برای SOS را روی پین 13 اجرا کند.

این کد چندین قسمت مختلف دارد که ما نیاز داریم آن‌ها را به کتابخانه خود بیاوریم. اول، ما توابع dot() و dash() را داریم که کار چشمک زدن را بر عهده‌دارند. دوم، متغیر ledPin وجود دارد که تابعی است که برای تعیین اینکه کدام پین استفاده شود، مورداستفاده قرار می‌گیرد. درنهایت یک فراخوانی pinMode() وجود دارد که پین را به‌عنوآن‌یک خروجی تنظیم می‌کند.

حال بیاید تا این کد را به کتابخانه تبدیل کنیم!

شما حداقل به دو فایل برای کتابخانه نیاز دارید: یکی فایل هدر یا header file و یا (w/the extension.h) و دیگری فایل منبع یا source file یا w/extension.cpp. فایل هدر دارای تعاریف برای کتابخانه است: اساساً فهرستی از همه‌چیزهایی است که درون آن قرار دارد، درحالی‌که فایل منبع کد واقعی را در بردارد. ما کتابخانه خود را “Morse” می‌نامیم، بنابراین فایل هدر ما Morse.h می‌شود. بیایید ببینیم چه چیزهایی در آن قرار دارد: در ابتدا ممکن است مقداری عجیب به نظر برسد اما زمانی که فایل منبع را با آن همراه کنید، معنی‌دار می‌شود.

هسته فایل هدر شامل یک خط برای هر تابع موجود در کتابخانه می‌شود که در یک کلاس به همراه هر متغیری که نیاز دارید بسته‌بندی می‌شود:

class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};

یک کلاس به‌سادگی یک مجموعه از توابع و متغیرهاست که همگی در یک مکان جمع شده‌اند. این توابع و متغیرها می‌توانند عمومی باشند، به این معنی که آن‌ها می‌توانند با استفاده از کتابخانه شما برای مردم قابل‌دسترس باشند و یا اینکه خصوصی باشند، به این معنی که تنها می‌توانند از درون کلاسشان قابل‌دسترس باشند. هر کلاس داری یک تابع خاص است که به‌عنوان سازنده شناخته می‌شود و برای ایجاد یک نمونه از کلاس مورداستفاده قرار می‌گیرد. سازنده دارای نام مشابه نام کلاس است و هیچ نوع بازگشتی یا خروجی ندارد.

شما به چندین چیز دیگر در فایل هدر نیاز دارید. اول یک دستور #include که به شما دسترسی به انواع زبان استاندارد و ثابت آردوینو را می‌دهد. (این به‌طور خودکار به طرح‌های نرمال اضافه می‌شود، اما به کتابخانه‌ها اضافه نمی‌شود). این دستور مانند زیر است:

#include "Arduino.h"

درنهایت، رایج است که همه فایل هدر را در یک ساختار عجیب‌وغریب قرار دهید:

#ifndef Morse_h
#define Morse_h

// the #include statment and code go here...

#endif

اساساً، اگر کسی تصادفاً کتابخانه شمارا دو بار #include کند، این کار از بروز مشکلات جلوگیری می‌کند.

درنهایت شما کامنتی در بالای هر کتابخانه به همراه اسم آن، توضیح کوتاهی درباره اینکه چه می‌کند، جه کسی آن را نوشته است، تاریخ و لایسنس آن می‌گذارید.

بیایید به یک فایل هدر کامل نگاهی بیندازیم:

/*
  Morse.h - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/
#ifndef Morse_h
#define Morse_h

#include "Arduino.h"

class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};

#endif

 در قسمت دوم این آموزش در "نوشتن کتابخانه برای آردوینو (قسمت دوم)" به قسمت‌های مختلف فایل منبع Morse.cpp می پردازیم.

نظرات، پیشنهادات و انتقادات خود را برای بهتر شدن محتوای مطالب با ما در میان بگذارید...

 


ترجمه شده توسط تیم الکترونیک صنعت بازار | منبع: سایت arduino.cc

  • ShahBaz

راهنمای انتخاب گیربکس مناسب

ShahBaz | جمعه, ۴ اسفند ۱۳۹۶، ۱۲:۱۳ ق.ظ

راهنمای انتخاب گیربکس



عوامل موثر در انتخاب گیربکس به منظور انتخاب گیربکس مناسب و بهره برداری بهینه از آن، لازم است اطلاعات کافی نسبت به عوامل موثر در کارکرد گیربکس را در نظر داشته باشیم:



factors

ضریب کار

ضریب کار برای در نظر گرفتن اثر تغییرات بار و شوک هایی است که در شرایط مختلف کاری بر گیربکس اثر می کنند. در تعیین مقدار این ضریب (به صورت کاملاً تقریبی) تغییرات بار، شرایط کاری روزانه و گرانبار(Overload) های مرتبط با کاربرد گیربکس در نظر گرفته می شوند. 

منحنی

نوع بار

شرایط کار

کاربرد

K1

یکنواخت

استارت آسان، کارکرد نرم، اجرام سبک

کانوایر تسمه ای برای مواد سبک، پمپ های سانتریفیوژ، پمپ ها، تغذیه کننده مارپیچ برای مواد سبک، بالابر ها، ماشین های بسته بندی و بطری پرکنی، فن ها، ژنراتورها، فیلترها، میکسرهای کوچک

K2

بار با شوک متوسط

استارت با بار متوسط، شرایط کار نامتعادل و یا یکنواخت با مقادیر متوسط جرم

کانوایر تسمه ای برای بار متغیر، ماشین آلات تسطیح کردن، شیکر (shaker) و میکسر برای مایعات با غلظت و گرانروی متغیر، ماشین آلات صنایع غذایی، ماشین آلات غربال کردن، ماشین آلات کاشی و سرامیک، جرثقیل ها، بالابر ها، میکسر بتون.

K3

بار با شوک سنگین

بارهای سنگین، وضعیت کارکرد نامتعادل و نا متوازن، اجرام سنگین

کانوایر با تکان های شدید، کمپرسورها و پمپ های سیلندری، ماشین آلات بلوک و آجر، سفال و خاک معدنی، ورزدهنده ها، ماشین آلات آسیاب کردن، وینچهای بالابر دارای تکان و بار نامتعادل، کوره های صنعتی، هواکش ها، دمنده های سنگین، میکسرها برای مواد سنگین، ماشین های افزار، اره ها با حرکت رفت و برگشت، اره لنگ، میکسرهای بشکه ای با حرکت دورانی و موارد مشابه، ویبراتورها، خردکن ها، میزهای دوار

پس از تعیین حالتی که کاربرد مورد نظر گیربکس شما را بهتر توصیف می کند مقدار بدست آمده را برای تعیین منحنی مناسب در نمودار زیر به کار می بریم و به کمک میزان ساعت کارکرد گیربکس در روز و نیز تعداد استارت گیربکس در هر ساعت به مقدار دقیق s.f. دست می یابیم.

گشتاور خروجی

به دلیل اعمال راندمان کاری گیربکس ها در محاسبات مهندسی، اعداد قید شده در جداول کاتالوگ، مقادیری واقعی می باشند. در هنگام انتخاب گیربکس پس از تعیین مقدار ضریب کار s.f. لازم است عدد ضریب کار را در گشتاور اولیه (گشتاور لازم جهت راه اندازی سیستمی که گیربکس بر روی آن نصب می شود) ضرب کنید. عدد بدست آمده مبنای جستجو در جداول خواهد بود. گشتاوری که از جدول انتخاب می شود  باید حتماً مساوی یا بیشتر از  این عدد باشد.

اطلاعات تماس

تلفن: 2-08634130350
فکس: 08634130349

info@rahnama.co.ir

تلفن مستقیم فروش: 08634130353

sales@rahnama.co.ir

آدرس: اراک - شهرک صنعتی قطب
کارخانه تولید گیربکس های صنعتی رهنما

سخن مدیرعامل

اینجانب ضمن اعلام تعهد خود به خط مشی کیفی ، از کلیه کارکنان کارخانه انتظار دارم با استفاده از تجارب و دانش خود همواره در انجام وظایف محوله و رعایت این خط مشی کوشش نموده و در جهت بهبود مداوم اثربخشی سیستم مدیریت کیفیت کارخانه تلاش و همکاری نمایند .

سعید رهنما

مدیر عامل

نمایندگان

  • اراک
    اراک - کارخانه   تولید  گیربکس های  صنعتی  رهنما
  • مشهد
    مشهد - جاده  قدیم  قوچان - بین  طوس 73  و  75 
    مقابل طوس 76 - فروشگاه  کالای  صنعتی  صفایی
    شماره تماس : 36676808-051

©کلیه حقوق این سایت محفوظ بوده و متعلق به "کارخانه تولید گیربکس های صنعتی رهنما" می باشد.


نحوه محاسبه گشتاور خروجی گیربکس:

T: P.9950/N2

T: گشتاور [دور در دقیقه]

T: P.9950/N2

P: توان [کیلووات]

N2: دور خروجی [دور در دقیقه]


  • ShahBaz

مطلب مهم درباره انکودر

ShahBaz | پنجشنبه, ۳ اسفند ۱۳۹۶، ۱۱:۳۳ ب.ظ


مجید

با سلام و خسته و نباشید
ببخشید مجدد مزاحم میشم برای دریافت سیگنال های خروجی انکودر باید سیم های مربوط به فازهای A وB انکودر را به کدوم ورودی برد آنالیزگر متصل کرد :۱-آنالوگ ۲-دیجیتال؟؟

پاسخ
15.1

میلاد موسوی

سلام

خروجی انکودر ها سیگنال دیجیتال هستش


سلام
میخاستم بدونم برای محاسبه سرعت خطی دو راهنمای اره میخاهیم از انکودر چرخشی استفاده کنیم که به پینیون و چرخدنده نواری متصل بشه و مقدار سرعت دورانی را به سرعت خطی تبدیل کنه و روی ال سی دی نشون بده. از طرفی سرعت اره بسیار پایین هست و دقت حرکتی ک ما از این اره داریم در حد ۰٫۳-۰٫۵ سانتیمتر هست. آیا انکودر ۴۰۰ پالسی این نیاز را برطرف میکنه؟ باتشکر

پاسخ

11.1

میلاد موسوی

سلام

ببینید دوست گرامی انکودر ها هرچقدر تعداد پالشون بالاتر باشه دقتیشون بیشتره الان من با مثلا خدمتتون عرض میکنم:

الان انکودر شما ۴۰۰ پالس هستش یعنی برای هر ۳۶۰ درجه چرخش به شما ۴۰۰ پالس میده که اگر شما ۳۶۰/۴۰۰ بکنی عددی معادل ۰٫۹ درجه رو به شما میده

یعنی این انکودر هر ۰٫۹ درجه که حرکت در خروجیش انجام میشه به شما یک پالس میده.

حالا شما باید ی تبدیل روی دستگاه انجام بدید و تست کنید: به اندازه ۱ سانتی متر خروجی رو حرکت دهید و ببینید چند درجه انکودر شما حرکت میکنه.اگر با این مقدار حرکت شما بیش از ۳ یا ۴ پالس دریافت کرده یعنی تقریبا برای کار شما مناسب است و اگر تعداد پالس کمتری دریافت کردید این یعنی این انکودر برای کار شما مناسب نیست و باید انکودر با پالس بالا تر انتخاب کنید.

اگر هم هنوز این انکودر بر روی شما نصب نیست باید این محاسبات رو تئوری انجام بدید:

باید ضریب اتصال و کوپلینگ انکودر رو محاسبه کنید و ببینید با هر بار چرخش کامل انکودر شما چه مقدار حرکت خطی دارید و آن را به سانتی متر محاسبه و بدست بیاورید

موفق باشید


با سلام و خسته نباشید بنده دانشجوی مهندسی مکانیک ترم ۶ هستم و مدتی هست در باره ی ساخت ربات پاندول معکوس تحقیق میکنم و پروژه کارشناسی بنده هم ساخت پاندول معکوس هست میخواستم بدونم چطوری سیگنال های خروجی انکدر را شناسایی کنم و مطلب مهمی که استاد راهنمای پروژه بنده را موظف به دونستنش کرده اینه که چجوری انکدر را به کامپیوتر متصل کنیم میخواستم بدونم شما اطلاعی در مورد این قضیه دارید

پاسخ

  1. 10.1

    میلاد موسوی

    سلام و عرض ادب
    برای وصل کردن انکودر به کامپیوتر راههای زیادی وجود داره،اولین کار اینه که راه ارتباط با کامپیوتر رو انتخاب کنید، پورت سریال rs232 و پورت usb

    مرحله بعد بررسی فرکانس خروجی انکودر که آیا پورت آن فرکانس رو پشتیبانی می کنه؟

    ولی در کل شما باید این کار را توسط یک برد الکترونیکی واسط انجام بدید و شدنی هستش

    پاسخ
  2. 10.2

    مجید

    با سلام شرمنده مجدد مزاحم میشم
    انکودری که ما در اختیار داریم ،انکودرE50S8-5000-3T_24هستش ابتدا میخواستم بدونم این انکودر ۳ فاز هر فازش چه وظیفه ای بر عهده داره و چجوری میتونم این انکودر را به یک برد pci 1710u که نقش همون برد میانی که قبلا گفتید را داره ، وصل کنم
    اگر کتابی وجود داره که بتونه تو شناختن کامل اجزای انکودر و وظیفه هر سیگنال یا به طور کلی زیر و بم انکودر بهم کمک کنه مممنون میشم بهم معرفی کنیدش

    پاسخ
    1. 10.2.1

      میلاد موسوی

      سلام و عرض ادب

      انکودری که شما خریداری کردید مشخصات زیر رو داره :
      Incremental – تعداد پالس ۱۰۰۰ – تعداد خروجی های ۳ عدد A-B-Z – نوع خروجی Totem Pole

      خروجی های A و B به صورت پالس مربعی هستش که با هر ۳۶۰ درجه چرخش انکودر ۱۰۰۰ پالس در خروجی ایجاد میکنند و خروجی Z فقط یک پالس به ازای ۳۶۰ درجه چرخش در خروجی ایجاد میکنه.

      اطلاعاتی در مورد این کارت pci 1710u ندارم.

      شما با شمارش پالس های A میتونید مقدار حرکت،سرعت و موقعیت خروجی رو اندازه گیری کنید

      پیشنهاد میکنم این مطلب رو مشاهده نمایید. انکودرهای افزایشی و اتصال آن به کنترلر

      پاسخ
      1. 10.2.1.1

        مجید

        با سلام شرمنده مجدد مزاحم میشم منظوراز خروجی Totem Pole چی هستش این سوال را به خاطر این می پرسم که داخل مطلب مفیدی که پیشنهاد کرده بودید گفته بودید نوع خروجی انکودر با وردوی کنترلر باید یکسان باشه در صورتی که بنده هیچ اطلاعاتی در مورد این نوع خروجی پیدا نکردم و حتی داخل همون مطلب هم انواع خروجی انکودر معلوم شده و لی این نوع خروجی یعنی خروجی Totem Pole وجود داره ممنونمیشم راهنماییم کنید ممنون

        پاسخ
        1. 10.2.1.1.1

          میلاد موسوی

          سلام

          شاید شما ۲ موضوع رو با هم اشتباه گرفتید
          مدل خروجی انکودر که میتونه افزایشی – مطلق و یا رزالور باشه

          و مدار راه انداز خروجی هم میتونه Totem Pole – Line Drive – Voltage output – NPN Open collector باشه.
          که در واقع به مدارات الکترونیکی داخلی انکودر برمیگرده نه نوع سیگنال

          موفق باشید

  • ShahBaz