ربات سازان: طراح و تولیدکننده موتورهای الکتریکیربات سازان: طراح و تولیدکننده موتورهای الکتریکیربات سازان: طراح و تولیدکننده موتورهای الکتریکیربات سازان: طراح و تولیدکننده موتورهای الکتریکی
  • صفحه نخست
  • محصولات
    • درایورهای موتور DC
    • درایورهای موتور Stepper
    • کنتـــرلرها
    • عملگر خطی | سروو جک
    • الکتروموتور و دینام
    • ربـــات‌ها
  • مقالات آموزشی
    • مستندات آموزشی محصولات
      • مستندات آموزشی درایور PMD90
      • مستندات آموزشی درایور MD10/AMD10
      • مستندات آموزشی درایور PMD60A
      • مستندات آموزشی درایور MSD02
      • مستندات آموزشی مولد پالس
      • مستندات آموزشی درایور PMD30
      • مستندات آموزشی درایور MDC20
      • مستندات آموزشی سرو درایور MHD4830
      • مستندات آموزشی درایورهای استپر پنج فاز
      • مستندات آموزشی درایور MD5
      • مستندات آموزشی ربات روهان
    • موتورهای الکتریکی و کاربردهای آن
      • موتورهای الکتریکی DC
      • موتورهای الکتریکی AC
      • موتورهای الکتریکی Stepper
      • سایر موتورهای الکتریکی
    • مقالات آموزشی الکترونیک
    • آموزش میکروکنترلر
      • آموزش میکروکنترلرهای AVR
      • آموزش میکروکنترلرهای ARM سری LPC
      • آموزش میکروکنترلرهای ARM سری STM
    • آموزش کاربردی آردوینو
    • رباتیک و معرفی ربات‌های کاربردی
    • آموزش مفاهیم پایه در مکانیک
    • آموزش مفاهیم پایه در کنترل
    • آموزش برنامه‌نویسی
    • ایده‌های ربات سازان جهت جذب سرمایه گذار
    • سایر مقالات آموزشی
  • تماس با شرکت
✕

۲-۷ نحوه‌ی راه اندازی واحد Timer-Counter و شمارش تعداد پالس‌های مربعی

  • صفحه نخست
  • بلاگ ربات سازان
  • میکروکنترلر
  • ۲-۷ نحوه‌ی راه اندازی واحد Timer-Counter و شمارش تعداد پالس‌های مربعی
1-7 آشنایی با مقدمات واحد Timer-Counter
۱-۷ آشنایی با مقدمات واحد Timer-Counter
۲۷ بهمن ۱۳۹۷
3-7 آشنایی با مفهوم وقفه (Interrupt)
۳-۷ آشنایی با مفهوم وقفه (Interrupt)
۲۷ بهمن ۱۳۹۷

۲-۷ نحوه‌ی راه اندازی واحد Timer-Counter و شمارش تعداد پالس‌های مربعی

۲۷ بهمن ۱۳۹۷
blank
دسته‌بندی‌ها
  • میکروکنترلر
برچسب‌ها
  • آموزش میکروکنترلرهای AVR
2-7 نحوه‌ی راه اندازی واحد Timer-Counter و شمارش تعداد پالس‌های مربعی

2-7 نحوه‌ی راه اندازی واحد Timer-Counter و شمارش تعداد پالس‌های مربعی

برای راه اندازی واحد Timer-Counter در میکروکنترلرهای AVR در نرم‌افزار CodeVision پس از ساخت یک پروژه در مرحله­‌ی انتخاب ویژگی‌ها بخش Timers را همانند زیر انتخاب کرده:

شکل ۶: انتخاب بخش Timers

شکل ۶: انتخاب بخش Timers

 

اکنون با منویی مواجه می‌­شوید که ۴ بخش دارد:

Timer0: این بخش مربوط به واحد Timer-Counter صفر است که از یک حافظه‌ی ۸ بیتی بهره می‌­برد.

Timer1: این بخش مربوط به واحد Timer-Counter یک است که از یک حافظه‌ی ۱۶ بیتی بهره می­‌برد.

Timer2 : این بخش مربوط به واحد Timer-Counterدو است که از یک حافظه­‌ی ۸ بیتی بهره می­‌برد.

 

