久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8078|回復: 28
打印 上一主題 下一主題
收起左側

關于單片機ADC如何對正弦波信號的采樣?

[復制鏈接]
跳轉到指定樓層
樓主
利用stc8a8k單片機自帶的ADC如何進行正弦波信號的采樣?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:462768 發表于 2021-7-26 20:44 | 只看該作者
電流轉換成電壓,這個過程和電容充電類似,電容電越多,電壓越高,然后比如用電壓觸發器,高到一個程度就觸發打開另一個電容,這些電容都是像秤砣一樣實現測量好的。

電壓轉換成頻率,有一個集成電路叫做壓控振蕩器,這個振蕩器的頻率是用電壓高低來決定的,然后
電壓就轉換成了頻率,這個頻率就可以通過譯碼器翻譯成數字信號。


評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:419909 發表于 2021-7-26 21:09 | 只看該作者
參照STC官網例程就行。任何波形都一樣的。差別在于你要什么樣的數據。
回復

使用道具 舉報

地板
ID:898834 發表于 2021-7-26 21:31 | 只看該作者
wfqxgw 發表于 2021-7-26 21:09
參照STC官網例程就行。任何波形都一樣的。差別在于你要什么樣的數據。

我采集的數據浮動很大,輸入直流電就完全沒問題,輸入交流正弦波就有很大的差別
回復

使用道具 舉報

5#
ID:898834 發表于 2021-7-26 21:31 | 只看該作者
m2006410 發表于 2021-7-26 20:44
電流轉換成電壓,這個過程和電容充電類似,電容電越多,電壓越高,然后比如用電壓觸發器,高到一個程度就觸 ...

用單片機自帶ADC如何實現呢
回復

使用道具 舉報

6#
ID:401564 發表于 2021-7-26 21:32 | 只看該作者
"進行正弦波信號的采樣"
你這是要干嘛呢?這ADC是有嚴謹的邏輯的,不是說"我出去吃個飯",然后你可以點個外賣,也可以吃燒烤,來碗螺獅粉也行的
這正弦波有:頻率,峰-峰值,平均值,有效值(220V市電說的就是有效值),多點采樣(玩音響用得到,可以叫頻譜顯示)
還有一個是要精密整流之后的數據,那玩意沒玩過,不好說
那么,你現在是要采什么樣呢?
回復

使用道具 舉報

7#
ID:898834 發表于 2021-7-26 21:35 | 只看該作者
Y_G_G 發表于 2021-7-26 21:32
"進行正弦波信號的采樣"
你這是要干嘛呢?這ADC是有嚴謹的邏輯的,不是說"我出去吃個飯",然后你可以點個外賣 ...

是要對正弦波的有效值進行采樣,頻率為1Khz,幅度為0-50mv的正弦波進行采樣
回復

使用道具 舉報

8#
ID:893692 發表于 2021-7-27 02:22 | 只看該作者
zqz1345444061 發表于 2021-7-26 21:31
我采集的數據浮動很大,輸入直流電就完全沒問題,輸入交流正弦波就有很大的差別

對啊 交流采樣信號就是這樣,采集交流的時候你要考慮抬升信號的電位,不然負半軸的電壓無法采集到
回復

使用道具 舉報

9#
ID:419909 發表于 2021-7-27 09:13 | 只看該作者
zqz1345444061 發表于 2021-7-26 21:35
是要對正弦波的有效值進行采樣,頻率為1Khz,幅度為0-50mv的正弦波進行采樣

純交流波形的話。因為正負半周是對稱的。如果對精度要求不高。精度為全波的1半,可以不采集負半周的也行。從正半周那里取數據計算就行了。有交值就是至少在連續采集1個正弦波周期內的信號值。然后取最大的ADC值*2,即為峰-峰值,再通過峰-峰值換算公式轉成有效值。具體換算公式可百度
回復

使用道具 舉報

