有关循迹小车程序

2019-07-16 03:26发布

我做了个循迹小车,但是速度太快,改掉PWM数值后,小车的停顿的时间就变长了,是不是要改下定时器的数值?该怎么改?而且我的循迹小车不够灵敏,程序也容易跑飞....怎么办
times New Roman">#include<reg51.h>#define uchar unsigned char#define uint unsigned intunsigned char zkb1=0 ;    //**左边电机的占空比**//unsigned char zkb2=0 ;    //**右边电机的占空比**//unsigned char t=0;        //**定时器中断计数器**//sbit RSEN1=P1^0;       // 右光对管1sbit RSEN2=P1^1;       //右光对管2sbit LSEN1=P1^2;        //左光对管1sbit LSEN2=P1^3;        //左光对管2sbit IN1=P0^0;sbit IN2=P0^1;sbit IN3=P0^2;sbit IN4=P0^3;sbit ENA=P0^4;sbit ENB=P0^5;//****************延时函数****************//void delay(int z)   {   while (z--);  }//**********初始化定时器,中断***********//void init(){  TMOD=0x01;   TH0=(65536-100)/256;   TL0=(65536-100)%256;   EA=1;   ET0=1;   TR0=1; }//***********中断函数+脉宽调制***********//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;}//***************左转函数1***************//void turn_left1(){  zkb1=0;    zkb2=50;}//***************左转函数2***************//void turn_left2(){  zkb1=0;    zkb2=60;}//***************右转函数1***************//void turn_right1(){  zkb1=50;    zkb2=0;}//***************右转函数2***************//void turn_right2(){  zkb1=60;    zkb2=0;}//***************循迹函数*****************//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,右转1***//   else  if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))    { flag=2;} //***左偏2,右转2***//   else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==1))    { flag=3; }//***右偏1,左转1***//  else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))    { flag=4; }//***右偏2,左转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; //******给电机加电启动******//     IN2=0;     IN3=1;     IN4=0;     ENA=1;     ENB=1;    while(1)     {  xunji(); //*********寻迹**********//     }    }}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
lstcspring
1楼-- · 2019-07-16 04:25
提高PWM频率,降低占空比试一下
火火清
2楼-- · 2019-07-16 07:47
lstcspring 发表于 2012-12-1 22:10
提高PWM频率,降低占空比试一下

我降低了那个占空比,但是程序容易跑飞。您能帮我检查下这个程序吗?
火舞旋风
3楼-- · 2019-07-16 10:20
楼主解决了没?
火舞旋风
4楼-- · 2019-07-16 12:05
 精彩回答 2  元偷偷看……
智能汤圆
5楼-- · 2019-07-16 13:40
火舞旋风 发表于 2013-1-22 16:59
我试了一下你的程序,我怎么总是只有一边轮子跑,求解!!!

这个可能不是程序的问题吧,可能是硬件或是电机的问题,我也遇到过这种情况
俩眼①闭,杧到.
6楼-- · 2019-07-16 15:37
我们的小车也有同样的问题,不知道现在该怎么解决了  ?哪位大神帮帮忙 !

一周热门 更多>