1. STM32 PWM輸入捕獲頻率與占空比都是不是很精確
本來就是周期越小誤差越大。因為捕獲本身就需要時間,20us的周期已經很小了。
2. 怎樣用51單片機測量某一pwm信號 請教方法或程序 謝謝!
我覺得可以把PWM信號讀入I/O口,定義兩個變數,一個high表示高電平,一個low表示低電平,遇到第一個上升沿開始給high+1,遇到第一個下降沿給low+1,遇到第二個上升沿,則停止計數。統計high與low,就可以知道一個周期內,占空比。
3. 單片機PWM捕捉模式是什麼意思
PWM,是脈沖寬度調制的意思,主要參數有三個,整個脈沖的寬度,高電平的寬度,占空比。這里假設高電平有效。
占空比 = 高電平的寬度 / 整個脈沖的寬度。PWM捕捉,就是同時捕捉PWM的整個脈沖的寬度以及高電平的寬度,進而可以計算得出占空比。
典型的做法,在脈沖上升沿和下降沿都執行捕捉。上升沿復位並啟動定時器,下降沿捕捉定時器內容作為高電平寬度,下一個上升沿捕捉定時器內容作為整個脈沖的寬度,同時復位並重啟定時器以進行下一輪捕捉。
4. 如何用單片機捕捉PWM占空比
#define TEST_IN PA0 //要測試的信號
#define F_TEST_IN PA1 //要測試信號的反向,加一個反向門得到的
main()
{
unsigned long low_cnt,high_cnt;
while(1)
{
while(TEST_IN); //確保TEST_IN = 0;
low_cnt = 0;
high_cnt = 0;
while(!TEST_IN); //確保TEST_IN = 1;
while(TEST_IN) high_cnt++; //計算高電平數量
while(F_TEST_IN) low_cnt++; //計算低電平數量
//以下添加其他的處理代碼。
}
}
這個應該能夠保證到精度。十分浪費CPU時間就是。但是如果只有這一個任務還是OK的。
你說的用外部中斷的方法也可以。
思路1 採用timer來進行計數。遇到相應的邊沿後中斷,停計數器。然後進行相應的處理。
思路2 直接用循環來檢測,當然如果這個地方用循環檢查的話,不如就不用中斷了,直接用軟體來實現上升沿下降沿的識別。也就是我寫的程序一樣了。
提示,思路1的話明顯的會覺得有點問題。因為是硬體計數。至於精度問題,你看下程序就可以感覺出來。還有精度主要取決於檢測的始終。與中斷什麼的沒有任何關系。只是用中斷給人感覺比較實時。
你的第二個想法有點看不懂。如果說你是想用AD轉換來進行占空比的分析的話,那太笨了。根本就是自找麻煩。
5. 單片機如何用PWM來測出方波頻率
PWM是輸出的信號,不能用來測試外部信號,要測方波,應該用定時器和捕獲功能。
6. 怎麼用單片機產生PWM波形
單片機產生PWM波形波形的方法:
主要是採用軟體控制,控制2個時間。
具體就是由單片機的引腳輸出PWM波形;單片機引腳 如P1.7 控制其輸出高電平的時間T1 和輸出低電平的時間T2。
PWM波形的周期T=T1+T2
PWM波形的占空比=(100T1/T)%
PWM波形實現的演算法:
1 根據PWM波形的頻率f,計算出PWM波形的周期T=1/f;
2 根據PWM波形的占空比 計算出高電平時間 T1=占空比×T
3 計算出低電平時間 T2=T-T1
4 按上述時間去控制 單片機引腳高低電平的時間就可以了。
呵呵 趕快自己寫程序吧 別忘了給俺加分呀
7. STC12SC51單片機使用PCA捕捉PWM將PWM高電平持續時間,是使用定時器0計數高電平時間還是使用PCA的計數器
是用PCA的計數器,先上升沿捕捉記為t1,緊跟著改成下降沿捕捉,記為t2,t2-t1就是脈寬,2個t1之間就是周期
8. 單片機pic的捕捉,比較和pwm都是說什麼呢什麼意思啊
比較是捕獲的一個方式,捕獲就是預設一個定時器計時,當滿足條件後發生捕獲信息或總斷來處理事情
有的單片機也有比較功能,就是在兩個io口或一個單片機內部的基準源連續互相比較,當滿足預設條件後執行特定代碼或產生中斷
pwm是 脈寬調節 的英文縮寫,就是調整一個io口在一定時間內輸出的高低電平的比例,也叫占空比
9. 單片機如何產生PWM信號
用普通I/O口採用軟體定時器中斷可以模擬PWM輸出
/*採用6MHz晶振,在P1.0腳上輸出周期為2.5s,占空比為20%的脈沖信號*/
/*定時100ms,周期2.5s需25次中斷,高電平0.5s需5次中斷*/
#include <reg51.h>
typedef unsigned char uchar;
sbit P1_0=P1^0;
uchar time=0;
uchar period=25;
uchar high=5;
void timer0() interrupt 1 using 1
{
TH0=0x3c; /*定時器初值重裝載*/
TL0=0xb0;
time++;
if(time==high) /*高電平持續時間結束,變低*/
{ P1_0=0;}
else if(time==period) /*周期時間到,變高*/
{ time=0;
P1_0=1;
}
}
void main()
{
TMOD=0x01; /*定時器0方式1*/
TH0=0x3c; /*定時器裝載初值*/
TL0=0xb0;
EA=1; /*開CPU中斷*/
ET0=1; /*開定時器0中斷*/
TR0=1;/*啟動定時器0*/
while(1) /*等待中斷*/
{}
}
10. (急)單片機如何產生PWM信號的
好多單片機內部都 嵌有 PWM輸出的
常用的STC系列的51單片機,Microchip的單片機,種類繁多
對其編程就可以PWM輸出了
你可以查閱下資料,上面都寫著的
可以進入 www.dzsc.com 找到 這些單片機的pdf文檔
具體看一下