目前打算使用凌鸥的LKSMC086N8Q82015A芯片做国产替代,目的是驱动一个小风机(最高37000RPM,负载很小)
照着b站上的视频 《第8讲:预定位与开环强拖调试1》
主要配置如下
- /*******************************************************************************
- * 版权所有 (C)2019, LINKO SEMICONDUCTOR Co.ltd
- *
- * 文件名称: parameter.h
- * 文件标识:
- * 内容摘要: parameter config
- * 其它说明: 无
- * 当前版本: V1.0
- * 作 者: Andrew kong, Howlet Li
- * 完成日期: 2020年8月18日
- *
- *******************************************************************************/
-
- /*------------------------------prevent recursive inclusion -------------------*/
- #ifndef __PARAMETER_H
- #define __PARAMETER_H
- #include "basic.h"
- #include "MC_Type.h"
- /* -----------------------------Hardware Parameter---------------------------- */
- #define ADC_SUPPLY_VOLTAGE (3.6) /* 单位: V ADC基准电压,3.6或者2.4,大部分应用选择3.6 */
- /*采样匹配电阻 1K欧, 200:10=(200/(10.4+2)=16.129 */
- /*采样匹配电阻 40K欧, 200:10=(200/(10.4+40)=3.96825 */
- #define AMPLIFICATION_GAIN (16.129) /* 运放放大倍数 */
- #define RSHUNT (0.010) /* 单位: Ω 采样电阻阻值 */
- #define VOLTAGE_SHUNT_RATIO (1.0/(20.0 * 2 + 1.0)) /* 母线电压分压比 */
- #define BEMF_SHUNT_RATIO (1.0/(20.0 * 2 + 1.0)) /* 反电势电压分压比 */
- #define CURRENT_SAMPLE_TYPE CURRENT_SAMPLE_2SHUNT /* 电流采样方式选择 */
- #define ROTOR_SENSOR_TYPE ROTOR_SENSORLESS /* 电机位置传感器类型选择 */
- /* ------------------------------Rated Parameter------------------------------ */
- #define U_RATED_VOLTAGE (24) /* 单位:V, 电机额定工作电压,设置为正常工作电压 */
- #define U_RATED_CURRENT (1.6) /* 单位:A, 电机额定工作电流,相电流最大值 */
- #define U_MAX_FREQ (600.0) /* 单位:Hz, 电机最高运行转速 */
- /* ------------------------------Motor Parameter------------------------------ */
- #define U_MOTOR_PP (2.0) /* 电机极对数 */
- #define U_MOTOR_RS (2.0) /* 单位: Ω 电机相电阻 */
- #define U_MOTOR_LD (230.0) /* 单位: uH 电机d轴电感 */
- #define U_MOTOR_LQ (260.0) /* 单位: uH 电机q轴电感 */
- //#define U_MOTOR_PP (7.0) /* 电机极对数 */
- //#define U_MOTOR_RS (1.537) /* 单位: Ω 电机相电阻 */
- //#define U_MOTOR_LD (2269.0) /* 单位: uH 电机d轴电感 */
- //#define U_MOTOR_LQ (2500.0) /* 单位: uH 电机q轴电感 */
- /* 电机磁链常数 计算公式:Vpp/2/sqrt(3)/(2*PI)/f,其中Vpp为电压峰峰值,f为电频率 3.68V 25Hz
- 此参数仅影响顺逆风启动的速度检测,角度估算不使用些参数 */
- #define U_MOTOR_FLUX_CONST (0.00687364598)
- /* ----------------------IPD 转子初始位置检测 脉冲注入时间设置---------------- */
- #define SEEK_POSITION_STATUS (FALSE) /* 初始位置检测状态 TRUE 为使能, FALSE 为不使能 */
- #define U_START_ANGLE_COMP (0) /* 单位:度 初始位置检测补偿角度 */
- #define IPD_PLUS_TIME_SETTING (150) /* 脉冲注入时间宽度设置 单位us */
- #define IPD_WAIT_TIME_SETTING (200) /* 脉冲空闲等待时间宽度设置 单位us */
- #define IPD_PLUS_TIME_WIDTH (u32)(IPD_PLUS_TIME_SETTING*(MCU_MCLK/1000000)) /* 脉冲注入时间宽度设置 单位clk */
- #define IPD_PLUS_WAIT_TIME (u32)(IPD_WAIT_TIME_SETTING*(MCU_MCLK/1000000)) /* 脉冲空闲等待时间宽度设置 单位clk */
- /* -------------------------------HALL自学习设置------------------------------- */
- #define HALL_LEARN_CURRENT_SETTINT (1.0) /* HALL自学习电流设定,单位: A */
- #define HALL2SENSORLESS_ANGLE_VERIFY (FALSE) /* 使用无感角度验证有感角度, TRUE = 开启, FALSE = 关闭 */
- #define HALL_ANGLE_TYPE (120) /* hall安装角度60度或120度*/
- /* ----------------------------direction check Parameter----------------------- */
- #define CW (0) /* 电机转向:顺时针 */
- #define CCW (1) /* 电机转向:逆时针*/
- /* ------------------------------ADC校准相关参数设置---------------------------- */
- #define CALIB_SAMPLES (512) /* ADC偏置校准次数,不可修改 */
- #define OFFSET_ERROR (3500) /* ADC偏置误差阈值,不用修改 */
- /* ----------------------------预驱自举电容预充电参数--------------------------- */
- #define CHARGE_TIME (100) /* 每相预充电时间,根据实际硬件参数修改 */
- /* -------------------------------- 顺逆风检测模式选择------------------------------ */
- #define DIR_BEMF_CHECK_STATUS (FALSE) /* 顺逆风检查状态 TRUE = 开启顺逆风检测, FALSE = 关闭顺逆风检测 */
- #define BEMF_CHECK_MDE (0) /* 反电动势做顺逆风,需反电动势电路,一般单电阻采样使用(双电阻可以使用)*/
- #define DIR_CHECK_MDE (1) /* 观测器做顺逆风,无需反电动势电路,一般双电阻采样使用(部分电机使用单电阻采样也可以使用改顺逆风检测,具体需要根据实际调试确认是否可以)*/
- #define DIR_BEMF_CHECK_MODE (BEMF_CHECK_MDE) /* 顺逆风检测模式选择*/
- /* -------------------------------- 顺逆风检测参数------------------------------ */
- #define SPEED_TRACK_DELAYTIME (500) /* 单位: ms 顺逆风检测时间 */
- #define SPEED_TRACK_ON_FREQ_THH (25) /* 单位: Hz 顺风切闭环频率 */
- #define EBRK_ON_FREQ_THH (50) /* 单位: Hz 逆风刹车频率 */
- #define MOTOR_STOP_CUR_THD (120) /* 电机停止检测电流阈值 */
- #define MOTOR_STOP_CUR_DIF_THD (12) /* 电机停止检测电流差阈值 */
- #define STOP_TIME (10) /* 单位:ms 电机停止检测滤波时间,根据实际负载修改 */
- #define STOP_DELAY_TIME (200) /* 单位: ms 电机停止后延迟时间,根据实际负载修改。修改依据:电机在判定为停止后还在转动就加大延迟时间 */
- /* -------------------------------- 反电势检测参数------------------------------ */
- #define BEMF_CHECK_TIME (500) /* 单位: ms 反电势检测时间 */
- #define BEMF_CHECK_ANGLE_COMP (0) /* 单位: 度 反电动势检测补偿角度(范围0~180) 如果顺风高速切闭环相电流有突变,适当调整改参数直到启动电流平滑*/
- #define BEMF_TRACK_FREQ (30) /* 单位: Hz 反电势检测频率,逆风等待转速 */
- #define BEMF_TRACK_ON_FREQ_THH (30) /* 单位: Hz 顺风切闭环频率*/
- #define BEMF_TRACK_VOLTAGE (0.5) /* 单位:V 顺逆风检测电压阈值 可根据Ke估算*/
- #define BEMF_TIME (1000) /* 单位: ms 反电势检测刹车时间 */
- #define BEMF_DUTY FRAC16(0.05) /* 刹车占空比 */
- /*------------------------------------预定位参数---------------------------------*/
- #define ALIGN_ANGLE (0) /* 单位:度 预定位角度 */
- #define U_START_CUR_SET_F (0.5) /* 单位: A 第一段定位电流 */
- #define U_START_CUR_SET_S (1.0) /* 单位: A 第二段定位电流 */
- #define DC_HOLDTIME_TIME_LENTH (100) /* 单位: ms 第一段定位时间 */
- #define DC_HOLDTIME_TIME_LENTH_STAGE1 (100) /* 单位: ms 第二段定位时间 */
- #define DC_ALIGN_TOTAL_LENTH \
- (DC_HOLDTIME_TIME_LENTH + DC_HOLDTIME_TIME_LENTH_STAGE1)/* 定位总时长 */
- #define ALIGN_CURRENT_ACC (0.1) /* 单位: (1/8)A/ms 定位电流加速调整值 初始位置检测使能后给到最大值,不能超过30,否则数据会溢出。 */
- #define ALIGN_CURRENT_DEC (0.1) /* 单位: (1/8)A/ms 定位电流减速调整值 初始位置检测使能后给到最大值,不能超过30,否则数据会溢出。 */
- /*---------------------------------开环参数------------------------------------*/
- #define OPEN_ANGLE_TAG_FREQ (20.0) /* 单位:Hz 开环拖动最终频率 */
- #define FREQ_ACC (1) /* 单位:(1/128)Hz/ms 开环拖动频率加速调整值 */
- #define FREQ_DEC (1) /* 单位:(1/128)Hz/ms 开环拖动频率减速调整值 */
- #define OPEN_RUN_STATUS (TRUE) /* 开环状态 TRUE = 开环运行, FALSE = 闭环运行 */
-
- #define MATCH_TIME (5) /* 估算和给定电流匹配次数 */
- /*---------------------- -----开环闭环切换过渡参数------------------------------*/
- #define OPEN2CLOSE_RUN_COV_TIME (30) /* 开环闭环切换过渡时间:单位:mS */
- #define OPEN2CLOSE_RUN_CURRENT_RAMP (0.1) /* 开环闭环切换过渡内,D,Q轴电流变化斜率。单位:A/ms */
- /*-----------------------------------环路选择----------------------------------*/
- #define CURRENT_LOOP (0) /* 电流环 */
- #define SPEED_LOOP (1) /* 速度环 */
- #define POWER_LOOP (2) /* 功率环 */
- #define CLOSE_LOOP (SPEED_LOOP) /* 环路选择 */
- /* ------------------------------观测器PLL PI参数----------------------------- */
- #define PLL_KP_GAIN 20 /* PLL_Kp 估算器Kp */
- #define PLL_KI_GAIN 10 /* PLL_Ki 估算器Ki */
- /*----------------------------------电流环参数---------------------------------*/
- #define IQ_SET (0.5) /* 单位:A IqRef,Iq给定值 */
-
- #define VQMAX (6000) /* Q轴最大输出限制,Q15格式,取值范围0~6000 */
- #define VQMIN (-6000) /* Q轴最小输出限制,Q15格式,取值范围0~-6000 */
- #define VDMAX (6000) /* D轴最大输出限制,Q15格式,取值范围0~6000 */
- #define VDMIN (-6000) /* D轴最小输出限制,Q15格式,取值范围0~6000 */
- #define P_CURRENT_KP (200) /* 电流环Kp,实际运用的Kp会根据这个值和电机参数计算出最终的Kp */
- #define P_CURRENT_KI (100) /* 电流环Ki,实际运用的Kp会根据这个值和电机参数计算出最终的Ki */
- #define AUTO_FW_LIM ((s16)0) /* 自动弱磁D轴电流限制,Q12格式,最大值 4096 */
- #define TORQUE_MODE_CURRENT_CHANGE_ACC (0.1) /* 单位:A/ms 电流加速调整值 */
- #define TORQUE_MODE_CURRENT_CHANGE_DEC (0.1) /* 单位:A/ms 电流减速调整值 */
- /*----------------------------------速度环参数-------------------------------*/
- #define POWER_LIMIT_STATUS (FALSE) /* 限功率状态, TRUE = 使能, FALSE = 不使能 */
- #define POWER_LIMIT_VALUE (20.0) /* 单位:W 限制功率的大小 */
- #define POWER_LIMIT_TIME (5) /* 单位:ms 速度环周期, 限功率计算周期 */
- #define POWER_LIMIT_SPEED (200) /* 单位:Hz 限功率转速给定,根据实际应用来设置, */
- #define SPEED_SET (60) /* 单位:Hz 速度给定值 */
- #define SPEED_LOOP_CNTR (0) /* 单位:ms 速度环路计算周期 */
- #define CURR_TO_SPEED_TIME (100) /* Unit: ms 电流环切速度环时间 */
- #define STATE04_WAITE_TIME (100) /* Unit: ms 速度变量初始化时间 */
- #define P_ASR_KP (2000) /* 速度环Kp */
- #define P_ASR_KI (1000) /* 速度环Ki */
- #define IQMAX (6.0) /* 单位:A, 速度环输出最大值 */
- #define IQMIN (-6.0) /* 单位:A, 速度环输出最小值 */
- #define SPEED_RUN_ACC (0.05) /* 单位 (1/128)Hz 速度加速调整值 */
- #define SPEED_RUN_DEC (0.05) /* 单位 (1/128)Hz 速度减速调整值 */
- /*------------------------------------功率环参数-------------------------------*/
- #define SPPED_LIMIT_STATUS (FALSE) /* 限转速状态, TRUE = 使能, FALSE = 不使能 */
- #define SPEED_LIMIT_VALUE (100.0) /* 单位:Hz 限制转速的大小 */
- #define SPEED_LIMIT_TIME (5) /* 单位:ms 功率环周期, 限转速计算周期 */
- #define SPEED_LIMIT_POWER_VALUE (30) /* 单位:W 限转速功率给定 */
- #define POWER_SET (30) /* 单位:W 功率给定值 */
- #define POWER_LOOP_CNTR (1) /* 单位:ms 功率环路计算周期 */
-
- #define POWER_KP (3000) /* 功率环Kp */
- #define POWER_KI (1000) /* 功率环Ki */
- #define POWER_IQMAX (6.0) /* 单位:A, 功率环输出最大值 */
- #define POWER_IQMIN (-6.0) /* 单位:A, 功率环输出最小值 */
-
- #define POWER_RUN_ACC (2.0) /* 单位 w 功率加速调整值 注意POWER_RUN_ACC和POWER_RUN_DEC不能太小,结合拟合参数设置,实际程序中的加减速值不能能小于0. */
- #define POWER_RUN_DEC (2.0) /* 单位 w 功率减速调整值 */
- /*------------------------------------FaultDetection---------------------------*/
- /* 过流检测参数 */
- #define I_PH_OVERCURRENT_FAULT (10.0) /* 单位:A 软件过流检测设定值 */
- /* 过欠压检测参数 */
- #define U_DCB_OVERVOLTAGE_FAULT (30.0) /* 单位:V 过压检测设定值 */
- #define U_DCB_OVERVOLTAGE_RECOVER (28.5) /* 单位:V 过压恢复设定值 */
- #define U_DCB_UNDERVOLTAGE_FAULT (20.0) /* 单位:V 欠压检测设定值 */
- #define U_DCB_UNDERVOLTAGE_RECOVER (20.5) /* 单位:V 欠压恢复设定值 */
- /* 离水空转参数 */
- #define I_PH_EMPTY_FAULT (0.3) /* 单位:A 空转检测电流设定值 */
- #define SPEED_EMPTY_FAULT (50.0) /* 单位:Hz 空转检测转速设定值 */
- /* 温度检测参数 */
- #define TEMP_FAULT (150) /* 过温检测设定值 */
- #define TEMP_RECOVER (170) /* 过温恢复设定值 */
- #define TEMP_BREAK (4000) /* NTC开路设定值 */
-
- /* 堵转检测参数 */
- #define SPEED_STALL_MAX_FAULT (300.0) /* 单位:Hz 堵转检测转速最大值 */
- #define SPEED_STALL_MIN_FAULT (10.0) /* 单位:Hz 堵转检测转速最小值 */
- #define I_PH_STALL_FAULT (1.5) /* 单位:A 堵转检测电流设定值 */
- #define SPEED_STALL_FAULT (20.0) /* 单位:Hz 堵转检测转速设定值 */
- #define IQ_STALL_FAULT (0.2) /* 单位:A 堵转检测电流设定值 */
- /* 二次启动检测参数 */
- #define START_TIME_FAULT (200) /* 单位:5ms 开环之后1s内还不进入闭环就重启,1s这个时间根据实际应用调整 */
- /* 缺相检测参数 */
- #define I_PHASE_LOSS_FAULT (3000) /* 数字量,根据实际测试中struCurrentAmplitude.nPhA/struCurrentAmplitude.nPhB/struCurrentAmplitude.nPhC */
- /* 的计算值来设定,在缺相和正常运行的中间取值。 */
- /* 故障恢复时间 */
- #define VOLT_FAULT_RECOVER_TIME (2000) /* 单位:ms 过欠压恢复时间 */
- #define CURRENT_FAULT_RECOVER_TIME (2000) /* 单位:ms 过流恢复时间 */
- #define STALL_FAULT_RECOVER_TIME (2000) /* 单位:ms 堵转恢复时间 */
- #define PHASELOSS_FAULT_RECOVER_TIME (2000) /* 单位:ms 缺相恢复时间 */
- #define TEMP_FAULT_RECOVER_TIME (2000) /* 单位:ms 过温恢复时间 */
- #define START_FAULT_RECOVER_TIME (1000) /* 单位:ms 二次启动恢复时间 */
- #define EMPTY_FAULT_RECOVER_TIME (2000) /* 单位:ms 离水空转恢复时间 */
- #endif /* __PARAMETER_H */
- /************************ (C) COPYRIGHT LINKO SEMICONDUCTOR **********************/
- /* -----------------------------------END OF FILE------------------------------- */
Id、Iq波形如下
UVW三相电流波形如下
示波器电流波形如下
开环角度和观测器角度波形如下
修改 KP和KI,发现电流超大,而且发生畸变
#define P_CURRENT_KP (2000)
#define P_CURRENT_KI (1000)
开环角度和观测器角度波形如下
Id、Iq波形如下
UVW三相电流波形如下
请问是哪里的参数不正确?还是硬件有问题?可能是那个地方有问题?或者我还要提供其他更详细信息
|