چگونه یک شبیه‌ساز مدار مانند Proteus بسازیم؟

چگونه یک شبیه‌ساز مدار مانند Proteus بسازیم؟

بررسی معماری داخلی شبیه‌سازها، ساخت قطعات مجازی و طراحی مدل‌های رفتاری

بخش سوم: از تعریف یک قطعه جدید تا ساخت موتور شبیه‌سازی


مقدمه

در دو بخش قبلی مقاله بررسی کردیم که شبیه‌سازهای الکترونیکی چگونه مدارها را تحلیل می‌کنند و چگونه می‌توانند یک میکروکنترلر واقعی مانند ESP32 یا STM32 را در محیطی کاملاً مجازی اجرا کنند.

در بخش اول یاد گرفتیم که قطعات الکترونیکی در نرم‌افزارهایی مانند Proteus فقط تصاویر گرافیکی نیستند، بلکه هر قطعه دارای یک مدل ریاضی و رفتاری است که عملکرد واقعی آن را تعریف می‌کند.

در بخش دوم نیز دیدیم که شبیه‌سازی میکروکنترلرها نیازمند بازسازی یک سیستم کامل شامل CPU، حافظه، رجیسترها، GPIO و واحدهای جانبی است.

اما یک سؤال مهم باقی می‌ماند:

اگر بخواهیم خودمان یک قطعه جدید بسازیم یا حتی یک شبیه‌ساز مشابه Proteus طراحی کنیم، از کجا باید شروع کنیم؟

چگونه نرم‌افزار می‌فهمد که یک قطعه چند پایه دارد؟

چگونه تشخیص می‌دهد که پایه شماره یک ورودی است یا خروجی؟

چگونه رفتار یک سنسور، رله، نمایشگر یا میکروکنترلر جدید را تعریف می‌کنیم؟

پاسخ این پرسش‌ها در معماری داخلی شبیه‌سازها و مفهوم مهمی به نام Component Modeling یا مدل‌سازی قطعات قرار دارد.

معماری کلی یک شبیه‌ساز حرفه‌ای

یک نرم‌افزار مانند Proteus یا Wokwi معمولاً از چند بخش اصلی تشکیل شده است.

ساختار کلی:

                 User Interface

                       ↓

              Circuit Editor

                       ↓

              Netlist Generator

                       ↓

          Simulation Scheduler

                       ↓

          Simulation Engine

                       ↓

        Component Models Library

                       ↓

          Graphic Rendering

هر بخش وظیفه خاصی دارد.

۱رابط کاربری (User Interface)

اولین بخش، محیطی است که کاربر مدار را در آن طراحی می‌کند.

مانند:

  • قرار دادن قطعات
  • کشیدن سیم‌ها
  • تغییر مقدار مقاومت
  • انتخاب میکروکنترلر
  • اتصال ابزار اندازه‌گیری

اما نکته مهم این است که این محیط فقط ظاهر کار است.

وقتی کاربر یک مقاومت روی صفحه قرار می‌دهد، نرم‌افزار در پشت صحنه یک نمونه از یک مدل مقاومت ایجاد می‌کند.

مثلاً:

Component ID:

R1

Type:

Resistor

Value:

1000 Ohm

Pins:

1 , 2

۲کتابخانه قطعات (Component Library)

قلب یک شبیه‌ساز، کتابخانه قطعات آن است.

هر قطعه شامل چند بخش است:

اطلاعات ظاهری

مانند:

  • شکل قطعه
  • اندازه
  • نام پایه‌ها
  • رنگ
  • Symbol

اطلاعات الکتریکی

مانند:

  • تعداد پایه‌ها
  • نوع پایه
  • محدوده ولتاژ
  • مدل رفتار

مدل اجرایی

یعنی کدی که رفتار قطعه را کنترل می‌کند.

برای مثال یک LED:

Input:

Voltage

Process:

if Voltage > Threshold

State = ON

else

State = OFF

ساخت یک قطعه ساده در شبیه‌ساز

فرض کنید می‌خواهیم یک سنسور دما بسازیم.

این قطعه سه پایه دارد:

        Temperature Sensor

        VCC

         |

         |

       DATA

         |

         |

       GND

ابتدا پایه‌ها را تعریف می‌کنیم:

Pin 1:

Power

Pin 2:

Output

Pin 3:

Ground

سپس رفتار آن را مشخص می‌کنیم:

مثلاً:

اگر دما ۲۵ درجه باشد:

Output = 2.5V

اگر دما ۵۰ درجه شود:

Output = 5V

پس مدل قطعه می‌شود:

Temperature

Voltage Calculation

Output Pin

