【云台】开源版本SimpleBGC的电机驱动与控制方式

news2024/11/23 13:15:51

前言

最近想学习一下云台,发现资料确实还不太好找,比较有参考价值的是俄版的开源版本的云台代码,后面就不开源了,开源版本的是比较原始的算法,差不多是玩具级别的,不过还是决定学习一下,了解一下基础。

SPWM开环驱动方式

俄版云台的电机驱动方式采用 SPWM 的方式来控制三相无刷电机,并且为节省成本,直接使用的开环方式来驱动。

开环控制

开环控制的方式也就是说,假设想要电机的电角度跑到0度的位置,就直接控制三相PWM,发送对应角度应该有的波形,而不去考虑当前电机转子的位置在哪里,这样产生对应角度的磁场矢量,就强行拖拽转子旋转到对应的位置。

与电机控制闭环方式对比

电机控制闭环时,是通过一些方式检测电机转子实际的位置在哪里,之后就控制三相 PWM 产生朝前转子位置90度的磁场矢量,就可以以最优的力矩与效率控制转子旋转到对应角度。开环的方式相当于是非最优力矩与效率拖动转子移动,会有更多的能量损耗,但优点就是简单可靠,适用于负载不大的场景。

SPWM驱动三相无刷电机

三相无刷电机如果要以旋转的正弦磁场来控制转动的话,底层有两种驱动模式,一种是SPWM,另一种是SVPWM,俄版云台采用的是 SPWM 的形式。

底层的硬件都是相同的,框图都是如下的形式:

通过控制六个 MOS 管的方式来产生 360 度的正弦旋转磁场。

SPWM 的驱动方式相比 SVPWM 要简单许多,对于单相的 H 半桥,要产生一个正弦电流信号,SPWM 的做法是使用一组正弦变化的 PWM信号来等效变换,如下所示:

上面的图是单相的 SPWM 信号,电机中的三相线一般是用 U,V,W 或 A,B,C 来表示。假设上面的 SPWM 是 U 相的信号,那么再生成两个 SPWM 分别对应 V 与 W 相的输出信号,并且给定固定的 120 度相位差,就可以模拟无刷电机三相正弦信号,例如 U 相是 0度,那么 V 相的相位就是120度,W相的相位就是 240 度。

电机三相 UVW(ABC) 的空间分布如下所示,互为 120 度:

对 ABC 三相分别产生互为 120 度相位差的正弦信号,此正弦信号使用 SPWM 的方式模拟,如下所示:

这样,根据此相位互为120度信号的 ABC 正弦信号,如果正弦信号幅值相同,那么就可以合成一个幅值不变,角度旋转的磁场矢量:

上面的动图中,粉色线就是三相正弦波合成的磁场矢量,红蓝绿线就代表三相正弦变化,互为 120 度的正弦信号。

源码分析

1.在初始化时,会初始一个正弦表,大小为1024,也就是说将 0~2pi 的一周角度等分为1024份,分辨率为 1024,之后复用这个宏,将单个分辨率对应的正弦 sin 值也扩大1024倍,相当于是将正弦表的 [-1,1] 扩大到 [-1024,1024],这样使用整形存储可以提高运算速度。

2.生成SPWM时,以一半的 PWM 值为基准,俄版云台的 PWM 发布 CCR 值为1000,也就是以 500 为基准,传入的参数不仅有角度,也有幅值大小,将对应幅值与角度的磁场矢量,计算出对应的三相正弦值传入 PWM 中:

幅值大小根据负载大小进行修改。

控制电机转到相应的电角度

如果要控制电机转到相应的电角度,比如转到0度的电角度,那么按照正弦表(电角度的坐标系默认0度与A相重合),A相发送0度对应的PWM,B相发送120度对应的PWM,C相发送240度对应的PWM。这样就可以发出 0度电角度对应的磁场矢量,拉动转子转到这个位置。

控制电机转到相应的姿态角度

电机转子从一个磁极转到下一个相同的磁极,称作一个电周期,一个机械周期就是大家平常看到的,电机转了一圈,电角度≠机械角度,但电角度与机械角度存在一定的数学关系,假如电机是 7 对极,那么转一个机械周期,就会转过7个电角度周期。

除了 电周期 = 机械周期 * 极对数 的倍数关系外, 因为电角度的 0 度就对应的是 A 相定子磁场强度最大的时候(转子磁极最靠近的时候),但机械角度的 0 度没有这种固定的关系,是人为规定的。

云台的功能是要通过调整电机的机械角度来达到相应的姿态角,如果说通过校准,得到电角度与机械角度的偏移量,或者电角度与姿态角度的偏移量,会非常的麻烦,而且容易出错,俄版云台使用了另一种更巧妙的方法:忽略姿态角与电角度的偏移,直接将姿态目标与姿态角乘以极对数,得到电角度偏差(目标与实际姿态角相对电角度都有偏移,但是姿态角误差因为相减,反而会将此变量消除掉) ,将电角度偏差代入 pid 后,得到电角度的变化量,之后根据电角速度的速率限制,加上上一时刻的电角度,计算出下一步的电角度目标,之后代入 SPWM 发波拖动转子就可以。

在校准时,只需要限制姿态角的范围即可。

驱动芯片

三相电机驱动需要三路H桥驱动,并且 PWM 需要三路互补 PWM,也就是 6 路 PWM,才能驱动一个电机,但 STM32 芯片能发送三路互补 PWM 的定时器只有两个高级定时器(TIM1 与 TIM8),三轴云台需要三个电机,因此俄版云台选用了一款驱动芯片 DRV8313 ,这款驱动芯片可以自动将一路 PWM 输入在内部转化为一对互补PWM,也就是说,本来需要三路互补PWM才能控制的电机,只需要三个普通 PWM 就可以控制了,这样的话,STM32 就没有定时器限制了,可以发三路 PWM 的定时器有很多个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyCaret:低代码自动化的机器学习工具

PyCaret简介 随着ChatGPT和AI画图的大火,机器学习作为实现人工智能的底层技术被大众越来越多的认知,基于机器学习的产品也越来越多。传统的机器学习实现方法需要较强的编程能力和数据科学基础,这使得想零基础尝试机器学习变得非常困难。 机器…

Ucore lab5

实验目的 了解第一个用户进程创建过程了解系统调用框架的实现机制了解ucore如何实现系统调用sys_fork/sys_exec/sys_exit/sys_wait来进行进程管理 实验内容 练习0:已有实验代码改进 ​本实验中完成了用户进程的创建,能够对用户进程进行基本管理,并为…

C语言入门篇——自定义数据篇

目录 1、结构体 1.2、匿名结构体 1.3、结构体的自引用 1.4、结构体的声明和初始化 1.5、结构体的内存对齐 1.6、修改默认对齐数 1.7、结构体传参 2、枚举 3、共用体(联合体) 1、结构体 设计程序时,最重要的步骤之一是选择表示数据的…

【微机原理】8088/8086微处理器

目录 一、8088/8086的功能结构 1.总线接口部件(BIU) 2.执行部件(EU) 二、8088/8086的寄存器结构(14个) 溢出标志的概念 溢出和进位的区别 8086CPU是Intel系列的16位微处理器,他有16根数据…

框架学习之KOCA框架简介

KOCA框架简介 什么是KOCA术语定义发展历史 KOCA的总体架构产品优势开放性敏捷性(一体化解决方案)融合性安全性接入网关- KOCA Gateway KOCA DevOps流水线 KOCA技术栈 金证开发者社区:http://koca.szkingdom.com/ 什么是KOCA KOCA是金证基于…

LC-1376. 通知所有员工所需的时间(DFS:自上而下、自下而上)

1376. 通知所有员工所需的时间 难度中等125 公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。 在 manager 数组中,每个员工都有一个直属负责人,其中 manager[i] 是第…

JavaScript常用数组方法-汇总

快速检索 方法解析 1:concat(); 功能:合并数组,可以合并一个或多个数组,会返回合并数组之后的数据,不会改变原来的数组; var str1 [12,2,"hello"];var str2 ["world"]; console.lo…

简单毛概刷题网页制作 2.0(拖欠近一年版)

原因是大概一年之前学校的毛概期末刷题网站突然崩了,但是一直没有修复。当时眼看着复习时间逐渐被压缩,自己啥也做不了,遂自学前端完成毛概刷题网页一枚。 最早的毛概刷题网站仅仅是 1.0 版本(传送门),功能…

Excel技能之对齐,你可能都没想到

Excel表格,既然要做得漂漂亮亮,一定离不开对齐。拍照需要美颜,表格需要对齐。 内容全部挤到一边去。 有些靠左,有些靠右。 加上空格,感觉对齐。如果数据特别多,又逃不过加班的命运。 实在是混乱不堪。审美…

Linux常用命令——iostat命令

在线Linux命令查询工具 iostat 监视系统输入输出设备和CPU的使用情况 补充说明 iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就…

Linux安装MongoDB数据库,并内网穿透远程连接

文章目录 前言1. 配置Mongodb源2. 安装MongoDB3. 局域网连接测试4. 安装cpolar内网穿透5. 配置公网访问地址6. 公网远程连接7. 固定连接公网地址8. 使用固定地址连接 转载自Cpolar Lisa文章:Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网穿透」 前言 …

Qt中QDebug的使用

QDebug类为调试信息(debugging information)提供输出流。它的声明在<QDebug>中&#xff0c;实现在Core模块中。将调试或跟踪信息(debugging or tracing information)写出到device, file, string or console时都会使用QDebug。 此类的成员函数参考&#xff1a;https://doc…

C语言—指针的进阶

指针的进阶 字符指针指针数组数组指针数组指针的定义区分&数组名以及数组名数组指针的使用 数组参数、指针参数一维数组传参二维数组传参一级指针传参二级指针传参 函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组相关笔试题和面试题指针笔试题 指针的相关概…

C++ Boost.Reflection库(现在是Boost.PFR)的下载、安装、使用详细教程

这里写目录标题 一、Boost.Reflection简介二、Boost.Reflection&#xff08;现在是Boost.PFR&#xff09;库的下载和安装2.1、下载编译Boost2.2、使用Boost.Reflection&#xff08;现在是Boost.PFR&#xff09; 小结 一、Boost.Reflection简介 ​ Boost.Reflection&#xff0…

【C++】-关于类和对象的默认成员函数(中)-构造函数和析构函数

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…

Cadence(2):向导制作PCB封装

前提&#xff1a;软件版本 焊盘设计 &#xff1a;Pad Designer16.6PCB设计 &#xff1a;PCB Editor16.6 文章目录 LQFP64向导封装制作封装信息SMD焊盘制作添加焊盘库到PCB Editor新建工程LQFP64向导制作流程后续处理修改栅格大小。贴加1脚标识修改丝印线 总结 LQFP64向导封装制…

获取代码量(针对Pycharm IDEA)

Statistic 这是个一劳永逸&#xff0c;获取代码量的方法。 Beginning!&#xff08;安装到使用可能都不需要5分钟&#xff09; 附上Statistic的官网下载URL&#xff1a;Statistic - IntelliJ IDEs Plugin | Marketplacehttps://plugins.jetbrains.com/plugin/4509-statistic/v…

clion + opencv环境搭建

clion是一个jetbrains提供的c开发环境&#xff0c;和idea,pycharm等开发工具类似&#xff0c;界面有很多相似的地方。 clion内置了一个mingw的编译环境&#xff0c;自带了gcc,g等命令&#xff0c;安装完clion之后&#xff0c;我们新建项目&#xff0c;它会使用内置的mingw环境。…

在KylinV10上使用DTS进行mysql8迁移至DM8

前言&#xff1a; MySQL 到 DM 的移植主要有以下几个方面的工作&#xff1a; 1&#xff0e;分析待移植系统&#xff0c;确定移植对象。2&#xff0e;通过数据迁移工具 DTS 完成常规数据库对象及数据的迁移。3&#xff0e;通过人工完成 MSQL 的移植。4&#xff0e;移植完成后对移…

从设计到产品

从设计到产品 最近上的一些课的笔记&#xff0c;从 0 开始设计项目的角度去看产品。 设计系统 设计系统(design system) 不是 系统设计(system design)&#xff0c;前者更偏向于 UI/UX 设计部分&#xff0c;后者更偏向于实现部分。 个人觉得&#xff0c;前端开发与 UI/UX 设…