رسم تخطيطي لمولد dds على متحكم atmel. مولد DDS الوظيفي على PLC اختبار أوضاع تشغيل المولد بعد التجميع

رسم تخطيطي لمولد dds على متحكم atmel.  مولد DDS الوظيفي على PLC  اختبار أوضاع تشغيل المولد بعد التجميع
رسم تخطيطي لمولد dds على متحكم atmel. مولد DDS الوظيفي على PLC اختبار أوضاع تشغيل المولد بعد التجميع

الحد الأقصى للتردد - 65534 هرتز (وخرج يصل إلى 8 ميجا هرتز مع موجة مربعة). وبعد ذلك اعتقدت أن المولد يعد مهمة ممتازة حيث يمكن لـ FPGA أن تظهر نفسها في أفضل حالاتها. من الناحية الرياضية، قررت تكرار المشروع على FPGA، مع الالتزام بالمواعيد النهائية في غضون أسبوعين، والحصول على المعلمات غير المحددة بدقة، ولكن الحد الأقصى الممكن. يمكنك معرفة ما خرج من هذا تحت القطع.

يوم الصفر

قبل حلول عطلة نهاية الأسبوع، كان لدي بعض الوقت للتفكير في التنفيذ. لتبسيط مهمتي، قررت أن أجعل المولد ليس كجهاز منفصل به أزرار وشاشة LCD، ولكن كجهاز يتصل بالكمبيوتر عبر USB. لهذا لدي لوحة USB2RS232. لا تتطلب اللوحة برامج تشغيل (CDC)، لذلك أعتقد أنها ستعمل تحت نظام Linux (هذا أمر مهم بالنسبة للبعض). كما أنني لا أخفي أنني عملت بالفعل على استقبال الرسائل عبر RS232. سأأخذ وحدات جاهزة للعمل مع RS232 من موقع opencores.com.

لتوليد إشارة موجة جيبية سوف تحتاج إلى DAC. اخترت نوع DAC، كما هو الحال في المشروع الأصلي - R2R 8 بت. سيسمح لك بالعمل بترددات عالية بترتيب ميغاهيرتز. أنا مقتنع بأن FPGA يجب أن تتعامل مع هذا

كنت أفكر في كيفية كتابة برنامج لنقل البيانات عبر منفذ COM. من ناحية، يمكنك الكتابة في Delphi7، لديك بالفعل خبرة في كتابة مثل هذا البرنامج، وإلى جانب ذلك، لن يكون حجم الملف القابل للتنفيذ كبيرا. لقد حاولت أيضًا رسم شيء ما للعمل مع Serial في شكل برنامج Java النصي في صفحة html، لكنه كان يعمل بشكل أو بآخر فقط من خلال واجهة برمجة تطبيقات Chrome التسلسلية، ولكن لهذا تحتاج إلى تثبيت مكون إضافي... بشكل عام ، فهو أيضًا غير وارد. لقد جربت PyQt5 كابتكار لنفسي، ولكن عند توزيع مثل هذا المشروع، تحتاج إلى سحب مجموعة من المكتبات. بعد أن حاولت تجميع مشروع PyQt في ملف exe، اتضح أن حجمه يزيد عن 10 ميجابايت. أي أنه لن يكون أفضل من تطبيق مكتوب بلغة C++\Qt5. ومن الجدير بالذكر أيضًا أنه ليس لدي خبرة في التطوير في لغة بايثون، ولكن لدي خبرة في Qt5. ولذلك، وقع الاختيار على Qt5. منذ الإصدار الخامس ظهرت وحدة للعمل مع المسلسل وقد عملت معها بالفعل. ويمكن نقل تطبيق Qt5 إلى Linux وMac (هذا أمر مهم بالنسبة للبعض)، ومن الإصدار 5.2، يمكن أيضًا نقل التطبيقات الموجودة على QWidgets إلى هاتف ذكي!

ما هو المطلوب؟ وبطبيعة الحال، فإن المجلس لديه FPGA. لدي اثنان منهم (Cyclone iv EP4CE10E22C8N لـ 10 آلاف خلية، وCyclone ii EP2C5 لـ 5 آلاف خلية). سأختار الذي على اليسار فقط بسبب الموصل الأكثر ملاءمة. من حيث الحجم، لا يُقصد أن يكون المشروع كبيرًا، لذا فهو يتناسب مع أي من الاثنين. لا يختلفون في السرعة. تحتوي كلتا اللوحتين على مذبذبات بتردد 50 ميجا هرتز، ويوجد داخل FPGA PLL، والذي يمكنني من خلاله زيادة التردد إلى 200 ميجا هرتز المخطط له.

اليوم الأول

نظرًا لحقيقة أنني قمت بالفعل بتصنيع وحدة DDS في مشروع المركب الخاص بي، فقد تناولت على الفور مكواة اللحام وبدأت في لحام DAC بالمقاومات. أخذت لوحة النموذج الأولي. تم التثبيت باستخدام التغليف. كان التغيير الوحيد الذي أثر على التكنولوجيا هو أنني تخليت عن حمض F38N لتغليف المدرجات لصالح جل تدفق مؤشر TT. جوهر هذه التقنية بسيط: أقوم بلحام الرفوف في لوحة الدوائر المطبوعة، وألحم المقاومات عليها من جانب لوحة الدوائر المطبوعة. أقوم بإجراء الاتصالات المفقودة عن طريق التواء. كما أن الرفوف ملائمة لأنني أستطيع إدخالها مباشرة في لوحة FPGA.

لسوء الحظ، لم تكن هناك مقاومات 1 و 2 كيلو أوم متوفرة في المنزل. لم يكن هناك وقت للذهاب إلى المتجر. اضطررت إلى التخلي عن إحدى قواعدي وإزالة المقاومات من اللوحة القديمة غير الضرورية. تم استخدام مقاومات 15K و 30K هناك. والنتيجة هي هذا فرانكشتاين:


بعد إنشاء المشروع، تحتاج إلى تعيين الجهاز المستهدف: تعيينات القائمة -> الجهاز


