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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4426|回復: 13
收起左側

想知道怎么用51單片機接收PWM信號

[復制鏈接]
ID:1001922 發表于 2022-4-19 19:12 | 顯示全部樓層 |閱讀模式
我的二氧化碳傳感器MH-Z19輸出的是PWM信號,我要用51單片機的I/O口接收這個信號,怎么獲得PWM的占空比呢?我聽說用一個外部中斷和定時器可以實現,我在網上看到了一個接收的方式,用了外部中斷0和計數器0,但是他用的STC15F100W-STC15F104W芯片,這個芯片的外部中斷0檢測到上升沿和下降沿都會進入外部中斷,檢測到上升沿就開啟計數器從零開始計數,檢測到下降沿就獲取計數值(得到了高電平持續的時間),再將計數器置零等待下一個上升沿。我的芯片是STC89C516RD+,外部中斷只能檢測到下降沿,所以用不了上述方法。
求問還有什么方式可以檢測到PWM的占空比?
(其實二氧化碳傳感器MH-Z19也能用串口傳輸數據,但是我的芯片只有一個串口,而且串口要與上位機通信,所以只能選擇PWM的形式了)
回復

使用道具 舉報

ID:624769 發表于 2022-4-19 21:22 來自觸屏版 | 顯示全部樓層
不在乎性能的話,在外部中斷中處理完下降沿的工作后while(p32==0);  等到上升沿后處理完上升沿的活,再退出中斷。 在乎性能的話,int0直接接pwm輸入,int1通過反向器接pwm,分別處理上升沿和下降沿,當然也可以用npn代替反向器。
回復

使用道具 舉報

ID:732794 發表于 2022-4-19 21:31 | 顯示全部樓層
PWM轉換成電壓信號給單片機,單片機ADC取值后除以基準,得到占空比。
此方案有微小的誤差(~1%),看你的取決了。
回復

使用道具 舉報

ID:57657 發表于 2022-4-20 06:27 | 顯示全部樓層
51FAN2020 發表于 2022-4-19 21:31
PWM轉換成電壓信號給單片機,單片機ADC取值后除以基準,得到占空比。
此方案有微小的誤差(~1%),看你的 ...

此型號不支持ADC,建議使用STC8系列,其次STC15 1.png
回復

使用道具 舉報

ID:213173 發表于 2022-4-20 09:15 | 顯示全部樓層
MH-Z19有兩種輸出:UART和PWM。
1.采用沙發建議。
2.加74157,串口分時復用。
3.換增強型芯片。
回復

使用道具 舉報

ID:1001922 發表于 2022-4-20 22:44 | 顯示全部樓層
188610329 發表于 2022-4-19 21:22
不在乎性能的話,在外部中斷中處理完下降沿的工作后while(p32==0);  等到上升沿后處理完上升沿的活,再退 ...

感謝 我的問題已經解決
回復

使用道具 舉報

ID:1001922 發表于 2022-4-20 22:44 | 顯示全部樓層
wulin 發表于 2022-4-20 09:15
MH-Z19有兩種輸出:UART和PWM。
1.采用沙發建議。
2.加74157,串口分時復用。

感謝 我的問題已經解決
回復

使用道具 舉報

ID:1001922 發表于 2022-4-20 22:45 | 顯示全部樓層
51FAN2020 發表于 2022-4-19 21:31
PWM轉換成電壓信號給單片機,單片機ADC取值后除以基準,得到占空比。
此方案有微小的誤差(~1%),看你的 ...

感謝 我的問題已經解決
回復

使用道具 舉報

ID:1001922 發表于 2022-4-20 22:45 | 顯示全部樓層
npn 發表于 2022-4-20 06:27
此型號不支持ADC,建議使用STC8系列,其次STC15

感謝 我的問題已經解決
回復

使用道具 舉報

ID:1001922 發表于 2022-4-20 23:36 | 顯示全部樓層
我今天突然頓悟,只用STC89C516RD+單片機的定時器1實現了PWM信號的檢測。大概是這樣的:利用定時器,1ms進入一次中斷,在中斷函數中,利用if檢測上升沿和下降沿,遇到上升沿就用一個變量保存高電平持續時間;遇到下降沿,就繼續記錄PWM持續時間,直到遇到下一個上升沿,將記錄的PWM持續時間存起來。就得到了高電平持續時間和整個PWM持續時間,進而得到占空比。實測可行。
但是每1ms就進入一次中斷,可能有點不好,但我說不出來哪不好。
回復

使用道具 舉報

ID:624769 發表于 2022-4-21 00:21 | 顯示全部樓層
Ruuci 發表于 2022-4-20 23:36
我今天突然頓悟,只用STC89C516RD+單片機的定時器1實現了PWM信號的檢測。大概是這樣的:利用定時器,1ms進 ...

