智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

【原创】K60之超声波测速方案(本人已验证)

  [复制链接]

0

主题

26

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1673
威望
746
贡献
481
兑换币
494
注册时间
2013-8-29
在线时间
223 小时
31#
发表于 2014-6-28 11:20:01 | 只看该作者
andyxu 发表于 2014-6-27 22:34
在上升沿采集的数据停止不变是什么意思,我测试过,如果是障碍(两块砖头叠起来)那个侧面还是能检测的, ...

计算距离用的是高电平的时间,就是在上升沿和下降沿分别采集T口返回来的数值(我们用的是T口作为接收端),红色是上升沿采回来的值,黄色是在下降沿采回来的值,另一个是计算的距离,正常的情况下红色是和黄色的波形相近的,计算出来的距离就很正常,但是有时候红色的就不变,不知道是为什么。不知道这是为什么啊?大神的波形是什么样的啊?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

0

主题

26

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1673
威望
746
贡献
481
兑换币
494
注册时间
2013-8-29
在线时间
223 小时
32#
发表于 2014-6-28 11:21:15 | 只看该作者
尘梦忆无言 发表于 2014-6-28 11:20
计算距离用的是高电平的时间,就是在上升沿和下降沿分别采集T口返回来的数值(我们用的是T口作为接收端) ...

下边的图蓝色是下降沿和上升沿的差值
回复 支持 反对

使用道具 举报

13

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2166
威望
970
贡献
536
兑换币
607
注册时间
2013-7-29
在线时间
330 小时
33#
发表于 2014-6-29 20:03:09 | 只看该作者
仰望,蘫迗 发表于 2014-6-3 21:24
我们是用跳变沿捕捉的,上升沿的时候读个计数器值,然后下降沿再读一次,两次作差就是了

如果你读到的这个计数值已经很小的话,那不是还没有等到下降沿就产生中断了?
回复 支持 反对

使用道具 举报

12

主题

875

帖子

0

精华

常驻嘉宾

删繁就简。

Rank: 8Rank: 8

积分
4602

活跃会员奖章优秀会员奖章论坛元老奖章在线王奖章

QQ
威望
2924
贡献
594
兑换币
1807
注册时间
2013-7-20
在线时间
542 小时
34#
发表于 2014-6-29 20:56:21 | 只看该作者
v8266 发表于 2014-6-29 20:03
如果你读到的这个计数值已经很小的话,那不是还没有等到下降沿就产生中断了?

那就看你计时器的频率咯
回复 支持 反对

使用道具 举报

10

主题

455

帖子

0

精华

常驻嘉宾

合工大-斛兵7队

Rank: 8Rank: 8

积分
5059

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
2737
贡献
1320
兑换币
1506
注册时间
2013-9-15
在线时间
501 小时
毕业学校
合肥工业大学
35#
发表于 2014-6-29 21:24:25 | 只看该作者
哈哈,我记得我好像说过周期60ms这个问题,也是在王大神的帖子下面,但不知道楼主说的是不是我咯。。。。这个方案肯定是可行的,但是我更担心超声波的是它的探测范围,太广 会引入干扰,不过我也没有尝试过,当时为了省这个麻烦就直接换了方案了,但是看貌似有人已经做出来了而且效果不错。。楼主是如何做的?
回复 支持 反对

使用道具 举报

13

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2166
威望
970
贡献
536
兑换币
607
注册时间
2013-7-29
在线时间
330 小时
36#
发表于 2014-6-29 21:38:23 | 只看该作者
你好,我按照你的说法谢了下面的代码,但是没反应,能否帮我看看

