找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11112|回复: 19
打印 上一主题 下一主题
收起左侧

电磁循迹智能小车 转弯时候识别能力特别差,很容易就直接冲出去了

  [复制链接]
回帖奖励 100 黑币 回复本帖可获得 10 黑币奖励! 每人限 3 次
跳转到指定楼层
楼主
ID:353191 发表于 2018-10-28 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我们课程设计要求制作一个基于电磁寻迹的智能小车系统,我们使用的是STC12C5A60S2单片机。我们用下面的代码,然后不知道为什么转弯时候识别能力特别差,很容易就直接冲出去了。还有就是总是有一个轮子要延迟一会儿才转,甚至直接不转了。传到电脑的时候有一些乱码,希望不会影响阅读。

  1. /*Define ADC operation const for ADC_CONTR*/
  2. #include <C:\KEIL\C51\INC\STC\STC12C5A60S2.H>
  3. #include <math.h>
  4. #include <intrins.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. typedef unsigned char BYTE;

  8. sbit en1=P0^0;  /* ???????P00 */
  9. sbit en2=P0^3;  /* ???????P03 */
  10. sbit s1=P0^1;  /* ??input1?P01 */
  11. sbit s2=P0^2;  /* L298Input 2 */
  12. sbit s3=P0^4;  /* L298Input 3 */
  13. sbit s4=P0^5;  /* L298Input 4 */
  14. sbit s10=P2^0;/[表情]?LED
  15. sbit s11=P2^1;/[表情]?LED

  16. unsigned int a=0,b=0;//result1???????AD????,2????,resutl??1?2???
  17. BYTE result3=0;

  18. void delay10()
  19. {
  20.     unsigned char a;
  21.     for(a=30;a>0;a--);
  22. }


  23. #define ADC_POWER   0x80            //ADC ?????
  24. #define ADC_FLAG    0x10            //ADC ???????
  25. #define ADC_START   0x08            //ADC ???????
  26. #define ADC_SPEEDLL 0x00            //420 ?????????
  27. #define ADC_SPEEDL  0x20            //280 ?????????
  28. #define ADC_SPEEDH  0x40            //140 ?????????
  29. #define ADC_SPEEDHH 0x60            //70 ?????????


  30. void delay1ms()                /[表情]?1ms
  31. {
  32.     unsigned char i, j;

  33.     _nop_();
  34.     i = 4;
  35.     j = 146;
  36.     do
  37.     {
  38.         while (--j);
  39.     } while (--i);
  40. }

  41. void InitADC()
  42. {
  43.     P1ASF = 0xff;                                    /[表情]?P1??????,??AD??
  44.     ADC_RES = 0;                                     //AD???????
  45.     ADC_CONTR = ADC_POWER | ADC_SPEEDHH;  /[表情]?AD??,????420
  46.     _nop_();                                               /[表情]???????
  47.     _nop_();                                                /[表情]???????
  48.     _nop_();                                                /[表情]???????
  49.     _nop_();                                                /[表情]???????
  50. }


  51. BYTE GetADCResult(BYTE ch)
  52. {
  53.     InitADC();                      //AD?????
  54.     ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ch | ADC_START;/[表情]???
  55.     _nop_();                        /[表情]???????
  56.     _nop_();                                                /[表情]???????
  57.     _nop_();                                                /[表情]???????
  58.     _nop_();                                                /[表情]???????
  59.     while (!(ADC_CONTR & ADC_FLAG));/[表情]?????
  60.     ADC_CONTR &= ~ADC_FLAG;         /[表情]?AD??
  61.     return ADC_RES;                 /[表情]???
  62. }



  63. bit  fangx=0;//0??,1??
  64. uchar idata t=1;   /* ???? */
  65. uchar idata mk1=0;   /* ?????????? */
  66. uchar idata mk2=0;/* ??????*/
  67. uchar idata tmp1,tmp2;/[表情]??????

  68. void zhixian(char speed) /[表情]????
  69. {
  70.     fangx=0;
  71.     s1=1; s2=0;mk1=speed;
  72.     s3=1; s4=0;mk2=speed;
  73. }

  74. void left(char speed1,char speed2)/[表情]???
  75. {
  76.     fangx=0;
  77.     s1=1; s2=0;mk1=speed1;
  78.     s3=1; s4=0;mk2=speed2;
  79. }

  80. void right(char speed1,char speed2)/[表情]???
  81. {
  82.     fangx=0;
  83.     s1=1; s2=0;mk1=speed1;
  84.     s3=1; s4=0;mk2=speed2;
  85. }

  86. void Timer0Init(void)                //100US,22.1184MHz
  87. {
  88.     AUXR |= 0x80;                //1T
  89.     TMOD &= 0xF0;
  90.     TMOD |= 0x01;                //16?????1
  91.     TL0 = 0x5C;
  92.     TH0 = 0xF7;
  93.     TF0 = 0;
  94.     TR0 = 1;
  95.     EA=1;
  96.     ET0=1;
  97. }

  98. void pwm( ) //PWM???
  99. {
  100.     {
  101.         if(t==1) {tmp1=mk1;tmp2=mk2;}
  102.         if(t<tmp1)
  103.             en1=1;
  104.         else en1=0;
  105.         if(t<tmp2)
  106.             en2=1;
  107.         else en2=0;
  108.         Timer0Init();
  109.         t++;
  110.     }while(t>=10)
  111.         t=1;
  112.     TF0=0;
  113. }

  114. void main( )
  115. {
  116.     Timer0Init();
  117.     delay1ms();
  118.     while(1)
  119.     {
  120.         a=GetADCResult(0);
  121.         b=GetADCResult(1);
  122.         if(a>=b)
  123.         {
  124.             result3=a-b;
  125.             if(result3<10)
  126.                 zhixian(7);
  127.             else left(3,10);
  128.         }
  129.         else
  130.         {
  131.             result3=b-a;
  132.             if(result3<10)
  133.                 zhixian(7);
  134.             else right(10,3);
  135.         }
  136.         pwm( );
  137.     }
  138. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:320306 发表于 2018-10-31 16:19 | 只看该作者
速度快吗?
回复

使用道具 举报

板凳
ID:320306 发表于 2018-10-31 16:20 | 只看该作者
还有就是转弯的时候可以转大角,是飞思卡尔吧,兄弟?
回复

使用道具 举报

地板
ID:418640 发表于 2018-10-31 17:26 | 只看该作者
冲出去了说明响应说明转弯响应太慢了,所以可以:(1)尽量提前检测到转弯; (2)在转弯的地方减速; (3)提高转弯系统的响应速度。
回复

使用道具 举报

5#
ID:308437 发表于 2018-10-31 17:34 | 只看该作者
想办法提前减速,(减小PWM),如果建议用PID调节,效果会好很多
回复

使用道具 举报

6#
ID:418691 发表于 2018-10-31 19:10 | 只看该作者
建议再最前端加感应器,越早知道转弯的地方越早转弯才能越完美的控制,转弯减速再多些,基本就可以了。
回复

使用道具 举报

7#
ID:418714 发表于 2018-10-31 20:33 | 只看该作者
转轴的问题
回复

使用道具 举报

8#
ID:418714 发表于 2018-10-31 20:33 | 只看该作者
转轴的问题
回复

使用道具 举报

9#
ID:418762 发表于 2018-10-31 20:50 | 只看该作者
关于一个轮子要延迟一会儿再转,建议先测试一下原因是硬件问题还是软件问题,可以编写一个简单的测试双轮转动程序试一下
回复

使用道具 举报

10#
ID:418776 发表于 2018-10-31 21:12 | 只看该作者
顶一个
回复

使用道具 举报

11#
ID:418813 发表于 2018-10-31 23:05 | 只看该作者
控速尝试一下
回复

使用道具 举报

12#
ID:402951 发表于 2018-10-31 23:12 | 只看该作者
您是位高手,在这里我只是一位初学者,您的代码我可能帮不了你,但是您的文字吸引了我,
原因有几点:1.您有车是四轮驱动的吗?或是两轮驱动(前驱还是后驱)重点.
                2.如果是两轮驱动的话,那么就要加转方向轮装置.
                3.您的思路是智能小车,那么就是随机转弯.(因为现在马头货柜智能车用的是GPS定位路线).
                4. 智能探头回传的图片与内核处理数据要快(车速与过弯距离代码).
                5.人工智能代码(识别与评诂的程序)这一段代码在十年前就有人一直在做,一但有做出来就是机械 人时代.
          如果不做GPS定位路线,那么只有做智能识别循环代码.晕..现在才发现有点跑题了.写这么多文字不想删除就当是一种思路吧.
其实您可以在循迹过弯处加点识别装置或车速放慢点(过弯调速),就能解决这问题.
回复

使用道具 举报

13#
ID:417020 发表于 2018-11-1 07:55 来自手机 | 只看该作者
应该是车速问题
回复

使用道具 举报

14#
ID:418922 发表于 2018-11-1 09:30 | 只看该作者
循迹靠的是对路况的识别,你看看是不是识别的过程没编译好
回复

使用道具 举报

15#
ID:418931 发表于 2018-11-1 09:33 | 只看该作者
建议使用PID调节
回复

使用道具 举报

16#
ID:419676 发表于 2018-11-2 14:56 | 只看该作者
这种情况应该降低车速,并且加快转弯检测的响应速率
回复

使用道具 举报

17#
ID:419886 发表于 2018-11-2 20:51 | 只看该作者
硬件问题吧,还有就是减速拐弯
回复

使用道具 举报

18#
ID:385372 发表于 2018-11-2 21:24 | 只看该作者
轨迹传感器调节一下
回复

使用道具 举报

19#
ID:420028 发表于 2018-11-3 10:18 | 只看该作者
建议使用PID调节
回复

使用道具 举报

20#
ID:473219 发表于 2019-8-23 14:46 | 只看该作者
试着加长前沿
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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