ابتدا کار خود را با Timer0 شروع می­‌کنیم.

هر واحد Timer در داخل خود یک شمارنده (رجیستر) به نام TCNTx دارد که x شماره­‌ی تایمر است و این شمارنده در خود تعداد پالس مربعی وارد شده به این واحد تایمر را در خود نگه می­‌دارد. مثلا شمارنده‌‌ی Timer صفرم نامش TCNT0 است که یک حافظه‌ی ۸ بیتی است و TCNT1 مربوط به Timer دوم است که یک شمارنده­‌ی ۱۶ بیتی است. در‌واقع با وارد شدن هر پالس مربعی به واحد Timer0 این شمارنده یک واحد افزایش می­‌یابد تا به عدد ۲۵۵ برسد. عدد ۲۵۵ معادل دسیمال عدد باینری 11111111 است، در‌واقع به این مفهوم که تمام خانه­‌های حافظه‌ی ۸ بیتی ما دارای عدد ۱ شده‌اند.

حال اگر یک پالس مربعی جدید وارد واحد Timer0 شود عدد 11111111 با عدد ۱ جمع خواهد شد که حاصل آن یک عدد ۹ بیتی به صورت 100000000 است ولی حافظه‌ی ما تنها ۸ بیت است، بنابراین تنها ۸ بیت اول این عدد ۹ رقمی در حافظه می­‌ماند و رقم پرارزش‌­تر آن یعنی بیت نهم که همان ۱ است دور ریخته می­‌شود.

به این رخداد در علم کامپیوتر سرریز (Overflow) گفته می­‌شود. با هربار رخ دادن Overflow گویی حافظه‌­ی ۸ بیتی ما کاملا به حالت اول خود که همان 00000000 است باز می­‌گردد. ظاهرا با این اوصاف ما با استفاده از Timer0 تنها می­‌توانیم ۲۵۵ پالس را بشماریم و نه بیشتر. در ادامه در صدد رفع این مشکل بر­می­‌آییم، چرا که ما اغلب نیاز داریم تعداد بسیار بیشتری از این پالس­‌ها را بشماریم.

به شکل روبرو نگاه کنید.

شکل ۷: معرفی منبع کلاک

شکل ۷: معرفی منبع کلاک

 

بخش Clock Source مشخص کننده­‌ی منبع تولید کننده­‌ی پالس است. تایمر کانتر صفر هم می­‌تواند از منبع داخلی مولد کلاک استفاده کند و هم از منبع خارجی تولید کننده پالس مربعی. در واقع منبع خارجی می­‌تواند هر وسیله­ ایی اعم از انکودر، اسیلاتور و غیره باشد. همان­طور که در شکل ۷ می­‌بینید در بخش Clock Source ما می‌توانیم از دو منع داخلی و خارجی استفاده کنیم. از ۳ انتخابی که در این بخش داریم انتخاب اول System Clock است که معرفی کننده­‌ی استفاده از کلاک داخلی سیستم است که در ادامه بیشتر در مورد آن صحبت خواهیم کرد. اما دو گزینه‌ی بعدی مربوط به منابع خارجی کلاک می­‌باشند که می­‌توانند به ­پایه‌ای با عنوان T0 که همان PORTB.0 است وارد شوند.

شکل ۹: مدار مورد نیاز برای شمارش تعداد پالس¬های مربعی تولید شده توسط یک منبع کلاک

شکل ۹: مدار مورد نیاز برای شمارش تعداد پالس¬های مربعی تولید شده توسط یک منبع کلاک

 

دو گزینه­­ ی مطرح شده برای کلاک خارجی به صورت زیر مطرح شده است:

  1. T0 pin Falling Edge
  2. T0 pin Rising Edge

