資料介紹
描述
概述:
有一天,我正在閱讀 Arduino 論壇,發(fā)現(xiàn)一位年輕人想知道如何使用 Arduino 制作正弦波發(fā)生器。顯然,他是一名工科學(xué)生,這是他的任務(wù)。有人告訴他這是不可能的,其他人說是的,但速度只有 50 Hz。由于我們公司為 Arduino 制作了 I2C DAC 開發(fā)板,因此我認(rèn)為(對我而言)使用 DAC 板制作正弦波發(fā)生器會(huì)很有教育意義。
關(guān)于這個(gè)項(xiàng)目
信號發(fā)生器通常有各種可以產(chǎn)生的信號,如正弦波、方波和三角波。其他具有掃描功能和任意波形。這些是研討會(huì)中的有用工具。它們可用于測試音頻電路、運(yùn)算放大器電路和測試電路響應(yīng)。大多數(shù)現(xiàn)代函數(shù)發(fā)生器可以輕松輸出高達(dá) 1 Mhz 的頻率。
因此,雖然我沒想到基于 Arduino 的正弦波發(fā)生器會(huì)取代我的桌面函數(shù)發(fā)生器,但我認(rèn)為看看如何設(shè)計(jì)一個(gè)正弦波發(fā)生器以及它的性能會(huì)很有趣。

查找表
我決定最簡單的開始方法是創(chuàng)建一個(gè)值查找表,用于我的正弦波輸出。表中的值越多,輸出就越接近真正的正弦波。在創(chuàng)建要重復(fù)循環(huán)的查找表時(shí),使用 2 的冪也非常方便。因此,8 個(gè)值是行不通的,而 128 個(gè)值可能會(huì)對 MCU 的能力造成負(fù)擔(dān)。我決定從 32 個(gè)值開始。
接下來,我需要決定提供多少分辨率。SF-5 基于 12 位器件 MCP4725 DAC。(注:您可以在 Tindie 上購買 SF-5,也可以購買設(shè)備的 DIP 封裝并直接放在您的無焊面包板上)。所以,它是 12 位。我打開一個(gè) Excel 電子表格,記下從 0 到 31 的數(shù)字。我需要的下一列是以弧度表示的角度。這只是指數(shù)乘以 2 乘以 Pi 除以 32。下一列是信號的歸一化幅度。我只是在上一欄中取了角度的正弦值。這產(chǎn)生了一個(gè)峰峰值為 2 個(gè)單位且以零為中心的信號。它的最大值為+1,最小值為-1。
輸出范圍為 0 到 5V,我需要一個(gè)以 2.5V 為中心且幅度為 ± 2.5V 的信號。下一列只是將信號乘以 2.5。然后我們將其偏移 2.5V。信號顯示最大值為 5V,最小值為 0V。完美的!
現(xiàn)在我們只需要把它轉(zhuǎn)換成一個(gè) 12 位的數(shù)字放到我們的表中。由于我們希望電壓為 5V 時(shí)的值為 4095,因此我們乘以 4095 并除以 5。要檢查,請查看第 8 行。電壓輸出為 5V,位數(shù)為 4095。
桌子
32 個(gè) 2 字節(jié)的數(shù)字不是很多數(shù)據(jù),可以很容易地存儲(chǔ)在 RAM 中,但這是一次學(xué)習(xí)體驗(yàn),我想學(xué)習(xí)如何將表存儲(chǔ)在 FLASH 中并根據(jù)需要讀取它。優(yōu)點(diǎn)是有一天我會(huì)有太多的數(shù)據(jù)要放入 RAM 并且需要使用 FLASH,所以這是學(xué)習(xí)的好時(shí)機(jī)。命令是 PROGMEM,存儲(chǔ)數(shù)據(jù)的語句是:
const PROGMEM unsigned int mysine [] = {TABLE}
編碼
我編寫了一個(gè)簡單的循環(huán)程序,在串行線路上查找用戶輸入。在我的情況下,當(dāng)看到數(shù)字 6 時(shí),它會(huì)跳轉(zhuǎn)到通過 I2C 總線將表格轉(zhuǎn)儲(chǔ)到 DAC 的代碼中。在我第一次想到我可以索引我的數(shù)組并讀取數(shù)據(jù)之前從未直接使用過 FLASH。RTFM – 閱讀精美手冊。從 FLASH 讀取時(shí),您使用不同的命令 -
temp = pgm_read_word_near(mysine + i);
這將從數(shù)組中讀取一個(gè) 16 位字或一個(gè)條目。我從 i=0 開始并增加到 31,然后再次將其設(shè)置回零(i = I & 0x1F;)。很高興我們可以從 FLASH 中讀取字,但我們只能以字節(jié)寫入 DAC。我們需要對我們的數(shù)據(jù)進(jìn)行一些編輯。
首先發(fā)送 MSB。前兩位是速度,接下來的兩位是掉電選擇模式,接下來的 4 位是數(shù)據(jù)。使用 Wire.write 命令將其發(fā)送出去。接下來,我們發(fā)送低 8 位數(shù)據(jù),同樣使用 Wire.write 命令。
頻率怎么樣?
當(dāng)您進(jìn)入一個(gè)循環(huán)并連續(xù)發(fā)送 32 個(gè)表?xiàng)l目時(shí),這是您可以執(zhí)行的最快速度和最高頻率。我得到的頻率是92Hz。然后我想調(diào)整頻率,我決定在每個(gè)表?xiàng)l目之后添加一個(gè)延遲()。每個(gè)周期將是 32 毫秒(大約)。因此,后續(xù)頻率為 23Hz、13Hz、9Hz。您最多可以延遲 256。我認(rèn)為這給了我 8 秒的時(shí)間。

多么可怕的輸出!
看著原始輸出的圖片,您可能會(huì)想,“看起來多么糟糕的輸出?!?它有一個(gè)階梯圖案。那是因?yàn)檫@些是我們從 DAC 輸出的 32 個(gè)電壓。我們可以在表格中添加更多條目以使階梯模式變得更平滑,但這會(huì)降低最大頻率。我們可以做的另一件事是濾除在我們改變電壓電平時(shí)在波形中形成尖角的高頻。我使用了一個(gè)簡單的 RC 低通濾波器;R = 10K,C = 0.1uF,截止頻率約為 160Hz。如您所見,它看起來好多了,并且更接近真正的正弦波。

改進(jìn)用戶界面
我允許用戶通過鍵盤修改延遲,方法是在收到“+”字符時(shí)將延遲增加一個(gè)單位,并在收到“-”字符時(shí)減少延遲。
我也不想將用戶鎖定在無限循環(huán)中,所以我檢查用戶是否發(fā)送了“e”或“E”(因?yàn)闆]有什么比擔(dān)心區(qū)分大小寫更煩人的了)。當(dāng)我得到它時(shí),我將其視為退出請求并跳回主循環(huán)。我這樣做有點(diǎn)不雅,不考慮我將電壓輸出留在哪里。但請記住,我們只是在這里玩得開心。如果這是一個(gè)產(chǎn)品,我希望將輸出保持在已知狀態(tài),可能是 0 伏。

改進(jìn)
我使用了一個(gè)任何人都可以在 Arduino 上編寫的簡單用戶界面。我相信你可以在你的電腦上使用 Python 或其他東西來制作一個(gè)非??岬慕缑?。我也沒有這樣做的具體原因,所以如果你有一個(gè)有實(shí)際需求的項(xiàng)目,你可能會(huì)更改代碼以適應(yīng)。
演示
我制作了一個(gè)演示視頻,其中包含菜單中的所有選項(xiàng),包括 Sinewave 輸出 (6) 并將其放在 Youtube 上。如果你跳到最后,你可以看到正弦波的演示:
?
- FPGA實(shí)現(xiàn)基于ROM的正弦波發(fā)生器
- LT1037演示電路-1 kHz正弦波發(fā)生器
- LTC6258LTC6992演示電路-低功耗正弦波發(fā)生器
- 使用FPGA實(shí)現(xiàn)ROM的正弦波發(fā)生器詳細(xì)資料說明 19次下載
- DAC0832波形發(fā)生器protues仿真 正弦波 方波 三角波 184次下載
- 波形發(fā)生器protues仿真 PCF8591仿真源程序 正弦波 229次下載
- 正弦波信號發(fā)生器的設(shè)計(jì) 58次下載
- 方波_三角波_正弦波_鋸齒波發(fā)生器_課程設(shè)計(jì)報(bào)告 210次下載
- 基于AD9951射頻正弦波信號發(fā)生器的設(shè)計(jì)
- 正弦波發(fā)生電路基礎(chǔ)
- 使用集成運(yùn)放LM324制作正弦波發(fā)生器
- 使用集成運(yùn)放LM324制作正弦波發(fā)生器
- 正弦波信號發(fā)生器的設(shè)計(jì)及電路圖
- 正弦波信號發(fā)生器VHDL源代碼
- dsp正弦波發(fā)生器
- 正弦波控制器速度怎么解碼 3.5k次閱讀
- 深入了解信號發(fā)生器類型及特點(diǎn) 2.1k次閱讀
- 基于STM32的波形發(fā)生器設(shè)計(jì) 5.2k次閱讀
- 分享三個(gè)簡單的正弦波發(fā)生器電路 2.7w次閱讀
- 鎖定同步正弦發(fā)生器覆蓋三十倍頻程 2.5k次閱讀
- 幾乎純DDS正弦波調(diào)發(fā)生器 3.8k次閱讀
- 正弦波到方波轉(zhuǎn)換器電路圖解析 2.1w次閱讀
- 正弦波逆變器的判定方法_如何將正弦波變成方波 1.7w次閱讀
- 正弦波逆變器和修正波有什么不同 2.7w次閱讀
- 正弦波濾波器原理_正弦波濾波器的作用 3.1w次閱讀
- 正弦波逆變器原理_正弦波逆變器的優(yōu)缺點(diǎn) 3.6w次閱讀
- 正弦波逆變器介紹_正弦波逆變器工作原理 5.2w次閱讀
- 純正弦波逆變器哪個(gè)好_純正弦波逆變器排行榜 9.7w次閱讀
- 正弦波信號發(fā)生器基本原理與設(shè)計(jì) 8.6w次閱讀
- 一種新型的正弦信號發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn) 3.4k次閱讀
下載排行
本周
- 1新一代網(wǎng)絡(luò)可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費(fèi)
- 2冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數(shù)據(jù)手冊
- 2.33 MB | 次下載 | 免費(fèi)
- 4MDD品牌三極管S9012數(shù)據(jù)手冊
- 2.62 MB | 次下載 | 免費(fèi)
- 5LAT1218 如何選擇和設(shè)置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環(huán)繞擴(kuò)音機(jī) AVR-1507手冊
- 2.50 MB | 次下載 | 免費(fèi)
- 8MS1000TA 超聲波測量模擬前端芯片技術(shù)手冊
- 0.60 MB | 次下載 | 免費(fèi)
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費(fèi)
- 2PC5502負(fù)載均流控制電路數(shù)據(jù)手冊
- 1.63 MB | 23次下載 | 免費(fèi)
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測距通信定位模塊規(guī)格書
- 838.47 KB | 5次下載 | 免費(fèi)
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準(zhǔn)諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協(xié)議電壓誘騙控制器IC技術(shù)手冊
- 1.81 MB | 1次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191439次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論