智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 31151|回复: 129
打印 上一主题 下一主题

光电组的源代码--分享

  [复制链接]

9

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
威望
270
贡献
16
兑换币
0
注册时间
2009-12-23
在线时间
3 小时
跳转到指定楼层
1#
发表于 2010-1-21 16:49:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chenrunshe_007 于 2010-1-23 14:07 编辑
  1. #include <hidef.h>
  2. #include <mc9s12dg128.h>
  3. #pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
  4. //=========================public variable=====================
  5. //-----------------------turning variable------------------
  6. unsigned char sam_g[15]; //道路检测值
  7. unsigned int angle_data; //舵机转角
  8. int car_positn; //赛车当前位置参数
  9. int pre_positn;
  10. unsigned int black_sensor_number; //检测到黑线的传感器个数
  11. int positn_temp[10];
  12. unsigned int t=0;
  13. //---------------------speed variable---------------------
  14. unsigned char dir_flag; //方向标志,为1表示检测到有效路径,可以给驱动力
  15. unsigned char brake_flag; //刹车标志位 判断当前是否需要刹车
  16. unsigned int car_driver; //驱动力控制
  17. unsigned int pulse_count; //速度检测 统计脉冲个数
  18. unsigned int ideal_speed; //车的理想速度
  19. unsigned int times; //丢失黑线的次数
  20. int speed_error; //理想与实际速度偏差值
  21. int pre_error; //速度PID 前一次的速度误差值 ideal_speed- pulse_count
  22. int pre_d_error; //速度PID 前一次的速度误差之差 d_error-pre_d_error
  23. int pk; //速度PID值
  24. //---------------------start_line variable-------------------
  25. unsigned char start_line_acc; //统计检测起跑线次数
  26. unsigned char finish_flag; //起跑线标志位,为1表示检测到起跑线3次
  27. //----------------------dis_play variable--------------------
  28. unsigned int start_flag,start_count;
  29. //---------------------table-------------------------
  30. unsigned char speed_table11[13]={270,260,250,240,200,180,180,180,170,140,140,100,90}; //15.0s
  31. unsigned char speed_table21[13]= {25,24,23,20,19,17,17,17,15,12,11,10,9}; //15.0s
  32. unsigned char speed_table12[13]= {29,28,27,26,25,20,20,20,19,17,15,10,9}; //15.0s
  33. unsigned char speed_table22[13]= {27,26,25,24,20,18,18,18,17,14,14,10,9}; //15.0s
  34. unsigned int circle; //控制赛车跑几圈停车
  35. #define kp 2000//2000
  36. #define ki 5//5
  37. #define kd 10//10
  38. #define Angle_Center 4344 //舵机中心位置
  39. #define lose_limit 30000 //丢失黑线后 滑翔时间
  40. void data_init(void);
  41. void crg_init(void); // 锁相环初始化
  42. void pwm_init(void); // PWM信号初始化
  43. void ect_init(void); // ECT初始化
  44. void sam_position(void); //读结果
  45. void check_start(void); //起跑线检测函数
  46. void car_position(void); //计算car_positn
  47. void angle(void); //计算转角
  48. void speed(void); //计算速度
  49. void driver(void); //驱动
  50. void pre_start(void);
  51. void delay(void);
  52. void found_start(void);
  53. void stop(void);
  54. void pid(void);
  55. unsigned int absolute(int);
  56. //========================main loop============================
  57. void main(void)
  58. {
  59.   data_init(); //设置基本数据
  60.   crg_init(); //锁向环初始化
  61.   ect_init(); //ECT
  62.   pwm_init(); //初始化PWM
  63.   pre_start();
  64.   EnableInterrupts;
  65.   for(;;)
  66.   {
  67.     sam_position(); //读采样值
  68.     check_start(); //检测起跑线
  69.     car_position(); //计算car_positn
  70.     angle(); //计算转角
  71.     speed(); //计算速度
  72.     driver(); //拐弯 驱动
  73.    }
  74. }
  75. //--------------------data_init--------------------
  76. void data_init(void)
  77. {
  78.   start_line_acc=0;
  79.   finish_flag=0;
  80.   DDRA=0X00;
  81.   DDRB=0X00;
  82.   times=0;
  83. }
  84. //-------------------pre_start------------------
  85. void pre_start(void)
  86. {
  87. unsigned int i;
  88. PWMDTY01=Angle_Center;
  89. PWMDTY67=0;
  90. for(i=0;i<10;i++) delay();
  91. PWMDTY23=0;
  92. }
  93. //----------------------crg_init-------------------
  94. void crg_init(void)
  95. {
  96. SYNR=0x02;
  97. REFDV=0x01;
  98. while((CRGFLG & 0x08)==0 );
  99. CLKSEL =0x80;
  100. }
  101. //--------------------pwm_init------------------------
  102. void pwm_init(void)
  103.       {
  104. PWMCTL=0xB0; // 设置通道76、32、10级连
  105. PWME=0x00; // 通道禁止输出;
  106. PWMPRCLK=0x12;//预分频:A_CLK=busclk/2^2=6M B_CLK=BUSCLK/2^1=12M
  107. PWMSCLA=0x01; //SA_CLK=A_CLK/(2*1)==3MHz
  108. PWMSCLB=0X01; //SB_CLK=B_CLK/(2*1)==6MHz
  109. PWMPOL=0x8A; //极性选择起始为高电平;
  110. PWMCLK=0x8A; //PWM01 选择 SA_CLK PWM23 67选择SB_CLK
  111. PWMCNT0=0x00;
  112. PWMCNT1=0x00;
  113. PWMCNT2=0x00;
  114. PWMCNT3=0x00;
  115. PWMCNT6=0x00;
  116. PWMCNT7=0x00;
  117. PWMPER01=60000; // 周期==(1/3M)*(60000)=20ms
  118. PWMPER23=10000; // F=6M/10000==600Hz
  119. PWMPER67=10000; // F=6M/10000==600Hz
  120. PWMCAE=0x00; //左对齐方式
  121. PWME=0x82; // 通道1,7输出使能;
  122. }
  123. //-----------------------ect_init-------------------------
  124. void ect_init(void)
  125. {
  126. TCTL4=0x01; // Set the rising endge for PT0.
  127. PACN10=0x0000;
  128. PBCTL=0x40; //pt0 and pt1 级联成16位计数器
  129. MCCNT=60000; //60000*24M/16=40ms
  130. MCCTL=0xC7;
  131. TSCR1=0x10;
  132. }
  133. void sam_position(void)
  134. {
  135. sam_g[1]= PORTA_PA4;
  136. sam_g[2]= PORTA_PA3;
  137. sam_g[3]= PORTA_PA2;
  138. sam_g[4]= PORTA_PA1;
  139. sam_g[5]= PORTA_PA0;
  140. sam_g[6]= PORTB_PB0;
  141. sam_g[7]= PORTB_PB1;
  142. sam_g[8]= PORTB_PB2;
  143. sam_g[9]= PORTB_PB3;
  144. sam_g[10]= PORTB_PB4;
  145. sam_g[11]= PORTB_PB5;
  146. sam_g[12]= PORTB_PB6;
  147. sam_g[13]= PORTB_PB7;
  148. }
  149. //----------------------check_start---------------------
  150. void check_start(void)
  151. {
  152. unsigned char i,j=0;
  153. start_flag=0;
  154. for(i=1;i<14;i++)
  155. if(sam_g^sam_g[i+1])
  156.         j++;
  157.   if(j>=4)
  158.   {
  159.   if(sam_g[5] &&((!sam_g[4])&&(!sam_g[6])) &&((!sam_g[3])&&(!sam_g[7]))&&(sam_g[1]&&sam_g[10])
  160. ) start_flag=1;
  161. 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])
  162. ) start_flag=1;
  163. else if( sam_g[6] &&((!sam_g[5])&&(!sam_g[7])) &&((!sam_g[4])&&(!sam_g[8])) &&(sam_g[1]&&sam_g[11])
  164. ) start_flag=1;
  165. 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])
  166. ) start_flag=1;
  167. else if( sam_g[7] &&((!sam_g[6])&&(!sam_g[8])) &&((!sam_g[5])&&(!sam_g[9])) &&(sam_g[2]&&sam_g[12])
  168. ) start_flag=1;
  169. 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])
  170. ) start_flag=1;
  171. else if( sam_g[8] &&((!sam_g[7])&&(!sam_g[9])) &&((!sam_g[6])&&(!sam_g[10])) &&(sam_g[3]&&sam_g[13])
  172. ) start_flag=1;
  173. 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])
  174. ) start_flag=1;
  175. else if( sam_g[9] &&((!sam_g[8])&&(!sam_g[10])) &&((!sam_g[7])&&(!sam_g[11])) &&(sam_g[4]&&sam_g[13])
  176. ) start_flag=1;
  177. }
  178. if(start_flag)
  179.       art_count++;
  180. else
  181.       art_count=0;
  182. if(start_count==2)
  183. {
  184. found_start();
  185. start_count=0;
  186. }
  187. if(start_line_acc==2)
  188. {
  189. finish_flag=1;
  190. }
  191. }
  192. //--------------------------car_position------------------------
复制代码

21

主题

1019

帖子

0

精华

常驻嘉宾

我爱雯婕

Rank: 8Rank: 8

积分
4657
威望
2223
贡献
1682
兑换币
4
注册时间
2009-3-4
在线时间
376 小时
2#
发表于 2010-1-23 14:06:57 | 只看该作者
回复 1# liuyong99
你用代码编辑工具写看起来就爽多了。
回复 支持 反对

使用道具 举报

16

主题

427

帖子

0

精华

常驻嘉宾

连长

Rank: 8Rank: 8

积分
5621

论坛元老奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
793
贡献
4580
兑换币
8
注册时间
2009-11-27
在线时间
124 小时
3#
发表于 2010-1-31 08:59:16 | 只看该作者
谢谢楼主了
回复 支持 反对

使用道具 举报

1

主题

131

帖子

0

精华

高级会员

Rank: 4

积分
524
威望
386
贡献
68
兑换币
0
注册时间
2010-1-4
在线时间
35 小时
4#
发表于 2010-2-17 20:45:30 | 只看该作者
谢谢lz
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
威望
210
贡献
33
兑换币
12
注册时间
2009-11-14
在线时间
3 小时
5#
发表于 2010-2-26 10:45:56 | 只看该作者
我是新手,弱弱的问楼主一下,这个代码是直接烧进车里就能用的吗?和外部PCB电路设计有关系吗?
回复 支持 反对

使用道具 举报

15

主题

203

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4489

论坛元老奖章

QQ
威望
484
贡献
3979
兑换币
0
注册时间
2010-2-25
在线时间
13 小时
6#
发表于 2010-2-27 11:47:17 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

4

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
241
贡献
21
兑换币
0
注册时间
2009-7-10
在线时间
16 小时
7#
发表于 2010-2-28 16:13:54 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

4

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
241
贡献
21
兑换币
0
注册时间
2009-7-10
在线时间
16 小时
8#
发表于 2010-2-28 16:13:59 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

4

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
241
贡献
21
兑换币
0
注册时间
2009-7-10
在线时间
16 小时
9#
发表于 2010-2-28 16:14:06 | 只看该作者
得到
回复 支持 反对

使用道具 举报

4

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
241
贡献
21
兑换币
0
注册时间
2009-7-10
在线时间
16 小时
10#
发表于 2010-2-28 16:14:12 | 只看该作者
烦恼光鲜
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 12:35 , Processed in 0.063817 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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