低側(cè)電流測(cè)試
低側(cè)電流檢測(cè)可能是最常見的電流檢測(cè)技術(shù)。主要原因是它既不需要高性能PWM抑制電流檢測(cè)放大器(如在線檢測(cè)放大器),也不需要支持高壓的放大器(如高側(cè)放大器)。
采樣電阻始終置于低側(cè)MOSFET和地之間,確保放大器的端子上始終具有非常低的電壓。這種方法的主要缺點(diǎn)是,由于只有相應(yīng)的低側(cè)mosfet開啟時(shí),通過(guò)采樣電阻的電流才是相電流,而我們只能在這些時(shí)刻測(cè)量到相電流。PWM頻率通常為20至50 kHz,這意味著低側(cè)MOSFET每秒開關(guān)20000至50000次,因此PWM設(shè)置和ADC采集之間的同步非常重要。
目前這個(gè)在開發(fā)中。

這個(gè)是高測(cè)測(cè)量一般也不用
https://www.ti.com.cn/product/cn/INA240
https://www.makelele.cn/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.makelele.cn/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); // 低通濾波器時(shí)間常量
~LowPassFilte() = default;
float operator()(float x);
float Tf; //!< 低通濾波器時(shí)間常量
protected:
unsigned long timestamp_prev; //!< 上次執(zhí)行時(shí)間戳
float y_prev; //!< 經(jīng)過(guò)上次執(zhí)行后過(guò)濾到的值
};
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); // 原始數(shù)據(jù)濾波器
LowPassFilte LF_b(0.01); // A相電流濾波器
LowPassFilte LF_c(0.01); // C相電流濾波器
// AS5600編碼器支持spi,iic和模擬量三種數(shù)據(jù)傳輸方式,這里用iic(同時(shí)也是最常用的方式)
// magnetic sensor instance - I2C
MagneticSensorI2C sensor = MagneticSensorI2C(AS5600_I2C);
TwoWire I2Cone = TwoWire(0);
// BLDC motor & driver instance
BLDCMotor 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 variable
float target_voltage = 5.0;
// instantiate the commander
Commander 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();
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
開關(guān)
+關(guān)注
關(guān)注
20文章
3310瀏覽量
98143 -
IGBT
+關(guān)注
關(guān)注
1288文章
4339瀏覽量
263219 -
MOS
+關(guān)注
關(guān)注
32文章
1744瀏覽量
100815 -
功率器件
+關(guān)注
關(guān)注
43文章
2124瀏覽量
95188
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
一個(gè)PWM控制周期如何取得兩相電流數(shù)據(jù)
電機(jī)控制單電阻采樣機(jī)制是在一個(gè)PWM波形內(nèi)采集兩相電流ADC數(shù)據(jù),但某些扇區(qū)邊界條件下只能獲得一路電流ADC數(shù)據(jù), 需要對(duì)PWM波形進(jìn)行變形用于構(gòu)造
一個(gè)PWM波形內(nèi)采集兩相電流ADC數(shù)據(jù)
電機(jī)控制單電阻采樣機(jī)制是在一個(gè)PWM波形內(nèi)采集兩相電流ADC數(shù)據(jù),但某些扇區(qū)邊界條件下只能獲得一路電流ADC數(shù)據(jù), 需要對(duì)PWM波形進(jìn)行變形用于構(gòu)造
步進(jìn)電機(jī)相電流怎么測(cè)
的重要性 步進(jìn)電機(jī)作為一種重要的自動(dòng)化設(shè)備,廣泛應(yīng)用于各種工業(yè)和民用領(lǐng)域。相電流是步進(jìn)電機(jī)驅(qū)動(dòng)的核心參數(shù)之一,直接影響電機(jī)的力矩、速度和精度。因此,準(zhǔn)確測(cè)量步進(jìn)電機(jī)相電流對(duì)于確保電機(jī)正常運(yùn)行、提高生產(chǎn)效率、優(yōu)
無(wú)刷電機(jī)相電流比母線電流大?
三相無(wú)刷直流電機(jī),帶三相線性霍爾反饋電機(jī)轉(zhuǎn)子位置,就是可以根據(jù)霍爾的電壓來(lái)控制PWM占空比從而生成正弦波電流,驅(qū)動(dòng)電路使用3相H橋雙極驅(qū)動(dòng),使用三組6路互補(bǔ)SPWM控制,在
發(fā)表于 01-19 10:42
什么是相電流和線電流
三角連接方式:如果3個(gè)線電流與3個(gè)相電流相對(duì)稱,那么線電流等于√3*相電流;如果是非對(duì)稱的情況,那就需要計(jì)算各相負(fù)載的性質(zhì),算出電流和電壓的
發(fā)表于 03-11 10:43
?20.1w次閱讀
SimpleFOC -foc電流-力矩控制代碼
#include #include // 無(wú)刷直流電機(jī)及驅(qū)動(dòng)器實(shí)例BLDCMotor motor = BLDCMotor(1
發(fā)表于 12-16 16:51
?16次下載
SimpleFOC -位置控制代碼
#include #include // 無(wú)刷直流電機(jī)及驅(qū)動(dòng)器實(shí)例BLDCMotor motor = BLDCMotor(6
發(fā)表于 01-14 12:56
?6次下載
SimpleFOC之多路PWM驅(qū)動(dòng),相電流監(jiān)測(cè)1
開關(guān)元器件的和嚴(yán)格意義并不是相同的。IGBT,MOS并不是理想開關(guān)器件,其開通時(shí)間和關(guān)斷時(shí)間不是嚴(yán)格一致的,如果兩端有電壓,將導(dǎo)致直流電源短路,損壞橋臂功率器件,稱之為“橋臂直通”。所以在驅(qū)動(dòng)開關(guān)元器件門極的時(shí)候需要增加一段延時(shí),確保另一個(gè)開關(guān)管完全關(guān)斷之后再去打開這個(gè)開關(guān)元器件,通常存在兩種情況;
線電流和相電流的關(guān)系
線電流和相電流是電力系統(tǒng)中重要的概念。在三相交流電系統(tǒng)中,線電流和相電流之間存在一定的關(guān)系。本文將詳細(xì)介紹線電流和
怎么區(qū)分相電流與線電流的區(qū)別
相電流與線電流是電力系統(tǒng)中的兩個(gè)重要概念,它們?cè)陔娐贩治龊碗娏ο到y(tǒng)設(shè)計(jì)中扮演著關(guān)鍵角色。本文將介紹相電流與線電流的區(qū)別。 一、相電流與線
相電流與線電流怎樣測(cè)量
了解相電流與線電流的測(cè)量方法對(duì)于電力系統(tǒng)的穩(wěn)定運(yùn)行和故障診斷具有重要意義。 一、相電流與線電流的概念 在三相交流電力系統(tǒng)中,相電流是指流過(guò)每
相電流和線電流的相位關(guān)系
在電力系統(tǒng)中,電流的相位關(guān)系對(duì)于系統(tǒng)的正常運(yùn)行和設(shè)備的安全使用至關(guān)重要。本文將探討相電流和線電流的相位關(guān)系,以及它們?cè)陔娏ο到y(tǒng)中的作用和影響。 一、相電流和線
負(fù)載電流是線電流還是相電流
負(fù)載電流既可以是線電流也可以是相電流,這取決于具體的電路和負(fù)載連接方式。 線電流與相電流的定義 線電流
SimpleFOC之多路PWM驅(qū)動(dòng),相電流監(jiān)測(cè)2
評(píng)論