你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ST FOC5.x电机库 电流值如何转换为真实电流呢?

[复制链接]
在路上… 提问时间:2019-3-16 11:27 /
如题,我使用的是3电阻采样 hall传感器 BLDC电机
在..MCSDK_v5.2.0-Full\MotorControl\MCSDK\MCLib\F1xx\Src\r3_hd2_pwm_curr_fdbk.c
这个文件的500行 有获取三个项的项电流 请问怎么转换为真实电流值?
  1. pHandle->_Super.hIa = pStator_Currents->qI_Component1;
  2. pHandle->_Super.hIb = pStator_Currents->qI_Component2;
  3. pHandle->_Super.hIc = -pStator_Currents->qI_Component1 - pStator_Currents->qI_Component2;
复制代码

还有在在drive_parameters.h文件中,这个IQMAX的值是怎么确定的??
  1. /*  Maximum Torque Per Ampere strategy parameters */
  2. #define IQMAX                          13901
  3. #define SEGDIV                         0
  4. #define ANGC                           {0,0,0,0,0,0,0,0}
  5. #define OFST                           {0,0,0,0,0,0,0,0}
复制代码



收藏 2 评论15 发布时间:2019-3-16 11:27

举报

15个回答
IncoYang 回答时间:2020-8-26 09:00:40
用在相电流采样的ADC分辨率是12位,配成左对齐,意味着adc数据左移4位,相当于乘于16倍,ADC出来的数据肯定是16位。实际的电流有正负,而电路属于单电源系统,才需要做偏置(sdk中称polarization),程序中需要做减法才是实际的相电流,电流就有正有负,因此最终电流的结构体定义ab_t中的电流都是16位有符号数。
qiubenqi 回答时间:2019-3-22 20:49:48
((采集值-偏置)/Gain)*3.3/4096= v
I = V/R;
在路上… 回答时间:2019-3-23 09:03:16
qiubenqi 发表于 2019-3-22 20:49
((采集值-偏置)/Gain)*3.3/4096= v
I = V/R;

ST的不是这样算的吧
qiubenqi 回答时间:2019-3-24 16:47:27
在路上… 发表于 2019-3-23 09:03
ST的不是这样算的吧

是的,只不过用的是S16,65536

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

在路上… 回答时间:2019-3-29 09:49:53
qiubenqi 发表于 2019-3-24 16:47
是的,只不过用的是S16,65536

没看懂 请详述 感谢
qiubenqi 回答时间:2019-3-29 14:22:50
在路上… 发表于 2019-3-29 09:49
没看懂 请详述 感谢

   Phase current (16位采集电流值) = (Phase current (真实电流值)* 32767 * Rshunt *
                                   *Amplifying network gain)/(MCU supply voltage/2)
zhangyouyoua5b0 回答时间:2020-1-2 15:00:41
楼主,解决了吗,求指教
我是胡工 回答时间:2020-8-2 11:46:53
同问 谢谢
suqq12345 回答时间:2020-8-17 11:05:11
AD采样数据左对齐的,换算一下嘛
IncoYang 回答时间:2020-8-17 12:13:23
在软件库里,电流是采用Q1.15的带符号数表示的,也就是正的最大值是32767,这个值对应的是电流采样放大器输出的最大电流值,对于一个好的电流放大器电路,要求把(1)极化电压(即DC OFFSET)调成电源的一半,也就是1.65V;(2)放大器增益适中,兼顾电流分辨率和最大电流不要饱和。因此,举个例子,以ST-EVAL_3201为例,它的中值为1.65V,动态范围可以用足,此时对于0.01欧姆的采样电阻,增益7.7,可以读到的最大电流为21.429A,如果电机的NOMINAL电流=10A的话,软件里的数值即为10/21.429*32767=15291,记住这个比例,如果IQ要设为1A,那就是1/21.429*32767=1529.F:\Temp\1.png

电流增益

电流增益

运放参数

运放参数

电机参数

电机参数
qy2110000 回答时间:2020-8-25 16:06:20
ST的AD左对齐,实际上出来的值是15位的,不是16位
祥云123 回答时间:2020-9-22 17:08:03
stm32gxx 发表于 2020-8-26 09:00
用在相电流采样的ADC分辨率是12位,配成左对齐,意味着adc数据左移4位,相当于乘于16倍,ADC出来的数据肯定 ...

大神,我的三电阻采样,想让电流的有效值显示在数码管上,该怎么做呀,拜托指点一下,愁死了
IncoYang 回答时间:2020-9-22 19:10:19
电机转的好不好,跟FOC的控制相关,也就是相电流波形的正弦性才是反映电机控制好不好的关键,如果相电流的波形不好或者不对,也会算出来一个RMS值,无法评价控制的好坏,如果仅是要知道功率如何,可以想办法采母线上的电流,对于相电流的评价,通常需要用示波器要么监视采样电阻经运放后的波形,或者用电流传感器测相电流。如果非要读相电流,可以利用FOCVars这个变量下的iab,估计要存下至少一个周期的数据,再根据有效值的定义计算吧。
IncoYang 回答时间:2020-9-23 09:05:26
给一个稍微具体的实现方式,仅供参考:
(1)库函数,__weak void R3_1_GetPhaseCurrents( PWMC_Handle_t * pHdl, ab_t * pStator_Currents )是用于采集相电流,每一次只采a,b,c中2相,组合并不是固定的,根据sectorX来,修改这个函数,要知道波形是一个周期,可以根据sectorX的变化判断是否满足一个周期,在数据未达到一个周期前,根据需要把这些电流存起来
  pHandle->_Super.Ia = pStator_Currents->a;
  pHandle->_Super.Ib = pStator_Currents->b;
  pHandle->_Super.Ic = -pStator_Currents->a - pStator_Currents->b;
(2)如果采满一个周期,就开始计算RMS,这个可能需要一段时间,这期间就不用再存电流,等算好后,就可以显示;接着开始下一次取电流。
这样的方法不是实时的,有些电流周期数据没有计算进去,不过对于数码管这种低速的显示,应该是可以了。

另外也可以用纯硬件实现,比如,每次abc相电流采样结束,把电流值用dac输出,然后再接到专用有效值芯片,那么芯片就一直输出有效值,供mcu的adc采集就可以,这样不需要mcu参加有效值的计算。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版