新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 直流電動機(jī)的調(diào)速 用單片機(jī)產(chǎn)生PWM控制

直流電動機(jī)的調(diào)速 用單片機(jī)產(chǎn)生PWM控制

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

C語言代碼:


#include
#define uchar unsigned char
#define uint unsigned int

sbit K5=P1^4;
sbit K6=P1^5;
sbit PWM1=P1^0;
sbit PWM2=P1^1;
sbit FMQ=P3^6;


uchar ZKB1,ZKB2;

void delaynms(uint aa)
{
uchar bb;
while(aa--)
{
for(bb=0;bb<115;bb++) //1ms基準(zhǔn)延時程序
{
;
}
}

}

void delay500us(void)
{
int j;
for(j=0;j<57;j++)
{
;
}
}

void beep(void)
{
uchar t;
for(t=0;t<100;t++)
{
delay500us();
FMQ=!FMQ; //產(chǎn)生脈沖
}
FMQ=1; //關(guān)閉蜂鳴器
delaynms(300);
}


void main(void)
{
TR0=0; //關(guān)閉定時器0
TMOD=0x01; //定時器0,工作方式1
TH0=(65526-100)/256;
TL0=(65526-100)%256; //100us即0.01ms中斷一次
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器T0
ZKB1=50; //占空比初值設(shè)定
ZKB2=50; //占空比初值設(shè)定
while(1)
{
if(!K5)
{
delaynms(15); //消抖
if(!K5) //確定按鍵按下
{
beep();
ZKB1++; //增加ZKB1
ZKB2=100-ZKB1; //相應(yīng)的ZKB2就減少
}
}
if(!K6)
{
delaynms(15); //消抖
if(!K6) //確定按鍵按下
{
beep();
ZKB1--; //減少ZKB1
ZKB2=100-ZKB1; //相應(yīng)的ZKB2增加
}
}
if(ZKB1>99)
ZKB1=1;
if(ZKB1<1)
ZKB1=99;

}
}


void time0(void) interrupt 1
{
static uchar N=0;
TH0=(65526-100)/256;
TL0=(65526-100)%256;
N++;
if(N>100)
N=0;
if(N<=ZKB1)
PWM1=0;
else
PWM1=1;
if(N<=ZKB2)
PWM2=0;
else
PWM2=1;

}


//顯現(xiàn):電機(jī)轉(zhuǎn)速到最高后,也就是N為1或99時,再按一下,就變到99或1,
//電機(jī)反方向旋轉(zhuǎn)以最高速度


上一頁 1 2 下一頁

評論


技術(shù)專區(qū)

關(guān)閉