آموزش راه اندازی استپر موتور با درایور TB6600 و آردوینو

اتصال درایور TB6600 به آردوینو و استپرموتور

                                              

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

پس‌از هرمثال، توضیح مختصری در مورد نمونه کد آن بیان شده‌است. بنابراین بدون مشکل می‌توانید کد را براساس نیاز خود تغییر دهید.

سخت افزار موردنیاز

ما برای راه اندازی استپر موتور با درایور TB6600 و آردوینو به تجهیزات زیر نیاز داریم:

نرم‌افزار موردنیاز

  • آردوینو IDE

درایور TB6600

 درایور میکرواستپ TB6600 مبتنی بر تراشه TB6600HG شرکت توشیبا ساخته شده‌است و برای راه‌اندازی استپر موتورهای دوقطبیِ دو‌فاز مورد استفاده قرار می‌گیرد. این درایور با حداکثر جریان 3.5 آمپر به منظور کنترل استپرموتورهای نسبتاً بزرگ مانند یک NEMA 23 به کار می‌رود. اطمینان حاصل نمایید که استپرموتور شما به جریان نامی بیشتر از 3.5 آمپر متصل نشود. این درایور دارای مدارهای حفاظت داخلی از جمله حفاظت در برابر اضافه‌ جریان، خاموشی ناشی از کاهش‌ ولتاژ و افزایش‌ دمای بیش‌ازحد می‌باشد.

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

ولتاژ تغذیه                         9-42 ولت
حداکثر جریان خروجی        4.5 آمپر به ازای هر فاز
رزولوشن میکرواستپ        گام کامل، 1/2 ، 1/4، 1/8 و 1/16 گام
حفاظت                              در برابر اضافه‌جریان، خاموشی ناشی از کاهش‌ولتاژ و افزایش‌دمای بیش از حد
ابعاد                                  97x72x28.36 میلی متر 
فاصله سوراخ                    88 میلی متر، قطر 55 میلی متر
جدول مشخصات درایور TB6600

برای دریافت اطلاعات کامل‌تر این درایور، میتوانید دیتاشیت درایور TB6600 را مطالعه بفرمایید.


درایورهای TB6600‌ جعلی یا “ارتقاء یافته”

اخیراً پس از بررسی یکی از درایورهایی که قبلاً سفارش داده بودیم، مشخص شد که برروی آن از تراشه TB6600HG  استفاده نشده است. درعوض، از یک تراشه مشابه به نام TB67S109AFTG ساخت Toshiba استفاده شده بود. عملکرد و خصوصیات این دو تراشه مشابه هم می‌باشد، اما  TB6600HG جریان‌ پیک بالاتری ( حداکثر تا 5 آمپر) دارد و این تراشه کمی بزرگتر وهمراه‌با قابلیت کاهش‌گرمای سراسری است.

برای اینکه بفهمید از تراشه‌ TB6600HG استفاده شده یا تراشه TB67S109AFTG، یک راه‌حل ساده وجود دارد، طبق دیتاشیت درایور TB6600، تراشه TB6600HG  حداکثر از 1/16 میکرواستپ پشتیبانی می‌کند، درحالی که TB67S109AFTG  حداکثر از 1/32 میکرواستپ پشتیبانی می‌کند. بنابراین، علت اصلی این که سازندگان به استفاده از این تراشه سوئیچ کرده‌اند، میتواند قیمت آن باشد.

بر اساس تست‌های انجام شده، استپر موتورها با درایورهای TB67S109AFTG  نسبت به درایورهای TB6600HGعملکرد بهتری دارند. بنابراین از درایور مبتنی‌بر TB6600HG  استفاده کنیم یا نمونه‌ی ارتقاء یافته‌آن؟ این بستگی به حداکثر جریان خروجی موردنیاز شما دارد ویا اینکه، آیا شما به حداکثر 1/32میکرواستپ نیاز دارید؟

شما میتوانید برای بررسی دقیق‌تر این مدل، دیتاشیت تراشه TB67S109AFTG را مطالعه بفرمایید.