10#
ID:898834 發表于 2021-7-27 09:43 | 只看該作者
wfqxgw 發表于 2021-7-27 09:13
純交流波形的話。因為正負半周是對稱的。如果對精度要求不高。精度為全波的1半,可以不采集負半周的也行 ...

我用信號發生器輸出了一個頻率為1kHZ,最大值為3V,最小值為1V的正數正弦波,用ADC采集到的數據依舊波動很大
回復

使用道具 舉報

11#
ID:898834 發表于 2021-7-27 09:44 | 只看該作者
m24 發表于 2021-7-27 02:22
對啊 交流采樣信號就是這樣,采集交流的時候你要考慮抬升信號的電位,不然負半軸的電壓無法采集到

我用信號發生器輸出了一個頻率為1kHZ,最大值為3V,最小值為1V的正數正弦波,用ADC采集到的數據依舊波動很大
回復

使用道具 舉報

12#
ID:169891 發表于 2021-7-27 09:54 | 只看該作者
你的采樣速度是多少呢,能正確反應1KHZ的信號嗎
回復

使用道具 舉報

13#
ID:898834 發表于 2021-7-27 10:29 | 只看該作者
ljfljfljf123 發表于 2021-7-27 09:54
你的采樣速度是多少呢,能正確反應1KHZ的信號嗎

我選擇的是416個系統時鐘轉換一次
回復

使用道具 舉報

14#
ID:419909 發表于 2021-7-27 10:45 | 只看該作者
zqz1345444061 發表于 2021-7-27 09:43
我用信號發生器輸出了一個頻率為1kHZ,最大值為3V,最小值為1V的正數正弦波,用ADC采集到的數據依舊波動 ...

下面代碼僅供參考,不一定能運行,隨便打的.如有不當.請指正.只是方便說明編程思路.
unsigned int get VRMS()
{
unsigned int i;
unsigned int tem,max=0;
for(i=0;i<1000;i++)  //循環1000次.這個次數根據實際情況設置.一般要>=一個波形周期的時間.比如1KHz的
                               //單個周期就是1/1000=1ms,保證循環時間大于1ms就行了.
  {
     tem=Get_ADC_value();  //取ADC值
     if(tem>max) max=tem; //這個周期內的最大值即峰-峰值.
  }
max=max*2;//因為只采集了正半周期的波形.所以一個全波的峰峰值即加上負半周信號*2
max=max/2.828  //  峰_峰值求RMS值公式:RMS=Peak_Peak/sqrt(8),為方便計算.直接寫上了sqrt(8)=2.828
return max;   //返修RMS值.注意這個只是ADC值.再根據實際情況換算成標準電壓就行.比如參考電壓是5V,那就是:5/4095*max
}
回復

使用道具 舉報

15#
ID:898834 發表于 2021-7-27 11:04 | 只看該作者
wfqxgw 發表于 2021-7-27 10:45
下面代碼僅供參考,不一定能運行,隨便打的.如有不當.請指正.只是方便說明編程思路.
unsigned int get VRM ...

多謝,我參考一下方法
回復

使用道具 舉報

16#
ID:898834 發表于 2021-7-27 11:29 | 只看該作者
wfqxgw 發表于 2021-7-27 10:45
下面代碼僅供參考,不一定能運行,隨便打的.如有不當.請指正.只是方便說明編程思路.
unsigned int get VRM ...

這個程序適用于一個周期全為正的正弦波嗎,不存在負半周為負
回復

使用道具 舉報

17#
ID:419909 發表于 2021-7-27 12:58 | 只看該作者
zqz1345444061 發表于 2021-7-27 11:29
這個程序適用于一個周期全為正的正弦波嗎,不存在負半周為負

全為正的話。那就去掉max*2就行。
回復

使用道具 舉報

