新闻中心

EEPW首页>嵌入式系统>设计应用> 直流电动机的调速 用单片机产生PWM控制

直流电动机的调速 用单片机产生PWM控制

作者: 时间:2016-11-25 来源:网络 收藏

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基准延时程序
{
;
}
}

}

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;//产生脉冲
}
FMQ=1;//关闭蜂鸣器
delaynms(300);
}


void main(void)
{
TR0=0;//关闭定时器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;//占空比初值设定
ZKB2=50;//占空比初值设定
while(1)
{
if(!K5)
{
delaynms(15);//消抖
if(!K5)//确定按键按下
{
beep();
ZKB1++;//增加ZKB1
ZKB2=100-ZKB1;//相应的ZKB2就减少
}
}
if(!K6)
{
delaynms(15);//消抖
if(!K6)//确定按键按下
{
beep();
ZKB1--;//减少ZKB1
ZKB2=100-ZKB1;//相应的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;

}


//显现:电机转速到最高后,也就是N为1或99时,再按一下,就变到99或1,
//电机反方向旋转以最高速度


上一页 1 2 下一页

评论


技术专区

关闭