SimpleFOC-多路PWM驱动,相电流监测

原创 云深之无迹 2023-03-24 21:15

三天助力一个不知死活的本科生毕业论文,开搞!

3PWM

6PWM

在BLDC电机控制上,6路PWM 控制模式比3路PWM更自由,因为6个半桥式晶体管的每一个都可以单独控制。

死区时间

开关元器件的和严格意义并不是相同的。IGBT,MOS并不是理想开关器件,其开通时间和关断时间不是严格一致的,如果两端有电压,将导致直流电源短路,损坏桥臂功率器件,称之为“桥臂直通”。所以在驱动开关元器件门极的时候需要增加一段延时,确保另一个开关管完全关断之后再去打开这个开关元器件,通常存在两种情况;
上半桥关断后,延迟一段时间再打开下半桥;
下半桥关断后,延迟一段时间再打开上半桥;
这样就不会同时导通,从而避免功率元件烧毁。
相对于PWM来说,死区时间是在PWM输出的这个时间,上下管都不会有输出,当然会使波形输出中断,死区时间一般只占百分之几的周期。但是当PWM波本身占空比小时,空出的部分要比死区还大,所以死区会影响输出的纹波,但应该不是起到决定性作用的。
另外如果死区设置过小,但是仍然出现上下管同时导通,因为导通时间非常非常短,电流没有变得很大,不足以烧毁系统,那此时会导致开关元器件发热严重,所以选择合适的死区时间尤为重要,过大过小都不行。
因为门极上升和下降时间通常比延迟时间小很多,所以这里可以不用考虑它们。则死区时间满足;
:最大的关断延迟时间;
:最小的开通延迟时间;
:最大的驱动信号传递延迟时间;
:最小的驱动信号传递延迟时间;

上面就是三种基本的转子获得的方式,第一个是正交的光栅,第二个是电磁,最后一个是霍尔原件。

采样电阻是电流采样和对电压采样。对电流采样则串联一个阻值较小的电阻,对电压采样则并联一个阻值较大的电阻。

采样电阻的工作原理是欧姆定律,即I=U/R,通过IC检测电阻两端的电压,用电压除以电阻标称值即得到通过电阻的电流值。因此采样电阻的精度直接影响到电流采样的准确性。

老传统的采样电路了

采样电阻的采样原理:采样电阻将一个阻值较小的电阻,串联在电路中用于把电流转换为电压信号进行测量。采样电阻是一种限流元件,导体对电流的阻碍作用大,我们便说其采样电阻大,反之,称其采样电阻小。但是采样电阻并不会因为导体上没有电流通过而消失,采样电阻是一个导体的固有属性,即便导体上没有电流流过,其采样电阻也是存在的。采样电阻只是一个统称,对其深入了解之后会知道采样电阻多种多样,采样电阻连接采样电阻的阻值会选在1欧姆以下,属于毫欧级电阻,但是部分电阻,有个采样电压等要求,必须选择大阻值电阻,但是这样电阻基数大,产生的误差大。


电流检测结构要求高精度双向放大器具有比常规低侧或高侧放大器更好的PWM抑制。

这个是在线测量相电流的方式

我认为的PWM抑制是,这个地方测量到的相电流的大小,其实是在一个PWM的信号源里面知道电流的大小,所以就是要压制PWM。这就像是在飓风期间测量海上漂浮的杯子中的液体一样。

在这样的情况下测量电流的大小

SimpleFOC直接使用的是在线测量,而且还是双向测量

原理图

INA240的原理框图

大多数低端无刷电机驱动器没有电流测量功能,SimpleFOC提供了一种通过设置电机电压而不是电流来控制电机扭矩的方法。这使无刷直流电机有效地成为直流电机。

也叫直列式测量

电机的驱动电路可生成脉宽调制 (PWM) 信号来控制电机的运行。这些调制信号使得位置与各电机相位一致的测量电路进行共模电压 (VCM) 转换,在转换过程中,电压将在极短时间内在不同高电压电平之间进行切换。