18#
ID:401564 發表于 2021-7-27 13:06 | 只看該作者
為什么學單片機的教程都會有說到要學習模擬電路基礎的呢
你一個正弦波,不管有沒有負半周,它的電壓都是在變化的,那么,單片機ADC只是一段時間內(就是ADC轉換時間)的電壓,每次轉換的時間不同,電壓也會不同,波動就是這么來的
你肯定要有一個濾波電路的
我沒有具體的做過50mV的,所以,不知道要不要精密整流(不是整流,精密整流是一個絕對值電路),還要加一個濾波電路,這樣就得到一個峰值,想要有效值,還得再除以根號2
自己上網先學一下吧

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

19#
ID:419909 發表于 2021-7-27 13:47 | 只看該作者
拋開模擬電路基礎,要求一個RMS,(也就是有效值,通俗地說,就是萬用表打到AC檔。再測試正弦波交流電壓的值。),只需要知道峰_峰值即可,然后通過公式再求其它平均值也有,有效值也好。就很容易。
什么是峰_峰值?就是一個周期內波形的最高點與最低點的值。所以上面的程序重點就是找到這個周期內(不斷循環取ADC值)的最高點,即峰_峰值,那么再換算成其它就容易了。就像一個圓。知道了R半徑,再求其它面積,周長什么的。就容易了。
對于要求不高的場合,直接用一個4.7uf的電容偶合輸入到單片機的ADC引腳即可,這種方法相對簡單。只能采集正半周。可以用于實驗。如果在應用場合,那就要根據情況再加緩沖,放大或者隔離,濾波電路了。主要是防止受干擾。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

20#
ID:313048 發表于 2021-7-27 14:02 | 只看該作者
ADC采樣實際上你只要電壓對,采樣速率夠,按道理是不會出現你說的那些情況,而且看上面那些樓說的前面并一個電容啥的,這種只針對直流信號好一點,交流不建議并電容,這樣無法反應信號的真實完整性。而且你不能直接把信號發射器產生的信號直接懟到單片機的ADC引腳,該信號應該電阻到地才對,同時,如果信號發生器產生的是正負電壓的,你要把他通過運放或者其他別的東西將其偏移到正電壓,或者采用差分采樣的方式進行采樣才可得到正確的電壓

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

21#
ID:898834 發表于 2021-7-27 14:48 | 只看該作者
Y_G_G 發表于 2021-7-27 13:06
為什么學單片機的教程都會有說到要學習模擬電路基礎的呢
你一個正弦波,不管有沒有負半周,它的電壓都是在變 ...

好的好的,感謝指導
回復

使用道具 舉報