جایگزین‌های درایور TB6600

توجه داشته باشید که درایور TB6600 یک درایور آنالوگ است. در سال‌های اخیر، درایورهای دیجیتال مانند DM556 یا DM542 محبوبیت بیشتری پیدا کرده‌اند. درایورهای دیجیتال معمولا عملکرد بهتر و سروصدای کمتری دارند.  این درایورها اتصالات و نحوه کنترل مشابه درایور TB6600 دارند. بنابراین به آسانی می‌توانید سیستم‌های قبلی خود را ارتقا دهید.

مقایسه درایورهای TB6600 و TB6560

زمانی که قصد دارید یک درایور استپر موتور TB6600 خریداری نمایید، احتمالا با درایورهای ارزان‌تری مانند درایور TB6560روبه‌رو خواهیدشد. این درایور سیم‌کشی و کد مشابه TB6600 دارد، اما برخی مشخصات آن‌ متفاوت است که در جدول زیر بیان شده‌است.

 TB5660TB6600
ولتاژ تغذیه35-10 ولت DC، پیشنهادی 24 ولت DC9-42 ولت DC، پیشنهادی 36 ولت DC
حداکثر جریان خروجی3 آمپر به ازای هر فاز، پیک 3.5 آمپر3.5 آمپر به ازای هر فاز، پیک 4 آمپر
current setting#148
رزولوشن میکرواستپگام کامل، 1/2 ،  1/8 و 1/16 گامگام کامل، 1/2 ، 1/4، 1/8، 1/16 و 1/32 گام
فرکانس کلاک 15 کیلوهرتز200 کیلوهرتز
جدول مقایسه درایورهای TB6600 و TB6560

اصلی‌ترین تفاوت‌ها؛ حداکثر ولتاژ، حداکثرجریان و حداکثرمیکرواستپ 1/32  است. علاوه‌براین درایور TB6600 دارای هیت‌سینک و شکل ظاهری بهتری است. چنانچه قصد کنترل استپرموتورهای بزرگ‌تر را دارید یا به رزولوشن‌ بالاتر نیاز دارید، پیشنهاد می‌کنیم از درایور TB6600 استفاده کنید.


سیم‌کشی اتصال درایور TB6600 به استپر موتور و آردوینو

اتصال و راه اندازی استپر موتور با درایور TB6600 و آردوینو بسیار ساده است! ما برای اثبات این جمله، دیاگرام زیر را برای شما آماده کردیم.

دیاگرام نحوه سیم‌کشی درایور TB6600 به یک استپرموتور و  آردوینو
دیاگرام سیم‌کشی درایور موتور TB6600 به استپر موتور و آردوینو

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

TB6600اتصالات
VCC 9-42 ولت DC
GND زمین منبع تغذیه
-ENAبدون اتصال
+ENAبدون اتصال
-DIRزمین آردوینو
+DIRپایه 2 آردوینو
-PUL  زمین آردوینو
+PUL پایه 3 آردوینو
+A- ,Aسیم‌پیچ 1 استپر موتور
+B- ,Bسیم‌پیچ 2 استپر موتور
جدول راهنمای اتصالات درایورTB6600 به استپرموتور و آردوینو

توجه داشته باشید که پایه‌های فعالساز(-ENA و +ENA) بدون اتصال هستند. به این معنا که پایه فعالساز همواره LOW و درایور همواره فعال است.


چگونه سیم‌کشی صحیح استپر‌موتور را تعیین کنیم؟

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

آنچه که شما باید مشخص کنید دو جفت سیمی است که باید به دو سیم‌پیچ موتور متصل شوند. سیم‌های یک سیم‌پیچ به پایه‌های -A و +A و سیم‌های سیم‌پیچ دیگر به پایه‌های -B و +B متصل می‌شوند، (پلاریته‌ها مهم نیستند).

برای یافتن سیم‌های یک سیم‌پیچ، مراحل زیررا دنبال کنید:

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

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

