智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 20046|回复: 31
打印 上一主题 下一主题

c51做智能小车

  [复制链接]

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
138
QQ
威望
186
贡献
22
兑换币
0
注册时间
2009-2-26
在线时间
2 小时
跳转到指定楼层
1#
发表于 2009-4-5 15:04:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**********飞思卡尔智能汽车程序***/
//资源分配如下
//舵机用定时器0频率为50HZ
//直流用定时器1频率为10KHZ
//测速用外部中断0周期为50ms
#include<AT89X52.h>
#define  uchar  unsigned char
#define  uint   unsigned int   
sbit   PWM_Steer=P1^0;
sbit   PWM_IN1=P1^2;
sbit   PWM_IN2=P1^3;

//****舵机控制量************
//====f=24MHz
uchar  angle=8;
/*
uchar   Low_Angle_L[]={0x6d,0xdc,0x4b,0xba,0x29,0x98,0x07,0x77,0xe6, 0x55,0xc4,0x34,0xa2,0x11,0x80};
uchar   High_Angle_L[]={0x6c,0x6c,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x6f,0x70,0x70,0x71,0x71,0x72,0x72};
uchar   Low_Angle_H[]={0x50,0xe1,0x72,0x03,0x94,0x25,0xb6,0x47,0xd7,0x68,0xf9,0x8a,0x1b,0xac,0x3d};
uchar   High_Angle_H[]={0xf7,0xf6,0xf6,0xf6,0xf5,0xf5,0xf4,0xf4,0xf3,0xf3,0xf2,0xf2,0xf2,0xf1,0xf1};
*/
//===f=11.0592
uchar   Low_Angle_L[]={0x00,0x33,0x66,0x99,0xcc,0x00,0x33,0x66,0x99,0xcc,0x00,0x33,0x66,0x99,0xcc};
uchar   High_Angle_L[]={0xbc,0xbc,0xbc,0xbc,0xbc,0xbd,0xbd,0xbd,0xbd,0xbd,0xbe,0xbe,0xbe,0xbe,0xbe};
uchar   Low_Angle_H[]={0x00,0xcc,0x99,0x66,0x33,0x00,0xcc,0x99,0x66,0x33,0x00,0xcc,0x99,0x66,0x33};
uchar   High_Angle_H[]={0xfc,0xfb,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfb,0xf9,0xf9,0xf9};
/*
//****直流电机控制量********
uchar   code speed_hope[]={52,78,104,130,130,156,182,208,182,156,130,130,104,78,52};      //期望的速度值
uchar   PWM_H_D=0x00;
uchar   PWM_L_D=0xff;        //PID运算之后
uchar   last_error=0,pre_error=0;
uchar  times_stopline=0;
uchar  stop=0;
*/
//******子程序*************
void  Init();   
void  Route_Detect();
void  Start_Delay(uchar);
//******主程序*************
void main()
{
    PWM_IN1=1;
PWM_IN2=0;
    Init();
    Start_Delay(2);
    while(1)
    {
      Route_Detect();
    }
}
//*********初始化************************
void  Init()
{
    IE=0X8b;
    TMOD=0X11;
    TH0=0XF4;
    TL0=0X48;
    TH1=0X38;
    PWM_IN1=1;
    PWM_IN2=0;
    TCON=0X53;
}
//********路径检测*****************
void Route_Detect()
{   
    uchar led1,led2;
    led1=P0;
    led2=P2;
   
    if(((led1==0xf3)||(led1==0xfb)||(led1==0xfc)||(led1==0xfe)||(led1==0xfd)||(led1==0xf9))&&(led2==0xff))
      angle=0;            //-35
    else if((led1==0xf7)&&(led2==0xff))
      angle=1;            //-30
    else if((led1==0xe7)&&(led2==0xff))
      angle=2;           //-25
    else if((led1==0xef)&&(led2==0xff))
      angle=3;           //-20
    else if((led1==0xcf)&&(led2==0xff))
      angle=4;           //-15
    else if((led1==0xdf)&&(led2==0xff))
      angle=5;           //-10
    else if((led1==0x9f)&&(led2==0xff))
      angle=6;           //-5
    else if((led1==0xbf)&&(led2==0xff))
      angle=7;           //0
    else if((led1==0x3f)&&(led2==0xff))
      angle=8;          //5
    else if((led1==0x7f)&&(led2==0xff))
      angle=9;          //10
    else if((led1==0x7f)&&(led2==0xfe))
      angle=10;         //15
    else if((led1==0xff)&&(led2==0xfe))
      angle=11;         //20
    else if((led1==0xff)&&(led2==0xfc))
      angle=12;         //25
    else if((led1==0xff)&&(led2==0xfd))
      angle=13;         //30
    else if((led1==0xff)&&((led2==0xf9)||(led2==0xfb)||(led2==0xf3)||(led2==0xf7)||(led2==0xef)||(led2==0xe7)))
      angle=14;         //35
    else
      angle=9;
}

