我做了这应用——硬石F4辅助驾驶控制器。
原理上,硬石F4实现网络TCP控制,然后通过串口总线与慧净的小车控制板通讯。也就是说,硬石F4做控制器,而把慧净的小车控制主板当电机驱动板来用了。
2 要实现的功能
网络TCP服务,这个使用硬石F4的教程里有个历程,我们可以基于它的框架来做。我们可以自创个个小车的网络控制协议解析代码,比如用W A S D表示前后左右方向。
用硬石F4的UART4(PC10和PC11)实现异步通讯,给慧净的板子发指令。其中慧净的接口协议在第一章已经给了。我们需要根据TCP解析到的WASD来确定前进后退还是转向。其中,当要前进时,要先检测一下是否有障碍物。左边有障碍物的话,用右转替代前进。
其中,UART4在CN10接口上,如下图所示。
自动避障的思路是这样的,当使用硬石F4的通用输入接口INPUT1和INPUT2读取小车的左右红外避障传感器信号,如果有障碍物就自动转弯(即使收到向前的信号)。硬石的输入接口有光耦隔离,非常安全。我们分别使用下图中CN22接口上的3-4和5-6端口连接左右避障传感器的输出,如下图所示。要用到的GPIO是PG1和PG2。
3 具体的开发过程
网络TCP服务的建立和数据接收,这部分在硬石的历程里本来就有,我们就不说了,我们只说说增量的工作。工程文件非常巨大,所以这里我不提供完整的工程文件了。这篇文章主要是聊聊代码的写法和算法思路。
首先,添加UART和GPIO的板级的BSP驱动文件到TCP Server例程。分别把c和h文件添加到src和inc目录。然后在工程里添加BSP驱动代码,如下图所示。
UART4的定义在bsp usart文件,如下定义了引脚和波特率:
当避障传感器给光耦输入信号时,光耦输出高电平(后来调试时候发现反了)。我们使用PG1引脚检测左边的避障传感器,PG2检测右边的。所以我没这样定义PG1和PG2两个引脚。GPIO的设置代码如下。(后来实际调试中又把INPUT IDLE 改成1了)
GPIO读取时候为了防止信号抖动干扰,我们设计一个延时算法来读取GPIO。下图展示了PG1的代码,PG2具有相同的形式。间隔1毫秒读两次,如果都是读到有信号,就表明有障碍物,输出GPIO_ON。
GPIO PG1和PG2的初始化代码,还有UART4的初始化代码都要添加到主函数里去,如下图所示:
有了板级支持以后,我们就可以添加各种花里胡哨的用户代码了。
我做了这应用——硬石F4辅助驾驶控制器。
原理上,硬石F4实现网络TCP控制,然后通过串口总线与慧净的小车控制板通讯。也就是说,硬石F4做控制器,而把慧净的小车控制主板当电机驱动板来用了。
2 要实现的功能
网络TCP服务,这个使用硬石F4的教程里有个历程,我们可以基于它的框架来做。我们可以自创个个小车的网络控制协议解析代码,比如用W A S D表示前后左右方向。
用硬石F4的UART4(PC10和PC11)实现异步通讯,给慧净的板子发指令。其中慧净的接口协议在第一章已经给了。我们需要根据TCP解析到的WASD来确定前进后退还是转向。其中,当要前进时,要先检测一下是否有障碍物。左边有障碍物的话,用右转替代前进。
其中,UART4在CN10接口上,如下图所示。
自动避障的思路是这样的,当使用硬石F4的通用输入接口INPUT1和INPUT2读取小车的左右红外避障传感器信号,如果有障碍物就自动转弯(即使收到向前的信号)。硬石的输入接口有光耦隔离,非常安全。我们分别使用下图中CN22接口上的3-4和5-6端口连接左右避障传感器的输出,如下图所示。要用到的GPIO是PG1和PG2。
3 具体的开发过程
网络TCP服务的建立和数据接收,这部分在硬石的历程里本来就有,我们就不说了,我们只说说增量的工作。工程文件非常巨大,所以这里我不提供完整的工程文件了。这篇文章主要是聊聊代码的写法和算法思路。
首先,添加UART和GPIO的板级的BSP驱动文件到TCP Server例程。分别把c和h文件添加到src和inc目录。然后在工程里添加BSP驱动代码,如下图所示。
UART4的定义在bsp usart文件,如下定义了引脚和波特率:
当避障传感器给光耦输入信号时,光耦输出高电平(后来调试时候发现反了)。我们使用PG1引脚检测左边的避障传感器,PG2检测右边的。所以我没这样定义PG1和PG2两个引脚。GPIO的设置代码如下。(后来实际调试中又把INPUT IDLE 改成1了)
GPIO读取时候为了防止信号抖动干扰,我们设计一个延时算法来读取GPIO。下图展示了PG1的代码,PG2具有相同的形式。间隔1毫秒读两次,如果都是读到有信号,就表明有障碍物,输出GPIO_ON。
GPIO PG1和PG2的初始化代码,还有UART4的初始化代码都要添加到主函数里去,如下图所示:
有了板级支持以后,我们就可以添加各种花里胡哨的用户代码了。
举报