تنظیمات میکرواستپ TB6600

 معمولا استپر موتورها سایز گام 1.8 درجه یا 200 گام به ازای هر دور (در حالت گام‌های کامل) دارند. یک درایور میکرواستپ مانند TB6600 رزولوشن‌های بالاتری را به کمک موقعیت‌های گام میانی، امکان‌پذیر می‌سازد. این امر با اعمال جریان به سیم‌پیچ‌ها با سطح جریان متوسط حاصل می‌شود.

برای مثال، راه‌اندازی یک موتور با 1/2 گام، به موتوری با 200 گام به ازای هر دور، 400 میکرواستپ به ازای هر دور خواهد داد.

شما می‌توانید با استفاده از دیپ‌سوئیچ قرار گرفته برروی درایور، تنظیمات میکرواستپ TB6600 را تغییر دهید. جزییات بیشتر در جدول زیر نمایش داده شده‌است. لازم به ذکر است که هنگام تنظیم دیپ‌سوئیچ‌ها نباید موتور شما به منبع تغذیه متصل باشد!

لطفا توجه داشته باشید که این تنظیمات مربوط به درایورهای با 32/1 میکرواستپ و تراشه TB67S109AFT هستند. معمولا در تمام درایورهای TB6600 که این روزها خریداری می‌کنید، از این تراشه استفاده شده‌است.

Microstep resolutionS3S2S1
NCONONON
Full stepOFFONON
1/2stepONOFFON
1/2stepONONOFF
1/4stepOFFOFFON
1/8stepOFFONOFF
1/16stepONOFFOFF
1/32stepOFFOFFOFF
جدول تنظیمات میکرواستپ TB6600


تنظیمات مبتنی بر میکرواستپ کوچکتر، عملکرد آرام‌تر با سروصدای کمتر را به دنبال خواهد داشت. اگرچه حداکثر سرعتی که می‌توانید هنگام کنترل درایور استپرموتور با آردوینو داشته باشید را محدود خواهد کرد.


تنظیمات جریان TB6600

زمانی که موتور خود را با تنظیم خاموش یا روشن بودن دیپ‌سوئیچ‌های  S4، S5 و S6 راه‌اندازی می‌کنید، می‌توانید جریان موتور را نیز تنظیم نمائید. پیشنهاد می‌کنیم با سطح جریان 1 آمپر شروع کنید. چنانچه موتور شما گام‌هایی را از دست بدهد یا متوقف شود ، می‌توانید سطح جریان را افزایش دهید.

S6S5S4Peak currentCurrent (A)
ONONON0.70.5
ONOFFON1.21.0
OFFONON1.71.5
OFFOFFON2.22.0
ONONOFF2.72.5
ONOFFOFF2.92.8
OFFONOFF3.23.0
OFFOFFOFF4.03.5
جدول تنظیمات جریانTB6600

نمونه کد اول: برنامه آردوینو برای راه اندازی استپر موتور با درایور TB6600

با کد زیر، قادر خواهید بود عملکرد درایور استپر موتور را تست کنسد. به طوری که با آن موتور شما با سرعت ثابتی خواهد چرخید. با استفاده از Arduino IDE می‌توانید این کد را بر روی آردوینو خود آپلود نمایید. در این مثال خاص، نیازی به نصب هیچ کتابخانه‌ای ندارید.

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

/* Example sketch to control a stepper motor with TB6600 stepper motor driver and Arduino without a library: continuous rotation. More info: https://www.makerguides.com */

// Define stepper motor connections:
#define dirPin 2
#define stepPin 3

void setup() {
  // Declare pins as output:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);

  // Set the spinning direction CW/CCW:
  digitalWrite(dirPin, HIGH);
}

void loop() {
  // These four lines result in 1 step:
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
}

توضیحات کد

این برنامه با تعریف پایه‌های مربوط به گام (+PUL) و جهت چرخش موتور (+DIR) آغاز می‌شود. به طوری که این پایه‌ها به پایه‌های شماره 2 و 3  آردوینو متصل می‌شوند.