主函数
  if(HC_SR04_start==0)
  {
    Trig=1;
    delayus(30);
    Trig=0;
    enable_irq(3 + 87);//使能PTD中断
    HC_SR04_start=1;
  }



    if(HC_SR04_start==1) //说明第一次进入中断,接收到高电平,超声波开始计时
    {
      disable_irq(68+2); //关闭PIT2中断

      PIT_TCTRL(PIT2) &= ( ~PIT_TCTRL_TEN_MASK & ~PIT_TCTRL_TIE_MASK );   //关闭 PITn定时器、

PITn中断
      PIT_LDVAL2 = 60*50000;//给初值 总线频率50M   60ms?

      PIT_TCTRL(PIT2) |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK );   //使能 PITn定时器,并开

PITn中断
      enable_irq(68+2);//使能PIT2

      HC_SR04_start=2;
    }
    else if(HC_SR04_start==2)//第二次中断
    {
      timeend   = PIT_CVAL2;
      disable_irq(3+87); //关闭PTD中断
      disable_irq(68+2); //关闭PIT2中断

      time      = 60*50000-timeend;
      distance  = time/50000*340/2;

      HC_SR04_start=0; //重新计算
    }

回复 支持 反对

使用道具 举报

22

主题

425

帖子

0

精华

常驻嘉宾

追梦

Rank: 8Rank: 8

积分
5460
QQ
威望
2558
贡献
1504
兑换币
1706
注册时间
2013-1-27
在线时间
699 小时
37#
 楼主| 发表于 2014-6-30 09:47:51 | 只看该作者
v8266 发表于 2014-6-29 21:38
你好,我按照你的说法谢了下面的代码,但是没反应,能否帮我看看

主函数

HC_SR04_start 这个标志位应该在中断里面进行改变的,也就是说 上升沿到来置1,下降沿到来置2,还有  PIT不需要用到中断
回复 支持 反对

使用道具 举报

13

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2166
威望
970
贡献
536
兑换币
607
注册时间
2013-7-29
在线时间
330 小时
38#
发表于 2014-6-30 10:43:26 | 只看该作者
andyxu 发表于 2014-6-30 09:47
HC_SR04_start 这个标志位应该在中断里面进行改变的,也就是说 上升沿到来置1,下降沿到来置2,还有  PIT ...

PIT不需要用到中断?不是60ms中断吗?

    if(HC_SR04_start==0)  //主函数
    {
      Trig=1;
      exti_init(PORTD,12,either_down);//还没有开中断
      delayus(30);
      Trig=0;
      enable_irq(3 + 87);//PTD
    }


  DisableInterrupts;   //中断函数
  HC_SR04_start++;
  if(PORTD_ISFR & (1 << 12))         //PTD12触发中断
  {
    PORTD_ISFR  |= (1 << 12);        //写1清中断标志位
    if(HC_SR04_start==1) //说明第一次进入中断,接收到高电平,超声波开始计时
    {
      pit_init_ms(PIT2,60);
    }
    if(HC_SR04_start==2)
    {
      timeend   = PIT_CVAL2;
      disable_irq(3+87); //PTD
      disable_irq(68+2); //PIT
      time      =60*bus_clk_khz-timeend;
      distance  = time/bus_clk_khz*340/2;
      HC_SR04_start=0;
    }
  }
  EnableInterrupts;

还是不行 数据乱跳
回复 支持 反对

使用道具 举报

5

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2720

优秀会员奖章活跃会员奖章

威望
1496
贡献
944
兑换币
1011
注册时间
2012-11-7
在线时间
140 小时
39#
发表于 2014-7-3 21:09:52 | 只看该作者
赞一个
回复 支持 反对

使用道具 举报

137

主题

4169

帖子

1

精华

杰出人士

我认为最省轮子的跑法最快。曾经的西科4队

Rank: 12Rank: 12Rank: 12

积分
14006
QQ
威望
6233
贡献
1229
兑换币
4171
注册时间
2013-1-10
在线时间
3272 小时
40#
发表于 2014-7-7 12:28:57 | 只看该作者
赞~~我们另一组用128和超声波,检测50cm,2.8+稳定通过。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-27 21:26 , Processed in 0.174743 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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