凌鸥LKS32MC07系列(重载问题合集) 目录一、重载启动调试问题1.1 问题描述1.2 问题描述二、大负载高转速时转速不稳、电流畸变大2.1 问题描述三、电机保护功能问题3.1 硬件过流保护3.2 软件过流保护3.3 欠压和过压保护3.4 堵转保护3.5 缺相保护四、调试相关参数问题芯片详情采用LKS32MC076FNBQ8开发环境详情使用南京凌鸥新的电机开发平台使用keil5和凌鸥配套的lksscope进行开发和调试新平台相关视频教学链接如下https://appawbobezf9465.pc.xiaoe-tech.com/p/t_pc/course_pc_detail/camp_pro/course_2ZCbvCUZ84SfBzXpocGM9DzoeJ0硬件详情电路设计参考凌鸥配套开发版单电机控制核心板搭配低压功率底板LKS_EVB_6N_MVPOW_V4.0详细资料见凌鸥官网LKS07系列-南京凌鸥创芯电子有限公司-LINKO SEMICONDUCTOR CO.,LTDhttps://www.lksmcu.com/index.php/LKS07Series/电机详情电机额定转速2850RPM4对极电机相电阻0.118欧姆DQ轴电感均为140uh表贴电机默认dq轴电感相同一、重载启动调试问题1.1 启动相关参数调试这部分内容在凌鸥芯片配套的资料中有很详细的相关介绍跟着步骤来就可以把电机跑起来。需要补充一下的就是现在凌鸥新平台没有开环或者闭环的使能参数通过设置电机速度与闭环速度来控制电机是否进入闭环运行。1.2 问题描述单跑电流环没有问题带载启动也能顺利进入闭环但是添加速度环后电机出现咯咯咯的异响甚至还会出现过流的情况。问题原因及解决是速度环的带宽偏低在lks的新平台中需要将速度环的带宽最高电频率设置为额定电频率的2-3倍以上我使用的电机额定大概是200hz左右。#define U_MAX_FREQ_M0 (600.0) /* 单位:Hz, 电机最高运行电频率 */1.3 问题描述电机带载后速度环闭环随着转速升高会突然失步停止。问题原因及解决观测器估计角度跟转子实际角度偏差过大导致丢步重载后转子滞后会严重一点因此需要调大观测器的kpki以及作用带宽范围。#define PLL_KP_GAIN_M0 (86 *32) /* PLL_Kp 估算器Kp 50 16 扩大32倍*/ #define PLL_KI_GAIN_M0 (44* 128) /* PLL_Ki 估算器Ki 10 4 扩大256倍*/ #define PLL_K_FREQ0_M0 (40.0) /* 单位: PLL_K 估算器频率0 */ #define PLL_KP_RUN_M0 (200 * 32) /* 单位: PLL_Kp 估算器Kp1 */ #define PLL_KI_RUN_M0 (95 * 128) /* 单位: PLL_Ki 估算器Ki1 */ #define PLL_K_FREQ1_M0 (600.0) /* 单位: PLL_K 估算器频率1 */二、大负载高转速时转速不稳、电流毛刺多2.1 负债转速不稳随着负载的增加电流逐渐变大出现了转速不稳定的情况实际转速波动强烈。原因分析及解决板子过流能力不足可以通过添加铜线去观察情况是否改善也可以去微调一下死区时间减少死区时间可以提高电压的利用率但必须注意死区时间必须大于mos管的开关时间否则可能会上下管道通烧毁mos管。#define DEADTIME_NS_M0 ((u16)550) /* 死区时间500--1000 */2.2 电流毛刺多干扰大在给比较大的负载时转速搞过160hz电频率时相电流的毛刺和干扰变得非常多喝明显非常影响电机在高温环境下的性能是必须解决的。有两种优化方案第一种是修改电流的采样点或者减小斩波频率笔者试过修改采样点去测试没有出现明显的改善把斩波频率从16k降到12k改善明显但是频率降低电机出现了明显的噪音。MCPWM_InitStructure.TMR0 (u16)(40 - prd); /* MCPWM_TMR0 设置采样点 */ MCPWM_InitStructure.TMR1 (u16)(prd - 1); /* MCPWM_TMR1 设置 */#define PWM_FREQ_M0 ((u16)16000) /* PWM斩波频率 */优化后的相电流波形改善明显但是不推荐。第二种是修改一下输入电阻的阻值看能否优化相电流的波形笔者在配合同事修改时优化明显。修改的是R0的电阻原使用2个20k的电阻40k改为了10k的电阻然后修改一下R2/R1的比值这个需要跟去硬件去调整。比较推荐因为没有杂音更加的稳定。R2/R1的比值在程序中需要修改具体值可以看看lksmotor32010k为0后面依次类推。#define OPA_SELECT_M0 (2) /* 运算放大倍数 选择 */三、电机保护功能问题3.1 硬件过流保护新平台程序默认使用的是CMP0和FAIL0但是开发板上使用的是CMP1和FAIL1,这个需要根据硬件来具体配置。在hardware_init.c文件的CMP_init中//CMP0 config CMP_InitStre.CMP0.SELP CMP0_SELP_IP0; /* 比较器0正端信号选择 */ CMP_InitStre.CMP0.SELN CMP_SELN_DAC0; /* 比较器0负端信号选择 */ CMP_InitStre.CMP0.RE DISABLE; /* 比较器0DMA失能*/ CMP_InitStre.CMP0.POL CMP_HIGH_LEVEL; /* 比较器0高电平输出有效*/ CMP_InitStre.CMP0.IRQ_TRIG IRQ_LEVEL_TRIG_MODE; /* 比较器0电平触发中断模式*/ CMP_InitStre.CMP0.IN_EN DISABLE; /* 比较器0信号输入使能 */ CMP_InitStre.CMP0.IE DISABLE; /* 比较器0信号中断使能 */ CMP_InitStre.CMP0.FIL_CLK_DIV16 2; /* 即滤波宽度tclk 周期*16*CMP_FltCnt (CMP_FltCnt分频系数,0~15)*/ CMP_InitStre.CMP0.FIL_CLK_DIV2 2; /* 比较器 2/1/0 滤波时钟使能 */ CMP_InitStre.CMP0.CLK_EN DISABLE; /* 比较器时钟使能*/ CMP_InitStre.CMP0.EN DISABLE; /* 比较器0开关 操作SYS_AFE_REG5 */ //CMP1 config CMP_InitStre.CMP1.SELP CMP1_SELP_IP0; /* 比较器1正端信号选择 */ CMP_InitStre.CMP1.SELN CMP_SELN_DAC0; /* 比较器1负端信号选择 */ CMP_InitStre.CMP0.RE DISABLE; /* 比较器1DMA失能*/ CMP_InitStre.CMP1.POL CMP_HIGH_LEVEL; /* 比较器1高电平输出有效*/ CMP_InitStre.CMP1.IRQ_TRIG IRQ_LEVEL_TRIG_MODE; /* 比较器1电平触发中断模式*/ CMP_InitStre.CMP1.IN_EN ENABLE; /* 比较器1信号输入使能 */ CMP_InitStre.CMP1.IE DISABLE; /* 比较器1信号中断使能 */ CMP_InitStre.CMP1.FIL_CLK_DIV16 2; /* 即滤波宽度tclk 周期*16*CMP_FltCnt (CMP_FltCnt分频系数,0~15)*/ CMP_InitStre.CMP1.FIL_CLK_DIV2 2; /* 比较器 2/1/0 滤波时钟使能 */ CMP_InitStre.CMP1.CLK_EN ENABLE; /* 比较器时钟使能*/ CMP_InitStre.CMP1.EN ENABLE; /* 比较器1开关 操作SYS_AFE_REG5 */ CMP_Init(CMP_InitStre); /* 比较器初始化 */ // CMP_Cmd(CMP_CHN_0, ENABLE); /* 比较器0时钟使能*/ CMP_Cmd(CMP_CHN_1, ENABLE); /* 比较器1时钟使能*/和MCPWM_ch012_init()函数中进行相关的修改即可。MCPWM_InitStructure.FAIL0_INPUT_EN DISABLE ;//FAIL_0CAP MCPWM_InitStructure.FAIL0_INT_EN DISABLE; MCPWM_InitStructure.FAIL0_Signal_Sel MCPWM0_FAIL_SEL_CMP ;//FAIL_0CAP MCPWM_InitStructure.FAIL0_Polarity MCPWM0_HIGH_LEVEL_ACTIVE ; MCPWM_InitStructure.FAIL1_INPUT_EN ENABLE ;//FAIL_1CAP打开CAP1 MCPWM_InitStructure.FAIL1_INT_EN ENABLE;//fail中断 MCPWM_InitStructure.FAIL1_Signal_Sel MCPWM0_FAIL_SEL_CMP ;//FAIL_0CAP MCPWM_InitStructure.FAIL1_Polarity MCPWM0_HIGH_LEVEL_ACTIVE ;需要注意的是选择CMP1和CMP2需要修改FAIL事件的触发位否则无法正常触发硬件过流故障同时还会影响到其他功能硬件过流功能必须先弄好FAIL0触发位是BIT4FAIL1的触发位是BIT5。需要再HAL_DEF.c文件中修改。void GetEPWM0_breakInStatus(STR_PubDatHDMD* tS_pHd2Md) { tS_pHd2Md-bBreakInStatus (MCPWM0_EIF BIT5); } void ClrEPWM0_breakInStatus(void) { MCPWM0_EIF (MCPWM0_EIF | BIT5); }硬件过流值设置需要大于电机正常运行的峰值否则可能在较大负载时电流的波动就触发了硬件过流保护功能在测试过程中可以设置小一点验证硬件过流保护测试时可以需要接电机使用杜邦线将5v连接到OC引脚CMP1,在lksscope上查看是否触发硬件过流故障。#define I_PH_HARD_OC_FAULT_CMP_VOLT_M0 (640) /* 单位mV 硬件过流保护比较电压值 */在fault_detection.h 文件中有错误标志位的相关定义typedef union { u16 R; struct { u16 SoftCurretError : 1;//软件过流标志 0x0001 u16 HardCurretError : 1;//硬件过流标志 0x0002 u16 VoltOverError : 1;//过压故障标志 0x0004 u16 VoltUnderError : 1;//欠压故障标志 0x0008 u16 StallError : 1;//堵转故障标志 0x0010 u16 EmptyError : 1;//空转故障标志 0x0020 u16 PhaseLossError : 1;//缺相故障标志 0x0040 u16 TempOverError : 1;//温度故障标志 0x0080 u16 OffsetError : 1;//偏置故障标志 0x0100 u16 StartError : 1;//启动故障标志 0x0200 u16 : 6;//预留 } B; } STR_FaultStatus;3.2 软件过流保护设置时要高于电机的最大电流防止误触发最好测试最大负载时不会触发它电流钳只有18.5A但是测试时我发现40误触发了所以要在加一点。具体功能实现在fault_detection.c文件中见FaultVoltageCheck#define I_PH_OVERCURRENT_FAULT_M0 (45) /* 单位A 软件过流检测设定值 */3.3 欠压和过压保护这个比较简单根据硬件相关要求设置就可以了然后打开相关使能。具体功能见FaultVoltageCheck///* 过欠压检测参数 */ #define U_OVERVOLTAGE_FAULT_M0 (30) /* 单位V 过压检测设定值 */ #define U_OVERVOLTAGE_RECOVER_M0 (26) /* 单位V 过压恢复设定值 */ #define U_UNDERVOLTAGE_FAULT_M0 (12) /* 单位V 欠压检测设定值 */ #define U_UNDERVOLTAGE_RECOVER_M0 (22) /* 单位V 欠压恢复设定值 */ #define U_OVER_VOLT_DETECT_TIME_M0 (1000) /* 过压报警检测时间 1ms*/ #define U_UNDE_VOLT_DETECT_TIME_M0 (1000) /* 低压报警检测时间 1ms*/ #define VOLT_FAULT_RECOVER_TIME_M0 (1000) /* 过欠压恢复时间 1ms*/ #define U_OV_VOLT_PROTECT_ENABLE_M0 (1) /* 过压报警保护使能 */ #define U_UND_VOLT_PROTECT_ENABLE_M0 (1) /* 低压报警保护使能 */3.4 堵转保护堵转有两种触发情况一种是电流超过堵转检测电流偏差最大值计数到一定时触发堵转保护小于堵转检测退出电流最小值时 计数递减一种是电压与转速不匹配时触发电压小转数高实际测试时发现第二种情况极难触发。具体函数见FaultStallCheck///* 堵转检测参数 */ #define SPEED_STALL_DELAY_TIME_M0 (500.0) /* 单位1ms 堵转检测延迟时间 */ #define CUR_STALL_MAX_FAULT_M0 (40.0) /* 单位A 堵转检测电流偏差最大值 */ #define CUR_STALL_MIN_FAULT_M0 (25.0) /* 单位A 堵转检测退出电流最小值 */ #define I_PH_STALL_FAULT_M0 (32.0) /* 单位A 堵转检测电流设定值 */ #define SPEED_FAC_STALL_FAULT_M0 (4.0) /* 单位倍 堵转检测转速偏差倍数 */ #define IQ_STALL_FAULT_M0 (0.2) /* 单位A 堵转检测电流设定值 */ /*未用预留*/ #define STALL_FAULT_DETECT_TIME_M0 (2000) /* 单位1ms 堵转检测时间 */ #define STALL_FAULT_RECOVER_TIME_M0 (2000) /* 单位1ms 堵转恢复时间 */ #define STALL_PROTECTION_ENABLE_M0 (1) /* 堵转保护使能 */3.5 缺相保护缺相保护也有两种触发情况一种是检测到某一相的电流小于缺相检测电流设定值触发缺相保护一种是三相电流之间其中两项电流差异超过3倍触发缺相保护。具体功能见FaultPhaseCheck///* 缺相检测参数 */ #define I_PHASE_LOSS_FAULT_M0 (0.1) /* 单位A 缺相检测电流设定值 */ #define LOSS_PH_FAULT_DETECT_TIME_M0 (1000) /* 单位ms 缺相检测周期设定值 */ #define LOSS_PH_FAULT_RECOVER_TIME_M0 (2000) /* 单位ms 缺相恢复时间 */ #define LOSS_PH_PROTECTION_ENABLE_M0 (1) /* 缺相异常保护使能 */四、调试相关参数问题参数这部分内容感觉注释已比较全后续有需要再补充了。