اینم عکس از مداری عالی که دوستمون گذاشتن و انکودر ...
http://s1.img7.ir/Dossi.jpg
عاقا مثلا فکر کن شما میخواهی روی ال سی دی گرافیکی سرعت یه موتور dc رو داشته باشی هم به صورت عدد هم به صورت انالوگ مثل{مثل کیلومتر ماشین} {مثل ساعت انالوگ ها که رو ال سی دی گرافیکی میزارن}
حالا مثلا اگر یهو سرعت چرخش بره بالا یک ثانیه طول میکشه تا سرعت جدید روی ال سی دی نمایش داده بشه... و به جای اینکه به نرمی سرعت تغییر کنه و عقربه انالوگ بالا بره یه پرش بزرگ ایجاد میشه که اصلا خوب نیست... در نتیجه باید زمان کمتر از 1 ثانیه باشه تا این مشکل تا مقدار زیادی حل بشه{تا این جا رو متوجه شدید دیگه؟!!} :biggrin:
و یه مشکل دیگه هم اینه که توی دور موتور 3600 مدام حدود 100 تا دویست تا پرش داره توی اعداد که اینم هر جا پروژه رو نشون بدم فکر میکنن دقتش کمه... oo:
میخوام تا جایی که ممکنه دقت بالا بره و سرعت این کار کمتر بشه... :eek:{الان شاید بگید مگه اصلا میشه؟؟!!} :mrgreen:
چند تا مشکل که به ذهن خودم میرسه :
1-اینه که ممکنه پالس منظمی نداشته باشم{که شنیدم با اپ امپ منظم میکنن پالسو}از لحاظ ولتاژمنطقی
2_مکانیک یه مقدار خرابه باید خیلی دقیق باشه
3_چون من از کریستال خارجی برای میکرو استفاده نکردم ممکنه پالس هارو دقیق نتونه بخونه....
4_انکودر یا باید پالس بیشتری بفرسته یا پالس کمتری ...!!!
نظر شما چیه؟؟
شما واسه بهتر شدن پرشهایی که داری ، بیا از میانگین گیری استفاده کن ...
یعنی چند بار نمونه گیری کن از داده هات و بعد میانگین گیری و بعد نمایشش بده ..
اینجوری حتما مشکل پرش عدد حل میشه ..
کریستال خارجی هم خالی از لطف نیست ... هرچی باشه از داخلی بهتره ...(خازنهاش یادت نره ..)
خازن 104 عدسی مربوط به تغذیه میکرو رو هم بزن...
تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!
برنامه اینجوریه که با تایمر دو زمان 500 میلی ثانیه رو اندازه میگیرم و هر با که به وقفه میره تایمر دو .یک بار متغیرaرو افزایش میده و توی همون زیر برنامه یه بار نمونه برداری میکنه از کانتر ...بعد که متغییر دو شد{یعنی 500میلی ثانیه دوم } به یه زیر برنامه دیگه پرش میکنه و برای بار دوم نمونه برداری میکنه و توی همون زیر برنامه با مقداری که از نمونه برداری اول به دست اومد جمع میشه و تقسیم بر دو میشه...
اون هم که ضرب در 75 شده بعد تقسیم بر 10 شده بعد ضرب در دو شده دور در دقیقه هست بقیشم مهم نیست تبدیل هایی هست که سرعتو کم کنه ...{مهم اولیاست}
من گفتم شایدم بد برنامرو نوشتم...{البته بد که نوشتم ولی شما استادی مشکلاتشو بگو :read:}
[code=qbasic]$regfile = "m32def.dat"
$crystal = 10000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pind.4 , Db5 = Pind.3 , Db6 = Pind.1 , Db7 = Pind.2 , Rs = Pind.0 , E = Pind.5
Cursor Off
Cls
Lcd "test3"
Wait 2
Cls
Dim A As Word
Dim Bb As Word
Dim Cc As Word
Dim C As Word
Dim D As Word
Dim Dd As Word
Dim G As Word
Dim Gg As Word
Config Timer2 = Timer , Async = On , Prescale = 64
Config Timer1 = Counter , Edge = Rising
Enable Interrupts
Enable Timer2
On Timer2 Nex
Start Timer1
Enable Ovf1
On Ovf1 P
Do
Bb = Counter1
Locate 1 , 1
Lcd "time:" ; A ; "rpm:" ; G
Locate 2 , 1
Lcd Gg ; "dor mored niaz"
Loop
End
Nex:
Incr A
If A = 2 Then Gosub Wb
Stop Timer1
Timer1 = 0
C = Bb * 75
C = C / 10
C = C * 2
Cc = C / 10
Cc = C / 3
Start Timer1
Return
Wb:
Stop Timer1
Timer1 = 0
A = 0
D = Bb * 75
D = D / 10
D = D * 2
Dd = D / 10
Dd = Dd / 3
G = D + C
G = G / 2
Gg = Dd + Cc
Gg = Gg / 2
Start Timer1
Return
P:
Return[/code]
خب چندتا نکته :
1)بی زحمت هر وقت میخوای کد بذاری رو سایت ، از ابزار هایش از قسمت "کد" استفاده کنین تا متن برنامه اینجوری بهم نریزه..
2)هدفت از استفاده از وقفه تایمر 1 چیه؟
3)سعی کن برنامه رو خوشگل مشگل بنویسی که اگه خودتم خواستی یه روزی دوباره بخونیش راحتتر متوجه شی...
اول 2 رو جواب بده...
تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!
هدف خاصی ندارم :applause: الکی هست این. برا موقعی بود که از کانتر صفر استفاده میکردم ...برنامه رو به مرور زمان تغییر دادم اینم همیونجور گذاشتم :redface:
البته فکر نکنم مشکلی ایجاد کنه این وقفه ...
--ممنون اینو بلد نبودم!!!درستش کردم و کد qbasicرو انتخاب کردم...
چشم .دیگه از بس خستم کرده حال مرتب کردنشم حتی نداشتم ----دیگه با کمک شما عزیزان کلی از مشکلاتم رو تونستم حل کنم واگرنه داشتم دیوونه میشدم oo:
مشکل ایجاد نمیکنه ولی تا حد ممکن فقط از چیزایی که لازم داری استفاده کن ...
روال کلی رو میگم ، نوشتنش با خودت
واسه شمردن پالسهایی که از مدارت میان باید از کانتر استفاده کنی ..
تو بازه زمانی که تایمر دقیق دو میشماره ، (تو هر وقفه تایمر 2) باید تعداد پالسهای شمارش شده خونده بشن و متغیر مربوط به پالسها صفر بشه و ...
حله یا واضحتر بگم؟
تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!
الان از کانتر یک برای شمردن پالس ها استفاده میکنم___از تایمر دو برای ایجاد زمان دقیق استفاده میکنم{کریستال32768 هم گذاشتم}
فقط من الان پالس هارو میشمارم توی این برنامه و بعد توی وقفه تایمر 2 تقسیم هارو انجام میدم بعد مقدار کانتر رو صفر میکنم و به همین صورت تکرار میشه...
الان شما میگی دستور نمونه برداری از کانتر رو بزارم توی وقفه ی تایمر 2؟؟!!! اینجوری من از نوشته ی شما فهمیدم طی زمانی که تایمر 2 داره زمان رو میشماره هیچ نمونه گیری نباید بشه...و پس از اینکه تایمر دو زمان رو شمرد و به وقفه مورد نظرش رفت توی اون وقفه باید مقدار کانتر نمونه برداری بشه...درست فهمیدم؟؟{اگر اینجور باشه من از کجا بفهمم توی چه زمانی کانتر شمرده شده که یعدش بتونم تبدیل هارو روش انجام بدم؟؟!!}
سلام دوست عزیز
متاسفانه فکر کنم نتونستم منظورمو برسونم ....
ببین در حینی که تایمر 2 داره میشماره (هنوز سرریز نشده) ، کانتر 1 باید مداوم تو وقفه خودش بره و پالسها رو بشمره.
وقتی تایمر 2 سرریز شد (به وقفه ش رفت) ، کانتر 1 باید مقدارش خونده بشه، محاسبات روش انجام بشه ، بعدش کانتر 1 و متغیر حاوی کانتر 1 هر دو صفر بشن و همینجور روال ادامه پیدا کنه ....
حله ؟؟
تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!
سلام دوست عزیز
متاسفانه فکر کنم نتونستم منظورمو برسونم ....
ببین در حینی که تایمر 2 داره میشماره (هنوز سرریز نشده) ، کانتر 1 باید مداوم تو وقفه خودش بره و پالسها رو بشمره.
وقتی تایمر 2 سرریز شد (به وقفه ش رفت) ، کانتر 1 باید مقدارش خونده بشه، محاسبات روش انجام بشه ، بعدش کانتر 1 و متغیر حاوی کانتر 1 هر دو صفر بشن و همینجور روال ادامه پیدا کنه ....
حله ؟؟
بله این دقیقا همون برنامه ای هست که من نوشتم {فقط توی این برنامه ای که گذاشتم الان دو بار این نمونه گیری را انجام}
یه سوال دیگه اینکه من هر وقت تایمر دو میره به وقفه .اولین خط وقفه تایمر دو. نمونه گیری کانتر یک رو متوقف میکنم و تبدیل هارو انجام میدم بعد مقدار کانتر یک رو صفر میکنم و در اخرین خط وقفه تایمر دو قبل ازreturn .باز دوباره نمونه گیری کانتر یک رو شروع میکنم{دلیلش اینه که وقتی تایمر دو به وقفه رفت کانتر یک الکی پالس هارو نشماره تو این مدت }
مشکل که نداره؟؟!! اگر نداره پس فکر کنم مشکل نرم افزاری نداشته باشم باید برم دنبال همون منظم کردن پالس ها و ساخت یک مکانیک خیلی دقیق...بعد باز میام و نتایجو میگم
عاقا از شما دوستان خوبم واقعا ممنونم که حداقل بسیاری از مشکلات بزرگ سخت افزاریمو به کمک شما حل کردم
ممنونم واقعا ...منم برای شما ارزوی بهترین هارو دارم
{مشکلم رفع شد تغریبا }مشکل از اونجا بود که من تبدیل های الکی و تکراری انجام داده بودم توی نرم افزار که باعث میشد یخورده خطا خیلی بزرگ تر بشه ...الان مشکلم خیلی بهتر شد {تغریبا فیلا حل شد} و با اینکه الان هر 500میلی ثانیه نمونه برداری میکنم و فقط یک بار نمونه برداری میکنم خیلی خوبه :wow: :wow:
دیدگاه