日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

INA240三相无刷电机电流采样实例(arduino)

發(fā)布時(shí)間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 INA240三相无刷电机电流采样实例(arduino) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

前言&&準(zhǔn)備材料

arduino程序

參考鏈接:


前言&&準(zhǔn)備材料

我這里用的控制器是esp32,它的adc采集器分辨率是12位,工作電壓是3.3V。因此我們讀取到的模擬數(shù)值0~4096就是對(duì)應(yīng)的0~3.3V。

這里我的ina240型號(hào)是I240A2。也就是說(shuō)ina240的增益是50V/V。

我的驅(qū)動(dòng)器型號(hào)是simplefoc v0.2。采用內(nèi)置電流采樣,具體電流采樣電路如下圖:

?雙向

arduino程序

/**使用電壓控制回路的扭矩控制示例。大多數(shù)低端無(wú)刷電機(jī)驅(qū)動(dòng)器沒(méi)有電流測(cè)量功能,因此SimpleFOC為您提供了一種通過(guò)設(shè)置電機(jī)電壓而不是電流來(lái)控制電機(jī)扭矩的方法。這使無(wú)刷直流電機(jī)有效地成為直流電機(jī),您可以以相同的方式使用它。 */ // 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 <SimpleFOC.h>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 hardwareI2Cone.begin(18, 5, 400000);sensor.init(&I2Cone);// link the motor to the sensormotor.linkSensor(&sensor);// power supply voltagedriver.voltage_power_supply = 12;driver.init();motor.linkDriver(&driver);// aligning voltagemotor.voltage_sensor_align = 5;// choose FOC modulation (optional)motor.foc_modulation = FOCModulationType::SpaceVectorPWM;// set motion control loop to be usedmotor.controller = MotionControlType::torque;// use monitoring with serialSerial.begin(115200);// comment out if not neededmotor.useMonitoring(Serial);// initialize motormotor.init();// align sensor and start FOCmotor.initFOC();// add target command Tcommand.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 ~10kHzmotor.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 codemotor.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 communicationcommand.run(); }

串口打印效果:

用Baize_Foc的測(cè)試代碼

/**使用電壓控制回路的扭矩控制示例。大多數(shù)低端無(wú)刷電機(jī)驅(qū)動(dòng)器沒(méi)有電流測(cè)量功能,因此SimpleFOC為您提供了一種通過(guò)設(shè)置電機(jī)電壓而不是電流來(lái)控制電機(jī)扭矩的方法。這使無(wú)刷直流電機(jī)有效地成為直流電機(jī),您可以以相同的方式使用它。 */ // 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 <SimpleFOC.h>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(17, 18, 19, 21, 22, 23);InlineCurrentSense Cs_motor(0.001, 50.0, 34, 35);// 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 hardwareI2Cone.begin(26, 25, 400000);sensor.init(&I2Cone);// link the motor to the sensormotor.linkSensor(&sensor);// power supply voltagedriver.voltage_power_supply = 12;driver.init();motor.linkDriver(&driver);// aligning voltagemotor.voltage_sensor_align = 5;// choose FOC modulation (optional)motor.foc_modulation = FOCModulationType::SpaceVectorPWM;// set motion control loop to be usedmotor.controller = MotionControlType::torque;// use monitoring with serialSerial.begin(115200);// comment out if not neededmotor.useMonitoring(Serial);// initialize motormotor.init();// align sensor and start FOCmotor.initFOC();// add target command Tcommand.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 ~10kHzmotor.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 codemotor.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 communicationcommand.run(); }

參考鏈接:

1.【INA240】產(chǎn)品參數(shù)介紹、INA240數(shù)據(jù)手冊(cè)、中英文PDF資料下載-TI資料-電子發(fā)燒友

2.?

總結(jié)

以上是生活随笔為你收集整理的INA240三相无刷电机电流采样实例(arduino)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美激情中文字幕 | 国产精品永久 | 无套白嫩进入乌克兰美女 | 荒岛淫众女h文小说 | 天堂网av2014 | 亚洲免费在线观看视频 | 日韩三级免费观看 | 1000部国产精品成人观看 | 国产中文在线观看 | 花房姑娘免费全集 | 精品人妻人人做人人爽夜夜爽 | 黄色大全免费观看 | 成人黄色免费网 | 国产精品99久久免费黑人人妻 | 亚欧综合在线 | 在线观看免费视频 | 法国空姐 在线 | 嫩草影院懂你的 | 91中文在线 | 亚洲视频免费在线观看 | 久久免费小视频 | 国产资源网 | 日本大胆人体视频 | 成人久久久精品国产乱码一区二区 | 天天摸日日 | 精品国产午夜福利在线观看 | 免费看av毛片 | 在线观看黄| 男人视频网站 | 日本黄色小网站 | 亚洲国产精品久久久久久久 | 污av | 欧美性videos高清精品 | 亚洲色图丝袜美腿 | 欧美日比视频 | 美女久久久久 | 男人天堂aaa | 久草视频免费在线观看 | 亚洲精品一区二区三区蜜桃 | 午夜影院私人 | 午夜tv | 日韩免费影视 | 日韩videos | 日本天堂网| 国产中文字幕乱人伦在线观看 | 免费精品 | 超碰公开免费 | 三级网站在线免费观看 | 国产又黄又大又爽 | 成人在线观看你懂的 | 91精品欧美 | 波多野42部无码喷潮在线 | 精品少妇一区二区三区免费观 | 成年人免费在线观看网站 | 91看视频| 泰坦尼克号3小时49分的观看方法 | 不卡精品视频 | 激情综合亚洲 | 高潮喷水一区二区三区 | 性视频一区 | 久久最新精品 | 日韩a∨ | 欧洲视频在线观看 | 久久女女 | 亚洲一区不卡在线 | 超碰在线观看91 | 激情午夜网 | 午夜欧美视频 | 波多野结衣视频免费观看 | 男女激情视频网站 | 亚洲精品视频中文字幕 | 欧美日韩一区二区区 | 色97色 | 综合五月婷婷 | 播放灌醉水嫩大学生国内精品 | 男人的天堂网在线 | 插插网站 | 日韩福利电影在线观看 | 又粗又大又硬毛片免费看 | 影音先锋成人资源网站 | 尤物视频在线免费观看 | 老外黄色一级片 | 久久国产精品影院 | 亚洲妇熟xx妇色黄蜜桃 | 中文字幕一区二区久久人妻 | 最新国产黄色网址 | 91视频免费在观看 | 四虎视频国产精品免费入口 | www.三区 | 国产一区二区三区四区五区 | 久久久久久久久久久久电影 | 中文字幕一区二区三区精彩视频 | 七仙女欲春2一级裸体片 | 久草老司机 | 能在线观看的av网站 | 国产精品九九九九九 | 蜜臀久久 | 操日韩| 国产精品久久久久久久久久久久久 |