This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2.8069万M:Motorware电流限制问题

Guru**** 2335510 points
Other Parts Discussed in Thread: DRV8305
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/584184/tms320f28069m-problem-with-motorware-current-limiting

部件号:TMS320F2.8069万M
主题中讨论的其他部件: DRV8305

您好,

我正在为基于实验室05b的TMS320F2.8069万M和DRV8305的定制PCB开发固件。  

此电动机驱动器控制低电感三相BLDC。 适用于航空航天位置控制应用。  


最新版本和印刷电路板刷新了我目前拥有的固件,能够在低速和高速以及低负载和高负载下对电机进行预控制。 但是,尽管我尽了最大努力,我仍无法使速度控制器的当前限制功能正常工作。 这是该项目的一项强烈要求。

以下是对可能发生的情况的描述:

每当驱动程序达到 USER_MOTOR_MAX_CURRENT设置的直流电流限制或接近此限制时,它就会停止响应 gMotorVars.SpeedRef_Krpm的速度命令,并尝试以尽可能快的速度旋转电机,大大超过USER_J1.h中设置的电流限制 只有重置控制器才能解决此问题。

从内部来看,IQ电流控制器似乎达到其饱和限值,因为当前反馈与当前设定点不具有相同的符号。 以下是出现问题时控制器PID的屏幕截图:

我不知道是什么原因造成了这个问题,但我已经诚实地尝试了我能做的纠正方法。
以下是我的用户标题的实例部分:

#define user_IQ) FULL磅秤_voltage_V (28.0)// 28.0 设置为Vbus

//! \brief定义AD转换器输入端的最大电压
//! \볲 뛌 将由最大ADC输入(3.3V)和转换(0FFFh)//表示的值
! \brief硬件相关,这应基于电压感应和对ADC输入#define
user_ADC_FULL比例电压_V的缩放 (31.13)// BOOSTXL-DRV8305EVM = 44.30 V

//! \brief定义IQ变量的满刻度电流,a
//! 简明所有电流均根据与此值的比率转换为(PU)
//! \brief警告:此值必须大于您所期望的来自电机的最大电流读数,否则读数将滚动到0,从而导致出现控制问题
#define user_IQ) FULL _scale _current_A (25.0)// BOOSTXL-DRV8305EVM = 24.0 A
//#define USER_IQ) FULL Scale Current_A (24.0)// BOOSTXL-DRV8305EVM = 24.0 a

//! \brief定义AD转换器的最大电流
//! \볲 뛌 将由最大ADC输入(3.3V)和转换(0FFFh)//表示的值
! \brief硬件相关,这应基于电流感应和对ADC输入#define
user_ADC_FULL比例电流A的缩放 (33.0)// BOOSTXL-DRV8305EVM = 47.14 a

//! \brief定义所使用的电流传感器数量
//! \brief由存在的硬件功能定义
//! \brief可能是(2)或(3)
#define user_NUM_CURRENT_SENSORS (3)// 3首选设置,可在全速范围内实现最佳性能,允许100 % 占空比

//! \brief定义电压(相位)传感器的数量
//! \brief必须是(3)
#define user_NUM_voltage_sensors (3)// 3必填

//! \A,B和C相位的短ADC电流偏移
//! \简短的一次性硬件相关,但校准也可以在运行时完成
//! \brief在初始板校准后,应针对特定硬件更新这些值,以便在编译为要加载到控制器的二进制文件后可以使用这些值
#define I_A_offset (0.6584013104)
#define I_B_offset (0.6607482433)
#define I_C_offset (0.6591419578)

//! \A,B和C相位的简短ADC电压偏移
//! \简短的一次性硬件相关,但校准也可以在运行时完成
//! \brief在初始板校准后,应针对特定硬件更新这些值,以便在编译为要加载到控制器的二进制文件后可以使用这些值
#define V_A_offset (0.4978313446)
#define V_B_offset (0.4975547791)
#define V_C_offset (0.4955942035)


//! 钟表和计时器简介
//******************************************************************************************
#define user_PWM_FREQ_kHz (30.0)// 30.0 示例,8.0 - 30.0 KHz (典型);极低电感,高速电机


#define USER_MAX_VS_MAG_PU可能需要45-80 KHz (0.5)//如果未使用当前重建技术,则设置为0.5。 有关更多信息,请查看lab10a-x中的模块svgen_current。

//! *简短抽取/
/******************
//! \brief定义每个ISR时钟周期的PWM时钟周期数
//! 注:有效值仅为1,2或3
#define user_NUM_PWM_TICK_Per_ISR_TICK (1)

//! \brief定义每个控制器时钟周期(软件)的ISR周期数(硬件)
//! \brief控制器时钟周期(CTRL)是软件中用于所有计时
的主时钟//! \brief通常,PWM频率触发器(可以被ePWM硬件抽取以减少开销) ADC SOC
//! \brief ADC SOC触发ADC转换完成
//! \볲 뛌 ADC转换完成会触发ISR
//! \brief这将硬件ISR速率与软件控制器速率相联系
//! \brief通常要考虑在16KHz ISR上进行某种形式的小数位数(ePWM硬件,当前或EST),以确保中断完成并留出时间用于后台任务
#define user_NUM_ISR_TICK_PER_CTRL_TICK_TICK (2) // 2示例,控制器时钟频率(CTRL)以PWM运行/2;例如30 KHz PWM,15 KHz控制

//! \brief定义每个当前控制器时钟嘀嗒
信号的控制器时钟嘀嗒信号数//! 控制器时钟频率与当前控制器(FOC)速率的简短关系
#define user_NUM_CTRL_TICS_per当前_tick (1) // 1个典型的正向FOC电流控制器(IQ/ID/IPark/SVPWM)以与CTRL相同的速率运行。

//! \brief定义每个估计器时钟嘀嗒信号
的控制器时钟嘀嗒信号数//! \控制器时钟频率与估算器(快速)速率的简短关系
//! \brief取决于所需的动态性能,FAST可提供低至1 KHz的良好结果,而更动态或高速的应用程序可能需要高达15 KHz
#define user_NUM_CTRL_TICS_PL_PLATS_PRE_EST_TICK (1) // 1个典型的快速估算器以与CTRL相同的速率运行;

//! \brief定义每个速度控制器时钟嘀嗒
信号的控制器时钟嘀嗒信号数//! 简要控制器时钟频率与速度环路速率的关系
#define user_NUM_CTRL_TICS_PER_SPEED _TICK (15)// 15典型匹配PWM,例如:15kHz PWM,控制器和电流环路,1KHz速度环路

//! \brief定义每个轨迹的控制器时钟嘀嗒信号数。时钟嘀嗒
信号//! \控制器时钟频率与轨迹环路速率的简短关系
//! \brief通常与速度
率#define user_NUM_CTRL_TICS_PER_TRAJ_TICK (15)// 15相同,通常与PWM匹配,例如:10kHz控制器和电流回路,1KHz速度回路,1 KHz轨迹

//! *限制简介

//! \brief定义要在ID引用
//中应用的最大负电流。 简明仅用于场弱化,这是一个安全设置(例如,防止消磁)
//! \brief用户还必须注意,整体电流大小[sqrt(ID^2 + IQ^2)]应保持在低于任何机器设计规格
#define USER_MAX_NOLIC_ID_REF_CURRENT_A (0.5 * USER_MOTOR_MAX_CURRENT)//-MOTOR_MAX_CURRENT示例:0.5 * USER_MOTOR_MAX_CURRENT,调整以满足马达的安全需求

//! \brief定义R/L估计频率,赫兹
//! \brief用户,低电感电动机的值较高,高电感电动机的值较低
//! \brief电机。 这些值的范围为100至300 Hz。
#define user_R_over,L_EST_FREQ_Hz (300) // 300默认

//! \brief为通量积分器PU
//定义低速限值。 \brief这是处于活动状态的ForceAngle对象的速度范围(CW/CCW),但仅当启用
//! 在此速度之外的\brief -或如果已禁用,则ForcAngle将从不处于活动状态,并且仅由FAST
#define USER_ZEROSPEEDLIMIT (0.5 / USER_IQ_FILL_Scale_FREQ_Hz)提供角度。 // 0.002 PU,1-5 Hz (典型);Hz = USER_ZEROSPEEDLIMIT * USER_IQ_FULL,Scale_FREQ_Hz

//! \brief定义力角度频率,Hz
//! \\n力角对象使用的定子矢量旋转的简短频率
//! \brief可以是正数或负
数#define user_force_angle_FREQ_Hz (2.0 * USER_ZEROSPEEDLIMIT * USER_IQ_FULL _Scale_FREQ_Hz) // 1.0 典型力角启动速度

//! *「极杆
」/「极杆」/「杆杆杆」/「杆杆」/「杆
//! \brief定义模拟电压滤波器极位置,赫兹
//! \brief必须与VPH的硬件过滤器
#define user_voltage_filter_pole_Hz (357.0)// BOOSTXL-DRV8305 = 344.62 Hz

//! \볲 뛌 user motor & ID settings
//**************************************************************************************************

//! \brief使用唯一的名称和ID号定义每个电机
// BLDC和SMPM电机
#define Estun_EMJ_04APB22 101
#define Anaheim_BLY172S 102
#Define Teknic_M2310PLN04K 104

// ipm motors
//如果用户提供单独的LS-d,LS-q
//或者将其视为SPM与用户或确定的平均LS
#define Belet_Drive_Washer_IPM 201
#定义Anaheim_显著 202

// ACIM电机
#define Marathon_5K33GN2A 301


#define user_motor Maxon_EC22

#Elif (user_motor == Maxon_EC22)
#define user_motor_type motor_Type_pm
#define user_motor_NUM_pole_pairs (1)
#define user_motor_rr (空)
#define user_motor_Rs (0.43)
#define user_motor_ls_d (0.00011737140144)
#define user_motor_ls_q (0.00011737140144)
#define user_motor_rated流量 (0.0535185114)
#define user_motor_magniting_current (空)
#define user_motor_RES_EST_current (0.2)
#define user_motor_IND_EST_current (0.2)
#define user_motor_MAX_current (0.5)
#define user_motor_fluone_EST_FREQ_Hz (20.0)

对此有何想法? 我认为这在某种程度上是一个单位规模问题,但我的用户参数没有发现任何问题 
感谢你的帮助。

-Nicolas de Maubeuge

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    反馈速度不正确,为负值,参考为正值。 您需要先使用lab02c来识别马达参数,以确认马达参数对于lab05b是正确的。