//********舵机控制*****************
void  Steer_Control() interrupt 1  
{   
     if(PWM_Steer==1)
     {
       TL0=Low_Angle_L[angle];
       TH0=High_Angle_L[angle];      
       PWM_Steer=0;
     }
     else
     {
       TL0=Low_Angle_H[angle];
       TH0=High_Angle_H[angle];
       PWM_Steer=1;
     }
} /*
//*******速度检测***************
void  Speed_Test()  interrupt 0
{   
    speed_count++;
}
//********速度运算*****************
void  speed_cal()
{
    if(speed_t>=100)     
    {  
       EX0=0;
       speed=26*speed_count;  //(cm/s)
       speed_count=0;
       EX0=1;
    }
}

//*********PID运算******************
void PID()
{   
    int PID;
    int error;
    int derror;
    int pre_derror;
    error=speed_hope[angle]-speed;
    derror=error-last_error;
    pre_derror=last_error-pre_error;
    PID=PID_P*derror+PID_I*error+PID_D*(derror-pre_error);
    PWM_H_D=256-(PWM_H_D+PID);
    PWM_L_D=256-(PWM_L_D-PID);
    pre_error=last_error;
    last_error=error;
}

//*************************
void Motor_Contol() interrupt 3
{
    speed_t++;
    if(stop==1)      //当停车标志为1时给直流电机制动脉冲
    {
      if(PWM_IN2==0)  
      {
        TH1=trig_H_TH1;
        TL1=trig_H_TL1;
        PWM_IN2=1;
        PWM_IN1=0;
      }
      else
      {
        TH1=trig_L_TH1;
        TL1=trig_L_TL1;
        PWM_IN2=0;
        PWM_IN1=0;
      }
      if(speed<=0)    //当速度减少到0时停车
      {
        TR1=0;
        PWM_IN1=0;
        PWM_IN2=0;
      }
            
    }
    else
    {
      
      if(((angle>=11)||(angle<=3))&&(speed_hope[angle]<speed))
      {
       if(PWM_IN2==1)
       {
          TL1=speed_d_l;
          TH1=0xff;
          PWM_IN1=0;
          PWM_IN2=0;
       }
       else
       {
          TL1=speed_d_h;
          TH1=0xff;
          PWM_IN1=0;
          PWM_IN2=1;
       }
      }      
      else
      {
        if(PWM_IN1==1)
        {
          TH1=0XFF;
          TL1=0x38;
          PWM_IN1=0;
          PWM_IN2=0;
        }
        else
        {
          TH1=0XFF;
          TL1=0xff;
          PWM_IN1=1;
          PWM_IN2=0;
        }
      }   
    }  
}   */
//===========
void Start_Delay(uchar k)
{
    int i=4000;             //当K为1时定时1S
    int j=1000;
    for(;k>=0;k--)
    for(;i>=0;i--)
      for(;j>=0;j--)
    ;
}

0

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
572
威望
374
贡献
82
兑换币
60
注册时间
2008-12-4
在线时间
58 小时
2#
发表于 2009-4-5 15:56:58 | 只看该作者
不错不错,谢谢!
回复 支持 反对

使用道具 举报

0

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
749
QQ
威望
361
贡献
238
兑换币
0
注册时间
2009-3-20
在线时间
75 小时
3#
发表于 2009-4-5 20:01:14 | 只看该作者
拍手
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
威望
204
贡献
42
兑换币
20
注册时间
2009-4-15
在线时间
3 小时
4#
发表于 2009-4-15 12:12:31 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
威望
259
贡献
74
兑换币
52
注册时间
2009-2-23
在线时间
22 小时
5#
发表于 2009-4-16 15:23:48 | 只看该作者
有点强?
回复 支持 反对

使用道具 举报

0

主题

165

帖子

0

精华

高级会员

Rank: 4

积分
597
QQ
威望
438
贡献
23
兑换币
0
注册时间
2008-5-11
在线时间
68 小时
6#
发表于 2009-4-17 16:03:52 | 只看该作者
没有硬件图,让观众们看的费劲哦
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
威望
194
贡献
22
兑换币
0
注册时间
2009-2-19
在线时间
24 小时
7#
发表于 2009-4-19 09:19:13 | 只看该作者
鼓掌
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
威望
179
贡献
22
兑换币
0
注册时间
2009-3-31
在线时间
11 小时
8#
发表于 2009-4-21 22:36:01 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
威望
204
贡献
44
兑换币
22
注册时间
2009-5-19
在线时间
4 小时
9#
发表于 2009-5-19 09:32:21 | 只看该作者
你好,这程序只包括循迹和铁片检测吗
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
威望
214
贡献
44
兑换币
22
注册时间
2009-5-20
在线时间
4 小时
10#
发表于 2009-5-20 08:40:08 | 只看该作者
有没有硬件图?只看程序确实有点费劲哦。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 14:44 , Processed in 0.058040 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表