第二天:SLAM智能小车DIY乐趣-小车控制stm32软件基础

SLAM智能小车DIY乐趣-小车控制stm32软件基础

####写在前面####

前面介绍了小车控制stm32硬件基础,本文就来介绍配套的小车控制stm32软件基础。关于stm32开发相关的基础知识这里就不多说了,有需要的小伙伴可以查阅相关资料进行学习,这里重点从小车控制项目入手,直接进行跟实际需求相关的开发。本文主要内容:

1) 电机控制

2) 编码器数据读取

3) 串口数据收发

4) 电机速度PID控制

5) 周期性控制

6) 小车控制软件整体框图

####正文####

1.电机控制

电机控制分为两个部分(电机转向控制、电机转速控制),这些都集成在了电机驱动芯片TB6612FNG里面,所以只需要用单片机的IO口产生控制转向的高低电平和控制转速的PWM波就能实现。初始化IO口作为输出脚,用于产生高低电平输出来控制转向,实例代码如下:

用通用定时器TIM4的通道CH1和CH2分别产生两路PWM输出用于两个电机的转速控制,定时器默认引脚分配如下:

初始化通用定时器TIM4的通道CH1和CH2为PWM输出,实例代码如下:

最后,将电机转向和速度控制的操作封装在一个函数中,便于其它地方调用,实例代码如下:

2.编码器数据读取

编码器对小车来说至关重要,一方面小车通过编码器的反馈进行PID闭环速度控制,另一方面小车通过编码器进行航迹推演得到里程计用于后续的定位与导航等高级算法中。这里用到的编码器是正交编码器,所以直接使用通用定时器的输入捕获中的编码器模式来读取编码器。采用通用定时器TIM2的通道CH1和CH2捕获encoder1的A相和B相脉冲,采用通用定时器TIM3的通道CH1和CH2捕获encoder2的A相和B相脉冲,先初始化TIM2作为编码器捕获,实例代码如下:

然后,将读取编码器计数值的操作封装在一个函数中,便于其它地方调用,实例代码如下:

最后编写计数溢出时的中断处理函数,实例代码如下:

同理可得TIM3捕获encoder2的代码实现,这里就不在赘述了。

3.串口数据收发

串口2负责接收上位机发送过来的控制指令,同时将编码器值返回给上位机;串口1负责接收上位机发送过来的PID设定值,同时将程序中的debug打印信息返回给上位机。一般在正常工作时,只需要串口2,如果需要进行调试可启用串口1。首先配置串口1,先对串口1的输出进行printf函数打印支持,实例代码如下:

然后初始化串口1,实例代码如下:

最后编写串口1接收中断处理函数,此函数主要进行对上位机发过来的数据进行协议解析,实例代码如下:

接下来,介绍串口2,初始化串口2,实例代码如下:

然后将串口2发送数据的操作封装到函数中,便于其它地方调用,实例代码如下:

最后编写串口2接收中断处理函数,此函数主要进行对上位机发过来的数据进行协议解析,实例代码如下:

4.电机速度PID控制

本文采用的是增量型PID算法,编程涉及到的数学表达式有3个,分别是

e(k) = target_value - current_value

delta_u(k) = Kp*[e(k)-e(k-1)] + Ki*e(k) + Kd*[e(k)-2*e(k-1)+e(k-2)]

u(k) = u(k-1) + delta_u(k)

将这3个数学表达式封装到函数中,便于其它地方调用,实例代码如下:

电机1与电机2采用同样的PID算法,所以电机2的PID算法代码实现就不赘述了。

5.周期性控制

通过上面的讲解,各个模块的驱动代码都准备就绪了,现在需要产生一个周期性的过程,在里面实现编码器计数值采样、PID控制等具体实现。这里采用定时器TIM1产生一个周期性的中断,在中断处理函数中实现各模块的具体操作,首先配置定时器TIM1,实例代码如下:

然后编写中断处理函数,实例代码如下:

6.小车控制软件整体框图

通过上面的讲解,对小车控制的stm32程序实现有了一定的了解,接下来就来做一个总结。先来看看main()函数实现:

结合上面TIM1中断处理函数,不难发现,整个stm32程序的执行过程:

在main()函数中初始化各个模块;

TIM1中断处理函数周期性的读取编码器值、反馈获取的编码值、PID控制;

剩下的就是串口1和串口2的通信交互。

具体流程图如下:

需要说明的是,在周期性循环体中,要首先读取编码器的值,来保证严格的等间隔采样。

原文地址:https://www.cnblogs.com/hiram-zhang/p/9634170.html

时间: 2024-10-12 15:15:44

第二天:SLAM智能小车DIY乐趣-小车控制stm32软件基础的相关文章

第四天:SLAM智能小车DIY乐趣-小车控制ROS驱动包开发