你的思路是對的,
1ms的確不妥, 1ms 的間隔有點太長了誤差可能會大。如果只是要得到頻占比的話,定時器最好是 8位自動重載模式,定時20us左右, 采樣次數盡可能的多一點,10000以上吧,結果會比較精確。程序大致如下(供參考):

#define Duty_Value 50000  //設置量程 (0~65535) 這里定義5萬次,20us間隔,大約1秒 計算一次頻占比,
bit PWM_Done;            //標志
unsigned short Duty_H,Duty_L,PWM_H,PWM_L,Duty_ount;   //用到的變量
sbit PWM_IO = P3^2;   //定義 PWM輸入引腳  (任意引腳)

void PWM_Get_Inti() //初始化
{
Duty_H = 0;
Duty_L = 0;
Duty_count = Duty_Value;
PWM_Done = 0;
//此處定義定時器
}

void T0_Int() interrupt 1     //中斷
{
if(PWM_IO)
{
  Duty_H++; //測量高電平比
}
else
{
  Duty_L++; //測量低電平比
}
if(--Duty_count==0)
{
  PWM_H = Duty_H; //保存高電平比
  PWM_L = Duty_L; //保存低電平比
  Duty_H = 0; //復位
  Duty_L = 0;
  Duty_count = Duty_Value;
  PWM_Done = 1;
}
}

//主程序內:
if(PWM_Done)
{
PWM_Done = 0;  //清標志
//計算 頻占比  如:    PWM_H * 100/ Duty_Value  得出 x% 高電平比,根據需要擬定
}


回復

使用道具 舉報

ID:887371 發表于 2022-4-21 08:43 | 顯示全部樓層
樓主這辦法,pwm頻率越低,精度越高。
假如要達到100的分辨率,要遠低于10Hz才行。

芯片是STC89C516RD+,外部中斷只能檢測到下降沿,

1.通過加反相器(例如一個npn管)來檢測上升沿。
2.串口不夠,可以考慮用io模擬串口。

我更傾向于用io模擬串口。
回復

使用道具 舉報

ID:1001922 發表于 2022-4-21 22:32 | 顯示全部樓層
188610329 發表于 2022-4-21 00:21
你的思路是對的,
1ms的確不妥, 1ms 的間隔有點太長了誤差可能會大。如果只是要得到頻占比的話,定時器 ...

其實我1ms進入一次中斷,是怕太頻繁了,導致其他器件不能正常運行。我的DIY小玩意是檢測溫度,濕度,和CO2。溫度濕度都好說,就是這個CO2的檢測麻煩。接受PWM信號用了定時器中斷,1ms中斷一次,我把檢測CO2和溫濕度代碼合在一起,然后我的我的LCD1602顯示就出問題了。
回復

使用道具 舉報

ID:624769 發表于 2022-4-21 22:58 | 顯示全部樓層
Ruuci 發表于 2022-4-21 22:32
其實我1ms進入一次中斷,是怕太頻繁了,導致其他器件不能正常運行。我的DIY小玩意是檢測溫度,濕度,和CO ...

你定時器中斷 1ms 進入一次,只是讀個高低電平,然后  ++ , -- 的話,絕對不會影響 其他程序運行的,所以,你不需要擔心 1ms 太短,影響性能, 只需要擔心 1ms 太長,準確度太低的問題就可以了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区四区五区加勒比 | 天天拍天天草 | 久久r久久 | 日韩一区二区免费视频 | 午夜一区二区三区 | 91视频88av| 在线色网 | 国产精品成人品 | 日韩在线精品视频 | 在线成人免费视频 | 国产成人在线视频 | 亚洲一区二区三区四区五区午夜 | 中文字幕人成乱码在线观看 | 在线成人免费观看 | 国产精品国产三级国产aⅴ原创 | 91久久精品 | 欧美日韩久 | 欧美1级 | 偷拍自拍第一页 | 国产在线视频一区二区 | 欧美黄色免费网站 | 超碰在线97国产 | 亚洲精品久久久久久一区二区 | 日p视频免费看 | 欧美中文字幕在线观看 | 亚洲高清av| 久久伊人亚洲 | 久久伊人精品一区二区三区 | 青青草视频网 | 日韩人体视频 | 综合久久av | 久久久久久国产 | www.成人.com | 91视频久久久久 | 九色在线视频 | 亚洲欧美一区二区三区在线 | 亚洲天堂日韩精品 | 精品在线观看一区二区 | 亚洲精品9999 | 在线婷婷| 日韩福利片 |