سلام
من یه چیزی! ساختم که توش احتیاج دارم دور موتور رو دریارم . یعنی فاصله یک دور چرخش موتور رو در یارم .
الان سنسور گذاشتم . هر بار که موتور می چرخه int0 تحریک میشه و رو خروجی دیده میشه . حالا من فاصله بین هربار اینتراپت با بار بعدی رو می خام بدست بیارم . چی کار کنم ؟
راهنمایی در حد خیلی ابتدایی باشه لطفا" :(
استفاده از تایمر 16 بیتی بهترین کار ممکنه . به طوریکه شما با هر وقفه مقدار ثبات های TCNT را می خونی و زمان بدست میاد و بعد از خوندن دوباره صفر می کنی تا دوباره زمان رو اندازه بگیره .تایمر 1 یه تایمر 16 بیتیه . اگه فرکانس کار میکرو 1 مگا باشه اون میتونه تا فاصله زمانی 65ms رو تو هر دور اندازه بگیره (15 دور در ثانیه به بالا) . ولی اگه بخوای دور های کمتر رو اندازه بگیری(فاصله زمانی بیشتر) prescaler رو بذار 8 .
باید از تایمر استفاده کنی
توی هر دور مقدار عدد قبلی رو بخونی صفر کنی و دوباره شروع کنه برای چرخش
تعداد دور در ثانیه رو هم میتونی به دست بیاری کاره راحت تری تعداد اینتراپت ها رو توی یک ثانیه بشمار
سلام
ممنون
اما یه سری چیزای دیگه هم هست ...
من دورم موتورم نهایت به 10 دور در ثانیه می رسه . یعنی کمه . نوسانات زیاد هم داره . ممکنه 4-5 دور در ثانیه باشه . پس نمی تونم تعداد اینتراپتها رو تو 1 ثانیه بشمارم . زیاد دقیق در نمیاد .
بعد حالا به هر روشی که شما بگین ! مثلا مدت یه دور چرخش رو که حساب می کنم باید 1/360 اون زمان رو هم حساب کنم و سر هر 1/360 اون زمان بتونم چیزی رو تو خروجی نشون بدم :cry:
بعد جدا از این زمان حاضر رو هم باید رو داشته باشم و مثلا برای نمایش روی LCD .
حالا نم یدونم کدوم کارو با کدوم تایمر بکنم
:(
دور بشمارم ؟ زمان بگیرم ؟
ممنون میشم راهنمایی کنین .
این روش رو از نظر برنامه نویسی میتونی پیاده کنی
دو تا متغیر سراسری بگیر همیشه اولی رو بریزی تو دومی بعد اولی رو با زمان مقدار دهی کنی
اگه تعداد دور متغیره ، شما چه چیز رو می خواهید اندازه بگیرید؟ چون کمیت دور موتور یعنی تعداد دور در ثانیه یا دقیقه. اگه ثانیه بدردت نمی خوره خوب دقیقه رو بذار. دقیقا بگو چی می خوای. نکنه میخوای یه نمودار از وضعیت سرعت در طی زمان داشته باشی و اونو تو کامپیوتر نشون بدی :wink:
شما یه کار دیگه هم می تونی بکنی اونم اینه که یه دور رو مثلا به 10 یا 20 قسمت تبدیل کنی یعنی هر یه دور 20 تا پالس بده کار رو برای سرعت های کم حل می کنه
Meysam نوشته است:اگه تعداد دور متغیره ، شما چه چیز رو می خواهید اندازه بگیرید؟ چون کمیت دور موتور یعنی تعداد دور در ثانیه یا دقیقه. اگه ثانیه بدردت نمی خوره خوب دقیقه رو بذار. دقیقا بگو چی می خوای. نکنه میخوای یه نمودار از وضعیت سرعت در طی زمان داشته باشی و اونو تو کامپیوتر نشون بدی :wink:
سلام
ممنون
من دقیقا" می خام زمان هر دور (نه میانگین رمان هر دور) رو بدونم . به همین خاطر ثانیه ای باید باشه . مثلا برای نمایش در کامپیوتر به قول شما :P
نقل قول: شما یه کار دیگه هم می تونی بکنی اونم اینه که یه دور رو مثلا به 10 یا 20 قسمت تبدیل کنی یعنی هر یه دور 20 تا پالس بده کار رو برای سرعت های کم حل می کنه
خوب سنسور جاسازی شده . بعدش هم دردسر اون کار زیاده . تازه چه فایده ای داره ؟ سرعت هم ممکنه به 20radpersec برسه گاهی . 8)
من الان یه روش استافده کردم .
تایمر 1 رو استارت کردم .
توی وقفه ی اورفلو دادم مثلا ov++
و توی اینتراپت سنسور هم گذاشتم که برای به دست آوردن تعداد پالس تعداد اورفلوها رو در 65536 ضرب کنه بعد با اون 16 بیت تایمر جمع کنه . بعد تایمر رو صفر کنه واسه دور بعدی (اینتراپت بعدی)
الان مشکل من اینه که نمی دونم توی codevision چه جوری این عدد 16 بیتی رو با unsigned long int جمع کنم :(
TCNT1H
TCNT1L
ممنون که واسه ی یوزرهای بی سواد هم وقت می زارین . :oops:
unsigned long int k;
ببین این جواب میده یا نه
k=k+TCNT1L+TCNT1H<<8;
شاید روش بهتری هم باشه. :roll:
آره
ممنون
اصلا چیز پیچیده ای نبوده
من خیلی گیج بودم .
فکرم رفته بود توی توابع تبدیل اکتال به دسیمال! که اصلا" ربطی نداشته :roll:
ممنون
اما سوال بعدیم !
اون متغیری که انساین لانگ اینت گرفتیمش و توش تعداد پالسهای هر بود بود که یادتونه ! من می خام در تقسیمات خاصی از اون عدد کار خاصی انجام بدم (توی دور بعدیش). مثلا فرض کنید مقدار اون متغیر شده n .
من می خام تو دور بعد توی پالس n/m ام یه خروجی رو فعال کنم که به موتور برسه .
مثلا یک دور گیریم که 5 ملیون پالس داشته . حالا میخام توی دور بعدی روی پالس 750 یه چیزی بدم به خروجی . باز توی پالس 800 یه چیزی و همینطور !
یه تایمر دیگه بزارم و کامپیر کنم هی ؟
:oops: