پروژه و راه اندازی و ساخت سیگنال ژنراتور با stm32 و avr
با سلام خدمت همه دوستان
در این مطلب پروژه سیگنال ژنراتور را داریم که میتوانید سه نوع موج با انواع فرکانس هارا تولید کنید.
برای اینکار از ماژول ارزان AD9833 ساخت شرکت دیوایس انالوگ است استفاده میکنیم.
پروتکل ارتباطی این ماژول spi است و مشخصات آن به صورت زیر است:
CJMCU-9833 AD9833BRMZ
High-precision programmable waveform generator CJMCU- 9833
AD9833 is CJMCU a low power programmable waveform generator capable of generating sine, triangle wave, square wave output.
Features:
Digitally programmable frequency and phase
۱۲٫۶۵ mW power consumption at 3 V
۰ MHz to 12.5 MHz output frequency range
۲۸-bit resolution: 0.1 Hz at 25 MHz reference clock
Sinusoidal, triangular, and square wave outputs
۲٫۳ V to 5.5 V power supply
No external components required
۳-wire SPI interface
Extended temperature range: ?40°C to +105°C
Power-down option
Update Rate: 25(max)
VOUT Maximum: 0.65V
VOUT Minimum: 38mV
VOUT Temperature Coefficient: 200°
Input High Voltage: 1.7-2.8V
Input Low Voltage: 0.5-0.7V
Input Current: 10?A
Input Capacitance: 3pF
Operating temperature range is ?40°C to +105°C; typical specifications are at 25°C
Size: 17*12mm/0.66*0.47″
راه اندازی دو ماژول فوق کاملا مشابه است و از یک ای سی استفاده میکنند اما ماژول بنفش گران تر است و رنج بالاتری از فرکانس هارا پشتیبانی میکند.
ماژول سیگنال ژنراتور AD9833 قابلیت تولید موج سینوسی .مربعی . مثلثی را دارد.
خروجی پین های ماژول به صورت زیر است که از طریق spi به هر میکرو کنترلری متصل می شود:
پایه out و پایه AGND خروجی ماژول شماست که توسط اسیلوسکوپ قابل مشاهده است.
در پروژه اول از میکرو کنترلر avr سری atmega8 استفاده کردیم
به این صورت که از یک سلکتور استفاده کردیم و توسط تقسیم مقاومتی که به adc میدهیم موقعیت سلکتور را میفهمیم و فرکانس مورد نظر را روی خروجی ست میکنیم و همچنین یک led هم متناسب با هر فرکانس خروجی روشن میکنیم.
برای نوشتن این کد من از state machine استفاده کردم که را بسیار حرفه ای و خوانا تر کرده است و انواع فرکانس ها توسط سلکتور تعیین می شود.
در پروژه فایل شبیه ساز و شماتیک پروتعوس قرار دارد و کد avr در کدویژن به زبان c نوشته شده است و فرکانس کاری میکرو ۸ مگاهرتز است.
شماتیک پروتعوس به صورت زیر است:
اگر سلکتور ندارید میتوانید از دکمه فشاری ساده استفاده کنید اما دقت کنید مقدار مقاومت هارا دقیق بخرید و از مقاومت ها با خطای ۱ درصد استفاده کنید.
با استفاده از تابع زیر میتوانید فرکانس و شکل موج را تنظیم کنید
void setWave(int waveform, long frequency)
ex: setWave(TRIANGLE, 1000); // just run a fixed TRIANGLE->1khz
تابع زیر هم برای خاموش کردن شکل موج استفاده میشود:
void setWaveOff()
خروجی این پروژه هم با اسیلوسکوپ مشاهده شد که عملکردی بسیار دقیق و پایدار داشت:
جهت تهیه سورس کد پروژه میتوانید از لینک زیر اقدام کنید
!!!file proteus baz nemishe
سلام، با آخرین ورژن پروتئوس باز میشه، کرکش هم بکنید