打印
[应用相关]

STM32与扫地机器人研究

[复制链接]
楼主: goodluck09876
手机看帖
扫描二维码
随时随地手机跟帖
41
goodluck09876|  楼主 | 2019-5-11 12:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
42
goodluck09876|  楼主 | 2019-5-11 12:02 | 只看该作者

使用特权

评论回复
43
goodluck09876|  楼主 | 2019-5-11 12:02 | 只看该作者

使用特权

评论回复
44
goodluck09876|  楼主 | 2019-5-11 13:22 | 只看该作者
3. 2. 2超声波传感器数据读取
    US-100超声波测距模块工作模式有两种:DART(串口)模式和电平触
发模式,本课题我们采用串口模式。串口是一种按位发送二进制数据的通信方
式〔50-'1' o  STM32具有相当丰富的串口资源,控制板所使用的STM32F103ZET6主
控芯片最多可提供5路串口。STM犯的串口通信接口有两种:DART(通用异
步收发器)和USART(通用同步异步收发器)。我们在本课题中使用的是DART

使用特权

评论回复
45
goodluck09876|  楼主 | 2019-5-11 13:24 | 只看该作者
2、开启中断并且初始化NVIC,使能串口,编写中断处理函数,在中断处理函
数中我们要将返回的距离值和设定的距离值进行比较,由于不可能返回值精确
的等于设定值,我们设定lOmm的区间范围,返回值和设定值的差小于lOmm时,
将扫地机器人速度减半。编写超声波发送函数,串口发送OX55到超声波模块。
相关代码如下;

使用特权

评论回复
46
goodluck09876|  楼主 | 2019-5-11 13:24 | 只看该作者

使用特权

评论回复
47
goodluck09876|  楼主 | 2019-5-11 13:25 | 只看该作者

使用特权

评论回复
48
goodluck09876|  楼主 | 2019-5-11 13:26 | 只看该作者
    扫地机器人在二维平面内运动,主要对航向角进行控制,在运动过程中受
到地面阻力、碰撞等各种因数的影响,无法建立精确的数学模型来编写算法对
扫地机器人进行精确的控制,所以本课题中使用P工D控制算法对扫地机器人进
行控制。PID(比例(proportion )、积分(integral、导数(derivative ))控
制器作为最早实用化的控制器己有近百年历史,现在仍然是应用最广泛的工业
控制器「} o PID控制器简单易懂,使用中不需精确的系统模型等先决条件,因
而成为应用最为广泛的控制器「53]


使用特权

评论回复
49
goodluck09876|  楼主 | 2019-5-11 13:27 | 只看该作者

使用特权

评论回复
50
goodluck09876|  楼主 | 2019-5-11 13:28 | 只看该作者

使用特权

评论回复
51
goodluck09876|  楼主 | 2019-5-11 13:29 | 只看该作者

使用特权

评论回复
52
goodluck09876|  楼主 | 2019-5-11 13:30 | 只看该作者

使用特权

评论回复
53
goodluck09876|  楼主 | 2019-5-11 13:37 | 只看该作者

使用特权

评论回复
54
goodluck09876|  楼主 | 2019-5-11 13:37 | 只看该作者
    要控制ESP8266,用户主要通过串口使用AT指令ESP8266交互。每条指
令可以细分为四种命令,如表3. 2所示:

使用特权

评论回复
55
goodluck09876|  楼主 | 2019-5-11 13:38 | 只看该作者

使用特权

评论回复
56
goodluck09876|  楼主 | 2019-5-11 13:39 | 只看该作者
    ATK_ ESP8266模块支持STA/AP/STA+AP三种工作模式,本课题中使用
ATK ESP8266模块作为W IFI热点,笔记本以无线方式连接ATK_ ESP8266模块,
选用AP模式。ATK_ ESP8266模块作为服务器端,笔记本作为客户端,通过网
络调试助手软件进行连接。配置ATK ESP8266模块过程如下:
      (1>初始化连接ATK_ ESP8266模块的串口。
      (2)配置好笔记本电脑的串口助手软件,通过笔记本向串口发送AT指令
来完成ATK_ ESP8266模块的配置。
      (3)发送“AT+CWMODE=2\r\n",若返回“OK",则AP模式设置成功。
      (4)发送重启模块命令“AT+RST\r\n”重新启动模块使指令生效,若返
回ATK_ ESP8266模块信息和“OK",则重启成功。
    (5)发送‘AT+CWSAP= "ATK_ ESP8266",“12345678" 1, 4\r\n'。设置
接入点名称为ATK_ ESP8266,密码12345678,通道号为1,加密方式为
WPA_ WPA2_ PSK。若返回“OK",则设置成功。
    (6)发送“AT+C工PMLJX=0 \r \n ",设置单路连接模式,若返回“OK",则
设置成功。
    (7)发送“AT+C工PSERVER=1, 8086\r\n",开启服务器模式,端口号为
8086,若返回“OK",则设置成功。
    (8)发送“AT+C工PSEND=X\r\n",收到此命令后先换行返回”>”,然后
开始接收串口数据,当数据长度满X字节时发送数据。若连接被断开或未建立
连接,返回ERROR。若成功发送数据,返回SEND OK。

使用特权

评论回复
57
goodluck09876|  楼主 | 2019-5-11 13:39 | 只看该作者

使用特权

评论回复
58
goodluck09876|  楼主 | 2019-5-11 13:39 | 只看该作者
    W工F工模块主要功能是接收开机、关机指令和向笔记本电脑发送传感器数据,
主程序首先对接收到的指令进行判断,决定开机和关机。这里只设定了开机和
关机两个命令,当接收到其他数据时,程序会返回error,提示发送了错误指令。
发送传感器数据信息通过printf()函数实现。

使用特权

评论回复
59
goodluck09876|  楼主 | 2019-5-11 13:40 | 只看该作者
    延迟delay文件夹包含两个文件,delay.c和delay.ho Cortex-M3处理器内部
包含SysTick定时器,它是一个24位倒数计时器。当倒计数到零时,原始设定
值自动从RELOAD寄存器重新加载,并开始新的计数。只要不把相应的使能
位清除,它将永不停止重复该运算。由于它使用芯片内部SysTick来实现延迟,
因此不会中断且不会占用系统计时器,大大节省系统的资源。下面将介绍本课
题用到的三个系统延时的函数:延迟初始化函数,微秒延迟函数,毫秒延迟函
数。
    (1) delay_ init( u8 SYSCLK)是延时初始化函数,它参数有两个:fac_ us
(微秒)和fac_ ms(毫秒),使用SysTick_ CLKSourceConfig( SysTick_
CLKSource_  HCLK_  Div8)设置定时器SysTick为外部时钟源。在将HCLK 8
分频以成为SysTick定时器的时钟源之后,假设外部晶振为8 MHz,然后倍频到
72 MHz,  SysTick定时器的时钟频率为9 MHz。也就是说,如果SysTick的计数
器VAL减1,这意味着时间己经超过1/9 us。故
fac_ ms=SystemCoreClock/8000000是计算在SystemCoreClock时钟频率下延时
lms需要多少个SysTick时钟周期。Systick的时钟是系统时钟的8分频,所以
如果系统时钟不是8的整数倍,将直接导致延时函数误差变大,这也是本设计
将STM32系统时钟源的外部时钟选择8 MHz HSE(高速外部时钟信号)的重
要原因之一。
    (    2 ) delay_us C u32 nus)是微秒延迟函数,nus是需要延迟的微秒数。由
于STM32能够识别的是定时器SysTick的时钟数,所以首先需要做的是把需要
延时的微秒数换算成SysTick时钟数,写入LOAD寄存器。重置VAL寄存器,
并开启倒计时功能。当VAL当前值寄存器倒数结束的时候,就实现延时nus微
秒了。实现了微秒延时后,需要关闭SysTick定时器并把当前值寄存器VAL重
置清零。延时的nus数值要控制在一定范围内,要保证nusG=(2^24)/fac_ us,
不然会出现延时时间不准确的情况。如果超出LOAD范围,高位将被丢弃,这
是不准确的延迟的原因。

使用特权

评论回复
60
goodluck09876|  楼主 | 2019-5-11 13:40 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则