قسمت اول در صورت انتخاب شدن پین B.0 که همان T0 است را به لبه‌­ی پایین رونده حساس می­‌کند و با اعمال هر لبه‌ی پایین رونده­ یک واحد به TCNT0 افزوده می­‌شود. باید توجه داشته باشید که در صورت انتخاب این گزینه باید پین B.0 را قبلا Pull Up کرده‌باشید. قسمت دوم همچنین در صورت انتخاب شدن پین B.0 را به لبه­‌ی بالا رونده حساس می­‌کند و با اعمال هر لبه­‌ی بالا رونده یک واحد به TCNT0 افزوده می­‌شود. باید توجه داشته باشید که در صورت انتخاب این گزینه باید پین B.0 را قبلا Pull Down کرده‌باشید. حال گزینه‌ی T0 pin Falling Edge را انتخاب می­‌کنیم و علت اصلی آن نیز این است که ما می­‌توانیم به صورت داخلی پایه‌ی B.0 را Pull Up کنیم و نیازی به سخت افزار خارجی برای عمل Pull Down کردن نداریم. در ادامه یک پروژه­‌ی عملی در این زمینه را انجام می‌دهیم.

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

در نرم ­افزار Proteus همانند شکل زیر میکرو و مولد پالس مربعی به همراه یک LCD را اضافه می­‌کنیم.

شکل ۹: مدار مورد نیاز برای شمارش تعداد پالس‌های مربعی تولید شده توسط یک منبع کلاک

شکل ۹: مدار مورد نیاز برای شمارش تعداد پالس‌های مربعی تولید شده توسط یک منبع کلاک

 

در شکل ۹ همان‌طور که می­‌بینید یک منبع تولید پالس از منوی سمت راست نرم افزار Proteus بخش Generator Mode همانند شکل ۱۰ اضافه شده است.

شکل ۱۰: تولید پالس در پروتئوس

شکل ۱۰: تولید پالس در پروتئوس

 

با رفتن به این بخش و انتخاب یک مولد پالس DC و متصل کردن آن به پایه‌ی B.0 مدار شما آماده برنامه ریزی است.

توجه داشته باشید از پایه­‌ی B.0 به این علت استفاده کردیم که این پایه منحصرا در اختیار تایمر کانتر صفر بوده و تنها برای استفاده در سیستم کلاک خارجی مورد استفاده قرار می­‌گیرد. همچنین از پایه­‌ی دیگری برای انجام عمل شمارش توسط تایمر کانتر صفر نمی‌توانیم استفاده کنیم. حال پس از Pull Up کردن پین B.0 و حساس کردن این پایه­ به Falling Edge کار خود را ادامه می‌دهیم. اگر به منویwizard Code خود پس از انجام اعمال بالا نگاه کنید با منویی شبیه زیر مواجه خواهید شد.

در منوی مقابل بخشی که با عنوان Mode مشخص شده است وضعیت شمارنده را بیان می­‌کند و عبارت مقابل آن یعنی Normal top=0xFF به معنای آن است که شمارنده تا حداکثر مقدار خود که همان ۲۵۵ در مبنای ده دهی و 11111111 در مبنای باینری است بالا رود و سپس سرریز رخ دهد و دوباره مقدار شمارنده 00000000 شود. در بخش Output می­‌توانیم وضعیت برخی پایه ها را در زمان‌های خاصی مثلا زمان رخداد Overflow تغییر دهیم که ما در این بخش آن را در حالت Disconnect قرار می­‌دهیم.

شکل ۱۱

شکل ۱۱

 

پس از انجام این تنظیمات و تعیین پورت C به عنوان پورت متصل به LCD کاراکتری وارد مرحله­‌ی کد نویسی می­‌شویم.

حال به عنوان اولین بخش از پروژه سعی می­‌کنیم تغییرات شمارنده­‌ی TCNT0 را در برنامه­‌ی خود نشان دهیم. لازم به ذکر است عبارت TCNT0 در محیط برنامه نویسی به عنوان یک متغیر Global می‌­باشد و در همه جای برنامه قابل دسترسی است و همواره عددی بین ۰ تا ۲۵۵ دارد و در واقع نمایان گر وضعیت رجیستر TCNT0 که مخفف Timer Counter 0 است می­‌باشد. لازم به یادآوری است که رجیستر TCNT0‌یک رجیستر ۸ بیتی بوده و تنها می­‌تواند اعدادی بین ۰ تا ۲۵۵ را در خود جای دهد.

به قطعه کد زیر نگاه کنید:

