智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: liuyong99
打印 上一主题 下一主题

光电组的源代码--分享

  [复制链接]

3

主题

35

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1357
QQ
威望
267
贡献
1038
兑换币
0
注册时间
2010-10-17
在线时间
26 小时
81#
发表于 2010-10-17 10:44:59 | 只看该作者
谢谢楼主
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
威望
248
贡献
45
兑换币
12
注册时间
2010-9-1
在线时间
3 小时
82#
发表于 2010-10-24 14:33:29 | 只看该作者
楼主好人 啊
回复 支持 反对

使用道具 举报

1

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
QQ
威望
261
贡献
30
兑换币
0
注册时间
2009-11-13
在线时间
2 小时
83#
发表于 2010-11-2 01:09:54 | 只看该作者
#include <hidef.h>
#include <mc9s12dg128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
//=========================public variable=====================
//-----------------------turning variable------------------
unsigned char sam_g[15]; //道路检测值
unsigned int angle_data; //舵机转角
int car_positn; //赛车当前位置参数
int pre_positn;
unsigned int black_sensor_number; //检测到黑线的传感器个数
int positn_temp[10];
unsigned int t=0;
//---------------------speed variable---------------------
unsigned char dir_flag; //方向标志,为1表示检测到有效路径,可以给驱动力
unsigned char brake_flag; //刹车标志位 判断当前是否需要刹车
unsigned int car_driver; //驱动力控制
unsigned int pulse_count; //速度检测 统计脉冲个数
unsigned int ideal_speed; //车的理想速度
unsigned int times; //丢失黑线的次数
int speed_error; //理想与实际速度偏差值
int pre_error; //速度PID 前一次的速度误差值 ideal_speed- pulse_count
int pre_d_error; //速度PID 前一次的速度误差之差 d_error-pre_d_error
int pk; //速度PID值
//---------------------start_line variable-------------------
unsigned char start_line_acc; //统计检测起跑线次数
unsigned char finish_flag; //起跑线标志位,为1表示检测到起跑线3次
//----------------------dis_play variable--------------------
unsigned int start_flag,start_count;
//---------------------table-------------------------
unsigned char speed_table11[13]={270,260,250,240,200,180,180,180,170,140,140,100,90}; //15.0s
unsigned char speed_table21[13]= {25,24,23,20,19,17,17,17,15,12,11,10,9}; //15.0s
unsigned char speed_table12[13]= {29,28,27,26,25,20,20,20,19,17,15,10,9}; //15.0s
unsigned char speed_table22[13]= {27,26,25,24,20,18,18,18,17,14,14,10,9}; //15.0s
unsigned int circle; //控制赛车跑几圈停车
#define kp 2000//2000
#define ki 5//5
#define kd 10//10
#define Angle_Center 4344 //舵机中心位置
#define lose_limit 30000 //丢失黑线后 滑翔时间
void data_init(void);
void crg_init(void); // 锁相环初始化
void pwm_init(void); // PWM信号初始化
void ect_init(void); // ECT初始化
void sam_position(void); //读结果
void check_start(void); //起跑线检测函数
void car_position(void); //计算car_positn
void angle(void); //计算转角
void speed(void); //计算速度
void driver(void); //驱动
void pre_start(void);
void delay(void);
void found_start(void);
void stop(void);
void pid(void);
unsigned int absolute(int);
//========================main loop============================
void main(void)
{
  data_init(); //设置基本数据
  crg_init(); //锁向环初始化
  ect_init(); //ECT
  pwm_init(); //初始化PWM
  pre_start();
  EnableInterrupts;
  for(;;)
  {
    sam_position(); //读采样值
    check_start(); //检测起跑线
    car_position(); //计算car_positn
    angle(); //计算转角
    speed(); //计算速度
    driver(); //拐弯 驱动
   }
}
//--------------------data_init--------------------
void data_init(void)
{
  start_line_acc=0;
  finish_flag=0;
  DDRA=0X00;
  DDRB=0X00;
  times=0;
}
//-------------------pre_start------------------
void pre_start(void)
{
unsigned int i;
PWMDTY01=Angle_Center;
PWMDTY67=0;
for(i=0;i<10;i++) delay();
PWMDTY23=0;
}
//----------------------crg_init-------------------
void crg_init(void)
{
SYNR=0x02;
REFDV=0x01;
while((CRGFLG & 0x08)==0 );
CLKSEL =0x80;
}
//--------------------pwm_init------------------------
void pwm_init(void)
      {
PWMCTL=0xB0; // 设置通道76、32、10级连
PWME=0x00; // 通道禁止输出;
PWMPRCLK=0x12;//预分频:A_CLK=busclk/2^2=6M B_CLK=BUSCLK/2^1=12M
PWMSCLA=0x01; //SA_CLK=A_CLK/(2*1)==3MHz
PWMSCLB=0X01; //SB_CLK=B_CLK/(2*1)==6MHz
PWMPOL=0x8A; //极性选择起始为高电平;
PWMCLK=0x8A; //PWM01 选择 SA_CLK PWM23 67选择SB_CLK
PWMCNT0=0x00;
PWMCNT1=0x00;
PWMCNT2=0x00;
PWMCNT3=0x00;
PWMCNT6=0x00;
PWMCNT7=0x00;
PWMPER01=60000; // 周期==(1/3M)*(60000)=20ms
PWMPER23=10000; // F=6M/10000==600Hz
PWMPER67=10000; // F=6M/10000==600Hz
PWMCAE=0x00; //左对齐方式
PWME=0x82; // 通道1,7输出使能;
}
//-----------------------ect_init-------------------------
void ect_init(void)
{
TCTL4=0x01; // Set the rising endge for PT0.
PACN10=0x0000;
PBCTL=0x40; //pt0 and pt1 级联成16位计数器
MCCNT=60000; //60000*24M/16=40ms
MCCTL=0xC7;
TSCR1=0x10;
}
void sam_position(void)
{
sam_g[1]= PORTA_PA4;
sam_g[2]= PORTA_PA3;
sam_g[3]= PORTA_PA2;
sam_g[4]= PORTA_PA1;
sam_g[5]= PORTA_PA0;
sam_g[6]= PORTB_PB0;
sam_g[7]= PORTB_PB1;
sam_g[8]= PORTB_PB2;
sam_g[9]= PORTB_PB3;
sam_g[10]= PORTB_PB4;
sam_g[11]= PORTB_PB5;
sam_g[12]= PORTB_PB6;
sam_g[13]= PORTB_PB7;
}
//----------------------check_start---------------------
void check_start(void)
{
unsigned char i,j=0;
start_flag=0;
for(i=1;i<14;i++)
if(sam_g^sam_g[i+1])
        j++;
  if(j>=4)
  {
  if(sam_g[5] &&((!sam_g[4])&&(!sam_g[6])) &&((!sam_g[3])&&(!sam_g[7]))&&(sam_g[1]&&sam_g[10])
) start_flag=1;
else if(sam_g[5]&&sam_g[6] &&((!sam_g[4])&&(!sam_g[7]))&&((!sam_g[3])&&(!sam_g[8])) &&(sam_g[1]&&sam_g[10])
) start_flag=1;
else if( sam_g[6] &&((!sam_g[5])&&(!sam_g[7])) &&((!sam_g[4])&&(!sam_g[8])) &&(sam_g[1]&&sam_g[11])
) start_flag=1;
else if( sam_g[6]&&sam_g[7] &&((!sam_g[5])&&(!sam_g[8])) &&((!sam_g[4])&&(!sam_g[9])) &&(sam_g[2]&&sam_g[11])
) start_flag=1;
else if( sam_g[7] &&((!sam_g[6])&&(!sam_g[8])) &&((!sam_g[5])&&(!sam_g[9])) &&(sam_g[2]&&sam_g[12])
) start_flag=1;
else if( sam_g[7]&&sam_g[8] &&((!sam_g[6])&&(!sam_g[9])) &&((!sam_g[5])&&(!sam_g[10])) &&(sam_g[3]&&sam_g[12])
) start_flag=1;
else if( sam_g[8] &&((!sam_g[7])&&(!sam_g[9])) &&((!sam_g[6])&&(!sam_g[10])) &&(sam_g[3]&&sam_g[13])
) start_flag=1;
else if( sam_g[8]&&sam_g[9]&&((!sam_g[7])&&(!sam_g[10])) &&((!sam_g[6])&&(!sam_g[11])) &&(sam_g[4]&&sam_g[13])
) start_flag=1;
else if( sam_g[9] &&((!sam_g[8])&&(!sam_g[10])) &&((!sam_g[7])&&(!sam_g[11])) &&(sam_g[4]&&sam_g[13])
) start_flag=1;
}
if(start_flag)
      art_count++;
else
      art_count=0;
if(start_count==2)
{
found_start();
start_count=0;
}
if(start_line_acc==2)
{
finish_flag=1;
}
}
//--------------------------car_position------------------------
回复 支持 反对