عبارت define#  به منظور اختصاص یک نام به یک مقدار ثابت استفاده می‌شود. کامپایلر هنگام کامپایل برنامه، هر قسمت که از این نام استفاده شده باشد، آن را با مقدار ثابت تعریف شده جایگزین می‌کند. به این ترتیب هر جا که شما از dirPin استفاده کرده باشید، کامپایلر آن را هنگام کامپایل برنامه با مقدار 2 جایگرین می‌کند.

// Define stepper motor connections:
#define dirPin 2
#define stepPin 3

در تابع serup، تمام پایه‌های کنترل موتور با تابع زیر به عنوان خروجی دیجیتال تعریف شده‌اند.

pinMode(pin, mode)

همچنین جهت چرخش استپر موتور با تنظیم پایه‌ی جهت به مقدار HIGH تعیین شده‌است. بدین منظور از تابع زیر استفاده شده‌است:

digitalWrite(pin, value)
void setup() {
  // Declare pins as output:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);

  // Set the spinning direction CW/CCW:
  digitalWrite(dirPin, HIGH);
}

در تابع Loop ، با ارسال یک پالس به پایه step، درایور یک گام را اجرا خواهد کرد. کد نوشته شده در این تایع به طور پیوسته تکرار خواهد شد، به طوری که استپر موتور با سرعت ثابتی خواهد چرخید.  در مثال بعدی با تغییر سرعت موتور آشنا خواهید شد.

void loop() {
  // These four lines result in 1 step:
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
}

نمونه کد دوم: برنامه کنترل جهت، دور و سرعت موتور

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

/* Example sketch to control a stepper motor with TB6600 stepper motor driver and Arduino without a library: number of revolutions, speed and direction. More info: https://www.makerguides.com */

// Define stepper motor connections and steps per revolution:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 1600