小车控制ROS驱动包开发 ####写在前面#### 对于做纯SLAM算法和应用功能开发的朋友来说,其实不需要搞明白小车的底层硬件原理和软件实现等繁琐的细节,只需要通过上层API调用来实现小车的控制等操作就可以了.因此,本文开始讲解用于提供上层API调用的ROS驱动包,本文主要内容: 1) 通信协议简介(stm32与ROS驱动包通信) 2) ROS接口(topic订阅与发布) 3) ROS驱动包程序解析 4) 基于航迹推演的里程计解算 ####正文#### 1.通信协议简介(stm32与ROS驱动

第三天:SLAM智能小车DIY乐趣-小车控制PID参数整定

PID参数整定教程 1.数字PID控制算法介绍------位置型&增量型 由于是面向计算机编程实现为目的,这里就直接从数字PID切入正题,如果想要了解更多PID方面的基本知识请参阅相关理论资料. 增量型算法的优点: a. 增量算法不需要做累加,控制量增量的确定仅与最近几次误差采样值有关,计算误差或计算精度问题,对控制量的计算影响较小.而位置算法要用到过去的误差的累加值,容易产生大的累加误差. b. 增量式算法得出的是控制量的增量,例如阀门控制中.只输出阀门开度的变化部分,误动作影响小,必要时通过

SLAM+语音机器人DIY系列:(八)高阶拓展——1.miiboo机器人安卓手机APP开发

android要与ROS通讯,一种是基于rosbridge,另一种是基于rosjava库. 相关参考例子工程 rosbridge例子: https://github.com/hibernate2011/RosClient rosbridge(rosbridge_suite)是ros官方为开发者提供的一个用于非ros系统和ros系统进行交互通信的功能包.包括话题的订阅,消息的发布,服务的调用,参数的设置和获取,图片信息的传递等等,都是JSON格式的字符串.获取JSON字符串并将命令发送到ros,反

智能家居DIY

最近智能家居比较火,将房子简单改造下,也算体验智能家居. 本文讲解的是用无线的方式,优点是:不用改造现有线路,直接安装模块即可实现想要的功能,花的钱也较少,共六百左右 =======================正文开始分割线======================== 一.最终要实现的效果: 用智能手机可以控制家中的电视.空调.灯光.窗帘.热水器.电饭煲 实现上述功能,大概费用几百块钱左右 二.具体的实现过程 整体流程:A------>B------>C 1.这里A表示手机,需要是智能

SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——3.ros-navigation机器人自主避障导航

摘要 通过前面的基础学习,本章进入最为激动的机器人自主导航的学习.在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命.本章将围绕机器人SLAM建图.导航避障.巡航.监控等内容展开.本章内容: 1.在机器人上使用传感器 2.google-cartographer机器人SLAM建图 3.ros-navigation机器人自主避障导航 4.多目标点导航及任务调度 5.机器人巡航与现场监控 3.ros-navigation机器人自主避障导航 前面的学习教程打好

SLAM+语音机器人DIY系列:(七)语音交互与自然语言处理——2.机器人语音交互实现

摘要 这一章将进入机器人语音交互的学习,让机器人能跟人进行语音对话交流.这是一件很酷的事情,本章将涉及到语音识别.语音合成.自然语言处理方面的知识.本章内容: 1.语音交互相关技术 2.机器人语音交互实现 3.自然语言处理云计算引擎 2.机器人语音交互实现 其实要自己做一款语音对话机器人还是很容易的,我们只需要选择好语音识别.语音合成.自然语言处理的技术,就可以在一款树莓派3开发板上实现了.由于语音交互系统的核心技术是云端自然语言处理技术,所以我们可以选择网上免费提供的语音识别.语音合成等现有方

两轮自平衡小车双闭环PID控制设计

                                                                                        两轮自平衡小车的研究意义 1.1两轮平衡车的研究意义 两轮平衡车是一种能够感知环境,并且能够进行分析判断然后进行行为控制的多功能的系统,是移动机器人的一种.在运动控制领域中,为了研究控制算法,建立两轮平衡车去验证控制算法也是非常有用的,这使得在研究自动控制领域理论时,两轮平衡车也被作为课题,被广泛研究.对于两轮平衡车模型的

演绎另类黑客马拉松,机智云第二届中国智能硬件36小时开发大赛再现极速开发

互联网的蓬勃发展,以硬件开发为内容的创客马拉松在世界范围内兴起,吸引了众多硬件达人.创和智能手机的风行让源自编码潮流的黑客马拉松在全球风靡,堪称程序员的"美国偶像",一群软件开发高手云集一堂,几十个小时里开发出一款插件或破译一个程序,累了或坐或卧现场休息,做完当场交作品,是世界上最酷的开发者狂欢.近年来伴随着物联网产业客和爱好者的青睐. 但纵观世界,智能硬件开发马拉松却鲜少有人组织,探究原因则在于智能硬件是一个跨学科的综合体,不仅需要掌握硬件开发能力,还需要有软件应用开发.云计算和大数

第二讲 auto_ptr智能指针

// STL.cpp : 定义控制台应用程序的入口点. // //智能指针在其生命周期结束后会自动调用delete #include "stdafx.h" #include<iostream> #include<memory> using namespace std; class WebSite { public: WebSite(int x){i = x;cout << i << "调用构造函数" <<