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

这篇具有很好参考价值的文章主要介绍了【云台】开源版本SimpleBGC的电机驱动与控制方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

SPWM开环驱动方式

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

开环控制

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

与电机控制闭环方式对比

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

SPWM驱动三相无刷电机

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

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

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

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

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

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

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

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

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

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

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

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

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

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

源码分析

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

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

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

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

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

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

如果要控制电机转到相应的电角度,比如转到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 的定时器有很多个。

【云台】开源版本SimpleBGC的电机驱动与控制方式文章来源地址https://www.toymoban.com/news/detail-434013.html

到了这里,关于【云台】开源版本SimpleBGC的电机驱动与控制方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 电机控制和Linux驱动开发哪个方向更好呢?

    先说结论:任何一个领域,就像世间的五行,阴阳结合,虚实结合,利弊结合。对于哪个更好,不能一概而论,最重要的是要搞清楚,你更适合哪个?   当我看到这个问题,也确实是我早些年时所面临的抉择,不由得过来回答一下,一来表达自己的看法,二来想以此在互联网

    2024年02月10日
    浏览(34)
  • 无刷电机控制基础(2)——有感和无感驱动、调速

    上一篇文章我们讲了一些无刷电机的基础知识,包括无刷电机的内部结构,驱动原理等,我们知道了只需要按照转子的当前位置,来按顺序给定子线圈通电,就能让电机转动起来。 但是,上一篇中我们跳过了一个关键步骤,就是如何检测转子的位置。本篇我们就讲讲常用的位

    2024年01月21日
    浏览(25)
  • STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    该篇文章中用到的步进电机闭环驱动器为Emm42_V4.0步进电机闭环驱动器。该闭环驱动器自带FOC矢量闭环控制算法,能实现力矩、速度、位置三环控制。 如下图所示,该42步进闭环电机驱动器的A+、A-、B+、B-连接步进电机,通过右侧的使能、脉冲、方向端对步进电机进行驱动控制

    2024年02月01日
    浏览(38)
  • arduino uno+驱动器控制42步进电机

    1.步进电机工作原理 步进电机通过不停的变换通电线圈和线圈的通电方向进行旋转,每次变换使步进电机转子转动1.8°。如图所示,这里采用的是两相四线步进电机,所有的转动都由以下四个步骤构成 2.arduino+驱动器+步进电机,接线示意图 3.编写arduino程序

    2024年02月13日
    浏览(26)
  • 【 使用 Arduino 和 L293D 电机驱动器 IC 控制直流电机】

    如果你打算用直流电机建造一个机器人,那么你最终会了解到,如果你想让它朝某个方向移动,你需要同时控制电机的速度和方向。最好的方法之一是使用 L293D 电机驱动器 IC,因为它便宜、易于使用,并且有一点 PWM 支持,它可以控制速度和方向。这就是为什么在本教程中我

    2024年02月15日
    浏览(37)
  • TMC4671-LA完全集成伺服控制器电机驱动芯片带FOC控制

    TMC4671是一个完全集成的伺服控制器,为BLDC/PMSM和2相步进电机以及直流电机和语音线圈提供现场定向控制。   应用 •机器人 • 拾取和放置机器 • 工厂自动化 • 电动汽车 • 实验室自动化 •鼓风机 •泵 • 带磁场定向控制(FOC)的伺服控制器 – 扭矩(和磁通)控制模式

    2024年02月12日
    浏览(23)
  • tb6612电机驱动软件开发(代码pid实现,调试,控制实现)

    代码工程 https://download.csdn.net/download/weixin_52849254/87879043?spm=1001.2014.3001.5501 这段代码是一个PID算法的实现,用于控制电机的位置和速度。代码中包含了以下主要内容: 定义了全局变量,包括四个PID结构体变量,分别用于左电机的位置控制、左电机的速度控制、右电机的速度控

    2024年02月08日
    浏览(38)
  • L298N驱动俩路电机按键控制正反转

    一个L298N是带有俩路驱动电路的,就是可以驱动俩个电机同时去转动,在硬件部分因为以前弄小车的时候已经组装好了,一路驱动去控制俩个电机,俩路驱动就是控制四个电机,做的是四轮四驱的小车,嫌麻烦就没有去拆改装了。 博主主页里面有介绍过L298N的使用了,为了避

    2024年02月03日
    浏览(25)
  • STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机

    1 电路图 2 TB6612简介 TB6612是双驱动,可同时驱动两个电机 STBY:接单片机的IO口清零电机全部停止,置1通过AIN1 AIN2,BIN1,BIN2 来控制正反转 VM:建议接10V以内电源( 瞬间上电12V可能会有尖峰电压击穿器件 ) VCC:接5V电源 GND:接电源负极 PWMA:接单片机的PWM口 ,控制转速 PWM

    2023年04月22日
    浏览(81)
  • stm32F103单片机pwm控制伺服驱动器进而控制步进电机

    1.需要一台步进电机,私服驱动器,stm32单片机;先按照说明文档,连接好硬件相关线路,对应好sign+,sign-,puls+,puls-线路,其中sign只是个io口拉高拉低操作,puls是pwm波形输出口,虽然有两根线,但只是需要控制一个IO口输出波形即可; 采用主从模式,TIM1为主定时器,tim3未从定

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包