22#
ID:898834 發表于 2021-7-27 14:49 | 只看該作者
wfqxgw 發表于 2021-7-27 13:47
拋開模擬電路基礎,要求一個RMS,(也就是有效值,通俗地說,就是萬用表打到AC檔。再測試正弦波交流電壓的 ...

多謝指導
回復

使用道具 舉報

23#
ID:898834 發表于 2021-7-27 19:35 | 只看該作者
AUG 發表于 2021-7-27 14:02
ADC采樣實際上你只要電壓對,采樣速率夠,按道理是不會出現你說的那些情況,而且看上面那些樓說的前面并一 ...

可是交流正弦波每一個時刻的電壓值是不同的,是需要進行多次采樣取最大值叭
回復

使用道具 舉報

24#
ID:898834 發表于 2021-7-27 19:43 | 只看該作者
wfqxgw 發表于 2021-7-27 10:45
下面代碼僅供參考,不一定能運行,隨便打的.如有不當.請指正.只是方便說明編程思路.
unsigned int get VRM ...

這個程序邏輯我覺得沒錯,但是今天測試了以下,測量結果跟實際仍舊不同
回復

使用道具 舉報

25#
ID:419909 發表于 2021-7-27 21:28 | 只看該作者
本帖最后由 wfqxgw 于 2021-7-27 21:33 編輯

以下輸入電路供參考。另外。轉換數據時注意變量類型。有小數點的。要用float.這里要注意,實際交流電壓是R6的5k6電阻上面的。先用萬用表測試出實際值。再用單片機驗證,如果電壓不高。1K限流電阻可以暫時不用。主要是用于驗證數據。

回復

使用道具 舉報

26#
ID:401564 發表于 2021-7-27 22:10 | 只看該作者
本帖最后由 Y_G_G 于 2021-7-28 09:06 編輯
zqz1345444061 發表于 2021-7-27 19:43
這個程序邏輯我覺得沒錯,但是今天測試了以下,測量結果跟實際仍舊不同

怎么就覺得這個邏輯可行了呢?
unsigned int tem,max=0;
for(i=0;i<1000;i++)  //循環1000次.這個次數根據實際情況設置.一般要>=一個波形周期的時間.比如1KHz的
                               //單個周期就是1/1000=1ms,保證循環時間大于1ms就行了.
  {
     tem=Get_ADC_value();  //取ADC值
     if(tem>max) max=tem; //這個周期內的最大值即峰-峰值.
  }
你不覺得max的值就遠是0嗎? if(tem>max) 里面的表達式有什么意思呢?
還有就是:5/4095*max,你去看一下數據手冊,人家是要/4096的,這種公式在12位ADC可能沒有什么問題
但如果是多次采樣進行平均或者相加,誤差就大了
沒看仔細,這是個壇循環,我還以為是中斷了,前面我的理解錯了
回復

使用道具 舉報

27#
ID:419909 發表于 2021-7-27 22:25 | 只看該作者
zqz1345444061 發表于 2021-7-27 19:43
這個程序邏輯我覺得沒錯,但是今天測試了以下,測量結果跟實際仍舊不同

連接原理圖。供參考。R8的1K電阻是限流電阻,ADC實際測試的交流電壓是R6的5K6電阻上的交流電壓。所以先用萬用表測試好R6上的電壓。再在單片機上驗證就行。注意。單片機在轉換為電壓時。變量類型要用float.比如 float Vin=5/4096*get VRMS();

回復

使用道具 舉報

28#
ID:313048 發表于 2021-7-28 10:20 | 只看該作者
zqz1345444061 發表于 2021-7-27 19:35
可是交流正弦波每一個時刻的電壓值是不同的,是需要進行多次采樣取最大值叭

連續采樣的過程中,你是將整個波形的電壓信號都給采樣了,最大值也包括在里面。除非你一個信號周期里面的采樣點非常少,那么有可能采不到最高電壓,所以這跟你的采樣速率有關系,假如你一個信號周期里面有100個采樣點,那么完完全全可以采樣到最高值。
回復

使用道具 舉報

29#
ID:883242 發表于 2021-7-28 19:44 | 只看該作者
純正弦波可以先精密整流然后濾波成直流來測試。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日韩一区二区 | 亚洲视频在线看 | 免费小视频在线观看 | 亚洲一区二区三区四区五区午夜 | 婷婷综合色| 久久免费观看视频 | 久久99久久99精品免视看婷婷 | 国产999精品久久久久久 | 永久网站| 欧美一级在线免费观看 | 国产精品福利在线观看 | 国产黄色小视频在线观看 | 91精品国产91久久综合桃花 | 欧美精品一区二区在线观看 | 国产成年人视频 | 成人午夜精品 | 国内自拍偷拍一区 | 欧美一级欧美三级在线观看 | 国产午夜精品一区二区三区在线观看 | 国产91网站在线观看 | 国产精品178页 | 天天躁人人躁人人躁狂躁 | 国产一区二区三区视频 | 欧美日韩一二三区 | 久久久久无码国产精品一区 | 午夜影院免费体验区 | 精品日韩| 一级在线 | a在线视频 | 国产精品一区二区免费 | 亚洲色图网址 | 成人三级视频在线观看 | 成年人黄色一级毛片 | 精品www| 亚洲天堂网站 | 久久婷婷国产麻豆91 | 精品国产一区二区三区日日嗨 | 精品国产亚洲一区二区三区大结局 | 福利精品 | 国产激情在线观看 | 日韩在线视频精品 |