❶ 如何用單片機捕捉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轉換來進行占空比的分析的話,那太笨了。根本就是自找麻煩。
❷ 單片機pwm信號
你測試到的信號和單片機接受到的信號不一致,那個10000如果不是用精度很高的示波器進行沿檢測的話,比較難捕捉到。單片機管腿的反應速度快,所以他可以很容易檢測出來。
❸ 利用單片機測PWM
「形成一個反饋控制系統」
AT128單片機產生的PWM信號本來就很精確的,還需要反饋嗎?
如果你要做反饋的話,
1.你可以用AD採集PWM的電壓。(頻率不變的話)
2.還有就是用中斷方式,一個上升沿觸發,一個下降沿觸發,這個比較准確的!
❹ 怎樣用51單片機測量某一pwm信號 請教方法或程序 謝謝!
我覺得可以把PWM信號讀入I/O口,定義兩個變數,一個high表示高電平,一個low表示低電平,遇到第一個上升沿開始給high+1,遇到第一個下降沿給low+1,遇到第二個上升沿,則停止計數。統計high與low,就可以知道一個周期內,占空比。
❺ 單片機如何產生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) /*等待中斷*/
{}
}
❻ 如何採集PWM的電壓值如題 謝謝了
不嫌麻煩也可以轉成直流電壓信號,接AD採集
❼ 想用單片機實現10路PWM信號的測量,怎麼實現
這么慢的速度,完全可以輪詢讀IO口,然後尋找上升和下降的邊緣,記錄時間點(用一個周期30毫秒左右的定時器)。上升沿之間的時間是PWM周期,上升沿到下降沿的時間是占空比。定時器周期很重要,要在PWM的兩個周期之內,一個周期之外,當出現後一個邊緣時間小於前一個的數值的情況時,只需給後一個值加一個定時器周期的值,就能夠保證讀取正確讀數。
❽ 利用單片機測PWM
「形成一個
反饋控制系統
」
AT128單片機產生的
PWM信號
本來就很精確的,還需要反饋嗎?
如果你要做反饋的話,
1.你可以用AD採集PWM的電壓。(頻率不變的話)
2.還有就是用中斷方式,一個上升沿觸發,一個下降沿觸發,這個比較准確的!
❾ 單片機PWM捕捉模式是什麼意思
PWM,是脈沖寬度調制的意思,主要參數有三個,整個脈沖的寬度,高電平的寬度,占空比。這里假設高電平有效。
占空比 = 高電平的寬度 / 整個脈沖的寬度。PWM捕捉,就是同時捕捉PWM的整個脈沖的寬度以及高電平的寬度,進而可以計算得出占空比。
典型的做法,在脈沖上升沿和下降沿都執行捕捉。上升沿復位並啟動定時器,下降沿捕捉定時器內容作為高電平寬度,下一個上升沿捕捉定時器內容作為整個脈沖的寬度,同時復位並重啟定時器以進行下一輪捕捉。
❿ 各位大俠,怎麼通過單片機產生PWM信號,通過PWM波占空比來驅動電流控制器,從而控制電流的大小!!
你這不是單片機是dsp,2407本身就有pwm輸出。位置感測器不知道你用的啥,如果是碼盤,就用ssi通訊就行,用spi口接就可以。還有ti的晶元一定要用4層板,2407也已經停產了。