直流電機調速,占空比可調。小白第一次發帖
電路原理圖如下:
新建位圖圖像.jpg (122.47 KB, 下載次數: 32)
下載附件
2018-12-10 20:54 上傳
單片機源程序如下:
- #include "reg51.h"
- #include "led.h"
- #include "delay.h"
- uint d=100; //占空比
- uint b=65436; //初值計時100us
- bit flag=0;
- void timer0(void) interrupt 1 //中斷部分代碼,見下文的釋疑
- {
- if(flag)
- {
- TH0 = b/256; //900
- TL0 = b%256;
- flag = 0;
- P2_4 = 0;
- b=65536-d;
- }
- else
- {
- TH0 = b/256; //100
- TL0 = b%256;
- flag = 1;
- P2_4 = 1;
- b=64536+d;
- }
- }
- void main()
- {
- TMOD = 0x01; //TMOD的值表示定時器工作方式選擇
- TH0 = b/256; //寫入初始值,初始值可以決定定時多久
- TL0 = b%256;
- TF0 = 0; //計數到時TF0為1,即當TH0 = 0xff;TL0 = 0xff;再運行一步TF0 = 1;
- TR0 = 1; //開始計數,從這時起,每運行一步TH0和TL0都會增加,直到TH0 = 0xff;TL0 = 0xff;
- ET0 = 1; //允許定時器0中斷
- EA=1; //開總中斷
- while(1)
- {
- if(P3!=0xff) //按鍵對應占空比調整
- {
- TR0 = 0;
- delay_ms(10);
- if((P3_4==0)&&(d>=100))
- {
- d=d-100; //10倍程可調減
- }
- if((P3_5==0)&&(d>=10))
- {
- d=d-10; //1倍程可調減
- }
- if(P3_6==0)
- {
- d=d+10; //1倍程可調加
- }
- if(P3_7==0)
- {
- d=d+100; //10倍程可調加
- }
- while(P3!=0xff);
- TR0 = 1;
- }
- if(d<=10) //設置占空比最大最小值
- {
- d=10;
- }
- if(d>=990)
- {
- d=990;
- }
- delay_ms(2);
- show_led_one(0,(d%100)/10); //實時顯示占空比
- delay_ms(2);
- show_led_one(1,d/100);
- }
- }
復制代碼
所有資料51hei提供下載:
PWM.zip
(39.21 KB, 下載次數: 47)
2018-12-9 21:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
PWM.pdf
(37.2 KB, 下載次數: 26)
2018-12-10 20:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|