使用道具 举报

0

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
威望
233
贡献
65
兑换币
0
注册时间
2010-10-29
在线时间
8 小时
84#
发表于 2010-11-2 16:39:15 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
威望
197
贡献
26
兑换币
0
注册时间
2010-10-21
在线时间
8 小时
85#
发表于 2010-11-2 18:52:27 | 只看该作者
谢了
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
威望
202
贡献
32
兑换币
0
注册时间
2010-9-14
在线时间
5 小时
86#
发表于 2010-11-3 20:31:19 | 只看该作者
研究一下,谢谢了。
回复 支持 反对

使用道具 举报

1

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
585
威望
359
贡献
84
兑换币
0
注册时间
2010-10-10
在线时间
71 小时
87#
发表于 2010-11-8 21:56:36 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

0

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
威望
233
贡献
65
兑换币
0
注册时间
2010-10-29
在线时间
8 小时
88#
发表于 2010-11-8 23:55:22 | 只看该作者
好东西,
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
415
威望
313
贡献
74
兑换币
0
注册时间
2010-10-24
在线时间
14 小时
89#
发表于 2010-11-24 08:05:36 | 只看该作者
感谢楼主分享
回复 支持 反对

使用道具 举报

2

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
威望
256
贡献
35
兑换币
0
注册时间
2010-11-27
在线时间
5 小时
90#
发表于 2011-1-16 21:20:53 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 14:36 , Processed in 0.046101 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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