完美的放大器产品能够完全抑制测量的 VCM 分量,仅放大与流经分流电阻器 的电流相对应的差分电压。不幸的是,实际的放大器产品并不理想,会受到大 PWM 驱动输入电压阶跃的影响。由于实际的放大器产品无法进行无限的抑制共模,因此放大器输出端可能会出现与每个输入电压阶跃相对应的大幅度意外干扰。

此类测量的常用方法是选择带宽较高的电流检测放大器。为了保持在可听频率范围之上,典型的调制频率 范围为 20kHz 至 30kHz。用于在这些 PWM 驱动应用 中进行直列式电流测量的放大器选择以信号带宽在 200kHz 至 500kHz 范围内的放大器为目标。以往选择放大器时并不基于显著低于 PWM 信号带宽的实际信号带宽。选择更高的放大器带宽可以使输出干扰在输入电压转换后快速稳定下来。

抑制过后得到的样子

消除噪声后表示的每个相位的输出电压信号。红色波形表示信号,表明经过电子换向的功率晶体管将正弦波形尽可能准确地复制到电机。电流感应放大器将经受从电源轨(例如 V BATT = 48V)到接地端的输入共模电压信号。

低侧相位检测可以更轻松地确定电动机的相电流,但这不是一种精确的方法。它可能会引入与相电流有关的误差。
主要挑战在于,共模电压是PWM信号,除非启用了适当的PWM抑制电路,否则会导致输出信号中断。这导致对电流感测放大器的要求更加严格,该电流感测放大器必须具有出色的DC和AC共模抑制比(CMRR)以及高DC精度(低输入失调电压)。一些设备测量在一个方向上流动的电流。
下面给出一个Arduino控制的FOC电流在线测量实例

对于放大器给出的电流就是直接使用ADC采集就行

让我们来过滤一下这个电流,因为频率的原因,就低通滤波就好

使用操作符重载一下

我们直接使用这个函数就行

相电流的变化,代码在文后

低侧电流测试

低侧电流检测可能是最常见的电流检测技术。主要原因是它既不需要高性能PWM抑制电流检测放大器(如在线检测放大器),也不需要支持高压的放大器(如高侧放大器)。

采样电阻始终置于低侧MOSFET和地之间,确保放大器的端子上始终具有非常低的电压。这种方法的主要缺点是,由于只有相应的低侧mosfet开启时,通过采样电阻的电流才是相电流,而我们只能在这些时刻测量到相电流。PWM频率通常为20至50 kHz,这意味着低侧MOSFET每秒开关20000至50000次,因此PWM设置和ADC采集之间的同步非常重要。

目前这个在开发中。

这个是高测测量一般也不用




https://www.ti.com.cn/product/cn/INA240
https://www.elecfans.com/analog/202007151246626.html
https://zhuanlan.zhihu.com/p/401573207
https://www.sohu.com/a/439655421_468638
https://baijiahao.baidu.com/s?id=1753450617334241521&wfr=spider&for=pc
https://m.elecfans.com/article/1107269.html
https://www.elecfans.com/d/1412716.html