في المشروع، قمت بتشفير وحدة DDS الرئيسية التي لا يمكن التحكم فيها إلى تردد ثابت.

وحدة مولد 1000 هرتز

وحدة إشارة المولدات (clk50M، signal_out)؛ سلك الإدخال clk50M؛ إشارة إخراج الأسلاك؛ سلك clk200M؛ تراكم osc osc_200M ريج؛ تعيين إشارة_خارج = مركم؛ // حاول توليد 1000 هرتز // 50,000,000 هرتز - تردد ساعة المولد الخارجي //2^32 = 4,294,967,296 - عمق بت DDS - 32 بت // اقسم 1000 هرتز / 50,000,000 هرتز / 2 * 4294967296 => 42949, 67296 دائمًا @ (posege clk50M) يبدأ المركم<= accumulator + 32"d42949; end endmodule


بعد ذلك، قمت بالنقر فوق "بدء التجميع" حتى تسأل بيئة التطوير عن خطوط الإدخال/الإخراج الموجودة في الوحدة الرئيسية للمشروع وما هي أرقام التعريف الشخصية الفعلية التي يمكنك الاتصال بها بأي شخص تقريبًا قم بتعيين الخطوط التي تظهر لأرقام التعريف الشخصية الحقيقية لشريحة FPGA:

تعيينات عنصر القائمة -> مخطط الدبوس

يرجى تجاهل خطوط HS_OUT وkey0 وkey1 في الوقت الحالي، وستظهر في المشروع لاحقًا، لكن لم يكن لدي الوقت لالتقاط لقطة شاشة في البداية.

من حيث المبدأ، يكفي "تسجيل" رقم PIN_nn فقط في عمود "الموقع"، ويمكن ترك المعلمات المتبقية (معيار الإدخال/الإخراج، ومعدل التمدد الحالي ومعدل التكاثر) افتراضيًا، أو يمكنك تحديد نفس المعلمات التي يقدمها الافتراضي (الافتراضي) حتى لا يكون هناك تحذير "ov.

كيف يمكنني معرفة رقم التعريف الشخصي (PIN) الذي يتوافق مع رقم الموصل الموجود على اللوحة؟

يتم وضع علامة على أرقام دبوس الموصل على اللوحة


ويتم وصف دبابيس FPGA التي تتصل بها جهات اتصال الموصل في الوثائق المرفقة مع لوحة FPGA.




بعد تعيين الدبابيس، أقوم بتجميع المشروع مرة أخرى ووميضه باستخدام مبرمج USB. إذا لم يكن لديك برامج تشغيل مثبتة لمبرمج USB Byte Blaster، فأخبر Windows بأنها موجودة في المجلد الذي قمت بتثبيت Quartus عليه. ثم سوف تجدها بنفسها.

يجب أن يكون المبرمج متصلاً بموصل JTAG. وعنصر القائمة الخاص بالبرمجة هو "الأدوات -> المبرمج" (أو انقر فوق الرمز الموجود على شريط الأدوات). زر "ابدأ" و"النجاح" المبهج والبرامج الثابتة موجودة بالفعل داخل FPGA وتعمل بالفعل. فقط لا تقم بإيقاف تشغيل FPGA، وإلا فسوف ينسى كل شيء.

الأدوات -> المبرمج


يتم توصيل DAC بموصل لوحة FPGA. أقوم بتوصيل راسم الذبذبات S1-112A بمخرج DAC. يجب أن تكون النتيجة "منشارًا" لأن الجزء عالي الترتيب من كلمة DDS الخاصة بمجمع الطور يتم إخراجه إلى إخراج 8 بت. ويزداد دائمًا حتى يفيض.

حوالي 1.5 ساعة وعلى تردد 1000 هرتز أرى مخطط الذبذبات التالي:

أود أن أشير إلى أن "المنشار" به كسر بسيط في المنتصف. ويرجع ذلك إلى حقيقة أن المقاومات لها مجموعة من القيم.

هناك نقطة أخرى مهمة تحتاج إلى توضيح وهي الحد الأقصى للتردد الممكن الذي سيعمل به مولد DDS. مع معلمات TimeQuest التي تم تكوينها بشكل صحيح، بعد التجميع في "تقرير التجميع"، يمكنك أن ترى أن سرعة الدائرة أعلى من 200 ميجاهرتز بهامش. هذا يعني أنني سأضرب تردد المولد البالغ 50 ميجا هرتز في 4 باستخدام PLL وسأزيد قيمة مجمع الطور DDS بتردد 200 ميجا هرتز. نطاق التردد النهائي الذي يمكن الحصول عليه في ظل ظروفنا هو 0 - 100 ميجا هرتز. دقة ضبط التردد:

200,000,000 هرتز (clk) / 2^32 (DDS) = 0.047 هرتز
أي أنه أفضل من ~0.05 هرتز. أنا أعتبر أن دقة جزء من الهرتز كافية لمولد به هذا النطاق من ترددات التشغيل (0...100 ميجاهرتز). إذا احتاج شخص ما إلى زيادة الدقة، فللقيام بذلك، يمكنك زيادة عمق بت DDS (تذكر التحقق من TimeQuest Timing Analyzer أن سرعة تشغيل الدائرة المنطقية كانت ضمن CLK = 200 ميجاهرتز، لأن هذا عبارة عن أداة إضافية)، أو ببساطة قم بتقليل تردد الساعة، إذا لم يكن هناك حاجة إلى نطاق ترددي واسع.

محلل توقيت TimeQuest


وبعد أن رأيت «رأيت» على الشاشة، أجبرتني الأمور العائلية على الذهاب إلى الريف (كان يوم إجازتي). هناك قمت بالقص والطهي والشواء ولم يكن لدي أي فكرة عن المفاجأة التي كانت تنتظرني في المساء. مع حلول الليل، قبل الذهاب إلى السرير، قررت أن أنظر إلى شكل الإشارة بحثًا عن الترددات الأخرى.

للتردد 100 كيلو هرتز

للتردد 250 كيلو هرتز

للتردد 500 كيلو هرتز

لتردد 1 ميغاهيرتز

ثاني يوم

نظرًا لحقيقة أنه كان من المثير للاهتمام كيفية عمل DAC على مقاومات 100 و 200 أوم، فقد تناولت على الفور مكواة اللحام. هذه المرة تبين أن DAC أكثر دقة، واستغرق التثبيت وقتًا أقل.

نضع DAC على لوحة FPGA ونقوم بتوصيله بجهاز راسم الذبذبات

التحقق من 1 ميجا هرتز - VO! إنها مسألة مختلفة تمامًا!

رأى 10 ميغاهيرتز

رأى 25 ميغاهيرتز


لا يزال شكل المنشار 10 ميجا هرتز مشابهًا للمنشار الصحيح. ولكن عند 25 ميجا هرتز لم تعد "جميلة" على الإطلاق. ومع ذلك، فإن C1-112a لديه عرض نطاق ترددي يبلغ 10 ميجاهرتز، لذلك في هذه الحالة قد يكون السبب موجودًا بالفعل في راسم الذبذبات.

من حيث المبدأ، يمكن اعتبار هذه المشكلة مع لجنة المساعدة الإنمائية مغلقة. الآن دعونا نأخذ الأشكال الموجية للإخراج عالي السرعة. للقيام بذلك، سوف نقوم بإخراج البت الأكثر أهمية إلى رمز PIN منفصل لـ FPGA. سوف نأخذ البيانات الخاصة بهذا الخط من الجزء الأكثر أهمية في مجمع DDS.

تعيين hs_out = المركم؛

موجة مربعة 1 ميجا هرتز

موجة مربعة 5 ميجا هرتز

موجة مربعة 25 ميجا هرتز

الموجة المربعة 50 ميجا هرتز تكاد تكون غير مرئية الآن


لكنني أعتقد أن مخرجات FPGA يجب أن تكون محملة بالمقاومة. ربما كانت الجبهات أكثر حدة.

يتم عمل الجيب حسب الجدول. حجم الجدول هو 256 قيمة 8 بت. كان من الممكن أن تأخذ المزيد، ولكن كان لدي بالفعل ملف MIF جاهز. باستخدام المعالج، نقوم بإنشاء عنصر ROM مع بيانات الجدول الجيبية من ملف mif.

إنشاء ROM - الأدوات -> مدير Mega Wizard Plugin


حدد منفذًا واحدًا ROM وقم بتسمية الوحدة

ونحن نتفق

ونحن نتفق هنا أيضا

باستخدام التصفح، نجد ملف mif الخاص بنا مع جدول الجيب

نحن لا نغير أي شيء هنا أيضًا.

قم بإلغاء تحديد الوحدة sine_rom_bb.v - ليست هناك حاجة إليها. الانتهاء المقبل. سيطلب Quartus إضافة وحدة نمطية إلى المشروع - ونحن نوافق على ذلك. بعد ذلك، يمكن استخدام الوحدة تمامًا مثل أي وحدة أخرى في Verilog.


سيتم استخدام البتات الثمانية العليا من كلمة مجمع DDS كعنوان ROM، وسيكون إخراج البيانات هو قيمة الجيب.

شفرة

// سلك مدمج جيبي sine_out؛ sine_rom sine1(.clock(clk200M)، .address(المركم)، .q(sine_out));


يبدو مخطط ذبذبات الموجة الجيبية عند ترددات مختلفة... نفس الشيء.

إذا رغبت في ذلك، يمكنك النظر في مشاكل DAC المرتبطة بانتشار المقاوم:

حسنًا، هذه نهاية عطلة نهاية الأسبوع. لكن برنامج التحكم من جهاز الكمبيوتر لم يتم كتابته بعد. أنا مجبر على الاعتراف بحقيقة أنني لم ألتزم بالمواعيد النهائية المقررة.

اليوم الثالث

هناك القليل من الوقت، لذلك نكتب البرنامج على عجل (في أفضل التقاليد). في بعض الأماكن، لتقليل عدد الحروف وسهولة إدخال المعلومات من لوحة المفاتيح، يتم استخدام مرشح الحدث حسب اسم عنصر واجهة المستخدم. يرجى فهم وتسامح.

واجهه المستخدم

روابط مع نظائرها

ليست قائمة كاملة
مولد DDS وظيفي. تم إنشاؤها على أساس AVR. الترددات 0...65534 هرتز.
مراجعة مولد DDS GK101. تم إنشاؤها باستخدام Altera MAX240 FPGA. ترددات تصل إلى 10 ميجا هرتز.
مولد متعدد الوظائف على PIC16F870. نطاق التردد: 11 هرتز - 60 كيلو هرتز.
مولدات إضافة العلامات

الحد الأقصى للتردد - 65534 هرتز (وخرج يصل إلى 8 ميجا هرتز مع موجة مربعة). وبعد ذلك اعتقدت أن المولد يعد مهمة ممتازة حيث يمكن لـ FPGA أن تظهر نفسها في أفضل حالاتها. من الناحية الرياضية، قررت تكرار المشروع على FPGA، مع الالتزام بالمواعيد النهائية في غضون أسبوعين، والحصول على المعلمات غير المحددة بدقة، ولكن الحد الأقصى الممكن. يمكنك معرفة ما خرج من هذا تحت القطع.

يوم الصفر

قبل حلول عطلة نهاية الأسبوع، كان لدي بعض الوقت للتفكير في التنفيذ. لتبسيط مهمتي، قررت أن أجعل المولد ليس كجهاز منفصل به أزرار وشاشة LCD، ولكن كجهاز يتصل بالكمبيوتر عبر USB. لهذا لدي لوحة USB2RS232. لا تتطلب اللوحة برامج تشغيل (CDC)، لذلك أعتقد أنها ستعمل تحت نظام Linux (هذا أمر مهم بالنسبة للبعض). كما أنني لا أخفي أنني عملت بالفعل على استقبال الرسائل عبر RS232. سأأخذ وحدات جاهزة للعمل مع RS232 من موقع opencores.com.

لتوليد إشارة موجة جيبية سوف تحتاج إلى DAC. اخترت نوع DAC، كما هو الحال في المشروع الأصلي - R2R 8 بت. سيسمح لك بالعمل بترددات عالية بترتيب ميغاهيرتز. أنا مقتنع بأن FPGA يجب أن تتعامل مع هذا

كنت أفكر في كيفية كتابة برنامج لنقل البيانات عبر منفذ COM. من ناحية، يمكنك الكتابة في Delphi7، لديك بالفعل خبرة في كتابة مثل هذا البرنامج، وإلى جانب ذلك، لن يكون حجم الملف القابل للتنفيذ كبيرا. لقد حاولت أيضًا رسم شيء ما للعمل مع Serial في شكل برنامج Java النصي في صفحة html، لكنه كان يعمل بشكل أو بآخر فقط من خلال واجهة برمجة تطبيقات Chrome التسلسلية، ولكن لهذا تحتاج إلى تثبيت مكون إضافي... بشكل عام ، فهو أيضًا غير وارد. لقد جربت PyQt5 كابتكار لنفسي، ولكن عند توزيع مثل هذا المشروع، تحتاج إلى سحب مجموعة من المكتبات. بعد أن حاولت تجميع مشروع PyQt في ملف exe، اتضح أن حجمه يزيد عن 10 ميجابايت. أي أنه لن يكون أفضل من تطبيق مكتوب بلغة C++\Qt5. ومن الجدير بالذكر أيضًا أنه ليس لدي خبرة في التطوير في لغة بايثون، ولكن لدي خبرة في Qt5. ولذلك، وقع الاختيار على Qt5. منذ الإصدار الخامس ظهرت وحدة للعمل مع المسلسل وقد عملت معها بالفعل. ويمكن نقل تطبيق Qt5 إلى Linux وMac (هذا أمر مهم بالنسبة للبعض)، ومن الإصدار 5.2، يمكن أيضًا نقل التطبيقات الموجودة على QWidgets إلى هاتف ذكي!

ما هو المطلوب؟ وبطبيعة الحال، فإن المجلس لديه FPGA. لدي اثنان منهم (Cyclone iv EP4CE10E22C8N لـ 10 آلاف خلية، وCyclone ii EP2C5 لـ 5 آلاف خلية). سأختار الذي على اليسار فقط بسبب الموصل الأكثر ملاءمة. من حيث الحجم، لا يُقصد أن يكون المشروع كبيرًا، لذا فهو يتناسب مع أي من الاثنين. لا يختلفون في السرعة. تحتوي كلتا اللوحتين على مذبذبات بتردد 50 ميجا هرتز، ويوجد داخل FPGA PLL، والذي يمكنني من خلاله زيادة التردد إلى 200 ميجا هرتز المخطط له.

اليوم الأول

نظرًا لحقيقة أنني قمت بالفعل بتصنيع وحدة DDS في مشروع المركب الخاص بي، فقد تناولت على الفور مكواة اللحام وبدأت في لحام DAC بالمقاومات. أخذت لوحة النموذج الأولي. تم التثبيت باستخدام . كان التغيير الوحيد الذي أثر على التكنولوجيا هو أنني تخليت عن حمض F38N لتغليف المدرجات لصالح جل تدفق مؤشر TT. جوهر هذه التقنية بسيط: أقوم بلحام الرفوف في لوحة الدوائر المطبوعة، ولحام المقاومات عليها من جانب لوحة الدوائر المطبوعة. أقوم بإجراء الاتصالات المفقودة عن طريق التواء. كما أن الرفوف ملائمة لأنني أستطيع إدخالها مباشرة في لوحة FPGA.

لسوء الحظ، لم تكن هناك مقاومات 1 و 2 كيلو أوم متوفرة في المنزل. لم يكن هناك وقت للذهاب إلى المتجر. اضطررت إلى التخلي عن إحدى قواعدي وإزالة المقاومات من اللوحة القديمة غير الضرورية. تم استخدام مقاومات 15K و 30K هناك. والنتيجة هي هذا فرانكشتاين:


بعد إنشاء المشروع، تحتاج إلى تعيين الجهاز المستهدف: تعيينات القائمة -> الجهاز


في المشروع، قمت بتشفير وحدة DDS الرئيسية التي لا يمكن التحكم فيها إلى تردد ثابت.

وحدة مولد 1000 هرتز

وحدة إشارة المولدات (clk50M، signal_out)؛ سلك الإدخال clk50M؛ إشارة إخراج الأسلاك؛ سلك clk200M؛ تراكم osc osc_200M ريج؛ تعيين إشارة_خارج = مركم؛ // حاول توليد 1000 هرتز // 50,000,000 هرتز - تردد ساعة المولد الخارجي //2^32 = 4,294,967,296 - عمق بت DDS - 32 بت // اقسم 1000 هرتز / 50,000,000 هرتز / 2 * 4294967296 => 42949, 67296 دائمًا @ (posege clk50M) يبدأ المركم<= accumulator + 32"d42949; end endmodule


بعد ذلك، قمت بالنقر فوق "بدء التجميع" حتى تسأل بيئة التطوير عن خطوط الإدخال/الإخراج الموجودة في الوحدة الرئيسية للمشروع وما هي أرقام التعريف الشخصية الفعلية التي يمكنك الاتصال بها بأي شخص تقريبًا قم بتعيين الخطوط التي تظهر لأرقام التعريف الشخصية الحقيقية لشريحة FPGA:

تعيينات عنصر القائمة -> مخطط الدبوس

يرجى تجاهل خطوط HS_OUT وkey0 وkey1 في الوقت الحالي، وستظهر في المشروع لاحقًا، لكن لم يكن لدي الوقت لالتقاط لقطة شاشة في البداية.

من حيث المبدأ، يكفي "تسجيل" رقم PIN_nn فقط في عمود "الموقع"، ويمكن ترك المعلمات المتبقية (معيار الإدخال/الإخراج، ومعدل التمدد الحالي ومعدل التكاثر) افتراضيًا، أو يمكنك تحديد نفس المعلمات التي يقدمها الافتراضي (الافتراضي) حتى لا يكون هناك تحذير "ov.

كيف يمكنني معرفة رقم التعريف الشخصي (PIN) الذي يتوافق مع رقم الموصل الموجود على اللوحة؟

يتم وضع علامة على أرقام دبوس الموصل على اللوحة


ويتم وصف دبابيس FPGA التي تتصل بها جهات اتصال الموصل في الوثائق المرفقة مع لوحة FPGA.




بعد تعيين الدبابيس، أقوم بتجميع المشروع مرة أخرى ووميضه باستخدام مبرمج USB. إذا لم يكن لديك برامج تشغيل مثبتة لمبرمج USB Byte Blaster، فأخبر Windows بأنها موجودة في المجلد الذي قمت بتثبيت Quartus عليه. ثم سوف تجدها بنفسها.

يجب أن يكون المبرمج متصلاً بموصل JTAG. وعنصر القائمة الخاص بالبرمجة هو "الأدوات -> المبرمج" (أو انقر فوق الرمز الموجود على شريط الأدوات). زر "ابدأ" و"النجاح" المبهج والبرامج الثابتة موجودة بالفعل داخل FPGA وتعمل بالفعل. فقط لا تقم بإيقاف تشغيل FPGA، وإلا فسوف ينسى كل شيء.

الأدوات -> المبرمج


يتم توصيل DAC بموصل لوحة FPGA. أقوم بتوصيل راسم الذبذبات S1-112A بمخرج DAC. يجب أن تكون النتيجة "منشارًا" لأن الجزء عالي الترتيب من كلمة DDS الخاصة بمجمع الطور يتم إخراجه إلى إخراج 8 بت. ويزداد دائمًا حتى يفيض.

حوالي 1.5 ساعة وعلى تردد 1000 هرتز أرى مخطط الذبذبات التالي:

أود أن أشير إلى أن "المنشار" به كسر بسيط في المنتصف. ويرجع ذلك إلى حقيقة أن المقاومات لها مجموعة من القيم.

هناك نقطة أخرى مهمة تحتاج إلى توضيح وهي الحد الأقصى للتردد الممكن الذي سيعمل به مولد DDS. مع معلمات TimeQuest التي تم تكوينها بشكل صحيح، بعد التجميع في "تقرير التجميع"، يمكنك أن ترى أن سرعة الدائرة أعلى من 200 ميجاهرتز بهامش. هذا يعني أنني سأضرب تردد المولد البالغ 50 ميجا هرتز في 4 باستخدام PLL وسأزيد قيمة مجمع الطور DDS بتردد 200 ميجا هرتز. نطاق التردد النهائي الذي يمكن الحصول عليه في ظل ظروفنا هو 0 - 100 ميجا هرتز. دقة ضبط التردد:

200,000,000 هرتز (clk) / 2^32 (DDS) = 0.047 هرتز
أي أنه أفضل من ~0.05 هرتز. أنا أعتبر أن دقة جزء من الهرتز كافية لمولد به هذا النطاق من ترددات التشغيل (0...100 ميجاهرتز). إذا احتاج شخص ما إلى زيادة الدقة، فللقيام بذلك، يمكنك زيادة عمق بت DDS (تذكر التحقق من TimeQuest Timing Analyzer أن سرعة تشغيل الدائرة المنطقية كانت ضمن CLK = 200 ميجاهرتز، لأن هذا عبارة عن أداة إضافية)، أو ببساطة قم بتقليل تردد الساعة، إذا لم يكن هناك حاجة إلى نطاق ترددي واسع.

محلل توقيت TimeQuest


وبعد أن رأيت «رأيت» على الشاشة، أجبرتني الأمور العائلية على الذهاب إلى الريف (كان يوم إجازتي). هناك قمت بالقص والطهي والشواء ولم يكن لدي أي فكرة عن المفاجأة التي كانت تنتظرني في المساء. مع حلول الليل، قبل الذهاب إلى السرير، قررت أن أنظر إلى شكل الإشارة بحثًا عن الترددات الأخرى.

للتردد 100 كيلو هرتز

للتردد 250 كيلو هرتز

للتردد 500 كيلو هرتز

لتردد 1 ميغاهيرتز

ثاني يوم

نظرًا لحقيقة أنه كان من المثير للاهتمام كيفية عمل DAC على مقاومات 100 و 200 أوم، فقد تناولت على الفور مكواة اللحام. هذه المرة تبين أن DAC أكثر دقة، واستغرق التثبيت وقتًا أقل.

نضع DAC على لوحة FPGA ونقوم بتوصيله بجهاز راسم الذبذبات

التحقق من 1 ميجا هرتز - VO! إنها مسألة مختلفة تمامًا!

رأى 10 ميغاهيرتز

رأى 25 ميغاهيرتز


لا يزال شكل المنشار 10 ميجا هرتز مشابهًا للمنشار الصحيح. ولكن عند 25 ميجا هرتز لم تعد "جميلة" على الإطلاق. ومع ذلك، فإن C1-112a لديه عرض نطاق ترددي يبلغ 10 ميجاهرتز، لذلك في هذه الحالة قد يكون السبب موجودًا بالفعل في راسم الذبذبات.

من حيث المبدأ، يمكن اعتبار هذه المشكلة مع لجنة المساعدة الإنمائية مغلقة. الآن دعونا نأخذ الأشكال الموجية للإخراج عالي السرعة. للقيام بذلك، سوف نقوم بإخراج البت الأكثر أهمية إلى رمز PIN منفصل لـ FPGA. سوف نأخذ البيانات الخاصة بهذا الخط من الجزء الأكثر أهمية في مجمع DDS.

تعيين hs_out = المركم؛

موجة مربعة 1 ميجا هرتز

موجة مربعة 5 ميجا هرتز

موجة مربعة 25 ميجا هرتز

الموجة المربعة 50 ميجا هرتز تكاد تكون غير مرئية الآن