#include <mega16.h>
#include <alcd.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
char str[20];

while(1)
		{
		sprintf(str,"TCNT0 = %d",TCNT0);
		lcd_puts(str);
		delay_ms(30);
		lcd_clear();
		}

 

در کد بالا ابتدا با استفاده از تابع sprintf متغیر ۸ بیتی TCNT0 در داخل رشته‌­ی str ریخته شده و سپس آماده­‌ی چاپ بر روی LCD می‌شود. سپس با یک تاخیر ۳۰ میلی­ ثانیه‌ای مقدار روی LCD به روز می­‌شود. حال برای این که آن کد بر روی شبیه ­ساز Proteus جواب دهد نیاز به تغییراتی در نرم­ افزار Proteus داریم. با دوبار کلیک کردن روی مولد پالس خود و انتخاب مد Pulse با منویی شبیه زیر مواجه خواهیم شد.

شکل ۱۲

شکل ۱۲

 

در قسمت سبز رنگ با نام Initial(Low) Voltage ولتاژ پالس خود را در حالت Low-State مشخص می­‌کنیم. در این­جا ما این مقدار را برابر ۰ ولت در نظر گرفتیم.

در قسمت Pulsed(High) Voltage میزان ولتاژ پالس خود را در حالت High-State مشخص می­‌کنیم. همان­طور که در شکل پیداست ما این مقدار را برابر +5 ولت در نظر گرفتیم. بخش سوم که با عنوان Rise Time و Fall Time مشخص شده نمایان­گر همان تاخیر تغییر سطوح منطقی است که ما در ایجا آن را بدون تغییر رها کردیم. بخش بعدی بخش فرکانس است که با رنگ بنفش مشخص شده است و ما در این بخش فرکانس موج مربعی خود را تعیین می­‌کنیم که نمایان گر تعداد پالس تولید شده در واحد زمان است. مثلا در اینجا در هر ثانیه ۱۰ پالس تولید می‌­شود. حال پس از انجام این تنظیمات مشاهده می­‌کنید که مقدار TCNT0 از ۰ شروع شده و تا ۲۵۵ رفته و سپس دوباره به مقدار ۰ برمی‌گردد، در واقع با این کار به مفهوم واقعی شمارش تعداد پالس در میکروکنترلرها به وسیله­‌ی شمارنده‌هایی با تعدادبیت محدود پی می‌­بریم.

شکل ۱۳: نمایش مقدار TCNT0 بر روی LCD کاراکتری

شکل ۱۳: نمایش مقدار TCNT0 بر روی LCD کاراکتری

 

در مرحله بعد می­‌خواهیم کاری کنیم که بتوانیم تعداد بیشتری پالس را بشماریم به این معنی که مثلا اگر ۵۰۰ پالس وارد شد ما بتوانیم این تعداد پالس را با در نظرگرفتن سرریز TCNT0 نیز بشماریم.

به قطعه کد زیر نگاه کنید.

#include <mega16.h>
#include <alcd.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
char str[20];
int counter=0;
long int totalPulse=0;

while(1)
		{
		if(TCNT0 == 255)
			counter++;
			
		totalPulse=counter*256+TCNT0;
		
		sprintf(str,"AllPulse = %d",totalPulse);
		lcd_puts(str);
		delay_ms(5);
		lcd_clear();
		}

 

در قطعه کد بالا با تعریف دو متغیر جدید به نام‌های counter که تعداد ۲۵۵ شدن‌های TCNT0 را در خود ذخیره می­‌کند و همچنین متغیر totalPulse که تعداد کل پالس‌های وارد شده به واحد تایمرکانتر صفر را در خود دارد کار خود را آغاز می­‌کنیم. در کد با هر بار ۲۵۵شدن TCNT0 یک واحد به متغیر counter اضافه می­‌کنیم، سپس تعداد کل پالس‌­ها را از ضرب counter در ۲۵۶ و جمع آن با مقدار فعلی TCNT0 محاسبه می­‌کنیم. همچنین مقدار تاخیر را بسیار کم و برابر با 5ms قرار می­‌دهیم.

شکل ۱۴: شمارش بیش از 255 پالس به وسیله­ی تایمر کانتر صفر

