欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2654|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

pwm波調(diào)速程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:221980 發(fā)表于 2017-7-26 17:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
程序如下:
/*晶振:11.0592,輸出的PWM直接給L298N以驅(qū)動(dòng)電機(jī),
通過(guò)調(diào)節(jié)(percent_l=90;)等號(hào)后的數(shù)值,與(Sum100)的比值,
為占空比,如上取90比100則輸出PWM波占空比為9/10的高電平,
1/10的低電平,低電平時(shí)間越長(zhǎng)則速度越慢。
要注意的是調(diào)節(jié)#define Sum100的值可以調(diào)節(jié)PWM的總周期,
調(diào)節(jié)#define tim?200的值可以調(diào)節(jié)定時(shí)器的定時(shí)周期。*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define MOTOR_C P1    //P1口作為電機(jī)的控制口。
#define BACK 0xfa     //后退,0b1111 1010
#define FORWARD 0xf5  //前進(jìn),0b1111 0101
#define Sum 100       //總周期,為100倍的定時(shí)器時(shí)間大約27ms
#define tim 200       //初值數(shù)200約270us
sbit PWM_L=P1^0;      //左電機(jī)前進(jìn)
sbit PWM_R=P1^2;      //右電機(jī)前進(jìn)
sbit PWM_HL=P1^1;     //左電機(jī)后退
sbit PWM_HR=P1^3;     //右電機(jī)后退
void timer0_init(void);//定時(shí)器0初始化函數(shù)。
void timer1_init(void);//定時(shí)器1初始化函數(shù)。
void right(void);     //前進(jìn)右轉(zhuǎn)彎函數(shù)。
void left(void);      //前進(jìn)左轉(zhuǎn)彎函數(shù)。
void forward(void);   //前進(jìn)函數(shù)。
void stop(void);      //停止
void Delayms();       //延時(shí)1ms
void Delay100ms(unsigned int d);//延時(shí)100ms
uchar percent_l=0;    //(前進(jìn))左輪占空比。
uchar percent_r=0;    //(前進(jìn))右輪占空比。
uchar percent_hl=0;   //(后退)左輪占空比。
uchar percent_hr=0;   //(后退)右輪占空比。
uchar run_time=0;     //車輪運(yùn)行一步的時(shí)間。
void main(void)
{
timer0_init();
timer1_init();
MOTOR_C=0x00;
//ENA=1;
//ENB=1;
while(1)
{
left();
Delay100ms(0.9);
right();
Delay100ms(0.9);
//back();
Delay100ms(0.9);
forward();
Delay100ms(0.9);
//stop();
}
}
void timer0_init(void)
{
TMOD=0X11;
TH0=(65536-tim)/256;
TL0=(65536-tim)%256;
EA=1;//開(kāi)總中斷。                                                         0000
ET0=1;//開(kāi)定時(shí)器0中斷。
TR0=1;//啟動(dòng)定時(shí)器0。
}

void timer1_init(void)
{
TH1=(65536-tim)/256;
TL1=(65536-tim)%256;
ET1=1;
TR1=1;
}
/**************前進(jìn)方向****/
void right(void)
{
percent_l=50;//左輪速度快,最好去50以上  
percent_r=0;//右輪速度慢。
percent_hl=0;
percent_hr=0;
}
void left(void)
{
percent_l=0;//左輪速度慢。
percent_r=50;//右輪速度快。
percent_hl=0;
percent_hr=0;
}

void forward(void)
{
percent_l=70;//左輪同速度。
percent_r=70;//右輪同速度。
percent_hl=0;
percent_hr=0;
}
void stop(void)
{
percent_l=0;//左輪零速度。
percent_r=0;//右輪零速度。
percent_hl=0;
percent_hr=0;
}

/**************中斷服務(wù)*******************/
void timer_0(void) interrupt 1 using 1
{
static uchar temp=0;//中斷次數(shù)計(jì)數(shù)。
TR0=0;
if(temp<Sum)
{           //關(guān)總中斷,屏蔽其他中斷。
if(temp<percent_l)
{
PWM_L=1;    //左電機(jī)高電平。
}
else
{
PWM_L=0;    //左電機(jī)低電平。
}
if(temp<percent_r)
{
PWM_R=1;   //右電機(jī)高電平。
}
else
{
PWM_R=0;   //右電機(jī)低電平。
}
}
else
{temp=0;}
temp++;
TH0=(65536-tim)/256;
TL0=(65536-tim)%256;  //實(shí)現(xiàn)計(jì)數(shù)。
TR0=1;   //開(kāi)總中斷。
}  
void timer1 ( void ) interrupt 3 using 2
{   
static uchar temp1=0;
TR1=0;   //關(guān)總中斷,屏蔽其他中斷。
if(temp1<Sum)
{
if(temp1<percent_hl)
{
PWM_HL=1;//左電機(jī)高電平。
}
else
{
PWM_HL=0;//左電機(jī)低電平。
}
if(temp1<percent_hr)
{
PWM_HR= 1;//右電機(jī)高電平。
}
else
{
PWM_HR= 0;//右電機(jī)低電平。
}
}
else
{
temp1=0;
}
temp1++;
TH1=(65536-tim)/256;
TL1=(65536-tim)%256;   //實(shí)現(xiàn)計(jì)數(shù)。
TR1 = 1;  //開(kāi)總中斷。
}
void Delayms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=23;b>0;b--)
for(a=13;a>0;a--);
}  
void Delay100ms(unsigned int d)
{
unsigned int a,b,c;
for(c=d;c>0;c--)
for(b=60;b>0;b--)
for(a=130;a>0;a--);
}  

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:178382 發(fā)表于 2017-7-26 20:55 | 只看該作者
學(xué)習(xí)了,謝謝分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:130345 發(fā)表于 2017-8-5 14:12 | 只看該作者
挺好用的,拿小車來(lái)試試
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表