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





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 4 1234 آخرین
نمایش نتایج: از 1 به 10 از 40
  1. #1
    2015/04/13
    46
    8

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

    با سلام
    من یک موتور دارم ک یک صفحه دندانه دار به محو این موتور متصله و به ازای هر میزان دوران شافت موتور ، سنسور نصب شده روی این صفحه دنداده دار ، یک پالس ایجاد میکنه (شبیه انکودر)
    یک کد میخوام که با میکرو کنترلر بتونم این پالسها رو دریافت کنه و از یک نقطه خاص ، دقیق شروع به شمارش این پالسها کنه
    روی چرخ 360 دندانه وجود داره ک دو تا شو حذف شده و جاش یک سطح صافه که نقطه مرجع شمارش پالس همین نقطه هست ک سنسور وقتی به این نقطه میرسه یک پالس خاص و ثابت ایجاد میکنه

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

    یک نکته هم داره و اون اینکه هرچی دور موتور بیشتر میشه فرکانس موج های حاصل از دندانه ها هم بیشتر میشه و ارتفاع موج ها از ارتفاع موج حاصل از نقطه A هم بیشتر میشه اما شکل و نوع سیگنال نقطه A در هیچ صورتی تغییر نمیکنه و ثابته

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


  2. #2
    2009/02/18
    تهران
    270
    1

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    سلام

    با میکروها چقدر آشنایی دارید ؟

    کار شما با وقفه پین RB0 و وقفه یه تایمر و چند محاسبه ساده قابل اجراست.
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  3. #3
    2015/04/13
    46
    8

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    سلام ممنونم ک پاسخ دادین اینجا ک هیچکس جواب نمیده
    متاسفانه دقیقا همین بخش وقفه ها و تایمر کانتر میکرو رو بلد نیستم زیاد

    میشه توضیح بدین یا با شماتیک یا متن برنامه
    تا الان خیلی سرچ کردم و یک فایل اموزش کار با وقفه های AVR هم خوندم ولی چیزی نفهمیدم.بیشتر این بود ک تایمر میشماره و سر ریز ک شد پرش میکنه یا مثلا با دو عدد اگر برابر شد پرش میکنه به لیبل ما یا کانتر تا تعداد موج رو میشماره و در صورت سرریز شدن یا برابر شدن با عدد خاصی پرش میکنه ولی اینا که من خوندم جواب منو نمیده چون میکرو باید از یک نقطه خاص یعنی همون A بتونه بشماره و در دور های بالا و پایین موتور ک فرکانس موج بقیه دندانه ها زیاد و کم میشه ، هنگ نکنه
  4. #4
    2009/02/18
    تهران
    270
    1

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    وقتی وقفه پین RB0 رو فعال کنید , با هر بار یک شدن سیگنالتون , یعنی دیدن یک دندانه , جریان برنامه به یه تابع که شما نوشتید هدایت میشه , داخل تابع یک متغیر رو یک پله افزایش میدین تا تعداد دندانه ها دستتون باشه , همچنین داخل این تابع باید یه تایمر رو فعال کنید تا زمان وقفه خوردن بین دو دندانه به دست بیاد , اینجوری هم سرعت موتور مشخص میشه هم اگر زمان بین دو وقفه بیش از 50 یا 70 درصد شد یعنی به نقطه A رسیدیم , کل سیستم میتونه با وقفه کار کنه , بدون هنگ ! یا اشتباه

    اگر زمان برای انجام پروژه دارید , بهانه خوبیه برای یادگیری میکروها , فقط دقت کنید که اینجا فرم PIC هست و میکروهای PIC اموزش های فارسی کمی دارند.

    تصمیم با شماست , آموزش های داخل سایت برای شروع خوب هستند , فقط ابتدا تحقیق کنید

    موفق باشید
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  5. #5
    2015/04/13
    46
    8

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    اینطوری واقعا نگاه نکرده بودم به موضوع
    وقتم زیاده ولی من فقط با AVR کارکردم و پروگرمر دارم و با PICکار نکردم و حتی کامپایلرشم نمیدونم چیه
    با ای وی ار نمیشه؟

    خب یک سوال پس ما انگار با بدست اوردن وقفه زمانی نقطه A ک بیشتر از سایر نقاطه اون نقطه رو شناسایی میکنیم؟
    خب اگ دور موتور کم بشه چطور؟
  6. #6
    2009/02/18
    تهران
    270
    1

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    خب یک سوال پس ما انگار با بدست اوردن وقفه زمانی نقطه A ک بیشتر از سایر نقاطه اون نقطه رو شناسایی میکنیم؟
    خب اگ دور موتور کم بشه چطور؟
    بله به خاطر همین از درصد صحبت کردم , که با کم یا زیاد شدن سرعت موتور اتفاقی نیفته , شما همیشه میانگین زمان بین دو دندانه رو حساب میکنید و چنانچه افزایش یا کاهش زمان بیش از 70 درصد بود ( برای مثال ) یعنی به نقطه A رسیدیم

    وقتم زیاده ولی من فقط با AVR کارکردم و پروگرمر دارم و با PICکار نکردم و حتی کامپایلرشم نمیدونم چیه
    با ای وی ار نمیشه؟
    چرا با AVR نشه! , آموزش های زیادی هم براش پیدا میکنید و دوستان زیادی تو قسمت AVR هستن که میتونن کمکتون کنن
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  7. #7
    2015/04/13
    46
    8

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    والا دوستان دیگه گویا بحثای مهمتر رو پاسخ میدن

    خب پس با ای وی ار میشه من یکم بلدم میشه راهنمایی کنید
    پس من یک برنامه مینویسم ک ابتدا دندانه هارو بشماره و هر دندانه رو ک فهمید بلافاصله پرش کنه به لیبل یک و اونجا یک واحد به متغیری اضافه کنه
    بعد یک تایمر در همون لیبل شروع به شمارش کنه و تا باز دوباره پرش به اون لیبل صورت گرفت شمارش تایمر متوقف بشه و عدد رو بریزه تو یک متغیر دیگه
    تا اینجا درسته؟
    خب این عدد فاصله زمانی بین دو دندانه را نشون میده ک در دور ارام موتور عددی مثلا مساوی 10 باشه و در همون سرعت موتور عدد زمانی نقطه A مثلا 15 باشه
    خب باید چیکار کنم؟
  8. #8
    2009/02/18
    تهران
    270
    1

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    نقل قول نوشته اصلی توسط ezraeell
    والا دوستان دیگه گویا بحثای مهمتر رو پاسخ میدن

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

    فقط محدوده سرعت زیاده ؟
    اگه زیاد باشه الگوریتم پیچیده تر میشه
    شاید لازم باشه کلاک تایمر رو کم یا زیاد کنید



    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  9. #9
    2015/04/13
    46
    8

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    نقل قول نوشته اصلی توسط ramezani.t
    بله درسته فقط شما باید سیستم رو توری طراحی کنید که همه چیز با وقفه انجام بشه , وقتی زمان بین دندانه ها رو حساب میکنید , عددی رو در رجیستر مقایسه کننده تایمر قرار بدین تا هنگام رسیدن به نقطه A , تایمر وقفه بخورد.

    فقط محدوده سرعت زیاده ؟
    اگه زیاد باشه الگوریتم پیچیده تر میشه
    شاید لازم باشه کلاک تایمر رو کم یا زیاد کنید
    الان من یک برنامه نوشتم به محض اینکه دندانه اول پالس رو دریافت میکنه وقفه میخوره و میاد به لیبل خودش و اونجا اول تایمر2 شروع به شمارش میکنه و یک متغر هم یک واحد اضافه میشه(تعداد دندانه ها)و کانتر صفر میشه و برمیگرده به شمارش پالس و تا دندانه دوم سنس میشه وقفه دوم میخوره و میاد تو همین لیبل ایندفعه وارد یک شرط میشه و تایمر استپ میشه و عدد تایمر داخل یک متغیر مستقل ریخته میشه و اونو نمایش میده
    و هرچی دور موتور یا فرکانس رو افزایش میدم زمان بین دندانه ها کمتر میشه تا اینجا نشون میده درست کار میکنه
    پس برای تایمر هم یک وقفه به کار ببرم و زمان پالس نقطه A رو بهش بدم و وقتی به نقطه A برسه خودش میاد به لیبل وقفه تایمر و مساله حل میشه؟
    خب یک مشکل دور موتور ک تغییر میکنه یکم عدد ها در حدود 2 یا 4 واحد کمتر بیشتر تغییر میکنن اما مد مقایسه ای تایمر فقط دو عدد رو میشه بهش داد ک فقط هم مساوی همون اعداد باید بشه

    الان موتور من در شرایط عادی 900 دور در دقیقه میزنه و نهایتا هم 4000 دور بر دقیقه که همیشه سرعت دورانی موتور ثابت نیس ممکنه گاهی تند بشه کاهی کند فقط نباید در شناسایی نقطه A اشتباه رخ بده چون این موتور بنزینی هست اگه نقطه A رو گم کنه شمع سیلندر خانه اول جرقه نمی خوره و موتور از کار میوفته

    اضافه شده در تاریخ :
    اومدم تو پروتیوس دو تا میکرو گذاشتم یکی به عنوان تولید کننده پالس مربعی که مثلا در اینجا همون سنسور و چرخ دندانه رو نقش بازی میکنه و میکرو دوم که پلاس هارو انالیز میکنه
    پالس ها دونه دونه زده میشه تا 360 پالس و به پالس 360 که میرسه هم کانتر و هم تایمر صفر میشه و از دوباره میشماره
    یک مشکل هست وقتی از پالس شماره یک تا شماره 2 زمان میگیره در میاد 59 و تا پالس 40 این زمان تغییری نمیکنه باز پالس ها ک بیشتر میشه مثلا پالس 45 ام زمان میشه 60 و همینطور به پالس 359 ام ک میرسه زمان میشه 64
    چرا اینقد اختلاف داره؟درحالی که پالس ها یک پارچه در میکرو اول تولید میشن و نقطه A هم هنوز وارد میکرو نکردم
  10. #10
    2009/02/18
    تهران
    270
    1

    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    ببینید , وقتی با وقفه ها کار میکنید باید سعی کنید با کمترین کد نویسی به مقصودتون برسید , من فکر میکنم بهتره از تایمر به عنوان یه تایمر نگهبان مثل " واچ داگ تایمر " استفاده کنید , به این معنا که وقتی یک دندانه دیده میشه تایمر ریست میشه و این کار تا جایی ادامه پیدا میکنه که به نقطه A برسیم و دندانه ای دیده نشه و تایمر سر ریز بشه یا با مقایسه کننده خودش برابر بشه و درنتیجه وقفه بخوره , حال تا اینجا اگر سرعت تغییر نمیکرد مشکلی نبود , با تغییر سرعت زمان سر ریز شدن تایمر نگهبانمون تغییر میکنه که این مشکل هم با یه محاسبه ساده در روتین وقفه شمارش دندانه ها قابل اجراست , کافیست قبل از ریست کردن تایمر در روتین وقفه شمارش دندانه ها , پنجاه درصد به زمان بین دندانه ها اضافه کنید و این زمان را در تایمر قرار دهید و البته دقت کنید هر میکرویی تایمر های مخطلفی دارد , من فکر میکنم بهتره از تایمر 16 بیتی که مقایسه کننده هم داره استفاده کنید , همچنین سعی کنید از میکرو پر سرعتی استفاده کنید که اعدادی که در تایمر شکل میگیرند بالا تر باشند , تا جای بازی و محاسبه بیشتر باشه

    نقل قول نوشته اصلی توسط ezraeell
    اومدم تو پروتیوس دو تا میکرو گذاشتم یکی به عنوان تولید کننده پالس مربعی که مثلا در اینجا همون سنسور و چرخ دندانه رو نقش بازی میکنه و میکرو دوم که پلاس هارو انالیز میکنه
    پالس ها دونه دونه زده میشه تا 360 پالس و به پالس 360 که میرسه هم کانتر و هم تایمر صفر میشه و از دوباره میشماره
    یک مشکل هست وقتی از پالس شماره یک تا شماره 2 زمان میگیره در میاد 59 و تا پالس 40 این زمان تغییری نمیکنه باز پالس ها ک بیشتر میشه مثلا پالس 45 ام زمان میشه 60 و همینطور به پالس 359 ام ک میرسه زمان میشه 64
    چرا اینقد اختلاف داره؟درحالی که پالس ها یک پارچه در میکرو اول تولید میشن و نقطه A هم هنوز وارد میکرو نکردم
    شاید جایی از الگوریتمتون مشکل داره! البته به پروتئوس هم نمیشه اطمینان داشت ! من با این نرم افزار کار نکردم اما تو همچین برنامه های ساده ای دیگه باید درست کار کنه.
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
صفحه 1 از 4 1234 آخرین
نمایش نتایج: از 1 به 10 از 40

موضوعات مشابه

  1. پاسخ: 19
    آخرين نوشته: 2020/02/21, 11:32
  2. نیاز به یک تابع در مورد تایمر کانتر میکرو
    توسط ezraeell در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2015/04/16, 17:32
  3. شمارش اشیا با اینفرارد و بدون نیاز به آیسی
    توسط mahdad999 در انجمن میکروکنترلرهای AVR
    پاسخ: 20
    آخرين نوشته: 2015/03/30, 23:49
  4. نیاز به کمک: محاسبه تابع خروجی در فلیپ فلاپ [کارشناسی]
    توسط AttemoX در انجمن مدارهاي الكتريكي
    پاسخ: 0
    آخرين نوشته: 2014/06/02, 15:20
  5. نیاز شدید به یک برنامه فراخوانی تابع (لطفا)
    توسط elm_8688 در انجمن برنامه نویسی و اینترفیس
    پاسخ: 0
    آخرين نوشته: 2010/05/21, 19:24

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •