发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印
[STM32F1]

拆解irobot扫地机器人【分析自动充电功能】附STM32解码代码

[复制链接]
楼主: yunyoushuaiqi
手机看帖
扫描二维码
随时随地手机跟帖
41
yunyoushuaiqi|  楼主 | 2017-1-16 15:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
有些同学提问当采集到红外编码信号以后应该如何控制机器人的移动问题。我这里贴一个分析文档。只不过这个是分析的科沃兹扫地机器人。具体方法其实都大同小异,大家可以借鉴一下。如果有不合理的地方可以一起讨论。

使用特权

评论回复
42
yunyoushuaiqi|  楼主 | 2017-1-16 15:54 | 只看该作者

这个是机器人跟充电底座的简图,四个字母分别是发射红外的管子,和接收红外的管子

使用特权

评论回复
43
yunyoushuaiqi|  楼主 | 2017-1-16 15:55 | 只看该作者

这个是四个管子的安装角度
两边的是90度散射的红外管
具体发射的红外光线示意图如下

使用特权

评论回复
44
yunyoushuaiqi|  楼主 | 2017-1-16 15:57 | 只看该作者
自动充电对准过程分析:
粗调:
当机器人刚进入红外监测区域时进行粗调,此时只要有任何一个探头采集到左则机器人往右移动,反之往左移动。
细调:利用中间两个小角度探头进行对接,原理与粗调大致相同。
具体情况根据实际情况具体分析:见下表格
粗调:
a采集信号        b采集信号        c采集信号        d采集信号        右轮        左轮
0        0        0        A        1        0
0        0        A        A        1        0
0        A        A        A        1        0
A        A        A        A        1        0
A        A        A        B/C        1        0
A        A        B/C        B/C        1        0
A        A        B/C        B/C        1        0
A        B/C        B/C        B/C        0        0

只要探头b检测到A机器人就需要向右偏移

D        0        0        0        0        1
D        D        0        0        0        1
D        D        D        0        0        1
D        D        D        D        0        1
B/C        D        D        D        0        1
B/C        B/C        D        D        0        1
B/C        B/C        B/C        D        0        1
只要探头C检测到D机器人就需要向左偏移
细调:
判断  A,B,C,D是否对准a,b,c,d。主要对B,C进行调节。
b采集信号        c采集信号        右轮        左轮
A        B        1        0
B        C        0        0
C        D        0        1

未考虑到的特殊情况根据实际环境再进行调整

使用特权

评论回复
45
yunyoushuaiqi|  楼主 | 2017-1-16 16:06 | 只看该作者
这里有一点需要提醒大家的就是,因为红外线受干扰因素很多,包括反射,强光都会产生影响。所以实际在调试的时候会出现一些例如乱码,编码错位等问题,甚至会出现接收到的信号直接交叉了而编码值都是对的。所以代码一定要有一定的容错功能。还有一点就是因为红外接收只能使用中断进行检测,所以当有多个红外发射的时候中断其实要使用轮询的思想,不能几个中断同时接收,这样会出现紊乱。一定要分时开启,也就是说分时接收。发射端发射红外编码的时候也要分时发送。另外STM32F103的单片机还有一个问题就是有些中断是共用一个中断函数的如10到15.这时候就需要使用关闭line的方法去实现分时开启。另外标准的红外编码协议大约要120ms的时间,所以可以根据实际情况改变一下协议,把数据压缩,不用发32位那么多。压缩的好处就是可以减少一个编码的时间提高数据的刷新率。

使用特权

评论回复
46
yunyoushuaiqi|  楼主 | 2017-1-16 16:08 | 只看该作者
这个就是关闭中断线程的参考代码,大家可以借鉴一下。

//*********************中断开关1************************************************
void HWJS_Key1(u8 en)
{
    EXTI->PR=1<<8;  //清除LINE8上的中断标志位
    if(en)EXTI->IMR|=1<<8;//不屏蔽line8上的中断
    else EXTI->IMR&=~(1<<8);//屏蔽line8上的中断   
}
//*********************中断开关2************************************************
void HWJS_Key2(u8 en)
{
    EXTI->PR=1<<9;  //清除LINE9上的中断标志位
    if(en)EXTI->IMR|=1<<9;//不屏蔽line9上的中断
    else EXTI->IMR&=~(1<<9);//屏蔽line9上的中断   
}
//*********************中断开关3************************************************
void HWJS_Key3(u8 en)
{
    EXTI->PR=1<<10;  //清除LINE11上的中断标志位
    if(en)EXTI->IMR|=1<<10;//不屏蔽line10上的中断
    else EXTI->IMR&=~(1<<10);//屏蔽line10上的中断   
}
//*********************中断开关4************************************************
void HWJS_Key4(u8 en)
{
    EXTI->PR=1<<11;  //清除LINE11上的中断标志位
    if(en)EXTI->IMR|=1<<11;//不屏蔽line11上的中断
    else EXTI->IMR&=~(1<<11);//屏蔽line11上的中断   
}

使用特权

评论回复
47
liuhongping| | 2017-1-16 16:48 | 只看该作者
牛!!!

使用特权

评论回复
48
wolfgang_z| | 2017-1-16 17:18 | 只看该作者
STR735~~~定制的MCU~~~

使用特权

评论回复
49
279853867| | 2017-2-24 19:46 | 只看该作者
精华帖!!!

使用特权

评论回复
50
yishuifu| | 2017-3-16 12:23 | 只看该作者
做工不错

使用特权

评论回复
51
nyszx| | 2017-3-16 12:36 | 只看该作者
分析很透彻,简单易懂,赞一个

使用特权

评论回复
52
yihui184| | 2017-3-31 17:56 | 只看该作者
请问出现该如何解决?

使用特权

评论回复
53
yihui184| | 2017-3-31 17:58 | 只看该作者
请问出现反射该如何解决呢?

使用特权

评论回复
54
戈卫东| | 2017-3-31 18:24 | 只看该作者
dongnanxibei 发表于 2017-1-14 22:05
这个系列单片机很少见啊。

古代的。ARM7TDMI那一类的核心。

使用特权

评论回复
55
dongnanxibei| | 2017-4-8 11:24 | 只看该作者
充电器发射信号给机器人,机器人根据信号判断在哪儿找到充电器。

使用特权

评论回复
56
study1234| | 2017-4-8 12:23 | 只看该作者
mask   

使用特权

评论回复
57
springvirus| | 2017-4-8 13:35 | 只看该作者
顶楼主,感谢精彩拆解和讲解!

使用特权

评论回复
58
springvirus| | 2017-4-8 13:36 | 只看该作者
楼主应该是开发过类似产品~~

使用特权

评论回复
59
swledcn| | 2017-4-11 15:46 | 只看该作者
谢谢分享,赞一下

使用特权

评论回复
60
saturn99| | 2017-4-11 19:21 | 只看该作者
感谢分享,一个对位就不简单。。。还有其他的

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则