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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4202|回復(fù): 13
收起左側(cè)

想知道怎么用51單片機(jī)接收PWM信號(hào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

此型號(hào)不支持ADC,建議使用STC8系列,其次STC15 1.png
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

感謝 我的問題已經(jīng)解決
回復(fù)

使用道具 舉報(bào)

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

感謝 我的問題已經(jīng)解決
回復(fù)

使用道具 舉報(bào)

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

感謝 我的問題已經(jīng)解決
回復(fù)

使用道具 舉報(bào)

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

感謝 我的問題已經(jīng)解決
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-4-21 00:21 | 顯示全部樓層
Ruuci 發(fā)表于 2022-4-20 23:36
我今天突然頓悟,只用STC89C516RD+單片機(jī)的定時(shí)器1實(shí)現(xiàn)了PWM信號(hào)的檢測(cè)。大概是這樣的:利用定時(shí)器,1ms進(jìn) ...

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

#define Duty_Value 50000  //設(shè)置量程 (0~65535) 這里定義5萬次,20us間隔,大約1秒 計(jì)算一次頻占比,
bit PWM_Done;            //標(biāo)志
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;
//此處定義定時(shí)器
}

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

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


回復(fù)

使用道具 舉報(bào)

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

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

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

我更傾向于用io模擬串口。
回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

你定時(shí)器中斷 1ms 進(jìn)入一次,只是讀個(gè)高低電平,然后  ++ , -- 的話,絕對(duì)不會(huì)影響 其他程序運(yùn)行的,所以,你不需要擔(dān)心 1ms 太短,影響性能, 只需要擔(dān)心 1ms 太長(zhǎng),準(zhǔn)確度太低的問題就可以了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人福利在线观看 | 中文字幕一区二区三区日韩精品 | 日日操视频 | 国产精品亚洲精品日韩已方 | 久久久久成人精品亚洲国产 | 亚洲精品免费在线 | 欧美亚洲另类丝袜综合网动图 | 久久亚洲免费 | 国产精品久久av | 欧美 日韩 中文 | 国产精品免费看 | 欧美在线视频一区 | 亚州av在线 | 日本a v在线播放 | 国产九九九九 | 国产精品美女久久久久aⅴ国产馆 | 九九久久久| 免费特黄视频 | 国产精品久久久久久久7电影 | 国产精品欧美一区二区三区不卡 | 一级大片网站 | 国产激情在线 | 久久久久久久一区二区三区 | 天天操妹子 | 色一情一乱一伦一区二区三区 | 日韩一区二区三区视频在线观看 | 成人在线中文字幕 | 亚洲精品一 | 欧美5区| 日本三级网| 久久综合久久自在自线精品自 | 日本三级电影免费观看 | 久久免费精品 | 中文字幕亚洲视频 | 久久精品国产一区二区电影 | 日韩免费视频 | 极品粉嫩国产48尤物在线播放 | 狠狠操狠狠操 | 91就要激情 | 两性午夜视频 | 激情91|