新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 機(jī)器人教程1:如何利用51單片機(jī)輸出PWM波

機(jī)器人教程1:如何利用51單片機(jī)輸出PWM波

作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

/************電機(jī)正反向控制**************/

void Motor_turn(void)

{

if(key_turn==0)

{

delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

if(key_turn==0)

{

flag=~flag;

}

while(!key_turn);

}

}

/***********定時(shí)器0初始化***********/

void timer0_init(void)

{

TMOD=0x01; //定時(shí)器0工作于方式1

TH0=(65536-10)/256;

TL0=(65536-10)%256;

TR0=1;

ET0=1;

EA=1;

}

/**************定時(shí)0中斷處理******************/

void timer0_int(void) interrupt 1

{

TR0=0;//設(shè)置定時(shí)器初值期間,關(guān)閉定時(shí)器

TH0=(65536-10)/256;

TL0=(65536-10)%256;

TR0=1;

if(flag==1)//電機(jī)正轉(zhuǎn)

{

PWM1=0;

time++;

if(time{

PWM2=1;

}

else

PWM2=0;

if(time>=100)

{

time=0;

}

}

else //電機(jī)反轉(zhuǎn)

{

PWM2=0;

time++;

if(time{

PWM1=1;

}

else

PWM1=0;

if(time>=100)

{

time=0;

}

}

}

4、程序4、使單片機(jī)輸出PWM,并能控制正反轉(zhuǎn)和實(shí)現(xiàn)調(diào)速

為了使大家徹底掌握此方面,下面再給出一個(gè)復(fù)雜一點(diǎn)的程序,實(shí)現(xiàn)的功能為通過一個(gè)按鍵控制正反轉(zhuǎn)并通過另外兩個(gè)按鍵使之可以在0到20級(jí)之間調(diào)速的程序。

/*******************************************************************/

/*程序名:PWM直流電機(jī)調(diào)速*/

/*晶振:11.00592 MHz CPU型號(hào):STC89C52 */

/*直流電機(jī)的PWM波控制,可以通過按鍵控制正反轉(zhuǎn)并在0到20級(jí)之間調(diào)速*/

/*****************************************************************/

#include

#define uint unsigned int

#define uchar unsigned char

uchar time,count=50,flag=1;//低電平的占空比

sbit PWM1=P2^0;//PWM通道1,反轉(zhuǎn)脈沖

sbit PWM2=P2^1;//PWM通道2,正轉(zhuǎn)脈沖

sbit key_add=P3^5;//電機(jī)加速

sbit key_dec=P3^6;//電機(jī)減速

sbit key_turn=P3^7;//電機(jī)換向

/************函數(shù)聲明**************/

void delayxms(uint z);

void Motor_turn();

void Motor_add();

void Motor_dec();

void timer0_init();

/*********主函數(shù)********************/

void main()

{

timer0_init();

while(1)

{

Motor_turn();

Motor_add();

Motor_dec();

}

}

/****************延時(shí)處理**********************/

void delayxms(uint z)//延時(shí)xms程序

{

uint x,y;

for(y=z;x>0;x--)

for(y=110;y>0;y--);

}

/************電機(jī)正反向控制**************/

void Motor_turn()

{

if(key_turn==0)

{

delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

if(key_turn==0)

{

flag=~flag;

}

while(!key_turn);

}

}

void Motor_add()//電機(jī)加速

{

if(key_add==0)

{

delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

if(key_add==0)

{

count+=5;

if(count>=100)

{

count=0;

}

}

while(!key_add);

}

}

void Motor_dec()//電機(jī)加減速

{

if(key_dec==0)

{

delayxms(2);//此處時(shí)間不能太長(zhǎng),否者會(huì)的中斷產(chǎn)生沖突

if(key_dec==0)

{

count-=5;

if(count>=100)

{

count=0;

}

}

while(!key_dec);

}

}

/***********定時(shí)器0初始化***********/

void timer0_init()

{

TMOD=0x01; //定時(shí)器0工作于方式1

TH0=(65536-10)/256;

TL0=(65536-10)%256;

TR0=1;

ET0=1;

EA=1;

}



評(píng)論


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

關(guān)閉