
嵌入式
文章平均质量分 89
何为其然
博观而约取,厚积而薄发
展开
-
[发布]嵌入式系统远程测控软件-基于Qt
基于快速开发的需求,本软件开发了一款通用的上位机软件。使用者只需按照本软件提供的通信协议进行STM32工程移植,即可使用本软件进行嵌入式系统远程“测”“控”。本软件非常适合对上位机开发不熟悉的工程师、学生使用,可以快速构建自己的远程数据采集系统,大大缩短开发周期。尤其对学生而言、可快速构建测控系统,方便采集数据,加速论文写作。软件功能:(1) 数据监测。以文本数据和曲线形式显示下位机上传的数据。相当于串口示波器。(2) 数据修改。对下位机的数据进行修改。(3) 历史数据保存。以日志文件形式保存原创 2024-06-10 17:32:49 · 1168 阅读 · 0 评论 -
大疆M3508电机位置与速度PID控制及自编上位机调参
目录一. 简介一. 简介上一篇:大疆M3508电机使用CAN通信进行速度PID闭环控制详解,对官方代码进行了移植,分别使用CAN查询接收与CAN中断接收两种方式实现了电机的速度PID控制,去掉了官方的操作系统,代码精简易读不少。这一篇咱们再接再厉,利用M3508电机实现电机位置控制,同时配合博主编写的上位机软件,实现电机位置、速度的实时显示,通过可视化界面实现电机的PID调参与位置、速度设置。本文环境:Keil MDK5.14STM32CubeMX6.2.1Qt5.14开发板/芯片:正点原原创 2021-10-17 19:30:24 · 17872 阅读 · 26 评论 -
关于ubuntu18双系统安装时检测不到固态硬盘的解决
不要尝试乱七八糟的方法了,亲测没有用而且有用也很折腾。请安装ubuntu20,一撸到底。 新的硬件需要新的系统来支持。ubuntu20镜像下载链接:官方下载地址:https://www.ubuntu.com/download中科大源: http://mirrors.ustc.edu.cn/ubuntu-releases/20.04/清华大学:https://mirror.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/阿里云开源镜像站:http://mirr原创 2021-09-16 15:12:49 · 1830 阅读 · 0 评论 -
win10安装dlib问题记录
这两天安装dlib,使用pip install dlib一直失败。一路升级打怪终于给安上了,总结一下网上的帖子,记录一下。由于使用的Anaconda,根据网上的说法在Python3.6和python3.8环境各操作了一遍,方法都是下载安装包本地安装。本文环境:Anaconda Python3.8Anaconda env python3.6visual studio 2017(须大于2015版本)1. Python3.6环境首先需要安装cmake,boost:pip install cm原创 2021-08-16 13:06:33 · 2486 阅读 · 1 评论 -
大疆M3508电机使用CAN通信进行速度PID闭环控制详解
目录一. 简介二. 电机通信协议三. 电机PID控制原理四. 官方代码移植-中断接收五. 官方代码移植-查询接收一. 简介之前写过一篇文章STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法,其中是以大疆的M3508电机为例进行讲解的(没错,就是RoboMaster机器人同款电机,不过Robomaster上的电机好像是小一号的M2006)。不少小伙伴私信问我要代码,我都回复说不是有官方demo么。后来问的人多了我大概明白了,看来官方的Demo还是有点门槛。可能是带FreeRTOS操作系统看原创 2021-08-12 21:28:00 · 71269 阅读 · 74 评论 -
STM32_HAL库_CubeMx串口DMA通信(DMA发送+DMA空闲接收不定长数据)
目录一. 功能与环境二. 串口DMA与空闲中断原理三. CubeMx配置工程四. 驱动代码与应用程序五. 几点勘误一. 功能与环境这两天好好整理了一下STM32的串口通信,主要测试DMA方式发送与接收,以及配合串口空闲中断接收不定长数据。前后在F103和F767上都测试通过了。不过依然有一些问题想不明白,算了不甩它,暂且先能实现功能就好。本文环境:Keil MDK5.14STM32CubeMX6.2.1开发板/芯片:正点原子精英板F103ZET6/正点原子阿波罗F767IGT6实现功能原创 2021-07-18 17:28:58 · 32856 阅读 · 24 评论 -
STM32_HAL库_CubeMx实现STM32F1五个串口通信(单字节中断接收)
目录一. 串口通信简介二. STM32CubeMx实现STM32F103系列串口驱动三. 五个串口发送与中断接收例程一. 串口通信简介串口通信的原理网上教程一大堆了,入坑单片机的必会串口,这里就不多说了。唯一值得一提的就是STM32是有USART和UART之分的。UART就是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是一种异步收发传输器。USART是通用同步/异步串行接收/发送器(Universal Synchronous/Asynch原创 2021-07-13 16:23:26 · 5703 阅读 · 12 评论 -
STM32CubeMX安装步骤
安装STM32CubeMX需要JAVA开发环境,可以在官网下载https://www.java.com/en/download/manual.jsp也可以在我提供的网盘链接下载:地址:https://pan.baidu.com/s/1JX5YM6uFMZIBJkwwwBxuhg提取码:5232安装过程不细说了,直接一路next撸到底就行了,也不需要添加环境变量,很简单。安装STM32CubeMX。直接进入ST官网,搜索STM32cubeMX即可,这里直接给出网址 https://www..原创 2021-07-12 20:37:43 · 1417 阅读 · 0 评论 -
STM32实现水下四旋翼(十二)数传任务1——PID参数掉电保存
目录一. 机器人掉电保存参数的原理二. 实现水下四旋翼PID参数掉电保存(一)STM32F767 FLASH原理(二)FLASH读写参数实现(三)创建数传任务Transmission_task一. 机器人掉电保存参数的原理由于水下机器人的PID参数众多,算一下三轴角度环、三轴角速度环、深度环,一共有7组PID也就是21个参数,不可能烧一次代码看一下运动效果,然后修改参数再烧代码再看效果,这样效率很低而且完全没有必要。所以必须要实现在线调参与参数掉电保存。那么如何实现呢?只需要在FLASH中开辟一块内存区原创 2021-03-31 20:40:17 · 1696 阅读 · 1 评论 -
解决STM32串口高速上传数据无法同时接收数据的问题
目录一. 问题描述二. 解决方案(一)使用字节发送而不是帧发送(二)使用DMA发送一. 问题描述之前做的一个项目中用了STM32F7的串口三做数传用,定时上传机器人数据,上位机(地面站)接收数据在界面显示,同时上位机可以发送数据到机器人,达到调参、校准等目的。数据上传正常,数据下发一直有点问题,时灵时不灵,改参数一会能改一会不能改,就很迷。因为下传数据的链路是上位机串口发送——下位机串口接收——下位机修改参数——下位机上传新的参数——上位机接收——上位机显示新的参数,迷茫的我一直以为是上位机写的出了问题原创 2021-03-28 11:05:02 · 4310 阅读 · 3 评论 -
STM32实现水下四旋翼(十一)飞行控制任务3——定深控制
目录一. 定深控制原理二. 姿态控制任务增加定深控制功能一. 定深控制原理前面我们讲过了姿态角的串级PID控制,那么现在来理解定深控制是非常好理解了。他们都是位置控制,这里的深度控制我只用了单级的PID控制器,显得会更简单。期望深度来源于遥控器摇杆的积分(在定深模式下油门通道变为上下运动的速度值),反馈深度来自于水深传感器的数据。控制原理为:这个图上一章就出现了,这里我们增加深度控制的位置环,只不过我没有加入Z轴的速度环,实验证明基本能实现定深,当然了响应不是很快,后续可以改进算法。定深控制时需要设原创 2021-03-09 21:51:09 · 2522 阅读 · 13 评论 -
STM32实现水下四旋翼(十)飞行控制任务2——控制分配
目录一. 控制分配的理论推导二. 控制分配的代码实现一. 控制分配的理论推导众所周知四旋翼有四个电机,控制的最后一环就是控制四个电机的速度。上一节我们讲到姿态角串级PID控制,三个角度环输出了三个控制量,加上油门量,一共四个控制量,那么这四个量如何分别决定四个电机的速度呢?这里需要一点点的理论推导,其实很简单。下图是我画的一般性四旋翼的布局图,可以看到是非对称的,因为我希望从一般情况下进行推导。其中四个电机标号从右上角顺时针旋转记为M1,M2,M3,M4。螺旋桨的旋向如图箭头所示。姿态传感器的安装如图原创 2021-03-09 20:58:41 · 3095 阅读 · 11 评论 -
STM32实现水下四旋翼(九)飞行控制任务1——姿态角串级PID控制
目录一. 绪论二. 角度环串级PID原理1. PID控制原理2. 串级PID控制原理三. 角度-角速度串级PID控制实现1. PID控制器的实现2. 串级PID控制器的实现四. 姿态控制任务创建与实现1. 姿态控制任务创建2. 姿态控制任务应用程序一. 绪论从这一篇开始就是姿态控制的内容了,这是核心算法部分。经过前面的部分我们实现了遥控器通信和传感器数据解析,解决了输入与反馈的问题。在闭环控制系统中,核心就是控制器的设计了。在智能小车、四旋翼、四足狗子等等一系列机器人的控制系统中,姿态控制(俯仰角、滚转原创 2021-03-09 16:58:38 · 4499 阅读 · 6 评论 -
STM32实现水下四旋翼(八)传感任务4——电池电量检测
目录一. 电压检测原理二. ADC读电压驱动代码三. 传感任务增加读电压应用代码一. 电压检测原理电压检测是为了检测机器人的电池电量,锂电池的电量与电压值是呈正相关的。锂电池是严禁过放的,不然很容易损坏,尤其是对于水下机器人,电池坏了就要开舱维修,重新密封,代价很大。电压检测原理很简单,初中都学过的分压定理。只需要两个电阻串联,将12V或24V的锂电电压降到3.3V以下的ADC检测范围,然后使用AD采样就可以读出电压值了。本项目中其实就是外连了两个电阻,然后用STM32的ADC功能读取电压,再推算电池原创 2021-03-09 11:53:49 · 4881 阅读 · 1 评论 -
STM32实现水下四旋翼(七)传感任务3——MS5837水深传感器读水深(超详细)
目录一. MS5837水深传感器介绍二. STM32读取水深传感器驱动程序三. 传感任务增加读水深的应用程序一. MS5837水深传感器介绍二. STM32读取水深传感器驱动程序三. 传感任务增加读水深的应用程序原创 2021-03-09 10:53:38 · 10195 阅读 · 11 评论 -
STM32实现水下四旋翼(五)自定义航行数据
目录一. 绪论二. 航行数据类型声明与定义一. 绪论这一篇算作番外篇。只是在写其他章节的时候绕不开很多自定义数据类型,所以干脆另成一篇。为什么要自定义数据类型(准确来说就是结构体),因为一方面有其物理意义,一方面非常便于编程,大大提高代码的可读性(可以理解为C++的对象)。水下四旋翼(包括空中四旋翼)在航行过程中有大量的数据需要处理,如果单独定义为一个个的变量会非常复杂。所以按照物理意义和功能,定义为不同类型的数据(结构体),有相近物理意义和功能的数据作为结构体的成员,新增数据只需在结构体中增加成员即原创 2021-03-03 22:00:25 · 1551 阅读 · 2 评论 -
STM32实现水下四旋翼(六)传感任务2——姿态解算代码实现(使用角度传感器)
目录一. 绪论二. JY901B与JY-GPSIMU角度传感器介绍1. 角度传感器简介2. JY901B的IIC通讯协议3. JY-GPSIMU的串口通讯协议三. STM32的IIC与串口读取三轴角度驱动程序1. IIC读取JY901B角度传感器的角度2. UART读取JY-GPSIMU角度传感器的角度四. 传感任务应用程序1. 姿态角滑动平均滤波2. 传感任务创建3. 传感任务中应用程序一. 绪论上一篇STM32实现水下四旋翼(四)传感任务1——姿态解算原理篇中我们一起复习了传感器测量原理与状态估计原创 2021-03-02 11:45:40 · 4460 阅读 · 23 评论 -
STM32实现水下四旋翼(三)通信任务——遥控器SBUS通信
目录一. 遥控器SBUS通信原理1. 遥控器通信原理2. SBUS通信协议二. 基于UCOS-III操作系统创建通信任务三. 实现SBUS通信驱动程序四. 实现遥控器SBUS通信的应用程序一. 遥控器SBUS通信原理1. 遥控器通信原理无人系统的远程控制包括遥手持遥控器控制和地面站控制。遥控器是实现无人车、无人机、无人潜航器运动控制的基本部件,用一个高大上点的词叫人在回路控制,或者人机协同控制。也就是将人的意志通过遥控器发送给机器人端,让机器人按照我们想要的动作去执行任务,例如前进后退、调速、调姿、调原创 2021-02-18 17:05:05 · 4957 阅读 · 7 评论 -
STM32实现水下四旋翼(二)硬件清单与软件设计
目录一. 引言二. UCOS-III操作系统简介三. 设计水下四旋翼的多任务系统四. 硬件电路设计一. 引言上一篇我们写了四旋翼的飞行原理,这一篇我们继续做准备工作,主要是讲解一下操作系统,我们的代码是基于操作系统实现的。为什么要用操作系统呢?你的电脑可以同时运行多个程序,得益于操作系统的运转。对于单片机来说是一样的,使用操作系统的单片机可以同时运行多个程序。你能忍受你的电脑同时只能运行Word或浏览器或其他什么东东的单个程序吗?显然不能,那么为什么你可以忍受单片机只有一个main函数呢?因为在此之前你原创 2021-02-16 10:50:27 · 4667 阅读 · 15 评论 -
STM32实现水下四旋翼(一)飞行原理
目录一. 引言二. 常见飞行器分类三. 一点解释:为什么写水下四旋翼要写飞行原理一. 引言飞行是人类孜孜以求的梦想。从庄子的"御风而行"、"扶摇而上"到武侠神鬼小说中的轻功、御剑飞行,各种文字、图腾都满含飞行的朴素理想,据说每个大男孩心中都有一个飞天梦。对于一个理工科的大男孩来说,制造一个飞机恐怕是更有诱惑力吧!网络时代知识共享,开源社区的盛行让这不再是难事,事实上你想学,大把的资源可供利用。当你打开一扇门,展现在你眼前的是一个世界、一个全新的世界,学习不再枯燥痛苦,反而变得那么的生动、有趣。我希望看到原创 2021-02-10 20:38:33 · 4313 阅读 · 4 评论 -
STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法
目录一. 绪论二. 电机速度环PID原理三. STM32使用CAN总线实现大疆M3508电机的速度闭环控制四. UCOS-III电机控制任务的实现一. 绪论本文接上一篇STM32实现四驱小车(四)姿态控制任务——偏航角串级PID控制算法,在本文中介绍电机的控制原理和使用CAN总线实现电机速度闭环的代码实操,最后实现电机的速度控制任务。二. 电机速度环PID原理电机的种类特别多,小型机器人(无人机、无人车)上普遍使用直流无刷电机,航模使用的一般是高速低扭矩,车模一般通过减速器低速实现高扭矩。一般电机与原创 2021-02-02 17:12:00 · 18800 阅读 · 8 评论 -
STM32实现四驱小车(四)姿态控制任务——偏航角串级PID控制算法
目录一. 绪论二. 角度环串级PID原理1. PID基本算法2. 姿态角串级PID原理三. 如何用STM32实现角度-角速度的串级PID控制1. PID算法的代码实现2. 串级PID算法的代码实现四. UCOS-III姿态控制任务的实现一. 绪论这一部分是核心内容,讲解姿态角的串级PID控制。在智能小车、四旋翼、四足狗子等等一系列机器人的控制系统中,姿态控制(俯仰角、滚转角、偏航角)都是核心内容,它决定了小车开得直不直,飞机飞得稳不稳。虽然现在先进的、智能的控制算法有很多,如自适应控制、神经网络控制、模原创 2021-02-02 12:14:41 · 21631 阅读 · 5 评论 -
STM32实现四驱小车(三)传感任务——姿态角解算
目录一. 绪论二. 惯性传感器测量原理1. 三轴加速度计2. 三轴陀螺仪3. 三轴磁力计三. 状态估计1. 姿态估计(1)线性互补滤波器(2)非线性互补滤波器(3)卡尔曼滤波器2. 速度估计3. 位置估计四. 姿态角测量与滑动平均滤波1. IIC读取JY901B姿态角2. UART读取十轴惯导姿态角3. 滑动平均滤波读取角度和角速度五. UCOS-III 传感任务实现一. 绪论本文接上一篇STM32实现四驱小车(二)通信任务——遥控器SBUS通信,在今天的文章中解决小车的姿态角测量问题,实现操作系统中的原创 2021-02-02 10:01:30 · 6642 阅读 · 6 评论 -
STM32实现四驱小车(二)通信任务——遥控器SBUS通信
目录一. 遥控器通信原理简介二. SBUS信号解析1. SBUS信号简介2. STM32F7解析SBUS信号三. 通信任务实现一. 遥控器通信原理简介要实现一个遥控小车当然要有一个遥控器了,目前市面上常用的航模遥控器基本都是2.4G无线信号,从遥控器到小车子的链路是这样的。接收机出来的信号一般有SBUS信号、PPM信号、PWM信号,SBUS信号就是一路串行信号,连接到控制板的串口按协议解析就行了。PWM信号就不说了,多路PWM接口表示多个信号,PPM信号也是一路信号,只不过它是一串波,它把多路PWM值原创 2021-01-30 20:19:26 · 17377 阅读 · 16 评论 -
STM32实现四驱小车(一)硬件与软件准备
目录一. 绪论二. 轮式机器人概述三. 硬件准备1. 机械底盘2. 电机选择3. 驱动板4. 传感器5. 电池四. 软件准备——UCOS-III操作系统一. 绪论匆匆忙忙的2020年结束了,在机器人平台开发方面算是搞清了些端倪。近来总算有时间回顾过往,稍作整理。计划写一个专题系列,内容即为“机器人控制系统设计与实现”,这将会是我的系列文章的宗旨。机器人平台从地面无人车到空中无人机到水下无人潜航器,这将是一个可上九天揽月、可下五洋捉鳖的宏大蓝图。讲述内容从控制算法到嵌入式软件开发,从计算机仿真到单片机实原创 2021-01-30 17:32:11 · 11717 阅读 · 7 评论 -
STM32使用HAL_DMA_PWM方式驱动WS2812全彩灯珠
文章目录一、WS2812全彩灯珠原理与驱动方式二、STM32使用HAL库配置DMA方式输出PWM控制WS2812一、WS2812全彩灯珠原理与驱动方式关于WS2812系列灯珠的介绍这里就不讲了,网上资源一大堆,还没找到教程的可以参考这篇文章:STM32驱动WS2812D全彩LED。这里还是把时序波形图附上,方便后面讲解。驱动WS2812的关键就在于一是要输出800KHz的方波,二是要精确控制每个周期内高低电平时间从而输出能够被WS2812识别的逻辑1和0。之后只需要定义一个输出缓冲数组,往数组里边原创 2020-11-10 16:45:10 · 14610 阅读 · 18 评论 -
STM32F1/F7使用HAL库DMA方式输出PWM详解(输出精确数量且可调周期与占空比)
文章目录一. STM32的DMA PWM原理1. DMA简介2. DMA方式输出PWM是怎么回事3. HAL库DMA配置PWM的几个函数二. STM32CubeMx配置 DMA PWM三. 波形调试过程分析一. STM32的DMA PWM原理最开始疑惑过STM32如何才能实现精确数量的脉冲输出从而控制步进电机,直到做WS2812B灯珠的驱动程序时才知道原来有DMA-PWM模式。使用DMA输出PWM可以精确控制脉冲数量,且可以精确控制脉冲周期与占空比,更重要的是使用DMA传输不消耗CPU资源。于是乎原创 2020-11-03 16:46:06 · 31395 阅读 · 68 评论 -
STM32使用CubeMx配置MDK工程只能下载一次程序的解决方案
文章目录一. 问题描述二. 解决办法一. 问题描述最近在使用Cubemx配置STM32F1工程时发现只能下载一次程序,第二次下载程序就无法下载,Options for Target选项中Debug中显示No Device Connected(没有设备连接),使用的是这种ST_Link小模块。因为以前出现过线太长而无法连接设备的情况(血泪教训,使用ST四线模式下载程序线不能太长,超过60公分就很悬了),这次第一反应是线的问题,于是换了一根短线,还是不行。于是换一块板子,连接成功,下载了一次又不能连接了。原创 2020-11-03 11:33:15 · 2538 阅读 · 0 评论 -
win10安装ubuntu18双系统后没有ubuntu启动项之解决方法记录
目录1. win10安装ubuntu18双系统教程2. 解决win10安装ubuntu18双系统之后没有启动项的问题1. win10安装ubuntu18双系统教程待补充2. 解决win10安装ubuntu18双系统之后没有启动项的问题两个月前在我服役了六年的ThinkPad L440上重装了win10,之后准备安装一个ubuntu18,因为之前在新电脑上装过一次,一次成功。本以为还是会很顺利,结果装完之后发现没有启动项!!!直接进Windows了。网上查了各种方法尝试之后都失败了,一怒之下就放下没管原创 2020-10-26 21:53:01 · 16893 阅读 · 7 评论 -
转载:清晰讲解LSB、MSB和大小端模式及网络字节序
转载文章:清晰讲解LSB、MSB和大小端模式及网络字节序转载 2020-10-15 09:35:24 · 523 阅读 · 0 评论 -
树莓派4B(8G)原生系统Raspbian Buster安装ROS Melodic
文章目录1. 关于树莓派操作系统的选择与安装2. 树莓派Raspbian Buster系统安装ROS3. UBUNTU MATE20.04 安装ROS Noetic1. 关于树莓派操作系统的选择与安装在树莓派系统安装与ros安装上面着实费了不少时间,为了增加对照,在我的3b+和4B上分别反复安装了原生系统、ubuntu server18、ubuntu mate16、ubuntu mate18、ubuntu mate20的32位和64位。。。反正板子多、卡也多哈哈。最后结论:树莓派3B+用ubuntu原创 2020-08-27 10:01:44 · 3308 阅读 · 11 评论 -
STM32解析SBUS信号例程详解
文章目录1. sbus信号简介2. STM32F7解析SBUS信号例程(1) 串口配置(2)串口中断接收(3) 信号解析1. sbus信号简介最近在搞一个项目的通信和控制,用到了SBUS,记录一下心得。SBUS全称serial-bus,是一种串口通信协议。串口配置:100k波特率,8位数据位,2位停止位,偶校验(EVEN),无控流,25个字节。协议格式:(8字节)[startbyte] [data1][data2]…[data22][flags][endbyte]startbyte=0x0原创 2020-08-24 22:25:03 · 24072 阅读 · 32 评论