مدل رفتاری (Behavioral Model) چیست؟

یکی از مهم‌ترین مفاهیم در طراحی شبیه‌سازها، مدل رفتاری است.

در این روش لازم نیست تمام جزئیات فیزیکی قطعه را شبیه‌سازی کنیم.

بلکه فقط رفتار قابل مشاهده آن را مدل می‌کنیم.

مثلاً یک رله واقعی شامل:

  • سیم‌پیچ
  • میدان مغناطیسی
  • هسته فلزی
  • کنتاکت مکانیکی

است.

اما در شبیه‌ساز ممکن است فقط این رفتار کافی باشد:

اگر ورودی فعال شد:

خروجی وصل شود

یعنی:

Input HIGH

Switch ON

Output Connected

این روش باعث افزایش سرعت شبیه‌سازی می‌شود.

مدل‌سازی دقیق در مقابل مدل رفتاری

دو روش اصلی برای ساخت مدل قطعات وجود دارد.

روش اول: مدل فیزیکی (Physical Modeling)

در این روش تلاش می‌شود رفتار واقعی قطعه با جزئیات زیاد شبیه‌سازی شود.

مثلاً یک ترانزیستور:

  • جریان پایه
  • جریان کلکتور
  • ظرفیت داخلی
  • اثر دما

در نظر گرفته می‌شود.

مزیت:

دقت بسیار بالا

معایب:

  • سرعت کمتر
  • پیچیدگی زیاد

روش دوم: مدل رفتاری (Behavioral Modeling)

در این روش فقط رفتار ورودی و خروجی مهم است.

مثلاً:

یک سنسور:

Input:

Temperature

Output:

Voltage

مزایا:

  • سریع
  • ساده
  • مناسب سیستم‌های دیجیتال

معایب:

  • جزئیات فیزیکی کمتر

موتور زمان‌بندی (Simulation Scheduler)

یکی از پیچیده‌ترین بخش‌های شبیه‌ساز، Scheduler است.

وظیفه آن مدیریت زمان در محیط مجازی است.

فرض کنید:

یک مدار شامل:

  • CPU
  • LED
  • سنسور
  • تایمر

است.

هر بخش سرعت متفاوتی دارد.

CPU ممکن است:

80MHz

کار کند.

اما LED تغییر وضعیت آنی ندارد.

Scheduler باید تصمیم بگیرد:

چه چیزی؟

چه زمانی؟

به‌روزرسانی شود.

مثلاً:

زمان صفر:

CPU دستور اجرا می‌کند

زمان 10ns:

GPIO تغییر می‌کند

زمان 20ns:

LED مدل جدید را دریافت می‌کند

زمان 30ns:

نمایشگر به‌روزرسانی می‌شود

Event Queue چگونه کار می‌کند؟

برای مدیریت اتفاقات، بسیاری از شبیه‌سازها از Event Queue استفاده می‌کنند.

ساختار:

Event Queue

1:

GPIO Change

Time = 10ns

2:

Timer Interrupt

Time = 20ns

3:

UART Receive

Time = 30ns

موتور شبیه‌سازی همیشه نزدیک‌ترین رویداد را اجرا می‌کند.

ارتباط بین قطعات چگونه مدیریت می‌شود؟

در یک مدار واقعی، سیم‌ها ارتباط الکتریکی ایجاد می‌کنند.

در شبیه‌ساز، سیم‌ها در واقع Node هستند.

مثلاً:

ESP32 GPIO2

       |

      Wire

       |

LED Input

در داخل نرم‌افزار:

Node 105

Connected:

ESP32.Pin2

LED.Pin1

هر تغییری در Node به تمام قطعات متصل منتقل می‌شود.

چگونه یک میکروکنترلر جدید به شبیه‌ساز اضافه می‌شود؟

فرض کنید می‌خواهیم یک میکروکنترلر جدید به Proteus اضافه کنیم.

مراحل:

مرحله اول: تعریف معماری CPU

باید مشخص شود:

  • نوع پردازنده
  • مجموعه دستورها
  • تعداد رجیسترها
  • نحوه اجرای دستورها

مثلاً:

CPU:

32-bit RISC

Registers:

R0-R15

Clock:

120MHz

مرحله دوم: طراحی حافظه

مشخص می‌کنیم:

Flash:

4MB

RAM:

512KB

مرحله سوم: تعریف Peripheralها

مانند:

  • GPIO
  • UART
  • SPI
  • I2C
  • ADC
  • PWM

مرحله چهارم: اتصال پایه‌ها

مثلاً:

Pin 1:

VCC

Pin 2:

GPIO0

Pin 3:

TX

Pin 4:

RX

ساخت یک شبیه‌ساز ساده از صفر

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

                GUI

                 |

          Circuit Database

                 |

          Simulation Core

                 |

        Component Objects

                 |

           Physics Engine

هر قطعه یک Object خواهد بود:

مثلاً:

class Resistor

{

Voltage input;

Resistance value;

calculateCurrent();

};

یا:

class LED

{

bool state;

update();

};

زبان‌های برنامه‌نویسی مورد استفاده در شبیه‌سازها

نرم‌افزارهای حرفه‌ای معمولاً با زبان‌هایی ساخته می‌شوند که سرعت اجرای بالا داشته باشند.

رایج‌ترین آن‌ها:

C++

به دلیل:

  • سرعت زیاد
  • کنترل حافظه
  • مناسب برای موتور شبیه‌سازی

Python

معمولاً برای:

  • ابزارهای کمکی
  • تحلیل داده
  • تست مدل‌ها

SystemC

برای مدل‌سازی سیستم‌های سخت‌افزاری پیچیده.

Verilog و VHDL

برای توصیف سخت‌افزار دیجیتال.

این زبان‌ها در طراحی FPGA و شبیه‌سازی تراشه‌ها بسیار مهم هستند.

نقش SPICE در ساخت شبیه‌سازها

اگر هدف شبیه‌سازی دقیق مدارهای آنالوگ باشد، معمولاً از موتورهای SPICE استفاده می‌شود.

SPICE وظیفه دارد:

  • معادلات مدار را تشکیل دهد
  • جریان‌ها را محاسبه کند
  • ولتاژ نقاط مختلف را تعیین کند

برای مثال:

یک مدار شامل:

R + C + Voltage Source

به مجموعه‌ای از معادلات تبدیل می‌شود.

سپس حل‌کننده ریاضی آن‌ها را حل می‌کند.

چرا ساخت شبیه‌ساز مانند Proteus سخت است؟

زیرا باید چند دنیای مختلف را ترکیب کند:

دنیای الکترونیک

  • ولتاژ
  • جریان
  • قطعات آنالوگ

دنیای دیجیتال

  • بیت
  • کلاک
  • منطق

دنیای کامپیوتر

  • CPU
  • حافظه
  • دستور ماشین

دنیای گرافیک

  • نمایش مدار
  • انیمیشن
  • تعامل کاربر

به همین دلیل یک شبیه‌ساز حرفه‌ای نتیجه همکاری چندین حوزه مهندسی است.

آینده شبیه‌سازی مدارها

در سال‌های اخیر، شبیه‌سازی مدارها به سمت هوشمندتر شدن حرکت کرده است.

فناوری‌هایی مانند:

  • هوش مصنوعی
  • مدل‌سازی خودکار قطعات
  • Digital Twin
  • شبیه‌سازی ابری

باعث شده‌اند طراحی مدار سریع‌تر شود.

در آینده ممکن است مهندس فقط توضیح دهد:

«یک کنترلر موتور با ESP32 و سنسور دما طراحی کن»

و سیستم به صورت خودکار:

  • مدار بسازد
  • قطعات انتخاب کند
  • برنامه بنویسد
  • شبیه‌سازی انجام دهد

جمع‌بندی نهایی مقاله

شبیه‌سازهای مدار مانند Proteus و Wokwi در واقع ترکیبی از چند فناوری بزرگ هستند:

  • مدل‌سازی ریاضی قطعات
  • حل معادلات الکتریکی
  • امولیشن پردازنده
  • مدیریت زمان مجازی
  • موتور رویداد
  • کتابخانه قطعات
  • موتور گرافیکی

هر قطعه‌ای که در محیط شبیه‌سازی مشاهده می‌کنیم، دارای یک هویت نرم‌افزاری است:

  • پایه‌ها تعریف شده‌اند.
  • رفتار آن مشخص شده است.
  • قوانین عملکرد آن نوشته شده است.
  • ارتباط آن با سایر قطعات مدیریت می‌شود.

برای ساخت یک قطعه جدید، کافی نیست فقط شکل آن را طراحی کنیم؛ باید بدانیم قطعه در برابر ورودی‌ها چگونه واکنش نشان می‌دهد و این رفتار را به زبان قابل فهم برای موتور شبیه‌سازی تبدیل کنیم.

در نهایت، یک شبیه‌ساز حرفه‌ای مانند Proteus در حقیقت یک آزمایشگاه الکترونیکی مجازی است که در آن قوانین فیزیک، معماری کامپیوتر و برنامه‌نویسی سیستم‌های نهفته در یک محیط واحد ترکیب شده‌اند.

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

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

15 − یک =