شکل ۱۴: شمارش بیش از ۲۵۵پالس به وسیله­‌ی تایمر کانتر صفر

 

اگر این کد را برای یک موج مربعی با فرکانس 10Hz اجرا کنید مشاهده می­‌کنید که کد به خوبی کار می­‌کند ولی اگر فرکانس منبع را به 100Hz افزایش دهید مشاهده می­‌کنید که گاها پس از رسیدن TCNT0 به مقدار ۲۵۵ مقدار پالس کلی شما کاهش پیدا کرده و دوباره از مقدار قبلی خود شروع به کار می­‌کند.

علت این امر چیست؟

بلی، علت این امر این است که ما در این قطعه کد هر بار قبل از چک کردن شرط ۲۵۵ شدن TCNT0 به میزان 5ms تاخیر داریم و در حین این تاخیر ممکن است TCNT0 سرریز کند و ما متوجه آن نخواهیم شد. هرچه فرکانس سیگنال ورودی بیشتر باشد این امر مشهود­تر است. با این اوصاف این روش نیز روش کارآمدی نخواهد بود و باید در صدد استفاده از روش­های کامل­تر و بهتری باشیم. در بخش بعدی با معرفی یک قابلیت جدید در میکروکنترلرهای AVR این مبحث را ادامه می‌دهیم.

 

 

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

مطالب و مقالات مرتبط

4-9 راه‌اندازی ماژول SRF08 Range finder

4-9 راه‌اندازی ماژول SRF08 Range finder

۲۹ بهمن ۱۳۹۷

۴-۹ راه‌اندازی ماژول SRF08 Range finder


مشاهده مطلب ...
3-9 معرفی توابع I2C در CodeVision

3-9 معرفی توابع I2C در CodeVision

۲۹ بهمن ۱۳۹۷

۳-۹ معرفی توابع I2C در CodeVision


مشاهده مطلب ...
2-9 راه‌اندازی پروتکل I2C در CodeVision

2-9 راه‌اندازی پروتکل I2C در CodeVision

۲۹ بهمن ۱۳۹۷

۲-۹ راه‌اندازی پروتکل I2C در CodeVision


مشاهده مطلب ...

13 Comments

  1. blank احسان گفت:
    ۲۰ اردیبهشت ۱۳۹۵ در ۱۱:۱۶

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

    پاسخ
  2. blank سید میلاد محمدی گفت:
    ۲۰ اردیبهشت ۱۳۹۵ در ۱۲:۱۷

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

    پاسخ
  3. blank saadat گفت:
    ۲۶ مهر ۱۳۹۵ در ۰۹:۱۷

    سلام آقای محمدی.
    باتشکر از شما بابت مطالب مفید وکاملا روان،خیلی لذت بردم از اینگونه توضیح.
    موفق باشید

    پاسخ
  4. blank مهران گفت:
    ۷ دی ۱۳۹۵ در ۱۸:۳۷

    سلام و خسته نباشید میخوام به کمک تایمر کانتر یه برنامه به زبان basic بنویسم که بتونه یه موج مربعی با فرکانس ۱۰khz و D=40% تولید کنه
    و قسمت بعدش میخوام موج مربعی باشه اما فرکانس وD قابل تنظیم باشه
    ممنون میشم پاسخ بدید خیلی مهمه

    پاسخ
  5. blank مهران گفت:
    ۷ دی ۱۳۹۵ در ۱۸:۳۸

    سلام و خسته نباشید میخوام به کمک تایمر کانتر یه برنامه به زبان basic بنویسم که بتونه یه موج مربعی با فرکانس ۱۰khz و D=40% تولید کنه
    و قسمت بعدش میخوام موج مربعی باشه اما فرکانس وD قابل تنظیم باشه
    ممنون میشم پاسخ بدید خیلی مهمه.

    پاسخ
  6. blank ن مهندس گفت:
    ۲۱ خرداد ۱۳۹۶ در ۱۵:۴۶

    سلام
    میشه راجع به کد توضیح دهید، چرا در ۲۵۶ ضرب کردید؟

    پاسخ
  7. blank amin گفت:
    ۲۱ مهر ۱۳۹۶ در ۰۹:۰۶

    بسیار عالی و روان بود

    پاسخ
  8. blank محمد گفت:
    ۱۳ اردیبهشت ۱۳۹۷ در ۲۰:۲۵

    ممنون خیلی گویا جالب و خوب بود
    خدا خیرتون بده

    پاسخ
  9. blank raheleh گفت:
    ۱۸ اردیبهشت ۱۳۹۷ در ۰۰:۲۴

    سلام ببخشید من میخوام برنامه در ۱۵ ثانیه تعداد پالس های خارجی رو شمارش کند چطور میتونم بنویسم میشه کمکم کنید عجله دارم …

    پاسخ
  10. blank omid گفت:
    ۲۴ آذر ۱۳۹۷ در ۰۹:۰۳

    عالی بود،ممنون

    پاسخ
  11. blank زهرا گفت:
    ۱۴ خرداد ۱۳۹۸ در ۲۳:۳۸

    سلام، ممنونم، بسیار عالی بود

    پاسخ
  12. blank zahra گفت:
    ۱۸ اردیبهشت ۱۳۹۹ در ۱۴:۴۵

    سلام میخوام پالس حساس به سطح با وقفه صفر بشمارم

    پاسخ
  13. blank سیدحسن گفت:
    ۵ شهریور ۱۴۰۱ در ۱۹:۴۷

    سلام خسته نباشید مهندس ببخشید یه سوال من این برنامه رو گپی کردم و در پروتیوس شبیه سازی کردم یه مشکلی که داره بعد از عدد۲۵۰که میرسه عدد پرتاب میشه میره تا بالای ۱۰۰۰چرا این مشکل به وجود میاد؟

    پاسخ