لكنني أعتقد أن مخرجات FPGA يجب أن تكون محملة بالمقاومة. ربما كانت الجبهات أكثر حدة.

يتم عمل الجيب حسب الجدول. حجم الجدول هو 256 قيمة 8 بت. كان من الممكن أن تأخذ المزيد، ولكن كان لدي بالفعل ملف MIF جاهز. باستخدام المعالج، نقوم بإنشاء عنصر ROM مع بيانات الجدول الجيبية من ملف mif.

إنشاء ROM - الأدوات -> مدير Mega Wizard Plugin


حدد منفذًا واحدًا ROM وقم بتسمية الوحدة

ونحن نتفق

ونحن نتفق هنا أيضا

باستخدام التصفح، نجد ملف mif الخاص بنا مع جدول الجيب

نحن لا نغير أي شيء هنا أيضًا.

قم بإلغاء تحديد الوحدة sine_rom_bb.v - ليست هناك حاجة إليها. الانتهاء المقبل. سيطلب Quartus إضافة وحدة نمطية إلى المشروع - ونحن نوافق على ذلك. بعد ذلك، يمكن استخدام الوحدة تمامًا مثل أي وحدة أخرى في Verilog.


سيتم استخدام البتات الثمانية العليا من كلمة مجمع DDS كعنوان ROM، وسيكون إخراج البيانات هو قيمة الجيب.

شفرة

// سلك مدمج جيبي sine_out؛ sine_rom sine1(.clock(clk200M)، .address(المركم)، .q(sine_out));


يبدو مخطط ذبذبات الموجة الجيبية عند ترددات مختلفة... نفس الشيء.

إذا رغبت في ذلك، يمكنك النظر في مشاكل DAC المرتبطة بانتشار المقاوم:

حسنًا، هذه نهاية عطلة نهاية الأسبوع. لكن برنامج التحكم من جهاز الكمبيوتر لم يتم كتابته بعد. أنا مجبر على الاعتراف بحقيقة أنني لم ألتزم بالمواعيد النهائية المقررة.

اليوم الثالث

هناك القليل من الوقت، لذلك نكتب البرنامج على عجل (في أفضل التقاليد). في بعض الأماكن، لتقليل عدد الحروف وسهولة إدخال المعلومات من لوحة المفاتيح، يتم استخدام مرشح الحدث حسب اسم عنصر واجهة المستخدم. يرجى فهم وتسامح.

واجهه المستخدم

روابط مع نظائرها