void setup() {
  // Declare pins as output:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}

void loop() {
  // Set the spinning direction clockwise:
  digitalWrite(dirPin, HIGH);

  // Spin the stepper motor 1 revolution slowly:
  for (int i = 0; i < stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }

  delay(1000);

  // Set the spinning direction counterclockwise:
  digitalWrite(dirPin, LOW);

  // Spin the stepper motor 1 revolution quickly:
  for (int i = 0; i < stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }

  delay(1000);

  // Set the spinning direction clockwise:
  digitalWrite(dirPin, HIGH);

  // Spin the stepper motor 5 revolutions fast:
  for (int i = 0; i < 5 * stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }

  delay(1000);

  // Set the spinning direction counterclockwise:
  digitalWrite(dirPin, LOW);

  // Spin the stepper motor 5 revolutions fast:
  for (int i = 0; i < 5 * stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }

  delay(1000);
}

توضیحات کد:

علاوه بر تعیین اتصالات موتور، ثابت  stepPerRevolution را نیز تعریف می‌کنیم. با توجه به اینکه درایور را در مد 1/8 میکرواستپ تنظیم کرده‌ایم، این ثابت را برای 1600 گام در هر دور تنظیم می‌کنیم. اگر تنظیمات شما متفاوت است، این مقدار را تغییر دهید.

// Define stepper motor connections and steps per revolution:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 1600

تابع setup، همانند برنامه قبل است، فقط فعلا نیازی به تعریف جهت چرخش نیست.

در تابع Loop، موتور یک دور به آرامی به طور ساعتگرد می‌چرخد و یک دور به سرعت به طور پادساعتگرد می‌چرخد. سپس موتور 5 دور در هر جهت با سرعت بالا می‌چرخد.

چگونه سرعت، جهت چرخش و تعداد دور موتور را کنترل کنیم؟

// Set the spinning direction clockwise:
  digitalWrite(dirPin, HIGH);

  // Spin the stepper motor 1 revolution slowly:
  for(int i = 0; i < stepsPerRevolution; i++)
  {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }

کنترل جهت چرخش موتور

به منظور کنترل جهت چرخش استپر موتور، پایه DIR را بر روی High یا Low تنظیم می‌کنیم.

digitalWrite()

با توجه به اینکه چگونه استپر موتور را متصل کرده اید، تنظیم پایه‌ DIR به High، سبب می‌شود موتور به صورت ساعتگرد یا پادساعتگرد بچرخد.

کنترل تعداد گام یا دور موتور

در این برنامه با حلقه for، تعداد  گام‌های استپر موتور را کنترل خواهیم کرد.  حاصل اجرای کد درون حلقه for ، 1 (میکرو) استپ از استپر موتور است. زیرا کد درون حلقه 1600 مرتبه اجرا می‌شود، که حاصل آن یک دور است. در دو حلقه قبل، کد دورن حلقه 8000 مرتبه اجرا می‌شد، که حاصل آن 8000 گام یا 5 دور بود. توجه داشته باشید شما می‌توانید در عبارت دوم از حلقه for تعداد گام موردنظر خود را قرار دهید.

for(int i = 0; i < 800; i++)

حاصل اجرای این عبارت، 800 گام یا نیم دور چرخش استپر موتور خواهد بود.

کنترل سرعت: سرعت استپر موتور با فرکانس پالس‌هایی که به پین STEP ارسال می‌شود، تعیین می‌گردد. شما می‌توانید فرکانس پالس‌ها را با تابع زیر تغییر دهید.

delayMicroseconds()

هرچه تأخیر کوتاه‌تر باشد، فرکانس بالاتر باشد، سرعت موتور بیشتر خواهد شد.


آموزش نصب کتابخانه AccelStepper

کتابخانه AccelStepper توسط Mike McCauley  نوشته شده و یکی از کتابخانه‌های عالی برای استفاده در پروژه شماست. یکی از مزایای آن پشتیبانی از افزایش و کاهش سرعت است، البته مزایای دیگری نیز دارد.

برای نصب کتابخانه در آردوینو IDE  کافیست به مسیر زیر بروید:

Sketch > Include Library > Add .ZIP Library

سپس برای دانلود کتابخانه، Library Manager را از مسیر Tools > Manage Libraries باز کنید.

برای دانلود کتابخانه، Library Manager را از مسیر Tools > Manage Libraries باز کنید
مسیر دانلود کتابخانه AccelStepper در آردوینو IDE


سپس در پنجره باز شده، عبارت “accelstepper” را جستجو کنید و سپس از لیست کتابخانه‌های نمایش داده‌شده، آخرین نسخه از کتابخانه موردنظر خود را انتخاب و با کلیک بر روی گزینه Install آن را نصب کنید.

جستجوی عبارت accelstepper در پنجره‌ی Library Manager و سپس نصب آن
پنجره‌ی جستجوی کتابخانه جهت دانلود در آردوینو IDE

برنامه راه اندازی استپر موتور توسط کتابخانه AccelStepper

با برنامه زیر می‌توانید به حرکت استپر موتور خود شتاب ببخشید یا از شتاب آن بکاهید. در این مثال موتور با سرعت 1000 گام در ثانیه و شتاب 500 گام بر مجذور ثانیه به عقب و جلو می‌رود. ما در اینجا از درایور در مد 1/8  میکرواستپ استفاده می کنیم. اگر می‌خواهید از مد دیگری استفاده کنید، سرعت و شتاب را تنظیم کنید.

/* Example sketch to control a stepper motor with TB6600 stepper motor driver, AccelStepper library and Arduino: acceleration and deceleration. More info: https://www.makerguides.com */

// Include the AccelStepper library:
#include <AccelStepper.h>

// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
  // Set the maximum speed and acceleration:
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(500);
}

void loop() {
  // Set the target position:
  stepper.moveTo(8000);
  // Run to target position with set speed and acceleration/deceleration:
  stepper.runToPosition();

  delay(1000);

  // Move back to zero:
  stepper.moveTo(0);
  stepper.runToPosition();

  delay(1000);
}

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

مقالات مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات