您好, 登录| 注册|
论坛导航
您好, 登录| 注册|
子站:
论坛首页    电源技术综合区
  •  发帖
  • 收藏

【工程师6】+实践类+多功能控制小车
阅读: 2595 |  回复: 54 楼层直达

2019/08/10 12:40:50
1
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

QQ截图20160321155901  【参与就有奖】晒出你的十一动态 让电源网论坛分享你的心情

QQ截图20160321155901   【第六届】我是工程师技术原创大赛 数万元奖品等您来



    DIY小车这个项目已经很多了,对于前后左右等控制,司空见惯,这次尝试一下能监控的多功能控制小车,电脑,手机都可以!

多功能车基本功能参数和关键部件,视频传输这块和我们现在智能家具这块无线视频原理一样,下面会有介绍

1.输入电源:2串或3串的锂电池(带充电器)

2.输出5v,3.3V等电压为负载供电

3.四个直流减速电机

4.WIFI数传模块

5.电机驱动模块

6.STM32F105主控板

7.UVC摄像头

8.小车底盘

最后实现电脑或手机通过wifi和软件控制小车动作并实时监控

框图

2019/08/10 19:11:54
2
斌520
电源币:3150 | 积分:17 主题帖:28 | 回复帖:1700
LV9
军长
一句话新闻?具体内容呢?
2019/08/10 21:57:07
3
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
已经更新了
2019/08/10 22:05:39
4
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

基本框图:

2019/08/10 22:10:59
5
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

基本编程软件

keil5

2019/08/11 11:54:16
6
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

对于单片机编程这块,目前STM32占用非常多,涉及到库函数和寄存器编程

这次采用库函数编程,采用传统的标准库,HAL库后续可以

如上图所示,先把框架建立好,拿一个自己用的工程,把相应的函数添加进去就可以了

2019/08/11 11:59:00
7
heiha88
电源币:1 | 积分:1 主题帖:5 | 回复帖:31
LV4
连长
有这块的入门教程吗
2019/08/12 12:49:50
9
lihui710884923
电源币:476 | 积分:1 主题帖:153 | 回复帖:512
LV9
军长

这个处理视频的话,需要上系统?

2019/09/08 20:12:58
22
gxg1122
电源币:1522 | 积分:12 主题帖:167 | 回复帖:1619
LV10
司令
视频实时上传,下端有显示屏吗?还是通过上位机软件显示控制。
2019/09/08 20:12:09
21
gxg1122
电源币:1522 | 积分:12 主题帖:167 | 回复帖:1619
LV10
司令
这个STM开发,WIFI模块、小车驱动、串口都是模块案例及例程。
2019/08/11 21:40:28
8
gxg1122
电源币:1522 | 积分:12 主题帖:167 | 回复帖:1619
LV10
司令
多功能控制小车的设计增加了这么多模块,主控芯片资源及响应速度能跟上吗?
2019/08/12 22:03:58
10
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
主控单片机只负责解析串口发来的命令并执行小车动作,
2019/08/12 23:14:28
11
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

舵机这块是两个,上下,左右各一个,180度旋转

2019/08/12 23:19:41
12
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

舵机的基本控制原理

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:

   0.5ms--------------0度;

   1.0ms------------45度;

   1.5ms------------90度;

   2.0ms-----------135度;

   2.5ms-----------180度;

2019/08/15 22:25:26
13
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

看看程序中是怎么控制的

用STM32硬件PWM和模拟PWM都可以

TIM_OCInitTypeDef  TIM_OCInitStructure; 
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;	    //ÅäÖÃΪPWMģʽ1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = Speed_Left-1;	  //ÉèÖÃͨµÀ2µÄµçƽÌø±äÖµ£¬Êä³öÁíÍâÒ»¸öÕ¼¿Õ±ÈµÄPWM
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR1_ValʱΪ¸ßµçƽ
  TIM_OC1Init(TIM5, &TIM_OCInitStructure);	 //ʹÄÜͨµÀ1
  TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);
我们改变这个值
 Speed_Left-1就可以改变舵机角度

2019/08/15 22:32:13
14
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

这个是整个产品的核心wifi模块

wifi数传模块是基于MIPS 24K 高通CPU的一款WIFI1X1芯片AR9331,其SDK采用uboot作为引导。是基于MIPS 架构的,目前有x86、ARM和MIPS三种主流芯片架构,ARM集架构的主要特点:一是体积小、低功耗、低成本、高性能;二是大量使用寄存器且大多数数据操作都在寄存器中完成,命令执行速度更快;三是寻址方式灵活简单,执行效率高;四是命令长度固定,可通过多流水线方式提高处理效率。

2019/08/15 22:46:34
15
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

