電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduino正弦波發(fā)生器

Arduino正弦波發(fā)生器

2022-11-08 | zip | 0.42 MB | 次下載 | 2積分

資料介紹

描述

概述:

有一天,我正在閱讀 Arduino 論壇,發(fā)現(xiàn)一位年輕人想知道如何使用 Arduino 制作正弦波發(fā)生器。顯然,他是一名工科學(xué)生,這是他的任務(wù)。有人告訴他這是不可能的,其他人說是的,但速度只有 50 Hz。由于我們公司為 Arduino 制作了 I2C DAC 開發(fā)板,因此我認(rèn)為(對我而言)使用 DAC 板制作正弦波發(fā)生器會很有教育意義。

關(guān)于這個項目

信號發(fā)生器通常有各種可以產(chǎn)生的信號,如正弦波、方波和三角波。其他具有掃描功能和任意波形。這些是研討會中的有用工具。它們可用于測試音頻電路、運(yùn)算放大器電路和測試電路響應(yīng)。大多數(shù)現(xiàn)代函數(shù)發(fā)生器可以輕松輸出高達(dá) 1 Mhz 的頻率。

因此,雖然我沒想到基于 Arduino 的正弦波發(fā)生器會取代我的桌面函數(shù)發(fā)生器,但我認(rèn)為看看如何設(shè)計一個正弦波發(fā)生器以及它的性能會很有趣。

poYBAGNo9HqAHOcnAAiqzeGE-vQ934.jpg
DAC PCB、Arduino 和無焊面包板
?

查找表

我決定最簡單的開始方法是創(chuàng)建一個值查找表,用于我的正弦波輸出。表中的值越多,輸出就越接近真正的正弦波。在創(chuàng)建要重復(fù)循環(huán)的查找表時,使用 2 的冪也非常方便。因此,8 個值是行不通的,而 128 個值可能會對 MCU 的能力造成負(fù)擔(dān)。我決定從 32 個值開始。

接下來,我需要決定提供多少分辨率。SF-5 基于 12 位器件 MCP4725 DAC。(注:您可以在 Tindie 上購買 SF-5,也可以購買設(shè)備的 DIP 封裝并直接放在您的無焊面包板上)。所以,它是 12 位。我打開一個 Excel 電子表格,記下從 0 到 31 的數(shù)字。我需要的下一列是以弧度表示的角度。這只是指數(shù)乘以 2 乘以 Pi 除以 32。下一列是信號的歸一化幅度。我只是在上一欄中取了角度的正弦值。這產(chǎn)生了一個峰峰值為 2 個單位且以零為中心的信號。它的最大值為+1,最小值為-1。

輸出范圍為 0 到 5V,我需要一個以 2.5V 為中心且幅度為 ± 2.5V 的信號。下一列只是將信號乘以 2.5。然后我們將其偏移 2.5V。信號顯示最大值為 5V,最小值為 0V。完美的!

現(xiàn)在我們只需要把它轉(zhuǎn)換成一個 12 位的數(shù)字放到我們的表中。由于我們希望電壓為 5V 時的值為 4095,因此我們乘以 4095 并除以 5。要檢查,請查看第 8 行。電壓輸出為 5V,位數(shù)為 4095。

桌子

32 個 2 字節(jié)的數(shù)字不是很多數(shù)據(jù),可以很容易地存儲在 RAM 中,但這是一次學(xué)習(xí)體驗,我想學(xué)習(xí)如何將表存儲在 FLASH 中并根據(jù)需要讀取它。優(yōu)點(diǎn)是有一天我會有太多的數(shù)據(jù)要放入 RAM 并且需要使用 FLASH,所以這是學(xué)習(xí)的好時機(jī)。命令是 PROGMEM,存儲數(shù)據(jù)的語句是:

const PROGMEM unsigned int mysine [] = {TABLE}

編碼

我編寫了一個簡單的循環(huán)程序,在串行線路上查找用戶輸入。在我的情況下,當(dāng)看到數(shù)字 6 時,它會跳轉(zhuǎn)到通過 I2C 總線將表格轉(zhuǎn)儲到 DAC 的代碼中。在我第一次想到我可以索引我的數(shù)組并讀取數(shù)據(jù)之前從未直接使用過 FLASH。RTFM – 閱讀精美手冊。從 FLASH 讀取時,您使用不同的命令 -

temp = pgm_read_word_near(mysine + i);

這將從數(shù)組中讀取一個 16 位字或一個條目。我從 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)入一個循環(huán)并連續(xù)發(fā)送 32 個表條目時,這是您可以執(zhí)行的最快速度和最高頻率。我得到的頻率是92Hz。然后我想調(diào)整頻率,我決定在每個表條目之后添加一個延遲()。每個周期將是 32 毫秒(大約)。因此,后續(xù)頻率為 23Hz、13Hz、9Hz。您最多可以延遲 256。我認(rèn)為這給了我 8 秒的時間。

pYYBAGNo9H6AP9sYAAVU6upnQC0257.jpg
來自 DAC 的原始輸出
?

多么可怕的輸出!

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

poYBAGNo9IKAa7p-AAWUMQL4pPs244.jpg
過濾輸出
?

改進(jìn)用戶界面

我允許用戶通過鍵盤修改延遲,方法是在收到“+”字符時將延遲增加一個單位,并在收到“-”字符時減少延遲。

我也不想將用戶鎖定在無限循環(huán)中,所以我檢查用戶是否發(fā)送了“e”或“E”(因為沒有什么比擔(dān)心區(qū)分大小寫更煩人的了)。當(dāng)我得到它時,我將其視為退出請求并跳回主循環(huán)。我這樣做有點(diǎn)不雅,不考慮我將電壓輸出留在哪里。但請記住,我們只是在這里玩得開心。如果這是一個產(chǎn)品,我希望將輸出保持在已知狀態(tài),可能是 0 伏。

poYBAGNo9ISAQrjzAAAo2HT1-nE509.jpg
這是主菜單(數(shù)字應(yīng)該是連續(xù)的,但沒有很好地復(fù)制)
?

改進(jìn)

我使用了一個任何人都可以在 Arduino 上編寫的簡單用戶界面。我相信你可以在你的電腦上使用 Python 或其他東西來制作一個非??岬慕缑?。我也沒有這樣做的具體原因,所以如果你有一個有實際需求的項目,你可能會更改代碼以適應(yīng)。

演示

我制作了一個演示視頻,其中包含菜單中的所有選項,包括 Sinewave 輸出 (6) 并將其放在 Youtube 上。如果你跳到最后,你可以看到正弦波的演示:

?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)