Hi3861智能小车(一) 原创 精华

细嗅蔷薇05
发布于 2021-9-20 10:50
浏览
9收藏

       

        去年初学鸿蒙,在刚刚能写点代码的时候,集合当时掌握的所有知识,攒在一起做了这么个小应用。本打算拿这个参加华为的鸿蒙项目征集活动,当时做的很不完善,就做烂尾了,但是也没放弃一直修修改改,用了好长时间才达到一个能接受的程度。现在觉得完成度还可以吧,整理整理发出来,跟大家分享。所用到的知识都是系统的基础应用部分,对新手入门能有一定帮助,而且这个应用很好玩,可以在以后学习一些新应用的时候结合在一起做一些实验。

       

        我的开发过程,是个循序迭代的过程。我根据自己开发的过程,分步做讲解。

 

        第1部分:实现基本运动能力。先让小车跑起来,主要是电机驱动板控制,超声波测距的使用,显示屏状态的显示。

        第2部分:实现控制能力。让小车聪明起来,能够规划路线,出现失控能够处理。主要用到陀螺仪模块和指南针模块。

        第3部分:实现网络通信。自由行动的同时,还能接收指令做规定的运动,以及工作模块的数据上传。

 

        前期硬件准备,开始我对采用什么硬件是没有概念的,以前也没做过,看别人做挺简单,也没有多考虑,选的都是入门级最常见的配件,通过实际使用完成功能还是够用的,受限于配件的性能,实际效果还是差一点。建议优先使用国产芯。

 

        硬件表

        核心部分:Hi3861 + 底板 + OLED显示屏 + 环境监测板

        小车底盘:DC 3v-6v 直流减速电机

        电机驱动板:上面的芯片是 MX1919

        超声波:HC-SR04

        陀螺仪:MPU6050

        电子罗盘:QMC5883

        电池:2节18650锂电池

        系统版本:1.1 LTS

 

Hi3861智能小车(一)-鸿蒙开发者社区

        Hi3861端口太少了,连接之前要规划一下,插几个配件就占满了。而且Hi3861只有160MHz,写程序也不能太随心所欲。我曾经设想用2块Hi3861通过串口连接,一起完成任务。虽然后来放下了就没做,但是这种方式是可行的。

Hi3861智能小车(一)-鸿蒙开发者社区

        列这个表就是把能用的端口列出来,然后分配好,后面编码、插线都用的上。

 

        第1部分:基础运动能力的实现,主要是控制电机驱动板,超声波测距避障,OLED屏显示状态。

 

Hi3861智能小车(一)-鸿蒙开发者社区

        小车底盘市面上有很多种可以选择,我当时定位是在居室内运行,能够自转占空间小,就选了这种圆形底盘。底盘自带电机、车轮,这个小电机精度一般,才2块钱,配合码盘,做好调试也能获得很好的精度。但是买的时候没看好规格,测试模块没装上。说这事是以后不管用什么电机,每个电机都有性能差异,如果想获得比较好的精度,测速模块和码盘是标配。这个小电机拆开里面是3相磁力转向极,就是小电机转一圈是3拍,圈速的倍数需要的PWM占空比一定是接近3的倍数,先知道这一点,以后通过算法实现速度控制的时候知道有一个神奇倍数3的存在。

Hi3861智能小车(一)-鸿蒙开发者社区

        电机驱动板,这个控制比较简单,通过端口向控制板输出PWM脉冲波,驱动板根据频率向电机输出电流达到控制电机转速的目的。PWM的设置:驱动板能接收PWM的频率范围没有查到,网上有网友说从1K以上到100K都可以,最后选了40KHz,其实也是想多了,以为方便以后的换算,实际达不到那么高的控制精度。

 

        CPU频率 160MHz = 160 * 1000 * 1000 Hz / 倍频 40 * 1000 = 40 * 1000 Hz = 40KHz

 

Hi3861智能小车(一)-鸿蒙开发者社区

        当占空比占满的时候,等于直接输出高电平 =  1,当占空比设置为0,等于输出低电平 = 0。开始启动要一个很高的占空比,小电机启动需要一个驱动电机减速箱转动的扭力,启动后有了惯性,可以调低占空比降低速度。每个电机性能不一样,具体数据还需要实际测试,再微调。

Hi3861智能小车(一)-鸿蒙开发者社区

        当小车独立跑起来后,内部是如何运行的是不清楚的,这个时候需要通过OLED显示屏显示实时数据状态。OLED程序,写第一遍的时候肯定是陌生的,做两回就成套路了。(1)I2C通信,(2)设OLED的参数,(3)把编好的字符表输入到OLED显示出来。OLED控制程序最好还是自己写,可以根据情况自由调整,因为实时显示数据,OLED频繁刷新会对CPU占用过多,造成结果延迟,所以过程尽量能省则省。如何通过OLED画简单图形,主要是基于三角函数算出坐标,再把2维表转换成OLED显示的结构表。大量数学计算3861是吃不消的,后面要实现更高级控制的时候,可以通过网络把实时数据上传到上位机,由PC处理,再把结果回传给3861。

Hi3861智能小车(一)-鸿蒙开发者社区

        HC-SR04超声波测距模块,没什么好说的,这是用到最简单的模块了。注意一点,它的测量角度只有15度,要覆盖前方,要左右两侧再加测一下,然后在家用主要的不是看远,而是看地面。再说点题外的,现在新出的模块都支持3V电压,还支持I2C通信,如果不是专门的I2C接口的模块需要接1个1K电阻,那个贴片电阻太小了,手艺不行焊不上,买来I2C模块却只能用原始测序方式,多占2个端口。

 

        每个模块先单独做测试,测通了在集中测试。我现在觉得做设备应用开发就是个设备实验 + 调试的过程。想法总是会跟现实有差异,不能只埋头写代码。

 

        准备工作做完了就可以做一个简单的自由运动了。因为后面还要添加更多功能,这部分先从简,主要目的是获得一些实际运行参数。开始设想的挺好,但是实际跑起来问题很多,这种模式太简单,应对实际环境能力比较弱,等复杂的运行控制到第2部分解决。

 

Hi3861智能小车(一)-鸿蒙开发者社区

 

        代码逻辑没问题,具体参数需要反复调试。发现个问题就改一次,改一次就出一个新问题。所以... 可以不断的改的更好一点。

 

        先写到这吧,代码注释我尽力做到详细,具体过程看代码吧。代码过程一直改,反倒越改错误越多,代码结构也有点乱,希望大家不吝报错。然后第2部分代码我整理完后发出来。

 

 

 

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
car_app_b1.zip 11.23K 240次下载
car_app_v1.zip 11.39K 277次下载
7
收藏 9
回复
举报
2条回复
按时间正序
/
按时间倒序
wx613cc9c0ce17f
wx613cc9c0ce17f

我毕业设计就是小车加垃圾桶,看到这个好熟悉啊,可惜当时陀螺仪不会用,只能走固定路线

回复
2021-10-19 15:14:57
wx6194f8575f149
wx6194f8575f149 回复了 wx613cc9c0ce17f
我毕业设计就是小车加垃圾桶,看到这个好熟悉啊,可惜当时陀螺仪不会用,只能走固定路线

有没有相关源码,我才大一在做小车加净化器

 

回复
2022-1-14 17:42:48
回复
    相关推荐