سلام.اگه ممکنه درباره تولید موج سینوسی در avrتوضیح بدین.ممنون...
اطلاعیه
Collapse
No announcement yet.
مولد موج سینوسی
Collapse
X
-
پاسخ : مولد موج سینوسی
نوشته اصلی توسط mohsen-iranسلام.اگه ممکنه درباره تولید موج سینوسی در avrتوضیح بدین.ممنون...
یه راه خیلی متداولی که وجود داره اینه که شما یه Look Up Table (یا به قولی دیتابیس..) تعریف کنیدو بر حسب اون؛ رفتار متغییر رو توی خروجی پیاده کنید .. موفق باشید ..دوستان! مدتی کمتر به سایت میام ..
-
پاسخ : مولد موج سینوسی
مثال از یک جدول سینوسی البته مقادیر باید محاسبه شده در جدول قرار بگیره:
flash unsigned char lookup[256]={128, 128+127*SIN(1*360/255), 128+127*SIN(2*360/255), 128+127*SIN(3*360/255), ..., 128+127*SIN(255*360/255) };exampleبا عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.
دیدگاه
-
پاسخ : مولد موج سینوسی
اگر اعداد جدول بالا را یکی یکی(مثلا با یک حلقه ی for) در OCRآ لود کنید دیوتی سایکل PWMآ خروجی میکرو بصورت سینوسی بالا و پایین می رود. اگر یک فیلتر RC ( مثلا 1کیلو اهم و 100 نانو ) در خروجی PWM قرار دهید شکل موج سینوسی خواهید دید.
هرچه زمان لود کردن سریعتر باشد فرکانس سینوسی شما بیشتر می شود.
با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.
دیدگاه
-
پاسخ : مولد موج سینوسی
سلام
برای تولید ولتاژ سینوسی با دامنه ی 5 ولت پیک تو پیک. فرکانس هم بستگی به تاخیر بین لود کردن این اعداد در OCR داره. اگه تاخیر نباشه فرکانس ماکزیمم را خواهیم داشت که اونم بستگی به کلاک میکرو داره و سرعت اجرای کدها توسط کمپایلر.
این اعداد نقطه های شکل موج سینوسی هستند و محاسبه ی خاصی ندارن!با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.
دیدگاه
-
پاسخ : مولد موج سینوسی
میتونید از DAC مقاومتی هم استفاده کنید.
http://en.wikipedia.org/wiki/Resistor_Ladder
و یک راه دیگه هم بجز اسنفاده از جدول look up استفاده از خود تابع سینوس هست.
یعنی یک متغیر رو از صفر تا 360 درجه زیاد کنید و بدیدش به تابع سینوس.
مشکل اول اینه که تابع سینوس مقدار منفی داره که حداکثر تا یک هست. پس اگر با یک جمعش کنیم مشکل حل میشه.
مشکل دوم اینه که حداکثر عددی که تابع سینوس میده 1+ و 1- هست. که چون با 1 جمع شده میشه ازصفر تا 2
ولی اگر DAC ما 8 بیت باشه مقدار از صفر تا 255 باید زیاد بشه.
پس کافیه که عدد بدست اومده از تابع سینوس رو ( بعد از جمع با عدد یک ) در 127 ضرب کنیم.
کد PHP:#include <avr/io.h> #include <math.h> #include <delay.h> #define DAC_PORT PORTA #define DAC_DDR DDRA int main( void ){ float x, y; DAC_DDR = 0xFF; while(1){ for(x=0 ; x < 2*M_PI ; x+= 0.05 ){ y = (sin(x) + 1) * 127; DAC_PORT = y; _delay_ms(1); } } }
دیدگاه
-
پاسخ : مولد موج سینوسی
یعنی تعداد نمونه ها از موج سینوسی به ولتاژ خروجی بستگی نداره؟(اگه تو OCR لود کنم)...پس ولتاژ خروجی چه طوری میتونه تغییر کنه؟
در مورد تغییر فرکانس خروجی هم فقط به کلاک میرو و تعداد شمارش های کانتر بستگی داره؟
اینطوری در اصل موج SPWM رو تو خروجی نداریم؟(به DAC کاری ندارم)نوشته اصلی توسط ahmadmnمثال از یک جدول سینوسی البته مقادیر باید محاسبه شده در جدول قرار بگیره:
flash unsigned char lookup[256]={128, 128+127*SIN(1*360/255), 128+127*SIN(2*360/255), 128+127*SIN(3*360/255), ..., 128+127*SIN(255*360/255) };example
ممنون میشم به سوالاتم جواب بدین...من یه چندوقتیه تو این موارد به مشکل خوردم :angry:
دیدگاه
-
پاسخ : مولد موج سینوسی
ایمطور که معلومه شما همه چیزو می دونید و پیشنهاد من اینه که بجای سروکله زدن با تئوری مدار رو که از یک میکرو و یک مقاومت+خازن تشکیل شده ببندید و امتحان کنید.
به هر حال:
شما دارید یک PWM با دیوتی سایکل متغیر ایجاد می کنید.
فرض کنید عدد اول جدول یعنی 128 را در OCR لود می کنید. این باعث تولید PWM با دیوتی سایکل 50% خواهد شد پس ولتاژ خروجی RC برابر با 2.5 ولت می شود.
کمی صبر کنید و عدد دوم جدول را در OCR لود کنید. ولتاژ خروجی کمی افزایش می یابد.
کمی صبر کنید و عدد سوم ...
...
صبر کنید و عدد آخر ...
و دوباره از اول
...
اگر ولتاژ خروجی را در یک اسکوپ ببینید یک موج سینوسی خواهید دید که از 0 تا 5 ولت بالا و پایین می رود.
دقیقا
شما یک موج سینوسی را به 255 قسمت تقسیم کردید و دامنه های آن را بترتیب داخل OCRآریختید. مقدار صبر کردن را می توانید تغییر دهید تا فرکانس این سینوسی تغییر کند. افست 128 هم برای جلوگیری از منفی شدن OCRآ است.
با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.
دیدگاه
-
پاسخ : مولد موج سینوسی
این یکم که میگید!! چقدره؟(من دیدم که تو اینتراپت مربوط به compare match مقدار OCR تغییر میکنه...می خوام بدونم دقیقا چرا!!)
باید از مد fast PWM استفاده کنم دیگه؟...یه سوال دیگه هم اینکه وقتیکه در زمان copmare match مقدار OCR عوض میشه، در حقیقت در زمان پایان یک سیکل(مثلا رسیدن تایمر به 255) مقدار OCR عوض میشه؟
یک سوال هم در مورد فرکانس خروجی:دقیقا با توجه به تعداد نمونه های look up table و فرکانس ماری میکرو(یا فرکانس تایمر) از کجا میتونم فرکانس خرجی مطلوب (مثلا همون 50 یا 60 هرتز) رو بدست بیارم؟
راستش هدف من تولید موج SPWM برای فعلا یک اینورتر تک فازه(مرحله به مرحله!)،بعدا سه فاز ....
تئوری مطلب رو اگه درست بفمهمم فکر کنم واسه کار عملی بهتره
بازم ممنون از جوابهاتون...
دیدگاه
دیدگاه