我本來是想用pwm調(diào)速的,可是它輸出高底電平啊,而不是平均電壓,小車一走一停的。我是想讓它一直走,通過改變占空比來改變速度。!程序如下
#include<reg51.h> #define uchar unsigned char #define uint unsigned int unsigned char zkb1=0 ; //**左邊電機(jī)的占空比**// unsigned char zkb2=0 ; //**右邊電機(jī)的占空比**// unsigned char t=0; //**定時(shí)器中斷計(jì)數(shù)器**// sbit RSEN1=P1^0; // 右光對管1 sbit RSEN2=P1^1; //右光對管2 sbit LSEN1=P1^2; //左光對管1 sbit LSEN2=P1^3; //左光對管2 sbit IN1=P0^0; sbit IN2=P0^1; sbit IN3=P0^2; sbit IN4=P0^3; sbit ENA=P0^4; sbit ENB=P0^5; //****************延時(shí)函數(shù)****************// void delay(int z) { while (z--); } //**********初始化定時(shí)器,中斷***********// void init() { TMOD=0x01; TH0=(65536-100)/256; TL0=(65536-100)%256; EA=1; ET0=1; TR0=1; } //***********中斷函數(shù)+脈寬調(diào)制***********// void timer0() interrupt 1 { if(t<zkb1) ENA=1; else ENA=0; if(t<zkb2) ENB=1; else ENB=0; t++; if(t>=100) {t=0;} } //******************直行******************// void qianjin() { zkb1=30; zkb2=30; } //***************左轉(zhuǎn)函數(shù)1***************// void turn_left1() { zkb1=0; zkb2=50; } //***************左轉(zhuǎn)函數(shù)2***************// void turn_left2() { zkb1=0; zkb2=60; } //***************右轉(zhuǎn)函數(shù)1***************// void turn_right1() { zkb1=50; zkb2=0; } //***************右轉(zhuǎn)函數(shù)2***************// void turn_right2() { zkb1=60; zkb2=0; } //***************循跡函數(shù)*****************// void xunji() { uchar flag; if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1)) { flag=0; }//*******直行*******// else if((RSEN1==0)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1)) { flag=1;} //***左偏1,右轉(zhuǎn)1***// else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1)) { flag=2;} //***左偏2,右轉(zhuǎn)2***// else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==1)) { flag=3; }//***右偏1,左轉(zhuǎn)1***// else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0)) { flag=4; }//***右偏2,左轉(zhuǎn)2***// switch (flag) { case 0:qianjin(); break; case 1:turn_right1(); break; case 2:turn_right2(); break; case 3:turn_left1(); break; case 4:turn_left2(); break; default: break; } } //****************主程序****************// void main() { init(); zkb1=30; zkb2=30; while(1) { IN1=1; //******給電機(jī)加電啟動(dòng)******// IN2=0; IN3=1; IN4=0; ENA=1; ENB=1; while(1) { xunji(); //*********尋跡**********// } } }
|