wifi模块的工作原理

WiFi模块通过采集挂载在USB接口的MJPG格式的摄像头的数据,并编码封装成http协议的视频流,默认推送到8080端口。Android/IOS/PC设备,连接到WiFi模块的热点后,打开控制软件,会自动从8080端口获取MJPG视频流,并进行解码、显示。由此实现了WiFi智能小车的实时视频传输功能。

2019/08/19 12:21:34
16
lihui710884923
电源币:476 | 积分:1 主题帖:153 | 回复帖:512
LV9
军长
这个wifi模块可以连接外网?
2019/08/20 07:06:05
17
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
主要是把wifi模块作为热点使用,连接外网不是太稳定
2019/08/20 12:33:01
18
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
其实这个要想实现WIFI的视频传输,还需要一个小型的linux系统,下面会讲解一下
2019/08/25 08:58:25
19
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

OpenWrt 可以被描述为一个嵌入式的 Linux 发行版。(主流路由器固件有 dd-wrt,tomato,openwrt三类)对比一个单一的、静态的系统,OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。

对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。

2019/09/07 10:02:56
20
lihui710884923
电源币:476 | 积分:1 主题帖:153 | 回复帖:512
LV9
军长
这个还需要刷linux系统?
2019/09/15 07:49:36
27
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
这个需要刷openwrt系统的
2019/09/08 20:17:36
24
gxg1122
电源币:1522 | 积分:12 主题帖:167 | 回复帖:1619
LV10
司令
这个不用linux系统吧,UC系统就可以了。
2019/09/08 20:20:27
25
gxg1122
电源币:1522 | 积分:12 主题帖:167 | 回复帖:1619
LV10
司令
这个不用linux系统吧,UC系统就可以了。
2019/09/10 17:40:36
26
lihui710884923
电源币:476 | 积分:1 主题帖:153 | 回复帖:512
LV9
军长
UC系统是?
2019/09/16 15:05:14
35
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
UC还真不知道,这个是微小的LINUX系统
2019/09/15 17:19:39
34
heiha88
电源币:1 | 积分:1 主题帖:5 | 回复帖:31
LV4
连长
高通骁龙的芯片,这个wifi模块挺牛的
2019/09/16 15:05:38
36
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
就是一个图传模块,还可以
2019/09/15 08:40:18
30
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

看看舵机怎么控制转动速度

舵机的转动速度取决于起始角度和目标角度的差,差别越大转得越快,当接近时就放慢角度。所以没有专门的函数控制转速。但在大角度转动时,你可以用程序把它设成几个小角度递进,这样可以放慢速度。也通过delay进行慢速,但快速的话只有加高电压了 。

2019/09/08 20:15:02
23
gxg1122
电源币:1522 | 积分:12 主题帖:167 | 回复帖:1619
LV10
司令
响应速度是够用,串口解析及小车控制。
2019/09/15 07:52:31
28
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
老哥对这块非常熟悉啊,响应速度可以的
2019/09/15 08:29:27
29
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

这个是实际的wifi图传模块

2019/09/15 08:47:40
31
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

现在在重申一下这个模块的工作原理和使用方法

WiFi模块通过采集挂载在USB接口的MJPG格式的摄像头的数据,并编码封装成http协议的视频流,默认推送到8080端口。Android/IOS/PC设备,连接到WiFi模块的热点

(wifi-robots.com开头的SSID信号)后,打开控制软件,会自动从8080端口获取MJPG视频流,并进行解码、显示。由此实现了WiFi智能小车的实时视频传输功能。

们简单恢复一下出厂设置就可以了,简单说一下,用USB转tll工具连接模块配置好波特率(57600)和串口号一定注意先后顺序

1:点击打开串口,此时WIFI的状态是没有上电的

2:给WIFI上电此时要注意串口开始打印(很关键),

3:输入命令firstboot就可以了

2019/09/15 09:46:34
32
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

这个wifi模块怎么刷固件openwrt系统的

首先通过USB口给设备供电,通过miniUSB口加上usb转网口网线连接电脑

准备刷机工具TFTP服务端:tftp32  就是局域网内可以传文件

超级终端:putty  Telnet、SSH、rlogin、纯TCP以及串行接口连接软件

需要相应的固件具体教程http://www.wifi-robots.com/thread-108-1-1.html

2019/09/15 10:08:33
33
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

最后我们看看USB摄像头这块,简单介绍一下无线监控中的摄像头

1.摄像头选择

