NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4507 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 15 از 15

موضوع: سوال از ارتباط میکرو و متلب

  1. #1
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    8
    تشکر
    6
    تشکر شده 7 بار در 6 پست

    Exclamation سوال از ارتباط میکرو و متلب

    ضمن عرض سلام خدمت مهندسان گرامی
    یک سوال فنی داشتم از حضورتون.
    بنده می بایست دو موج رو در متلب با هم مقایسه کنم ، بدین صورت که در سیمولینک متلب یک موج سینوسی با دامنه 5 ولت و فرکانس 50 هرتز و یک موج دندان اره ای با دامنه 5 و فرکانس 250 هرتز و با بلوک comprator این دو تا رو مقایسه کردم و خروجی را که یک ماتریس pwm صفر و یکی در اندازه 1 * 2000 می باشد را در workspace به من داد.
    سوال اول بنده : آیا بطور نرم افزاری می شود این ماتریس را به کد ویژن انتقال دهم؟
    اگر بطور نرم افزاری نمی شود آیا با پورت سریال مستقیما بر روی میکرو قابل انتقال است؟

    ------------
    توضیحات تکمیلی: ماتریس pwm خروجی به طور مثال یک چنین چیزی است:
    [00011111111000110000001111110001110000111]
    یعنی تعداد صفر و یک ها متغیر است ، مثلا :
    از آرایه 1 تا 300 مقدار 0
    از آرایه 301 تا 520 مقدار 1
    از آرایه 520 تا 670 مقدار 0
    و.......
    -----------
    با تشکر

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  4. #2
    کاربر فعال
    تاریخ عضویت
    May 2010
    نوشته ها
    99
    تشکر
    155
    تشکر شده 51 بار در 27 پست

    پیش فرض

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

    s=serial('com1') // select the port
    set(s,'BaudRate',9600,'StopBits',1,'Parity','none' ,'DataBits',8) // initialize the port
    fopen(s) //open com1
    fprintf(s,"test"); send "test"
    in=fscanf(s) recieve from port and save in s
    fclose(s)
    dete(s)
    clear(s)

  5. کاربران : 2 تشکر کرده اند از شما m-arm برای ارسال این پست سودمند:


  6. #3
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط isoroush نمایش پست ها
    بنده می بایست دو موج رو در متلب با هم مقایسه کنم ، بدین صورت که در سیمولینک متلب یک موج سینوسی با دامنه 5 ولت و فرکانس 50 هرتز و یک موج دندان اره ای با دامنه 5 و فرکانس 250 هرتز و با بلوک comprator این دو تا رو مقایسه کردم و خروجی را که یک ماتریس pwm صفر و یکی در اندازه 1 * 2000 می باشد را در workspace به من داد.
    سوال اول بنده : آیا بطور نرم افزاری می شود این ماتریس را به کد ویژن انتقال دهم؟
    اگر بطور نرم افزاری نمی شود آیا با پورت سریال مستقیما بر روی میکرو قابل انتقال است؟
    با سلام
    دوست عزيز من خيلي متوجه نشدم كه از ميكرو هم ميخوايد استفاده كنيد يا نه؟
    يعني ميخوايد موج pwm رو از ميكرو بگيريد و تو متلب اين دوتارو مقايسه كنيد؟
    يا اينكه تو متلب هر دوتا موج رو شبيه سازي كنيد و بعدش تو محيط همين نرم افزار اين دو تا موج رو با هم مقايسه كنيد؟
    ممكنه يكم مساله بيشتر باز كنيد و بيشتر توضيح بديد؟
    _____________________________________
    _____________________________________

  7. تشکرها از این نوشته :


  8. #4
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    8
    تشکر
    6
    تشکر شده 7 بار در 6 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    ممكنه يكم مساله بيشتر باز كنيد و بيشتر توضيح بديد؟
    سلام . اول ممنونم از دوستانی که راهنمایی کردند،
    مسئله دقیقا اینه که قراره توی سیمولینک متلب دو تا موج دندان اره ای و سینوسی رو با مشخصات یاد شده در اولین پست ، با هم مقایسه کنیم.
    بعد از اون خروجی مقایسه شده رو که در واقع یک نمودار 0 و 1 هست رو به ما نمایش می ده و همچنین توی workspace متلب یک ماتریس از این نمودار نشون میده. فرم ماتریس هم به این شکل است :
    [11111000000001111100001000000011111100000011111100 00]
    و این یعنی که پهنای پالس ها با هم متفاوت است.
    حالا می خوایم این ماتریس رو توی میکرو بریزیم و یک label بهش اختصاص بدیم تا وقتی که اون کاربر ، اون label مشخص رو صدا زد ، این ماتریس به خروجی میکرو فرستاده بشه ....
    در واقع این کار آغاز یک اینورتر تکفاز به روش pwm مقایسه ای (اینطور که جناب استاد فرمودند) است.
    توی اینترنت سایت های خارجی که گشتم یکی دیگه هم این مشکل رو داشت ولی کسی جوابش رو نداده بود.(لینک پایین)
    The SPWM in Matlab... - All About Circuits Forum
    ------------------
    و دو سوال از جناب m-arm : با تشکر از پاسخگویی مناسبتون:
    1- خط dete(s) چکار می کنه؟
    2- توی کدوم قسمت باید برای اون ماتریسی که میخوام بفرستم روی میکرو اسم ( label) تعیین کنم/:؟
    مثلا: [10101001011]=n
    ویرایش توسط isoroush : 09-01-2012 در ساعت 01:48

  9. تشکرها از این نوشته :


  10. #5
    مدیر بخش STM32 sigma-mx آواتار ها
    تاریخ عضویت
    Nov 2009
    نام
    سعید شریفیان
    نوشته ها
    1,421
    تشکر
    804
    تشکر شده 2,520 بار در 978 پست

    پیش فرض

    اگه درست فهمیده باشم ، شما می خوای کامپیوتر (متلب ) تصمیم بگیره ولی میکرو عمل کنه ! درسته ؟ یعنی پردازش تو کامپیوتر باشه ولی برای ارتباط با لایه فیزیکی از میکروکنترلر استفاده کنی .

  11. کاربران : 2 تشکر کرده اند از شما sigma-mx برای ارسال این پست سودمند:


  12. #6
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    8
    تشکر
    6
    تشکر شده 7 بار در 6 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sigma-mx نمایش پست ها
    اگه درست فهمیده باشم ، شما می خوای کامپیوتر (متلب ) تصمیم بگیره ولی میکرو عمل کنه ! درسته ؟ یعنی پردازش تو کامپیوتر باشه ولی برای ارتباط با لایه فیزیکی از میکروکنترلر استفاده کنی .
    بله ، دقیقاً

  13. تشکرها از این نوشته :


  14. #7
    کاربر فعال
    تاریخ عضویت
    May 2010
    نوشته ها
    99
    تشکر
    155
    تشکر شده 51 بار در 27 پست

    پیش فرض

    فرض کنید ماتریس [01111000]را می خوتهید ارسال کنید
    1- ماتریس را در یک متغییر بریزید مثلا a=[01111000]
    2-fprintf(s,a) -- این دستور ماتریس a را در متغییر پورت s قرار داده و به پورت ارسال میکند.
    دو دستور اخر برای پاک کردن و ازاد کردن متغییرs در فضای workspace متلب هستش.

  15. کاربران : 3 تشکر کرده اند از شما m-arm برای ارسال این پست سودمند:


  16. #8
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    8
    تشکر
    6
    تشکر شده 7 بار در 6 پست

    پیش فرض

    و الان این ماتریس در حافظه دائم میکرو ذخیره میشه و یا موقت ؟
    و یک سوال دیگه اینکه از چه نوع حافظه ای برای ارتقا استفاده کنم و یک لینک که بیشتر توضیح داده باشه راجع به " استفاده حافظه در میکرو"
    با سپاس

  17. تشکرها از این نوشته :


  18. #9
    مدیر بخش STM32 sigma-mx آواتار ها
    تاریخ عضویت
    Nov 2009
    نام
    سعید شریفیان
    نوشته ها
    1,421
    تشکر
    804
    تشکر شده 2,520 بار در 978 پست

    پیش فرض

    برای ذخیرش باید از ram میکرو استفاده کنی.
    2000bit / 8 = 250 Byte
    این مقدار رو ، حتما می تونی توی ram ذخیره کنی ( از ارتباط سریال بگیری و توی آرایه ذخیره کنی ). بعد عملیات خاصی که می خوای در مورد ساخت دوباره شکل موج و اعمال به موتور رو انجام بدی. کار سختی نیست. موفق باشی..
    ویرایش توسط sigma-mx : 09-01-2012 در ساعت 18:31

  19. کاربران : 3 تشکر کرده اند از شما sigma-mx برای ارسال این پست سودمند:


  20. #10
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    دایی جان خوب اینا کاری نداره !
    در مورد اول که میخوای فایلت رو از متلب ببری یه کدویژن کاری نداره ، فقط اگه یکم زبان سی بلد باشی به راحتی میشه این کار رو کرد !
    و اگه بخوای با پورت سریال داده رو منتقل کنی از اونجا که گفتی یه ماتریس 0و1 داری به طول 2000 و یک بعدی پس میشه چیزی حدود 250 بایت حافظه که شما رو مجبور میکنه از اتمگا 8 به بالا استفاده کنی که حداقل یک کیلو بایت رم دارن ! برای برقراری ارتباط هم اگه میخوای ارتباط ایمنی داشته باشی میتونی به بسته دیتای ارسالی crc اضافه کنی ، و داده ها رو منتقل کنی ، حالا خود ارنتقال داده ها مفصل میشه ، شما مشخص کن که از روش اول میخوای استفاده کنی یا از روش دوم تا بیشتر قضیه رو برات باز کنم

  21. کاربران : 2 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  22. #11
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    8
    تشکر
    6
    تشکر شده 7 بار در 6 پست

    پیش فرض

    ممنون دایی جان!
    البته روش اول یعنی انتقال روی میکرو بهتره.

  23. تشکرها از این نوشته :


  24. #12
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    خوب یه چیز دیگه دایی جان ،
    این 0و1 ها وضعیت پایه خروجی هستن ؟! یا مقدار باینری که باید مقایسه کننده pwm اونا رو به خودش بگیره
    اگر وضعیت پایه pwm هستن ، اینجا زمان هم مطرح میشه ، که این تغییرات باید تو چه ریتی اعمال بشه ؟
    که در اوقع کوچکترین زمان میشه دوره تناوب موج pwm شما !

  25. کاربران : 2 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  26. #13
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    8
    تشکر
    6
    تشکر شده 7 بار در 6 پست

    Icon16

    والا دایی جان خدمت عارضم که این فایل سیمولینک مقایسه است.
    yeksimnew.rar
    الان این مقایسه توی فرکانس 50 است. یعنی سینوسی = 50 و دندان اره ای = 30*50 هرتز
    حالا می خوام این ماتریس مقایسه رو توی کد ویژن ببرم (اسم ماتریس توی workspace اسمش pwm است ) . بعدش هر وقت کاربر یک ورودی معین را برای میکرو تعیین کرد، روی یکی از پورت های خروجی میکرو ، ماتریس pwm ای که از متلب به میکرو بردیم به این صورت بیاد:

    (قبلش این توضیح رو بدم که وقتی ماتریس pwm رو باز کنید 20095 نقطه 0 و 1 برای شما نشان داده توی مدت زمان 0.02 ثانیه، یعنی تقریبا هر 1 میکرو ثانیه یک نقطه نمونه برداری شده )

    حالا باید به میکرو بگیم که آرایه اول این ماتریس رو بده به خروجی ، 1 میکرو ثانیه تاخیر داشته باش ، دوباره آرایه دوم رو بده ، یک میکرو ثانیه تاخیر داشته باش الی ..... .

  27. #14
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    خوب دایی جان شما که میخواستی این کار رو بکنی به راحتی با خود میکرو میتونی انجام بدی بدون نیاز به متلب و اما به چه صورت ، شما زمانی که دو تا موجت به یک دامنه در یک زمان میرسن حالا یا 0 یا 1 رو ایجاد میکنی دیگه ! و اما راه حال برای خود میکرو ، برای تولید پالس دانده اره ای میتونی از تایمر کانتر استفاده کنی و فرکانسش رو هم با کلاکی که بهش اعمال میکنی به وجود بیاری ، خوب این تا اینجای ماجرا ، برای موج سینوسی 50 هرتز هم اول یه تیبل سینوسی تولید میکنی ، درست کردنش کاری نداره ، بعد یه تایمر دیگه رو با دوره تناوب تعداد سمپل موج سینوسی * 50hz فعال می کنی ؛ حالا تو هر بار فعال شدن تایمر دوم مقداری رو از تیبل موج سینوسی میخونی و توی رجیستر مقایسه گر تایمر اول میذاری ، با این کار پایه مقایسه کننده همون موج pwm میشه که میخوای!
    و اما از روشی که خودت میخوای باید جدول حاصله رو به این صورت درست کنی - مثلا فرض کنیم تیبل
    000000001111111001101
    خوب برای این باید یه جدول به سبک زیر ایجاد کنید : 8,7,2,2,1,1
    خوب حالا این اعداد از کجا اومد ؟ - شما تعداد صفر های پشت سر هم رو میشمارید تعدادشون رو یاداشت میکنید ، بعد یک های پشت سر هم و و همینطور تا آخر ماجرا ! که معنیش میشه 8 تا صفر ، 7 تا 1و 2 تا صفر ، دوتا 1 یه صفر و یه یک حالا و 8 تا صفر یعنی پایه به مدت 8 میکروثانیه صفرباشه ، 7 یعنی به مدت 7 میکر ثانیه پایه تغییر وضعیت بده یعنی 7 میکروثانیه 1 بشه!
    خوب حالا اینجاشو فکر کن ببین چیزی به ذهنت میرسه یا بازم باقیشو بگم !

  28. کاربران : 2 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  29. #15
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    8
    تشکر
    6
    تشکر شده 7 بار در 6 پست

    پیش فرض

    دایی جان ممنون ، فهمیدم چیکار کنم ، از روش اول که گفتی به نظر منعطف تر میاد. روش کار می کنم به مشکلی بر خوردم دوباره ازت کمک میخوام

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

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