ليست قائمة كاملة
مولد DDS وظيفي. تم إنشاؤها على أساس AVR. الترددات 0...65534 هرتز.
مراجعة مولد DDS GK101. تم إنشاؤها باستخدام Altera MAX240 FPGA. ترددات تصل إلى 10 ميجا هرتز.
مولد متعدد الوظائف على PIC16F870. نطاق التردد: 11 هرتز - 60 كيلو هرتز.
مولدات كهرباء
  • كيو تي 5
  • اضف اشارة

    يجب أن تحتوي أي ورشة عمل منزلية على المجموعة اللازمة من الأدوات وأدوات القياس. بالنسبة للأشخاص المشاركين في راديو الهواة كهواية، غالبًا ما تكون التكاليف المالية المرتفعة لشراء المعدات اللازمة غير مقبولة.

    لذا، في حالتي، كانت قائمة هذه المعدات بعيدة عن الاكتمال وناقصة مولد الإشارة.

    مولد الإشارةاتضح أنه من السهل أن تصنع نفسك من عناصر الراديو المتاحة وغير مكلفة في النهاية. لذلك، بعد أن بحثت في الإنترنت، وجدت عددًا كبيرًا من دوائر المولدات المختلفة، بما في ذلك النماذج الأكثر تقدمًا المزودة بـ DAC، ولكن تصنيعها باهظ الثمن بالفعل. توقفت عند النقطة البسيطة في البداية. مولد إشارة DDSعلى متحكم ATMEGA8 من Atmel. هذا، لم أقم بتحسين أو تغيير أي شيء - لقد تركت كل شيء كما هو، لقد قمت للتو بإنشاء نسخة، علاوة على ذلك، لا أدعي تأليف هذا الجهاز.

    لذا، مولد الإشارةيتمتع بخصائص جيدة ومناسب لحل المشكلات البسيطة.

    عرض المعلومات في مولد الإشارةتم إنتاجه على شاشة LCD مقاس 16 × 2 حرفًا مع وحدة تحكم HD44780. من الجدير بالذكر أنه لحفظ منافذ المتحكم الدقيق، يتم التحكم في شاشة LCD عبر ثلاثة أسلاك فقط؛ وقد تم تحقيق ذلك باستخدام سجل التحول - اقرأ عن كيفية توصيل شاشة العرض عبر ثلاثة أسلاك.

    من الضروري توفير المنافذ، حيث يتم استخدام 8 منافذ لـ DAC المقاوم، و7 منافذ للأزرار. في المقال الأصلي، وعد المؤلف باستخدام تعديل PWM، ولكن يبدو أنه لم يكمله، لأنه بدأ في تطوير نسخة أكثر تقدمًا على ATMEGA16.

    رسم تخطيطي لمولد إشارة DDSولوحة الدوائر المطبوعة.

    تظهر الدوائر واللوحات في النسخة الأصلية، كما أنها تحتوي على أزرار للتحكم في PWM لم يستخدمها المؤلف.

    بالنسبة إلى DAC، اشتريت على وجه التحديد مقاومات دقيقة بها خطأ قدره ±0.05%، ولكن كما اتضح فيما بعد، فإن المقاومات البسيطة التي بها خطأ بنسبة ±5% كافية تمامًا. كان شكل الإشارة مقبولًا تمامًا لجميع أنواع الإشارات.

    متى مولد كهرباءيتم تجميعها وتحميل البرنامج في وحدة التحكم الدقيقة، ولا توجد حاجة لأي إعدادات، إلا إذا قمت بضبط تباين العرض.

    يعد العمل مع الجهاز أمرًا بسيطًا - حدد شكل الإشارة، واضبط التردد المطلوب، ويمكنك تغيير خطوة ضبط التردد بحدود 1 - 10 - 100 - 1000 هرتز لكل خطوة. ثم انقر فوق ابدأ وسيبدأ المولد في العمل. تجدر الإشارة إلى أنه عند بدء تشغيل المولد، لا يمكن تغيير تردد الإشارة وشكلها، ويرجع ذلك إلى حقيقة أن البرنامج يدخل في حلقة لا نهاية لها ومن أجل زيادة الحد الأقصى لتردد التوليد، يتم إجراء استقصاء الزر كان لا بد من إزالتها. لإيقاف الإنشاء، انقر فوق إيقاف/إعادة تعيين، يؤدي ذلك إلى إعادة تشغيل البرنامج والعودة إلى قائمة الإعدادات. وهنا فارق بسيط.

    بشكل منفصل، أود أن أخبركم عن تصنيع السكن للمولد. يمكنك شراء علبة جاهزة من أحد المتاجر أو استخدام علبة مناسبة من جهاز آخر، لكنني قررت أن أصنعها بنفسي بالكامل. كانت هناك قطعة من الألياف الزجاجية ذات الوجهين خاملة، وقد تبرعت بها للجسم.

    أولاً، عليك أن تأخذ جميع القياسات وأبعاد شاشة LCD ولوحة مولد الإشارة ومصدر الطاقة والموصلات والأزرار، ثم تضعها على قطعة من الورق كما ستكون داخل العلبة. بناء على الأبعاد التي تم الحصول عليها، يمكنك البدء في التصنيع.

    هذا المشروع عبارة عن مولد وظائف عالي الجودة وعالمي، والذي، على الرغم من بعض تعقيد الدائرة، على الأقل بالمقارنة مع أبسط، لديه وظائف واسعة جدًا، مما يبرر تكلفة تجميعه. إنها قادرة على إنتاج 9 أشكال موجية مختلفة وتعمل أيضًا مع مزامنة النبض.

    رسم تخطيطي للمولد على عضو الكنيست

    إعدادات الجهاز

    • نطاق التردد: 10 هرتز - 60 كيلو هرتز
    • تعديل التردد الرقمي في 3 خطوات مختلفة
    • الأشكال الموجية: جيب، مثلث، مربع، منشار، نبض H، نبض L، انفجار، اكتساح، ضوضاء
    • نطاق الإخراج: 15 فولت للجيب والمثلث، 0-5 فولت للأوضاع الأخرى
    • يوجد مخرج لمزامنة النبض

    يتم تشغيل الجهاز من تيار متردد بجهد 12 فولت، والذي يوفر جهدًا مستمرًا عاليًا بدرجة كافية (أكثر من 18 فولت) ضروريًا للتشغيل العادي لـ 78L15 و79L15، اللذين يشكلان دائرة ثنائية القطب بجهد 15 فولت. ويتم ذلك حتى تتمكن الدائرة الدقيقة LF353 من إخراج التيار مجموعة كاملة من الإشارات للتحميل 1 كيلو أوم.

    وحدة التحكم في المستوى تستخدم ALPS SRBM1L0800. يجب أن تستخدم الدائرة مقاومات بتفاوت ±1% أو أفضل. محددات التيار LED - مقاومات سلسلة 4306R. يمكن زيادة السطوع حسب تفضيلات المؤدي. يتم تجميع المولد في علبة بلاستيكية مقاس 178x154x36 ملم مع ألواح أمامية وخلفية من الألومنيوم.

    يتم تثبيت العديد من مكونات الاتصال على الألواح الأمامية والخلفية (الأزرار والمقابض وموصلات RCA ومجموعات LED وموصل الطاقة). يتم ربط لوحات الدوائر المطبوعة بالجسم بمسامير ذات فواصل بلاستيكية. يتم تثبيت جميع العناصر الأخرى للمولد على لوحات الدوائر المطبوعة - ويكون مصدر الطاقة منفصلاً. الزر الأيسر في المنتصف هو تغيير الوضع، والزر الأيمن هو تحديد تردد الوضع.

    يُنتج المولد إشارات مختلفة ويعمل في ثلاثة أوضاع، يتم تحديدها باستخدام مفتاح "تحديد" ويُشار إليها بواسطة مصابيح LED الثلاثة العلوية (في الرسم التخطيطي). يقوم التحكم الدوار بتغيير معلمات الإشارة وفقًا للجدول التالي:

    مباشرة بعد الإعداد في الوضع 1، يحدث توليد الجيب. ومع ذلك، فإن تردد البداية منخفض جدًا ويلزم نقرة واحدة على الأقل على جهاز التشفير لزيادته. تحتوي اللوحة على جهة اتصال لتوصيل الجهاز للبرمجة، مما يسمح لك بتغيير وظيفة مولد الإشارة بسرعة، إذا لزم الأمر. جميع ملفات المشروع - البرامج الثابتة PIC16F870، ورسومات اللوحة، موجودة

    يتم تجميع مولد إشارات وظيفة DDS (الإصدار 2.0) على وحدة تحكم دقيقة AVR، وله وظائف جيدة، ولديه تحكم في السعة، كما يتم تجميعه أيضًا على لوحة دائرة مطبوعة أحادية الجانب.

    يعتمد هذا المولد على خوارزمية مولد Jesper DDS، وقد تم تحديث البرنامج لـ AVR-GCC C مع إدراج رمز التجميع. يحتوي المولد على إشارتين للخرج: الأولى هي إشارات DDS، والثانية عبارة عن خرج "مستطيل" عالي السرعة (1..8 ميجاهرتز)، والذي يمكن استخدامه لإحياء عضو الكنيست بضبابات غير صحيحة ولأغراض أخرى.
    يتم أخذ إشارة HS عالية السرعة مباشرة من وحدة التحكم الدقيقة Atmega16 OC1A (PD5).
    يتم إنشاء إشارات DDS من مخرجات MC أخرى من خلال مصفوفة R2R المقاومة ومن خلال شريحة LM358N، والتي تسمح بتعديل سعة الإشارة وإزاحتها. يتم ضبط الإزاحة والسعة باستخدام مقياسين للجهد. يمكن تعديل الإزاحة في نطاق +5V..-5V، والسعة هي 0...10V. يمكن ضبط تردد إشارات DDS في حدود 0...65534 هرتز، وهذا أكثر من كافٍ لاختبار الدوائر الصوتية ومهام راديو الهواة الأخرى.

    الخصائص الرئيسية لمولد DDS V2.0:
    - دائرة بسيطة تحتوي على عناصر راديوية شائعة وغير مكلفة؛
    - لوحة الدوائر المطبوعة من جانب واحد؛
    - مصدر طاقة مدمج؛
    - مخرج منفصل عالي السرعة (HS) يصل إلى 8 ميجاهرتز؛
    - إشارات DDS ذات سعة وإزاحة متغيرة؛
    - إشارات DDS: الجيب والمستطيل والمنشار والمنشار العكسي والمثلث وإشارة تخطيط القلب وإشارة الضوضاء؛
    - شاشة LCD مقاس 2×16؛
    - لوحة مفاتيح بديهية ذات 5 أزرار؛
    - خطوات ضبط التردد: 1، 10، 100، 1000، 10000 هرتز؛
    - تذكر الحالة الأخيرة بعد تشغيل الطاقة.

    يوضح الرسم التخطيطي أدناه البنية المنطقية لمولد الوظائف:

    كما ترون، يتطلب الجهاز العديد من الفولتية العرض: +5V، -12V، +12V. يتم استخدام الفولتية +12V و-12V لتنظيم سعة الإشارة وإزاحتها. تم تصميم مصدر الطاقة باستخدام محول والعديد من شرائح مثبت الجهد:

    يتم تجميع مصدر الطاقة على لوحة منفصلة:

    إذا كنت لا ترغب في تجميع مصدر الطاقة بنفسك، فيمكنك استخدام مصدر طاقة ATX عادي من جهاز كمبيوتر، حيث تكون جميع الفولتية اللازمة موجودة بالفعل. تخطيط موصل ATX.

    شاشة عرض من الكريستال السائل

    يتم عرض جميع الإجراءات عبر شاشة LCD. يتم التحكم بالمولد بواسطة خمسة مفاتيح

    يتم استخدام المفاتيح لأعلى/لأسفل للتنقل عبر القائمة، ويتم استخدام المفاتيح لليسار/لليمين لتغيير قيمة التردد. عند الضغط على المفتاح الأوسط، يبدأ توليد الإشارة المحددة. الضغط على المفتاح مرة أخرى يوقف المولد.

    يتم توفير قيمة منفصلة لتعيين خطوة تغيير التردد. يعد هذا مناسبًا إذا كنت بحاجة إلى تغيير التردد على نطاق واسع.

    لا يحتوي مولد الضوضاء على أي إعدادات. ويستخدم الدالة rand() المعتادة، والتي يتم تغذيتها بشكل مستمر لمخرجات مولد DDS.

    يحتوي خرج HS عالي السرعة على 4 أوضاع تردد: 1، 2، 4 و8 ميجا هرتز.

    رسم تخطيطى

    دائرة مولد الوظائف بسيطة وتحتوي على عناصر يمكن الوصول إليها بسهولة:
    - متحكم AVR Atmega16، مع كوارتز خارجي بتردد 16 ميجاهرتز؛
    - شاشة LCD قياسية من النوع HD44780 مقاس 2×16؛
    - مصفوفة R2R DAC مصنوعة من مقاومات عادية؛
    - مضخم التشغيل LM358N (نظير محلي لـ KR1040UD1) ؛
    - اثنان من مقاييس الجهد.
    - خمسة مفاتيح؛
    - عدة موصلات.

    يدفع:

    يتم تجميع المولد الوظيفي في صندوق بلاستيكي:


    برمجة

    كما قلت أعلاه، قمت ببناء برنامجي على خوارزمية مولد Jesper DDS. لقد أضفت بضعة أسطر من كود التجميع لتنفيذ عملية إيقاف التوليد. تحتوي الخوارزمية الآن على 10 دورات لوحدة المعالجة المركزية، بدلاً من 9.

    باطلة ثابتة مضمّنة Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)(
    asm volatile("eor r18, r18 ;r18<-0″ "\n\t"
    "eor r19, r19 ;r19<-0″ "\n\t"
    "1:" "\n\t"
    "أضف r18، %0 ;1 دورة" "\n\t"
    "adc r19، %1 ;1 دورة" "\n\t"
    "adc %A3، %2 ;1 دورة" "\n\t"
    "lpm ؛3 دورات" "\n\t"
    "خرج %4، __tmp_reg__ ؛ دورة واحدة" "\n\t"
    "sbis %5, 2 ;1 دورة في حالة عدم التخطي" "\n\t"
    "rjmp 1b;دورتان. إجمالي 10 دورات" "\n\t"
    :
    :"r" (ad0)،"r" (ad1)،"r" (ad2)،"e" (إشارة)،"I" (_SFR_IO_ADDR(PORTA))، "I" (_SFR_IO_ADDR(SPCR) ))
    :"r18"، "r19"
    );}

    يوجد جدول نماذج إشارة DDS في ذاكرة الفلاش الخاصة بـ MK، والتي يبدأ عنوانها عند 0xXX00. يتم تعريف هذه الأقسام في ملف makefile، في مواقع الذاكرة المناسبة:
    # تحديد الأقسام التي سيتم تخزين جداول الإشارة فيها
    LDFLAGS += -Wl,-section-start=.MySection1=0x3A00
    LDFLAGS += -Wl,-section-start=.MySection2=0x3B00
    LDFLAGS += -Wl,-section-start=.MySection3=0x3C00
    LDFLAGS += -Wl,-section-start=.MySection4=0x3D00
    LDFLAGS += -Wl,-section-start=.MySection5=0x3E00
    LDFLAGS += -Wl,-section-start=.MySection6=0x3F00