// IN1 pwm1 9 27// IN2 pwm2 6 26// IN3 pwm3 5 25// INH1 enable1 8 12// INH2 enable2 7 13// INH3 enable3 4 14// in-line current sense - phase 1/A 35// in-line current sense - phase 1/C 34
#include
class LowPassFilte{public: LowPassFilte(float Tf); // 低通滤波器时间常量 ~LowPassFilte() = default; float operator()(float x); float Tf; //!< 低通滤波器时间常量protected: unsigned long timestamp_prev; //!< 上次执行时间戳 float y_prev; //!< 经过上次执行后过滤到的值};
LowPassFilte::LowPassFilte(float time_constant) : Tf(time_constant), y_prev(0.0f){ timestamp_prev = micros();}
float LowPassFilte::operator()(float x){ unsigned long timestamp = micros(); float dt = (timestamp - timestamp_prev) * 1e-6f;
if (dt < 0.0f || dt > 0.5f) dt = 1e-3f;
float alpha = Tf / (Tf + dt); float y = alpha * y_prev + (1.0f - alpha) * x;
y_prev = y; timestamp_prev = timestamp; return y;}
LowPassFilte LF_a(0.01); // 原始数据滤波器LowPassFilte LF_b(0.01); // A相电流滤波器LowPassFilte LF_c(0.01); // C相电流滤波器
// AS5600编码器支持spi,iic和模拟量三种数据传输方式,这里用iic(同时也是最常用的方式)// magnetic sensor instance - I2CMagneticSensorI2C sensor = MagneticSensorI2C(AS5600_I2C);TwoWire I2Cone = TwoWire(0);
// BLDC motor & driver instanceBLDCMotor motor = BLDCMotor(11);BLDCDriver3PWM driver = BLDCDriver3PWM(27, 26, 25, 12, 13, 14);
InlineCurrentSense Cs_motor(0.001, 50.0, 35, 36, 34);
// voltage set point variablefloat target_voltage = 5.0;// instantiate the commanderCommander command = Commander(Serial);void doTarget(char *cmd){ command.scalar(&target_voltage, cmd);}
void setup(){ // initialise magnetic sensor hardware I2Cone.begin(18, 5, 400000); sensor.init(&I2Cone); // link the motor to the sensor motor.linkSensor(&sensor);
// power supply voltage driver.voltage_power_supply = 12; driver.init(); motor.linkDriver(&driver);
// aligning voltage motor.voltage_sensor_align = 5; // choose FOC modulation (optional) motor.foc_modulation = FOCModulationType::SpaceVectorPWM; // set motion control loop to be used motor.controller = MotionControlType::torque;
// use monitoring with serial Serial.begin(115200); // comment out if not needed motor.useMonitoring(Serial);
// initialize motor motor.init(); // align sensor and start FOC motor.initFOC();
// add target command T command.add('T', doTarget, "target voltage");
Serial.println(F("Motor ready.")); Serial.println(F("Set the target voltage using serial terminal:")); _delay(1000);
Cs_motor.init();}
void loop(){
// main FOC algorithm function // the faster you run this function the better // Arduino UNO loop ~1kHz // Bluepill loop ~10kHz motor.loopFOC(); // Motion control function // velocity, position or voltage (defined in motor.controller) // this function can be run at much lower frequency than loopFOC() function // You can also use motor.move() and set the motor.target in the code motor.move(target_voltage);
// Cs_motor.getPhaseCurrents(); Serial.print(LF_b((Cs_motor.getPhaseCurrents()).a)); Serial.print(","); Serial.println(LF_c((Cs_motor.getPhaseCurrents()).c));
// Serial.print(LF_a(analogRead(35))); // Serial.print(","); // Serial.print(LF_b((3.3 * ((float)analogRead(35) - 1930) / 4096.0) * 20.0)); // Serial.print(","); // Serial.println(LF_c((-3.3 * ((float)analogRead(34) - 1930) / 4096.0) * 20.0));
// user communication command.run();}

相电流的检测函数

评论 (0)
  •   读报见文《新疆:现代化产业体系在改革中构建、近5000家定点医药机构开通职工医保门诊统筹结算 (qq.com)》兵团零距离 2024年07月18日 08:10 新疆  刚刚结束的第八届中国—亚欧博览会上,新疆各地展示新产业、新项目、新产品,体现着积极建设“八大产业集群”、延链补链强链新成效……  怎么?新疆现在要构建产业?怎么一直以来不建呢?土地都摆在那儿的呀?  什么是“延链补链强链”?  不禁想到产业不就是制造?不就是工厂?不就是要有工人?  自然想到这些年来的就业难!不是因为工厂少了吗
    自做自受 2024-07-20 15:32 135浏览
  • Flash BSL是指通过Bootloader(引导加载程序)对MSP430单片机的闪存进行擦除和编程的过程。这项技术尤其用于那些通过常规编程接口(如JTAG或SWD)无法正常访问的情况,例如由于固件损坏、保护位设置错误或其他编程问题导致的锁定情况。针对MSP430系列单片机,BSL提供了一种通过串口(UART)或I2C接口进行通信的备用编程方法。 要理解Flash BSL的工作方式和应用场景,需要了解MSP430单片机及其BSL功能的基本工作原理和操作步骤。MSP430单片机是德州仪器(Te
    丙丁先生 2024-07-21 15:32 77浏览
  • 插件电阻与贴片电阻的更换是电子维修中的常见操作,它们各自有不同的特点和应用场景,因此在更换时需要注意一些特定的步骤和注意事项。以下将详细阐述插件电阻与贴片电阻的更换方法。一、插件电阻的更换插件电阻,也称为直插电阻,通常具有较长的引脚,可以直接插入印刷电路板的孔洞中,并通过焊接固定。更换插件电阻的步骤大致如下:准备工具和材料:电烙铁、焊锡丝、吸锡器、镊子、斜口钳等基本工具,以及新的插件电阻。断电和检查:确保电路已断电,并使用万用表检查电阻是否确实损坏,避免不必要的更换。拆卸旧电阻:使用电烙铁加热电
    芯小仙 2024-07-19 14:41 1浏览
  • 固态继电器(SSR)已成为现代电气和电子系统中不可或缺的组件,与传统的机电继电器相比具有众多优势。在本文中,我们将深入探讨SSR的实际方面、其应用以及有效部署的关键考虑因素。什么是固态继电器?固态继电器是使用半导体器件(如晶闸管和晶体管)执行开关操作的电子开关。与使用移动部件的机电继电器不同,SSR无需任何机械接触即可运行,从而提高了可靠性、延长了使用寿命并降低了运行噪音。固态继电器的优势1.可靠性和使用寿命:SSR没有移动部件,可减少磨损并确保长时间内保持强劲性能。2.降噪:由于固态继电器的本
    腾恩科技-彭工 2024-07-19 16:03 103浏览
  • SysConfig支持lp_MSPM0C1104。SysConfig是德州仪器(Texas Instruments)提供的一款用于配置和开发微处理器系统的工具。它允许用户通过图形界面对系统进行配置,如引脚、外设、软件堆栈等,并能够自动生成代码。由于SysConfig是为了简化软件开发流程而设计的,它通常支持多种设备,包括lp_MSPM0C1104这样的微处理器。 lp_MSPM0C1104是TI公司的一个微处理器产品线上的型号,属于MSP microcontroller系列。这个系列的微控制器
    丙丁先生 2024-07-19 19:06 135浏览
  • 随着科技的飞速发展,2024年对于国产光电耦合器行业来说,无疑是充满机遇与挑战的一年。本文将深入探讨该行业在技术创新、市场竞争、5G时代、新兴应用领域和国际市场拓展方面的现状及未来前景。技术创新的黄金期物联网和人工智能技术的迅猛发展,对光电耦合器的性能提出了更高的要求。国产光电耦合器正迎来技术创新的黄金期,通过不断提升传输速率、稳定性和适应性,国产光电耦合器能更好地满足市场需求。这不仅为国内企业提供了广阔的发展空间,也为提升其国际竞争力奠定了坚实基础。激烈的市场竞争尽管机遇众多,但全球市场竞争日
    克里雅半导体科技 2024-07-19 16:31 162浏览
  • 概述 前期直接上LYSO晶体模块能谱测试结果不理想,为了找寻原因回测了PMT系统,并进行了对比。为了找到原因,将测试分解,本文将分解后的测试进行记录,注意本文注意关注能谱测试。使用单晶体在二代SiPM读出测试系统中测试能谱 放置单晶体后,继续使用后级数字采集系统对二代SiPM读出系统的输出信号进行数字化转换,然后对采集到的数据进行合理分析,也即对X、Y坐标及能E进行分析,能量E即可用来分析能谱。如图1所示,左右区别则是是否放置辐射源(Cs-137),此时能谱结果似乎又基本符合预期。图1:初步采集
    coyoo 2024-07-20 08:38 139浏览
  • 光耦合器也称为光隔离器,是现代电子产品中的关键组件,可确保电路不同部分之间的信号完整性和隔离。它们使用光来传输电信号,提供电气隔离和抗噪性。结构和功能光耦合器通常由以下部分组成:1.LED(发光二极管):通电时发光。2.光电探测器:将光转换回电信号。这可以是光电晶体管、光电二极管或其他光敏元件。工作原理:1.信号输入:电信号驱动LED。2.发光:LED发出与信号相对应的光。3.信号传输:光穿过绝缘屏障。4.信号输出:光电探测器接收光并将其转换回电信号,确保输入和输出之间的隔离。主要规格-&nbs
    腾恩科技-彭工 2024-07-19 16:05 119浏览
  • F28P55x 是德州仪器(Texas Instruments)公司生产的一款数字信号处理器(DSP)芯片的型号。这款芯片属于该公司的TMS320F28xxx系列,这一系列的处理器通常被用于工业控制系统,如电机控制、功率转换等应用中。它们通常具有高度集成的外设配套,能够处理高速计算任务,并且可以提供多种通信接口。 具体到F28P55x,虽然我无法提供详细的数据表或技术规格(因为知识截止日期在2023年4月,且无法访问实时数据库),但根据以往的型号和产品系列,这个型号可能具备以下特点: 1.
    丙丁先生 2024-07-19 18:37 126浏览
  • 非常荣欣参加了这次《混合式数字与全数字电源控制实战》试读体验活动,同时非常感谢面包板论坛举办此活动。本书印刷还是非常新颖,具有精美漫画。下图为图书正面。本书专注于补偿控制器理论与计算并实现完整控制环路设计过程,并且书中处处藏有设计小技巧或经验,可让读者避开一些坑洞,顺利开发电源。本书以 Buck转换器为主要论述基础,因为Buck尤其适合作为人门架构,已被广泛使用与延伸,包含半桥、全桥、推挽式等;其补偿控制器原理皆相同,DC/AC Inverter亦为 Buck&nb
    shenwen2007_656583087 2024-07-21 19:43 17浏览
  •   国产光电耦合器作为电子设备中重要的元器件之一,广泛应用于电路隔离、信号传输等领域。近年来,随着科技的不断进步,国产光电耦合器在技术水平和市场应用方面取得了显著发展。本文将探讨国产光电耦合器的现状、技术创新、市场环境及未来发展前景。  现状分析  目前,国产光电耦合器产业正在迅速发展,已形成较为完整的产业链。国内企业在产品研发、制造工艺和市场推广等方面积累了丰富的经验。国产光电耦合器在恶劣的设备环境场景下也是取得不错的成绩,元件适应恶劣环境的水准要求也在不断精益求
    克里雅半导体科技 2024-07-19 16:26 136浏览
  • 运放电路环路稳定性设计——原理分析、仿真计算、样机测试本书利用“原理分析、仿真计算、样机测试”三步学习法对运放电路环路进行稳定性设计,使读者能够对已有电路CD理解,并且通过计算和仿真分析对原有电路进行改进,以便设计出符合实际要求的运放电路,达到实际应用的目的。1先,进行简单运放电路分析,运用反馈控制理论和稳定性判定准则进行时域/频域计算和仿真,D计算结果和仿真结果一致时再进行实际电路测试,使三者有机统一;然后,改变主要元器件参数,使电路工作于振荡或超调状态,此时测试稳定裕度,应该与稳定判据相符合
    Jack陈 2024-07-19 21:05 13浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