{"id":29162883,"url":"https://github.com/customize5773/esp32-dds-signal-generator","last_synced_at":"2025-07-01T05:30:30.988Z","repository":{"id":301274696,"uuid":"1008728084","full_name":"Customize5773/ESP32-DDS-Signal-Generator","owner":"Customize5773","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-26T02:55:05.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-26T03:27:25.001Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Customize5773.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-26T02:23:31.000Z","updated_at":"2025-06-26T02:55:08.000Z","dependencies_parsed_at":"2025-06-26T03:37:56.210Z","dependency_job_id":null,"html_url":"https://github.com/Customize5773/ESP32-DDS-Signal-Generator","commit_stats":null,"previous_names":["customize5773/esp32-dds-signal-generator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Customize5773/ESP32-DDS-Signal-Generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Customize5773%2FESP32-DDS-Signal-Generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Customize5773%2FESP32-DDS-Signal-Generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Customize5773%2FESP32-DDS-Signal-Generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Customize5773%2FESP32-DDS-Signal-Generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Customize5773","download_url":"https://codeload.github.com/Customize5773/ESP32-DDS-Signal-Generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Customize5773%2FESP32-DDS-Signal-Generator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262902269,"owners_count":23382085,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-01T05:30:28.251Z","updated_at":"2025-07-01T05:30:30.950Z","avatar_url":"https://github.com/Customize5773.png","language":"C++","readme":"# ESP32-DDS-Signal-Generator\n\n![Scheme of a DDS system](docs/image/Schem_of_a_DDS_system.jpg)\n\n## Overview\nThe ESP32 \"Advanced\" DDS Signal Generator is a precision waveform generator built around the ESP32 microcontroller. It implements Direct Digital Synthesis (DDS) techniques to produce stable, configurable waveforms with professional-grade features. This project combines hardware design with robust software architecture to create a versatile instrument suitable for electronics testing, education, and embedded systems development.\n\n## Key Features\n- **Frequency Range**: 0.01Hz to 5MHz with 0.61Hz resolution at 40kHz sample rate\n- **Waveforms**: Sine, Square, Triangle, Sawtooth (256-point precision)\n- **Control Interfaces**:\n  - Rotary encoder with push-button for local control\n  - Web-based interface via WiFi AP (192.168.4.1)\n  - OLED display for real-time parameter monitoring\n- **Signal Quality**:\n  - Low-pass filtering with configurable cutoff frequency\n  - DC offset calibration\n  - Output buffering with LM358 op-amp\n- **Professional Architecture**:\n  - Modular firmware design with separation of concerns\n  - Hardware abstraction layer\n  - Timer-driven sampling for precise timing\n  - Error handling and input validation\n\n## Hardware Requirements\n| Component | Specification | Notes |\n|-----------|--------------|-------|\n| ESP32 | ESP32-WROOM-32 | DevKitC-V4 recommended |\n| DDS Module | AD9833 | With 25MHz crystal |\n| Display | 0.96\" OLED | I2C SSD1306 128x64 |\n| Rotary Encoder | EC11 | With push-button |\n| Op-Amp | LM358 | For output buffering |\n| Voltage Regulator | LM1117-3.3 | Clean power for analog section |\n| Passive Components | Capacitors, Resistors | See BOM for details |\n\n## Setup Instructions\n\n### 1. Hardware Assembly\n1. Connect components according to the schematic in `docs/setup_guide.md`\n2. Ensure proper power filtering near analog components\n3. Verify all connections with multimeter before powering\n\n### 2. Software Installation\n```bash\n# Clone repository\ngit clone https://github.com/Customize5773/ESP32-DDS-Signal-Generator.git\n\n# Install required tools\npip install esptool adafruit-ampy\n\n# Deploy firmware\nampy --port /dev/ttyUSB0 put firmware\n```\n\n### 3. Initial Configuration\n1. Power on the device\n2. Connect to WiFi AP: `DDS_Generator` (password: `generate123`)\n3. Access web interface at `192.168.4.1`\n4. Verify 1kHz sine wave output with oscilloscope\n\n## Usage Examples\n\n### Basic Operation\n```python\nfrom dds_engine import DDSEngine\nfrom frequency_controller import FrequencyController\nfrom dac_driver import DACDriver\n\n# Initialize components\ndac = DACDriver(pin=25)\nfreq_ctrl = FrequencyController(sample_rate=40000)\ndds = DDSEngine(dac, freq_ctrl)\n\n# Start output\ndds.start()\nfreq_ctrl.set_frequency(1000)  # 1kHz\n```\n\n### Changing Waveforms\n```python\n# Available waveforms: 'sine', 'square', 'triangle', 'sawtooth'\ndds.set_waveform('triangle')\n```\n\n### Frequency Sweep\n```python\nimport time\n\nfor freq in range(100, 5001, 100):  # 100Hz to 5kHz in 100Hz steps\n    freq_ctrl.set_frequency(freq)\n    time.sleep(0.5)  # Dwell at each frequency\n```\n\n### Web Interface Controls\n```html\n\u003c!-- Example web control --\u003e\n\u003cbutton onclick=\"fetch('/set?freq=440')\"\u003e440Hz Tone\u003c/button\u003e\n\u003cbutton onclick=\"fetch('/wave?type=square')\"\u003eSquare Wave\u003c/button\u003e\n```\n\n## Performance Specifications\n| Parameter | Value | Notes |\n|-----------|-------|-------|\n| Frequency Range | 0.01Hz - 5MHz | Limited by ESP32 processing |\n| Frequency Resolution | 0.61Hz | At 40kHz sample rate |\n| Amplitude Range | 0-3.3V | Configurable via output stage |\n| THD (1kHz sine) | \u003c1% | With proper filtering |\n| Phase Noise | -70dBc/Hz @ 1kHz offset | At 1MHz output |\n| Sample Rate | Up to 40kHz | MicroPython limitation |\n\n## Calibration\nRefer to `/docs/calibration_procedure.md` for:\n- Frequency accuracy calibration\n- DC offset compensation\n- Amplitude flatness correction\n- Temperature compensation (advanced)\n\n## License\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgements\n- ESP32 hardware abstraction based on MicroPython\n- DDS algorithm inspiration from Analog Devices AD9833 documentation\n- Web interface using MicroPython's AsyncWebServer implementation\n\n## Inspiration\n- [AZDelivery](https://www.instructables.com/member/AZDelivery/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcustomize5773%2Fesp32-dds-signal-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcustomize5773%2Fesp32-dds-signal-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcustomize5773%2Fesp32-dds-signal-generator/lists"}