دیدگاهتان را بنویسید لغو پاسخ

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

جستجو در مطالب ربات سازان

✕

آخرین نوشته‌های ربات سازان

  • انتخاب بهینه‌ترین هیت‌سینک برای کاربردهای الکترونیک قدرت0
    انتخاب بهینه‌ترین هیت‌سینک برای کاربردهای الکترونیک قدرت
    ۳ آبان ۱۴۰۲
  • خواندن پلاک الکتروموتورهای سه فاز0
    خواندن پلاک الکتروموتورهای سه فاز
    ۱۳ تیر ۱۴۰۱
  • خواندن دیتاشیت موتور دی سی1
    خواندن دیتاشیت موتور دی سی
    ۱۳ خرداد ۱۴۰۱
  • محاسبه نسبت گیربکس2
    محاسبه نسبت گیربکس
    ۸ خرداد ۱۴۰۱
  • محاسبه سرعت استپ موتور بر حسب دور بر دقیقه0
    محاسبه سرعت استپ موتور بر حسب دور بر دقیقه
    ۲ خرداد ۱۴۰۱

لوگوی ربات سازان

درباره ربات سازان

شرکت ربات سازان فعالیت خود را از سال ۱۳۹۳ شروع کرده است. در ابتدا حوزه کاری شرکت طراحی و ساخت ربات‌های پلتفرم آزمایشگاهی بود که به مرور با بومی‌سازی درایور موتورهای استفاده شده در این ربات‌ها محصولی جدید به سبد محصولات شرکت اضافه شد. پس از آن شرکت به صورت تخصصی شروع به طراحی و ساخت انواع درایورهای موتورهای الکتریکی دی سی و استپر کرد و اکنون پس از گذشت ۸ سال از فعالیت شرکت توانسته‌ایم با پوشش دادن رنج وسیعی از درایورهای موتورهای الکتریکی در ولتاژ، جریان و توان‌های مختلف نیازهای صنعت کشور عزیزمان را در زمینه‌های مختلف برطرف نماییم.

blankblankblankblank

دسترسی سریع

  • صفحه اصلی
  • بلاگ ربات سازان
  • همه محصولات ربات سازان
  • ارتباط با ما
تمامی حقوق مادی و معنوی مطالب این وبسایت متعلق به ربات سازان می‌باشد.
      ✕

      ورود

      گذرواژه خود را فراموش کرده اید؟

      می خواهید یک حساب کاربری ایجاد کنید؟