موج سینوسی مدولاسیون عرض پالس

موج سینوسی مدولاسیون عرض پالس (Sinusoidal Pulse Width Modulation – SPWM)

با استفاده از پایتون و کتابخانه‌های NumPy برای محاسبات ریاضی و Matplotlib برای رسم نمودار، می‌توان موج سینوسی مدولاسیون عرض پالس (Sinusoidal Pulse Width Modulation – SPWM) را تولید و نمایش داد.

SPWM با مقایسه یک موج سینوسی مرجع (Reference Sine Wave) با یک موج مثلثی یا دندانه‌اره‌ای حامل (Carrier Triangular/Sawtooth Wave) با فرکانس بسیار بالاتر ایجاد می‌شود. خروجی PWM هنگامی که موج سینوسی بالاتر از موج حامل باشد، بالا (High) و در غیر این صورت پایین (Low) است.

در اینجا یک نمونه کد پایتون برای تولید و رسم نمودار SPWM آورده شده است:

کد پایتون برای تولید و رسم SPWM

import numpy as np
import matplotlib.pyplot as plt

# --- پارامترهای موج ---
# زمان شبیه‌سازی
t_stop = 0.05  # 50 میلی‌ثانیه
# فرکانس نمونه‌برداری (Sampling Frequency) - باید خیلی بالا باشد
f_sampling = 50000  # 50 کیلوهرتز

# فرکانس موج مرجع سینوسی (Reference Sine Wave Frequency)
f_ref = 50  # 50 هرتز
# فرکانس موج حامل مثلثی (Carrier Triangular Wave Frequency)
f_carrier = 1000  # 1 کیلوهرتز

# شاخص مدولاسیون دامنه (Amplitude Modulation Index - Ma) - بین 0 و 1
Ma = 0.8 

# --- تولید زمان و موج‌ها ---

# بردار زمان
t = np.linspace(0, t_stop, int(t_stop * f_sampling), endpoint=False)

# موج مرجع سینوسی (Reference Sine Wave)
# دامنه موج مرجع = Ma
sine_ref = Ma * np.sin(2 * np.pi * f_ref * t)

# موج حامل مثلثی (Carrier Triangular Wave)
# از تابع np.mod برای ایجاد شکل موج دوره‌ای (تناوبی) استفاده می‌کنیم
# دامنه موج حامل را 1 در نظر می‌گیریم
carrier_period = 1 / f_carrier
carrier_phase = np.mod(t, carrier_period) / carrier_period
# تبدیل فاز دوره‌ای به موج مثلثی بین -1 و 1
# برای موج مثلثی می‌توان از توابع دیگر یا پیاده‌سازی دستی هم استفاده کرد
# اینجا از یک تقریب موج دندانه‌اره‌ای معکوس و متقارن استفاده شده
carrier_wave = 2 * (carrier_phase - 0.5)
# تبدیل به شکل مثلثی
carrier_wave = 2 * np.abs(carrier_wave) - 1


# --- تولید موج SPWM ---

# مقایسه: SPWM هنگامی که موج سینوسی > موج حامل است، High (1) و در غیر این صورت Low (0) است
# از np.where برای اجرای شرط استفاده می‌شود
spwm_wave = np.where(sine_ref > carrier_wave, 1, 0)

# --- رسم نمودار ---

plt.figure(figsize=(12, 8))

# نمودار موج مرجع سینوسی و موج حامل مثلثی
plt.subplot(2, 1, 1) # ایجاد دو نمودار در یک ستون، نمودار اول
plt.plot(t * 1000, sine_ref, label='موج مرجع سینوسی (Sine Ref)', color='blue')
plt.plot(t * 1000, carrier_wave, label='موج حامل مثلثی (Carrier Tri)', color='red', linewidth=0.5)
plt.title('موج مرجع سینوسی و موج حامل مثلثی')
plt.xlabel('زمان (میلی ثانیه)')
plt.ylabel('دامنه (Amplitude)')
plt.grid(True, linestyle='--')
plt.legend()
plt.ylim(-1.1, 1.1)

# نمودار موج SPWM
plt.subplot(2, 1, 2) # ایجاد دو نمودار در یک ستون، نمودار دوم
plt.plot(t * 1000, spwm_wave, label='موج SPWM', color='green')
plt.title('موج Sinusoidal PWM (SPWM)')
plt.xlabel('زمان (میلی ثانیه)')
plt.ylabel('پالس خروجی (0 یا 1)')
plt.grid(True, linestyle='--')
plt.legend()
plt.ylim(-0.1, 1.1)

plt.tight_layout() # تنظیم فاصله مناسب بین نمودارها
plt.show()

توضیح کد

  1. وارد کردن کتابخانه‌ها:
    • import numpy as np: برای انجام محاسبات آرایه‌ای سریع و تولید داده‌ها.
    • import matplotlib.pyplot as plt: برای رسم نمودار.
  2. تعیین پارامترها:
    • f_sampling: فرکانس نمونه‌برداری باید حداقل ۱۰ برابر بالاتر از f_carrier باشد تا وضوح کافی برای نمایش پالس‌ها فراهم شود.
    • f_ref: فرکانس موج سینوسی مرجع (فرکانس خروجی مورد نظر).
    • f_carrier: فرکانس موج حامل (فرکانس سوییچینگ).
    • M_a: شاخص مدولاسیون دامنه (نسبت دامنه سینوسی به دامنه حامل) که میزان پهنای پالس‌ها را کنترل می‌کند.
  3. تولید بردار زمان (t):
    • با استفاده از np.linspace یک آرایه از نقاط زمانی با فاصله نمونه‌برداری ثابت ایجاد می‌شود.
  4. تولید موج مرجع سینوسی (sine_ref):
    • با استفاده از فرمول A⋅sin(2πft) و دامنه M_a.
  5. تولید موج حامل مثلثی (carrier_wave):
    • از توابع پیمانه‌ای (np.mod) و توابع ریاضی برای شبیه‌سازی یک موج مثلثی با فرکانس f_carrier بین ±1 استفاده شده است.
  6. تولید موج SPWM (spwm_wave):
    • قلب برنامه: np.where(sine_ref > carrier_wave, 1, 0) عملیات مقایسه را انجام می‌دهد. هر جا که مقدار موج سینوسی مرجع از موج حامل مثلثی بیشتر باشد، خروجی ۱ (High) و در غیر این صورت ۰ (Low) خواهد بود.
  7. رسم نمودار:
    • از plt.subplot برای رسم دو نمودار در کنار هم استفاده شده است:
      • نمودار بالا: نمایش موج سینوسی مرجع و موج حامل.
      • نمودار پایین: نمایش موج نهایی SPWM.
    • نهایتاً با plt.show() نمودارها نمایش داده می‌شوند.

این ویدئو به شما نشان می‌دهد که چگونه می‌توان یک موج سینوسی ساده را در پایتون رسم کرد، که پایه‌ای برای ساخت و رسم موج SPWM است.

همچنین بررسی کنید

ساخت پروب اسیلوسکوپ برای اندازه گیری توان (قسمت دوم)

در قسمت یک، ما محدودیت های پهنای باند پروب های غیرفعال را پوشش دادیم و …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *