新聞中心

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

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

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

C語(yǔ)言代碼:


#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)延時(shí)程序
{
;
}
}

}

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)閉定時(shí)器0
TMOD=0x01; //定時(shí)器0,工作方式1
TH0=(65526-100)/256;
TL0=(65526-100)%256; //100us即0.01ms中斷一次
EA=1; //開(kāi)總中斷
ET0=1; //開(kāi)定時(shí)器0中斷
TR0=1; //啟動(dòng)定時(shí)器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時(shí),再按一下,就變到99或1,
//電機(jī)反方向旋轉(zhuǎn)以最高速度


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


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

關(guān)閉