查看: 3404|回复: 5

[分享] 疯狂的四驱车---软件开发汇总

[复制链接]
  • TA的每日心情
    开心
    2016-10-25 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    13

    主题

    430

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1385
    最后登录
    2018-6-13
    发表于 2016-7-19 14:32:35 | 显示全部楼层 |阅读模式
    本帖最后由 hellokity 于 2016-7-19 15:06 编辑

    一、序言
    其实,这次申请四驱车有几个目的:
    1、本人在高校实验室工作,负责几个实验室的日常管理,同时为各个实验室准备实验器材,实验器材一般是一些常用的工具及一些材料,实验课门类比较多,因此本人的工作量就比较大。本人之前在企业做嵌入式系统软件设计,出于攻城狮的本能,想做一辆智能车来减轻日常的工作量,设想是通过设定不同的目的地,智能车能够把相关的实验器材送到指定的实验室。刚好论坛里搞四驱车的活动,就报名参加了,想通过此次活动做个验证性的实验。
    2、之前在企业的时候,做的系统比较简单,只用过基于M0内核系列的恩智浦的单片机,没有接触过M4的。之前一直都想熟悉一下M4的单片机,可是手里没有,加上工作事情比较多,也就搁浅了。刚好这次的活动的主题是开发四驱车,又采用M4内核的单片机,于是怦然心动。
    3、虽然在坛子里是“高级会员”了,但是很惭愧,这个“高级职称”靠本人每天勤劳地登陆论坛签到获得的,不是因为在坛子里发有用帖、帮助大家解决问题获得的。所以也想通过这次机会,参与一下社区的活动,和志同道合的朋友共同成长。
    虽然有以上的目的驱使我报名参加此次活动,但我也很清楚,参加活动并不是只有激情就可以的,毕竟我能力不及论坛里的很多坛友,至于能够开发到什么程度,说实话呢,我心里没底,因为对我来说,单片机是陌生的,通信模块是陌生的。不过好在我接受能力还比较强,也用过一些常用的单片机,完成此项目应该是没问题的。

    二、方案总体设计
             本人申请的时候,也想通过手机控制四驱车,但是分析一下自己的条件,发现自己对App的开发还没入门,再加上对K64不熟悉,短期内绝对不可能完成此项目。后来仔细研究了一下FRDM-K64,发现其有个FXOS8700加速度磁力传感器,再想到自己还有一块YL-KL26,现在闲置在抽屉里没有用,于是豁然开朗。何不用KL-26作为四驱车的控制系统,采用K64作为遥控系统呢?K64上有了加速度传感器,完全可以实现手势遥控,于是整体的设计方案就出来了。见图1.
    file:///C:/Users/ThinkPad/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif


    三、详细设计
             1、四驱车控制系统设计
             IO需求分析
    四驱车需要四个驱动电机,因此需要4个H桥驱动,共需4路PWM输出;四驱车在运行时会需要控制前进、后退、转弯儿、刹车等情况,每个TB6612驱动桥需要4个控制信号,共要8个GPO;为便于判断系统的运行状态,需要显示WIFI的连接情况,车辆的转向指示。共计3个GPO,ESP8266WIFI模块用过UART0与单片机通信,需要2个引脚;综上,四驱车需要17个GPIO。其中配置成PWM的为4个,配置成GPO的为11个,配置成TX、RX的各一个。
    IO资源分配
    YL-KL26引出了48个引脚,因此足够控制四驱车。根据引脚复用情况,资源配置如下表1.
    1  四驱车控制系统引脚配置表
      
    引脚
      
    用途
    引脚
    用途
    引脚
    用途
    PTB-18
    WIFI指示
    PTB-0
    前左电机控制1
    PTC-0
    后左电机控制1
    PTB-19
    左转弯
    PTB-1
    前左电机控制2
    PTC-1
    后左电机控制2
    PTD-1
    右转弯
    PTB-2
    前右电机控制1
    PTC-2
    后右电机控制1


    PTB-3
    前右电机控制2
    PTC-3
    后右电机控制2
    PTE-20
    UART0-tx
    PTE-24
    前左电机PWM
    PTE-29
    后左电机PWM
    PTE-21
    UART0-rx
    PTE-25
    前右电机PWM
    PTE-31
    后右电机PWM

    软件设计
    软件设计分为主程序设计和中断程序设计,主程序主要完成系统的初始化、遥控数据的解码、电机的控制等三部分内容。中断服务开启了3个,分别是pit,Systick、uart0中断。Pit中断时间为100ms,用于处理指示灯;Systick为m0内核自带滴答时钟,定时为10ms,用于延时控制及通信超时控制;UART0开启了接收中断及OR(overrun)中断,至于为何开启OR中断,接下来会讲。UART0接收中断用于接收从ESP8266获得的遥控指令帧,此处只负责接收,不做解析处理。各部分流程图如图3,图4,图5,图6。
    UART0参数:波特率9600,8位数据位,1位停止位,无校验,开启rx及or中断;
    Pit参数:100ms周期中断;
    Systick参数:10ms周期中断;
    TPM0参数:打开CH0、CH1、CH2、CH4通道PWM功能,边缘对齐模式输出;
    ESP8266配置参数:波特率9600,AP模式,设置无线名称为“romoter”,打开多连接,开启服务器功能,端口号是50000;
    遥控解码软件算法:单片机从UART0接收到的遥控指令有帧头和帧尾,首先找到帧头,再判断帧尾,如果正确,则证明是有效的指令帧,进行解析处理,否则丢弃;
    四驱车控制算法:根据接收到的指令帧,驱动相应电机的运动方向及速度控制;
    指示灯控制算法:同四驱车算法类似;
    连接超时控制算法:如果超过1s没有接收到遥控指令,则四驱车停止;
    file:///C:/Users/ThinkPad/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif file:///C:/Users/ThinkPad/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif file:///C:/Users/ThinkPad/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif


    2、遥控控制系统设计
    遥控控制系统采用FRDM-k64开发板,板子上集成了FXOS8700加速度磁力计传感器,采用I2C通信。板子上还集成了一个三色灯,可用于控制器的前进、转弯儿的指示。以上均不需更改硬件,唯一需要更改硬件的地方是在板子上的J199处焊接一个4脚的排针,不再接蓝牙,改成ESP8266WIFI模块。虽然《FRDMK64FUG.pdf》文档已经明确标出,为了便于查看,将资源分配再次列出。见表2
    表2 遥控系统硬件资源分配表
      
    引脚
      
    用途
    引脚
    用途
    引脚
    用途
    PTB-21
    蓝色指示灯
    PTE-24
    SCLFXOS8700
    PTC-14
    UART4-rx
    PTB-22
    红色指示灯
    PTE-25
    SDAFXOS8700
    PTC-15
    UART4-tx
    PTE-26
    绿色指示灯





    软件设计
    软件设计分为主程序设计和中断程序设计,主程序主要完成系统的初始化、FXOS8700传感器数据的读取、遥控指令发送、指示灯显示灯几部分内容。Pit中断只要提供定时服务,Systick中断用于控制传感器数据读取的频率及遥控指令发送的频率。
    UART4参数:波特率115200,8位数据位,1位停止位,无校验;
    Pit参数:10ms周期中断;
    Systick:20ms定时中断;
    FXOS8700参数:波特率100k,地址0x1D(由于板子上SA0上拉,SA1下拉),其余参数按照FXOS8700数据手册配置即可;
    ESP8266参数:波特率115200,station模式,创建“TCP”,“192.168.4.1”,50000通信,透传模式下工作,最后不能忘记启动发送。
    各程序算法较为简单,此处不重复列出,看源码即可。
    file:///C:/Users/ThinkPad/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif


    四、问题及解决方法总结
    在开发过程中,本人遇到了这样或那样的问题,有一些是从论坛里获得的,一些是自己研究各种资料后解决的。新手可以参考,高手可以绕道,勿拍板砖。
    问题1、没有示波器,只有一台万用表的情况下,如何判断PWM输出是否正常?
    解决方法:如果不了解PWM的原理,请先学习相关资料。PWM的周期是固定的,改变占空比,相应引脚输出的电压就会变化(开关电源的原理吧),通过设定已知的占空比,PWM对应引脚的电压即为VCC*占空比。此方法可以简单有效判断PWM功能是否正常。
    问题2、KL26开启串口接收中断后,为何只能有限的几次能够进入中断?
    解决方法:接收中断正常响应的情况是,接收数据寄存器是空的,当新的数据进入数据寄存器后,向CPU发出中断申请。当有数据要进入数据寄存器,而此时数据寄存器的数据还没有被读取,此时OR(overrun)标志位会被置位,一旦此标志位置位,除非清零,此标志位会一直置位,影响硬件对RDRF置位,RDRF不能置位,就不能够产生接收中断。因此此问题的一个解决方法是打开OR中断,进入OR中断后清除OR的标志位,然后进行再进入接收中断处理函数。
    问题3、初始化UART模块时,为何总是进入硬件中断?
    解决方法:UART的收发引脚与GPIO通用,进行配置UART模块时,如果没有开启PORT时钟,则相当于非法操作没有使能的硬件设备,因此会进入非屏蔽的硬件中断。所以此问题的解决方法是应先开启PORT的时钟,使能PORT。
    问题4、程序初始化正常,但运行时,为何经常会不定时进入默认中断?
    解决方法:查找程序中定义的指针变量,检查指向的地址是否会出现违法的情况。如果程序运行在Linux系统上,则会抛出段错误的信息。即:指针越界访问。
    问题5、为何坛子里KSDK初始化FXOS8700传感器的例程总是失败?
    解决方法:通过单步执行,可以发现,在初始化通信频率的时候,总是不成功,这是因为I2C模块SCL波特率不正确,导致不能够与FXOS8700通信失败,进而对此传感器的各种初始化也不会成功。修改的方法之一是修改I2C_HAL_SetBaudRate (uint32_t baseAddr, uint32_t sourceClockInHz,uint32_t kbps, uint32_t * absoluteError_Hz)函数,不要寻求BF_I2C_F_MULT和BF_I2C_F_ICR寄存器的最优值,自己根据已知I2C模块的时钟进行设置。
    问题6、为何开启化了pit的中断,但还是无法进入中断函数?
    解决方法:忘记打开nvic里的中断开关。
    五、后记
             申请下这个项目,使我感到很意外。因为我的方案不怎么优秀,开发的质量也不能够保证,但是小九还是把我的申请pass了,谢谢给我这次学习的机会!在等待四驱车材料的过程中,出现了一个小插曲,那就是材料中只有FRDM-K64开发板和一个小车底盘,带减速机的电机和螺钉都没有,小九再次补发,不小心把地址填错了,当再次收到货时,已经是6.29了。进入7月份,原本要放假了,谁曾想事情反倒多了起来,监考、党员学习、期末考核材料、各种总结会以及为期3天的保密出差(电脑、手机没收)。忙里抽闲,先把各个部分的代码按照以上的方案设计编写完成,再连接调试。调试的过程中,出现了很多问题,先是硬件初始化的时候出错,再是程序莫名其妙进入中断,当然这些都不算什么。
    最让我头疼的问题就是FXOS8700传感器的问题,虽说参考了恩智浦官网的例程,但是例程初始化FXOS8700总是失败,坛友们提供了一些建议,但并不能能够解决问题。由于白天工作,晚上调试时间有限,时间不集中加上没有示波器导致调试的效率大大降低了,好在后来凭借几年来的开发直觉找到了问题的根源,但是解决方法不是很好,有时间再研究下。
    其次是KL26不能够进入接收中断的问题让我很费神,在坛子里没有搜到与我遇到的问题一致,因此放弃了从外部获得解决方法的想法,仔细地研究了KL26UART的寄存器,才发现这个问题的根源。
    现在,软件调试完成,正在调试硬件,这次不可能按时完成项目了。不管怎么样,通过这几天的折腾,自己学习了不少东西。无论小九收走此开发套件还是别的处理方式,我都欣然接受。再次感谢曾经帮忙的各位坛友及小九坛主。


    图1 四驱车方案总体设计

    图1 四驱车方案总体设计

    图2 遥控器总体方案

    图2 遥控器总体方案

    图3 四驱车主流程图

    图3 四驱车主流程图

    图4 四驱车pit中断处理流程图

    图4 四驱车pit中断处理流程图

    图5 四驱车Systick中断处理流程图

    图5 四驱车Systick中断处理流程图

    图6 四驱车UART0中断处理流程图

    图6  四驱车UART0中断处理流程图

    图7 遥控系统主程序流程图

    图7 遥控系统主程序流程图

    四驱车开发文档.rar

    253.78 KB, 下载次数: 3, 下载积分: 威望 1

    开发文档+感想

    四驱车.rar

    899.25 KB, 下载次数: 8, 下载积分: 威望 1

    四驱车源代码

    遥控器-k64.rar

    2.16 MB, 下载次数: 5, 下载积分: 威望 1

    遥控器源代码

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-2-13 08:29
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    531

    主题

    2048

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    210
    最后登录
    2018-8-14
    发表于 2016-7-19 14:38:36 | 显示全部楼层
    赞一个 ,不会收回的
    签到 签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    13

    主题

    430

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1385
    最后登录
    2018-6-13
     楼主| 发表于 2016-7-19 14:51:53 | 显示全部楼层
    肖久 发表于 2016-7-19 14:38
    赞一个 ,不会收回的

    谢谢鼓励啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    13

    主题

    430

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1385
    最后登录
    2018-6-13
     楼主| 发表于 2016-7-19 14:52:17 | 显示全部楼层
    肖久 发表于 2016-7-19 14:38
    赞一个 ,不会收回的

    谢谢鼓励啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-7-19 20:45:11 | 显示全部楼层
    本帖最后由 zhjb1 于 2016-7-19 20:48 编辑

    很棒的玩过。我还在为各种基本模块的功能实现而不断摸索。赞一个!还没有明白使用KL26还是K64F?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    13

    主题

    430

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1385
    最后登录
    2018-6-13
     楼主| 发表于 2016-7-20 11:07:42 来自手机 | 显示全部楼层
    zhjb1 发表于 2016-7-19 20:45
    很棒的玩过。我还在为各种基本模块的功能实现而不断摸索。赞一个!还没有明白使用KL26还是K64F? ...

    k64+加速度传感器做成了动作遥控器,kl26实现四驱车的控制。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 18:31 , Processed in 0.094237 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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