74|6

249

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【B-G431B-ESC1-无刷电机板】4-Hall测速,电角度估算,电流闭环 [复制链接]

本帖最后由 qiao--- 于 2025-1-24 12:15 编辑

本期测评分为3个部分,第一个是用Hall传感器估算角度位置,过程中也会用Hall把速度测出来,因为总所周知速度的积分就是位置,第二个部分就是电流环闭环,其中设计到Clark变换和park变换将adc采集的三相电流变成两个标量进行控制,由于本人不才这次只能做到d轴电流闭环,q轴是提供扭矩的一轴,我没有调出一个满意的结果。第三个部分是向大家求助的部分。

 

1.Hall测速

无刷电机常用的是开关Hall ,一般是有三个开关量,hall根据安装方式分为120度安装和60度安装,我这个就是60度安装的。

 

hall测速的第一点就是要判断扇区,每个扇区对应一个真值表,我们要根据这个真值表确定当前所在的位置。第一期测评我有配置cubemx,这里我就直接贴上判断扇区的代码,这个代码会返回当前所在的真值位置

short get_hall_state(void)
{
	uint8_t hall_u, hall_v, hall_w;
	hall_u = HAL_GPIO_ReadPin(Hall_A_GPIO_Port, Hall_A_Pin);
	hall_v = HAL_GPIO_ReadPin(Hall_B_GPIO_Port, Hall_B_Pin);
	hall_w = HAL_GPIO_ReadPin(Hall_C_GPIO_Port, Hall_C_Pin);
	return hall_u + (hall_v << 1) + (hall_w << 2);
}

但是这个只能判断精度为60度的位置,有什么方式可以更细呢,答案是有的,可以统计60度之间hall走过所用的时间,然后再计算出速度,用上一个扇区的速递进行积分就可以算出位置。

下面是我这个电机的真值表,不同电机可能不一样。

uint8_t hall_arr[8] = {0, 1, 3, 2, 6, 4, 5, 0};

其中速度可以用下面的计算出,hall_tick是每个扇区中统计的时间数

speed_rad = TIMER_CLOCK_FREQ / hall_tick * PI / 3 * v_dir;

给大家看一下我估算出的电角度

 

这个电角度可以直接放在我们后面所需的电角度计算

下面是我没经过滤波测出的速度,占空比给的50%,转速在1400rpm左右。

 

 

2. 电流闭环

这里闭环的基础是ADC采样要成功,这里我的ADC采样计算数据如下,其中zeropoint是偏执电流

#define V_REG 3.3f
#define CURRENT_AMP_GAIN 9.143f
#define CURRENT_SHUNT_RES 0.003f

#define CURR_GAIN V_REG / 4096.0f / CURRENT_AMP_GAIN / CURRENT_SHUNT_RES

motor0.ib = ((float)(hadc1.Instance->JDR1) - motor0.ia_zeropoint) * CURR_GAIN;
motor0.ia = ((float)(hadc1.Instance->JDR2) - motor0.ib_zeropoint) * CURR_GAIN;
motor0.ic = ((float)(hadc2.Instance->JDR1) - motor0.ic_zeropoint) * CURR_GAIN;

然后就是我们熟悉的Clark变换和park变换

Clark变换:

void current_clarke(Motor_State *motor) {
    motor->i_alpha = motor->ia;
    motor->i_beta = (motor->ia + 2 * motor->ib) * 0.5773502691896257f;
}

park变换:

void current_park(Motor_State *motor) {
    motor->id = motor->i_alpha * motor->theta_cos + motor->i_beta * motor->theta_sin;
    motor->iq = motor->i_beta * motor->theta_cos - motor->i_alpha * motor->theta_sin;
}

参考公式:

 

 

给搭建看下我变换的结果的波形

Clark:

 

park:

 

最后用pid完成d轴电流闭环,减少电机的发热:

void current_control(PID *pid_id,PID *pid_iq, Motor_State *motor)
{
    PID_Calc(pid_id, 0, motor->id);
    motor->vd = pid_id->output;
}