做本次实验的时候,推荐大家用 USB 免驱的摄像头,最好是支持 MJPEG 输出的摄像头类型。USB 免驱摄像头输出 YUV 格式和输出 MJPEG 格式,对无线监控的效果有什么影响呢?首先大家要知道,同样是一帧数据,YUV 格式会比 MJPEG 格式的大得多,因此我们在视频传输的时候,一般是传输 MJPEG 格式的数据。这样,就有这样一个问题,如果摄像头是输出 YUV 格式,那么就意味着我们需要通过软件将视频数据由 YUV 格式转换成 MJPEG格式,然后传输。如果摄像头输出的是 MJPEG 格式,那个将可以直接将得到的数据进行传输。因此,使用支持 MJPEG 压缩的摄像头,比一般的摄像头,做无线监控的效果,好很多

2019/09/23 09:11:14
40
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

2.配置 OpenWrt 支持 usb 摄像头

看看怎么配置

要支持摄像头,就必须配置上摄像头的驱动,因为是免驱的 USB 摄像头,因此我们必须配置上 UVC 驱动,具体如图所示。首先,我们选中内核模块进行配置:

选中 Video 支持配置:

按”y”选中 kmod-video-core:

在展开的选项中选中 uvc:

2019/09/23 10:59:18
41
lihui710884923
电源币:476 | 积分:1 主题帖:153 | 回复帖:512
LV9
军长
只要支持UVC驱动的摄像头都可以这样操作?
2019/10/01 07:47:57
42
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
原理是这样的
2019/10/01 14:55:26
43
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

看看电机驱动模块

2019/10/01 14:57:05
44
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

基本原理如下

看看具体是怎么控制电机调速的,通过控制使能端使L298N处于工作和不工作,VSS-9引脚为芯片供电   VS-4引脚为电机供电   ENA-6引脚为通道1使能端,利用定时器的pwm输出作用于ENA,根据脉冲占空比不同就可以得到不同的输出电压,从而达到调速目的。比如在VS引脚加10V的电机供电电压,ENA端脉冲占空比为100%,那么OUT1和OUT2之间将输出10V电压,占空比为50%,那么输出为5V电压,占空比为10%,则为1V    我买的电机供电电压为5v到12v都可以,电压高的话也可以,长时间工作的话会对电机损坏

2019/10/01 14:59:27
45
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

看看电机是怎么正反装 的

逻辑输入端,为IN1\IN2\IN3\IN4,其中IN1、IN2控制电机M1;IN3、IN4控制电 机M2。例如IN1输入高电平1,IN2输入低电平0,对应电机M1正转;IN1输入低电平0,IN2输入高电平1,对应电机M1反转,调速就是改变高电平的占空比

2019/10/01 15:01:19
46
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

这是整个系统的核心板STM32F105

2019/10/02 15:22:56
47
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

正好国庆期间可以把程序写写,用一个stm32f103的模板,还是103的标准库,改一下测试再105上可以不?

2019/10/02 15:37:29
48
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

主要就是串口这块,但是奇怪的是串口通讯不正常

波特率9600是一致的,用串口助手发送,发送FE是没有任何反应的,发送其他,接受的也不一样,多年的编程,程序应该问题不大

2019/10/02 17:49:06
49
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

就怀疑时钟的问题,先软件仿真看看,调试状态找到RCC

看看能看出来时钟对不

2019/10/02 18:01:41
50
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

寄存器里面的值不太了解

可以通过一个时钟函数RCC_GetClocksFreq(&RCC_Clocks)加到主函数里,把RCC_Clocks变量加到窗口中,看看实际的时钟频率

发现时钟不对,再网上查看资料说105和103的启动文件不一样

宏定义这需要改成STM32F10X_CL,

2019/10/02 18:16:34
51
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

由于105系列属于互联型单片机,默认晶振为25M,而我们实际为8M

1.需要在这个stm32f10x.h文件里更改

2.需要在这个system_stm32f10x.c文件里更改

2019/10/02 18:31:28
52
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长

现在我们在仿真调试看看实际的时钟频率

主频这个16进制值为0x044AA200,经过计算为72.000000

这样就配置ok了

2019/10/08 12:40:16
53
lihui710884923
电源币:476 | 积分:1 主题帖:153 | 回复帖:512
LV9
军长
用一个函数读取当前系统时钟,时钟频率这块分析很透彻
2019/10/09 21:18:40
54
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
个人认为这个就是读取当前系统时钟的最好办法了,
2019/10/17 10:44:57
55
liuxiaofei126
电源币:0 | 积分:0 主题帖:9 | 回复帖:80
LV5
营长
基本的103移植105成功,程序这块后续简单分析一下,下面开始组装调试
客服热线
服务时间:周一至周五9:00-18:00
微信关注
免费技术研讨会
获取一手干货分享

互联网违法不良信息举报

Reporting Internet Illegal and Bad Information
editor@netbroad.com
400-003-2006