分享乙個實用任意路數PWM函式

2022-09-01 20:30:15 字數 1856 閱讀 6769

一、什麼是pwm?

1、科普一下什麼是pwm,嘿嘿,莫閒囉嗦,好好看看,可能大多數人聽過,但可能沒詳細了解過,至此不妨花費幾分鐘,詳細了解哈,pwm中文譯名為:脈衝寬度調製,即控制電路在輸出頻率不變的情況下,通過微控制器控制電平在乙個週期內輸出高低電平的比例來等效出模擬電壓的大小。舉個「栗子」吧:

若電池9v,設9v工作時燈狀態為全亮,1.8v工作時為微亮。

若開關持續20%時間通,80%時間斷,則可近似為用乙個1.8v(9v*20%)的電池持續供電,此時為半亮。當然,開關通斷時間需要特別短,否則,比如20s通80s斷,燈泡會20s全亮,80s滅,而達不到微亮的效果。

在上述例子中,即將持續通斷高低電平代替模擬訊號(1.8v)。

占空比為:正脈衝的持續時間與脈衝總週期的比值。此例中占空比即為20%。(尊重原創)

二、軟體如何模擬

1、上面已經解釋了什麼是脈寬調變pwm,我們使用微控制器模擬的思路是,首先使用微控制器定時器來定個最小分辨的時間t;

2、在定時器中斷中,設定乙個標誌位(pwm_time),每次進中斷,也就是每隔 t 時間加1,這就是我們要產生的pwm頻率,則pwm週期為(100xt),頻率為1/(100xt);

3、再設定在100個t中,需要n個高電平(1)則需要的低電平(0)為(100-n)個,其實這個就是調節占空比(高電平時間佔整個週期時間的比值);

4、舉個「栗子」,假如我要產生乙個pwm頻率是1khz ,占空比為 20%的訊號,則,需要首先計算出,最小分辨時間t,1khz的頻率,則週期為1ms=1000us,則t=1000us/100=10us;n呢,就是n/100%=20%,n=20;

三、程式示例

1 unsigned char pwm_time=0

;2 unsigned char pwm_r_data=0

;3 unsigned char pwm_g_data=0

;4 unsigned char pwm_b_data=0;5

/*6使用定時器t1,設定中斷時間為10us,在中斷函式面,設定乙個標誌位(pwm_time),來確定產生的pwm頻率

7因為這裡我們是產生週期為1ms(1khz)的pwm,所以可設定中斷的時間基準為0.01ms,,然後中斷100次即為1ms。在中斷子程式內,可設定乙個變數如pwm_time,在中斷子程式內,有三條重要的語句:89

1、當time>=100時,time清零(此語句保證頻率為1khz);

1011

2、當time>n時(n應該在0-100之間變化開),讓單片相應的i/o口輸出低電平;

1213

3、當time<=n時,讓單片相應的i/o口輸出高電平,此時占空比就為%n。

1415

*/16

1718

void io_init() //

設定p0.0口為上拉輸入,(int0),p0.1-p0.3為推挽輸出

1922

2324

void

pwm_init()

2534

void led_pwm(unsigned char a,unsigned char b,unsigned char c) //

三路pwm,r/g/b

3540

void

main()

4149

void timer1(void) interrupt 3

//定時器t1中斷函式入口

//10us進一次中斷 10usx100=1000us=1ms f=1/1ms=1khz

50

分享乙個php驗證碼程式 簡單 實用

廢話不說,直接上 header content type image gif 初始化 border 0 是否要邊框 1要 0不要 how 4 驗證碼位數 w how 15 寬度 h 20 高度 fontsize 5 字型大小 alpha abcdefghijkmnopqrstuvwxyz 驗證碼內容...

分享PHP中的10個實用函式

1.php check syntax 這個函式可以用來檢查特定檔案中的php語法是否正確。使用方法 error message filename php script.php if php check syntax filename,error message else 2.highlight st...

分享乙個SharedPreferences工具類

直接上 public class sputils else if object instanceof integer else if object instanceof boolean else if object instanceof float else if object instanceof...