智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6222|回复: 14
打印 上一主题 下一主题

[软件类] 求第四届北科光电的程序!

[复制链接]

1

主题

286

帖子

0

精华

禁止发言

积分
10167

论坛元老奖章

QQ
威望
5307
贡献
4706
兑换币
26
注册时间
2009-3-27
在线时间
77 小时
跳转到指定楼层
1#
发表于 2010-5-15 13:04:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
QQ
威望
259
贡献
20
兑换币
0
注册时间
2010-3-28
在线时间
5 小时
2#
发表于 2010-5-15 13:04:03 | 只看该作者
#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------------------------
复制代xsgg
回复

使用道具 举报

1

主题

286

帖子

0

精华

禁止发言

积分
10167

论坛元老奖章

QQ
威望
5307
贡献
4706
兑换币
26
注册时间
2009-3-27
在线时间
77 小时
3#
 楼主| 发表于 2010-5-15 17:02:10 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
威望
253
贡献
45
兑换币
16
注册时间
2010-4-30
在线时间
5 小时
4#
发表于 2010-5-15 21:17:56 | 只看该作者
借宝地问个问题,我们的最小系统板今天突然不好使了,板上的正负极都短路了,有人说是单片机烧了,有没有经历过这事的同志呢?
回复

使用道具 举报

1

主题

286

帖子

0

精华

禁止发言

积分
10167

论坛元老奖章

QQ
威望
5307
贡献
4706
兑换币
26
注册时间
2009-3-27
在线时间
77 小时
5#
 楼主| 发表于 2010-5-15 21:26:03 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1

主题

286

帖子

0

精华

禁止发言

积分
10167

论坛元老奖章

QQ
威望
5307
贡献
4706
兑换币
26
注册时间
2009-3-27
在线时间
77 小时
6#
 楼主| 发表于 2010-5-16 15:34:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

9

主题

358

帖子

42

精华

金牌会员

Rank: 6Rank: 6

积分
1296
威望
80
贡献
506
兑换币
206
注册时间
2008-9-18
在线时间
355 小时
7#
发表于 2010-5-17 13:19:01 | 只看该作者
别老想人人家的程序啊,再说就算把源程序给你的话你也未必能用,关键是算法和思路,人家也是辛辛苦苦的写出来的。能发出来个技术报告已经不错了

补充内容 (2015-4-23 09:10):
真人游戏|足球篮球|时时彩| 六合投注| 网络赚钱去SO娱乐城:顶级信用,提现百分百即时到账SO.CC
回复

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
QQ
威望
259
贡献
20
兑换币
0
注册时间
2010-3-28
在线时间
5 小时
8#
发表于 2010-5-20 17:34:36 | 只看该作者
aggs
回复

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
QQ
威望
259
贡献
20
兑换币
0
注册时间
2010-3-28
在线时间
5 小时
9#
发表于 2010-5-20 17:34:41 | 只看该作者
hdaj
回复

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
QQ
威望
259
贡献
20
兑换币
0
注册时间
2010-3-28
在线时间
5 小时
10#
发表于 2010-5-20 17:34:47 | 只看该作者
ksx
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 15:41 , Processed in 0.069139 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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