最终电机的转的情况如下:

VID20250124115739

 

3.遗留问题

但是目前我遇到两个问题目前还没有解决,希望厉害大佬给予提示:

1. Uq给正值,电机却翻转的情况,电角度会从2*pi递减到0。理论上应该是Uq给正值,电角度会从0增加到2*pi。我看网上有网友遇到过这种情况,但是我没有理解什么意思

https://bbs.elecfans.com/jishu_1124628_1_1.html 

 

2. 由于ADC本身就具有噪声,所以在调d轴和q轴电流闭环的时候,他们的阶跃响应有点看不清楚,如下,甚至我调试了几个版本的pid参数,效果都差不多,波形的阶跃都长这样,我该如何衡量好坏呢。一般来说衡量阶响应的好坏用他的稳定响应时间和超调量等等,但是感觉我这个被噪声覆盖了。我有用过低通滤波器,但是效果也不是很好(几组pi参数效果一样)。例如下面两组的pi效果就一样  1. p = 3 ,i =0.2   2. p= 10 ,i =1

p = 3 ,i =0.2 的阶跃响应如下

 

p= 10 ,i =1 的阶跃响应如下

 

 

此帖出自电机控制论坛

最新回复

一般定义正对电机转轴时逆时针方向为电机运动的正方向,可以用手拖动转轴旋转,观察此时程序里的电角度计算是递增还是递减   详情 回复 发表于 2 小时前
点赞 关注
 
 

回复
举报

249

帖子

0

TA的资源

纯净的硅(初级)

来自 7楼
 

最后解决是在反PARK变换前面个加了一个符号就恢复正常了,有大佬知道原因吗

 

此帖出自电机控制论坛
 
 
 

回复

439

帖子

1

TA的资源

一粒金砂(高级)

沙发
 

Q 轴给正电流电机却反转的情况,先确认下电机的 UVW 功率线的线序有没接错

此帖出自电机控制论坛

点评

感谢大佬  详情 回复 发表于 1 小时前
这个没有错,应该不是线序的问题  详情 回复 发表于 1 小时前
个人签名君应有语,渺万里层云,千山暮雪,知向谁边?
 
 
 

回复

439

帖子

1

TA的资源

一粒金砂(高级)

板凳
 

一般定义正对电机转轴时逆时针方向为电机运动的正方向,可以用手拖动转轴旋转,观察此时程序里的电角度计算是递增还是递减

此帖出自电机控制论坛

点评

Uq大于0对应的电机方向是正转的(如你所说那样),但是电角度是递减的 [attachimg]883799[/attachimg]    详情 回复 发表于 1 小时前
个人签名君应有语,渺万里层云,千山暮雪,知向谁边?
 
 
 

回复

249

帖子

0

TA的资源

纯净的硅(初级)

4
 
我的学号 发表于 2025-1-24 14:17 一般定义正对电机转轴时逆时针方向为电机运动的正方向,可以用手拖动转轴旋转,观察此时程序里的电角度计算 ...

Uq大于0对应的电机方向是正转的(如你所说那样),但是电角度是递减的

 

此帖出自电机控制论坛
 
 
 

回复

249

帖子

0

TA的资源

纯净的硅(初级)

5
 
本帖最后由 qiao--- 于 2025-1-24 14:50 编辑
我的学号 发表于 2025-1-24 14:15 Q 轴给正电流电机却反转的情况,先确认下电机的 UVW 功率线的线序有没接错

确实是线序的问题,我换了一次线序,发现不正确,然后又换了一次。连着换两次就正确了

 

此帖出自电机控制论坛
 
 
 

回复

249

帖子

0

TA的资源

纯净的硅(初级)

6
 
本帖最后由 qiao--- 于 2025-1-24 15:09 编辑
我的学号 发表于 2025-1-24 14:15 Q 轴给正电流电机却反转的情况,先确认下电机的 UVW 功率线的线序有没接错

感谢大佬,但是这样交换两次后总线电流增大,速度变低,功率利用率变低了,应该不对。

此帖出自电机控制论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表