首页资源分类DSP > Instasoin指导

Instasoin指导

已有 445134个资源

下载专区

上传者其他资源

文档信息举报收藏

标    签:Instaspinfocmotion

分    享:

文档简介

详细介绍了Instaspin实现的原理,以及程序实现时的各种变量的介绍

文档预览

InstaSPIN-FOC™ 和 InstaSPIN-MOTION™ 用户指南 Literature Number: ZHCU083F January 2013 – Revised July 2014 内容 1 简介 .................................................................................................................................. 20 1.1 InstaSPIN-FOC 和 FAST 概述............................................................................................ 22 1.1.1 FAST 估算器特性.................................................................................................. 23 1.1.2 InstaSPIN-FOC 解决方案特性 ................................................................................... 23 1.1.3 InstaSPIN-FOC 方框图 ........................................................................................... 24 1.1.4 将 FAST 估算器与典型解决方案相比较 ........................................................................ 26 1.1.5 FAST 提供无传感器 FOC 性能 .................................................................................. 26 1.2 InstaSPIN-MOTION 和 SpinTAC 概述................................................................................... 29 1.2.1 InstaSPIN-MOTION 关键功能和优势 ........................................................................... 31 1.2.2 InstaSPIN-MOTION 方框图 ...................................................................................... 35 1.2.3 应用示例 ............................................................................................................ 43 2 快速入门套件 - TI 提供的软件和硬件 ........................................................................................ 48 2.1 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION........................................................................... 51 3 InstaSPIN 和 MotorWare ...................................................................................................... 56 3.1 MotorWare 目录结构....................................................................................................... 58 3.1.1 MotorWare – drivers .............................................................................................. 59 3.1.2 MotorWare – ide................................................................................................... 60 3.1.3 MotorWare – modules ............................................................................................ 61 3.1.4 MotorWare – solutions............................................................................................ 61 3.2 MotorWare 面向对象的设计............................................................................................... 63 3.2.1 对象 ................................................................................................................. 64 3.2.2 方法 ................................................................................................................. 64 3.3 InstaSPIN-FOC API ........................................................................................................ 66 3.3.1 控制器 API 函数 - ctrl.c、ctrl.h、CTRL_obj.h ................................................................. 68 3.3.2 估算器 API 函数 - FAST 库 - est.h、est_states.h............................................................. 98 3.3.3 硬件抽象层 (HAL) API 函数 - hal.c、hal.h、hal_obj.h ...................................................... 135 3.3.4 用户设置 – user.c、user.h、userParams.h .................................................................. 153 3.3.5 其他函数 .......................................................................................................... 162 3.4 InstaSPIN-MOTION 和 SpinTAC API .................................................................................. 162 3.4.1 头文件、公共库和 ROM 库 ..................................................................................... 166 3.4.2 版本信息 .......................................................................................................... 167 3.4.3 SpinTAC 结构名称 ............................................................................................... 168 3.4.4 SpinTAC 变量 .................................................................................................... 169 3.5 SpinTAC API .............................................................................................................. 170 3.5.1 SpinTAC 速度控制 ............................................................................................... 170 3.5.2 SpinTAC 速度移动 ............................................................................................... 173 3.5.3 SpinTAC 速度规划 ............................................................................................... 175 3.5.4 SpinTAC 速度识别 ............................................................................................... 179 3.5.5 SpinTAC 位置转换 ............................................................................................... 181 3.5.6 SpinTAC 位置控制 ............................................................................................... 183 3.5.7 SpinTAC 位置移动 ............................................................................................... 186 3.5.8 SpinTAC 位置规划 ............................................................................................... 189 3.5.9 SpinTAC 函数 .................................................................................................... 192 4 用户参数 (user.h) ............................................................................................................... 203 4.1 电流和电压................................................................................................................. 204 2 内容 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 4.1.1 USER_IQ_FULL_SCALE_FREQ_Hz ......................................................................... 204 4.1.2 USER_IQ_FULL_SCALE_VOLTAGE_V ..................................................................... 204 4.1.3 USER_ADC_FULL_SCALE_VOLTAGE_V .................................................................. 204 4.1.4 USER_VOLTAGE_SF .......................................................................................... 204 4.1.5 USER_IQ_FULL_SCALE_CURRENT_A .................................................................... 204 4.1.6 USER_ADC_FULL_SCALE_CURRENT_A ................................................................. 205 4.1.7 USER_CURRENT_SF ......................................................................................... 205 4.1.8 USER_NUM_CURRENT_SENSORS ........................................................................ 205 4.1.9 USER_NUM_VOLTAGE_SENSORS ........................................................................ 205 4.1.10 I_A_offset、I_B_offset、I_C_offset ......................................................................... 205 4.1.11 V_A_offset、V_B_offset、V_C_offset ...................................................................... 205 4.2 时钟与定时器 .............................................................................................................. 206 4.2.1 USER_SYSTEM_FREQ_MHz ................................................................................ 206 4.2.2 USER_PWM_FREQ_kHz ...................................................................................... 206 4.2.3 USER_MAX_VS_MAG_PU .................................................................................... 206 4.2.4 USER_PWM_PERIOD_usec .................................................................................. 206 4.2.5 USER_ISR_FREQ_Hz ......................................................................................... 206 4.2.6 USER_ISR_PERIOD_usec .................................................................................... 207 4.3 抽取率 ...................................................................................................................... 207 4.3.1 USER_NUM_PWM_TICKS_PER_ISR_TICK ................................................................ 207 4.3.2 USER_NUM_ISR_TICKS_PER_CTRL_TICK ............................................................... 207 4.3.3 USER_NUM_CTRL_TICKS_PER_CURRENT_TICK ...................................................... 207 4.3.4 USER_NUM_CTRL_TICKS_PER_EST_TICK .............................................................. 207 4.3.5 USER_NUM_CTRL_TICKS_PER_SPEED_TICK .......................................................... 207 4.3.6 USER_NUM_CTRL_TICKS_PER_TRAJ_TICK ............................................................ 208 4.3.7 USER_CTRL_FREQ_Hz ....................................................................................... 208 4.3.8 USER_EST_FREQ_Hz ........................................................................................ 208 4.3.9 USER_TRAJ_FREQ_Hz ....................................................................................... 208 4.3.10 USER_CTRL_PERIOD_usec ................................................................................ 208 4.3.11 USER_CTRL_PERIOD_sec .................................................................................. 208 4.4 限制 ......................................................................................................................... 208 4.4.1 USER_MAX_NEGATIVE_ID_REF_CURRENT_A ......................................................... 208 4.4.2 USER_ZEROSPEEDLIMIT .................................................................................... 209 4.4.3 USER_FORCE_ANGLE_FREQ_Hz .......................................................................... 209 4.4.4 USER_MAX_CURRENT_SLOPE_POWERWARP ......................................................... 209 4.4.5 USER_MAX_ACCEL_Hzps .................................................................................... 209 4.4.6 USER_MAX_ACCEL_EST_Hzps.............................................................................. 209 4.4.7 USER_MAX_CURRENT_SLOPE ............................................................................ 209 4.4.8 USER_IDRATED_FRACTION_FOR_RATED_FLUX ...................................................... 210 4.4.9 USER_IDRATED_FRACTION_FOR_L_IDENT ............................................................. 210 4.4.10 USER_IDRATED_DELTA .................................................................................... 210 4.4.11 USER_SPEEDMAX_FRACTION_FOR_L_IDENT ........................................................ 210 4.4.12 USER_FLUX_FRACTION .................................................................................... 210 4.4.13 USER_POWERWARP_GAIN ................................................................................ 210 4.4.14 USER_R_OVER_L_EST_FREQ_Hz ........................................................................ 210 4.5 极............................................................................................................................ 210 4.5.1 USER_VOLTAGE_FILTER_POLE_Hz ...................................................................... 210 4.5.2 USER_VOLTAGE_FILTER_POLE_rps ...................................................................... 210 4.5.3 USER_OFFSET_POLE_rps ................................................................................... 211 4.5.4 USER_FLUX_POLE_rps ....................................................................................... 211 4.5.5 USER_DIRECTION_POLE_rps ............................................................................... 211 4.5.6 USER_SPEED_POLE_rps .................................................................................... 211 4.5.7 USER_DCBUS_POLE_rps .................................................................................... 211 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 内容 3 www.ti.com.cn 4.5.8 USER_EST_KAPPAQ .......................................................................................... 211 4.6 使用电机和识别设置 ...................................................................................................... 211 4.6.1 USER_MOTOR_TYPE ......................................................................................... 211 4.6.2 USER_MOTOR_NUM_POLE_PAIRS ....................................................................... 211 4.6.3 USER_MOTOR_Rr ............................................................................................. 211 4.6.4 USER_MOTOR_Rs ............................................................................................. 212 4.6.5 USER_MOTOR_Ls_d .......................................................................................... 212 4.6.6 USER_MOTOR_Ls_q .......................................................................................... 212 4.6.7 USER_MOTOR_RATED_FLUX .............................................................................. 212 4.6.8 USER_VOLTAGE_FILTER_POLE_Hz ...................................................................... 212 4.6.9 USER_MOTOR_RES_EST_CURRENT ..................................................................... 212 4.6.10 USER_MOTOR_IND_EST_CURRENT ..................................................................... 212 4.6.11 USER_MOTOR_MAX_CURRENT .......................................................................... 212 4.6.12 USER_MOTOR_FLUX_EST_FREQ_Hz ................................................................... 212 4.6.13 USER_MOTOR_ENCODER_LINES(仅限 InstaSPIN-MOTION) ..................................... 212 4.6.14 USER_MOTOR_MAX_SPEED_KRPM(仅限 InstaSPIN-MOTION) .................................. 212 4.6.15 USER_SYSTEM_INERTIA(仅限 InstaSPIN-MOTION)................................................. 213 4.6.16 USER_SYSTEM_FRICTION(仅限 InstaSPIN-MOTION) .............................................. 213 4.6.17 USER_SYSTEM_BANDWIDTH_SCALE(仅限 InstaSPIN-MOTION) ................................ 213 4.7 SpinTAC 参数(spintac_velocity.h 和 spintac_position.h)......................................................... 213 4.7.1 宏定义 ............................................................................................................. 213 4.7.2 类型定义 .......................................................................................................... 214 4.7.3 函数 ................................................................................................................ 215 4.8 在 user.h 中设置 ACIM 电机参数 ....................................................................................... 217 4.8.1 从 ACIM 数据表中获取这些参数 ............................................................................... 218 5 管理电机信号..................................................................................................................... 221 5.1 软件必要条件 .............................................................................................................. 222 5.1.1 IQ 满量程频率 .................................................................................................... 222 5.1.2 IQ 满量程电压 .................................................................................................... 222 5.1.3 IQ 满量程电流 .................................................................................................... 224 5.1.4 最大电流 .......................................................................................................... 224 5.1.5 抽取率 ............................................................................................................. 225 5.1.6 系统频率 .......................................................................................................... 225 5.1.7 PWM 频率 ........................................................................................................ 226 5.1.8 最大电压矢量 ..................................................................................................... 226 5.2 硬件必要条件 .............................................................................................................. 227 5.2.1 电流反馈增益 ..................................................................................................... 228 5.2.2 电流反馈极性 ..................................................................................................... 229 5.2.3 电压反馈 .......................................................................................................... 231 5.2.4 电压滤波器极 ..................................................................................................... 233 5.2.5 分流电阻器数量 .................................................................................................. 234 5.2.6 死区时间配置 ..................................................................................................... 234 5.2.7 模拟输入配置 ..................................................................................................... 236 5.2.8 PWM 输出配置 ................................................................................................... 237 6 电机识别和状态图............................................................................................................... 238 6.1 InstaSPIN 电机识别....................................................................................................... 239 6.2 电机识别过程概述......................................................................................................... 241 6.2.1 控制器 (CTRL) 状态机........................................................................................... 241 6.2.2 估算器 (EST) 状态机 ............................................................................................ 243 6.2.3 控制器 (CTRL) 和估算器 (EST) 状态机的相关性 ............................................................ 245 6.3 PMSM 和 ACIM 识别过程的差别 ....................................................................................... 247 6.4 必要条件 ................................................................................................................... 247 6.4.1 机械必要条件 ..................................................................................................... 248 4 内容 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 6.4.2 硬件必要条件 ..................................................................................................... 248 6.4.3 软件必要条件 ..................................................................................................... 248 6.4.4 PMSM 电机识别的软件配置 .................................................................................... 248 6.4.5 ACIM 电机识别的软件配置 ..................................................................................... 250 6.5 PMSM 电机完全识别 ..................................................................................................... 251 6.5.1 CTRL_State_Idle 和 EST_State_Idle ......................................................................... 253 6.5.2 CTRL_State_OffLine 和 EST_State_Idle(硬件偏移已校准) ............................................ 253 6.5.3 CTRL_State_OnLine 和 EST_State_RoverL ................................................................ 254 6.5.4 CTRL_State_OnLine 和 EST_State_Rs ...................................................................... 258 6.5.5 CTRL_State_OnLine 和 EST_State_RampUp............................................................... 261 6.5.6 CTRL_State_OnLine 和 EST_State_RatedFlux ............................................................. 263 6.5.7 CTRL_State_OnLine 和 EST_State_Ls....................................................................... 265 6.5.8 CTRL_State_OnLine 和 EST_State_RampDown ........................................................... 267 6.5.9 CTRL_State_OnLine 和 EST_State_MotorIdentified........................................................ 267 6.5.10 CTRL_State_Idle 和 EST_State_Idle ........................................................................ 269 6.6 ACIM 电机完全识别....................................................................................................... 269 6.6.1 CTRL_State_Idle 和 EST_State_Idle ......................................................................... 271 6.6.2 CTRL_State_OffLine 和 EST_State_Idle ..................................................................... 271 6.6.3 CTRL_State_OnLine 和 EST_State_RoverL................................................................. 271 6.6.4 CTRL_State_OnLine 和 EST_State_Rs ...................................................................... 271 6.6.5 CTRL_State_OnLine 和 EST_State_RampUp............................................................... 271 6.6.6 CTRL_State_OnLine 和 EST_State_IdRated ................................................................ 272 6.6.7 CTRL_State_OnLine 和 EST_State_RatedFlux ............................................................. 275 6.6.8 CTRL_State_OnLine 和 EST_State_RampDown ........................................................... 277 6.6.9 CTRL_State_Idle 和 EST_State_LockRotor ................................................................. 278 6.6.10 CTRL_State_OnLine 和 EST_State_Ls ..................................................................... 279 6.6.11 CTRL_State_OnLine 和 EST_State_Rr ..................................................................... 280 6.6.12 CTRL_State_OnLine 和 EST_State_RampDown .......................................................... 281 6.6.13 CTRL_State_OnLine 和 EST_State_MotorIdentified ...................................................... 283 6.6.14 CTRL_State_Idle 和 EST_State_Idle ........................................................................ 284 6.7 PMSM 和 ACIM 电机识别重校准 ....................................................................................... 284 6.7.1 完全识别后的 PMSM 和 ACIM 电机重校准................................................................... 284 6.7.2 使用 user.h 中的参数后的 PMSM 和 ACIM 电机重校准 .................................................... 292 6.8 在 user.h 中设置 PMSM 电机参数...................................................................................... 292 6.8.1 从 PMSM 数据表中获取参数 ................................................................................... 293 6.9 电机识别故障排除......................................................................................................... 296 6.9.1 通用清单 .......................................................................................................... 296 6.9.2 PMSM 电机识别故障排除....................................................................................... 296 6.9.3 ACIM 电机识别故障排除 ........................................................................................ 302 7 惯性识别........................................................................................................................... 303 7.1 InstaSPIN-MOTION 惯性识别........................................................................................... 304 7.2 惯性识别过程概述......................................................................................................... 305 7.3 SpinTAC 速度识别的软件配置 .......................................................................................... 308 7.3.1 包括头文件........................................................................................................ 308 7.3.2 声明全局变量 ..................................................................................................... 308 7.3.3 初始化配置变量 .................................................................................................. 308 7.3.4 调用 SpinTAC 速度识别......................................................................................... 309 7.4 惯性识别故障排除......................................................................................................... 310 7.4.1 ERR_ID ........................................................................................................... 310 7.4.2 2003 错误 ......................................................................................................... 310 7.4.3 2004 错误 ......................................................................................................... 310 7.4.4 2006 错误 ......................................................................................................... 311 7.5 不易识别惯性的应用 ...................................................................................................... 311 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 内容 5 www.ti.com.cn 7.5.1 自动泵(齿槽力大/摩擦力大) ................................................................................. 311 7.5.2 直接驱动型洗衣机(额定转速低且反电势大) ............................................................... 312 7.5.3 压缩机(启动电流大) .......................................................................................... 314 8 MCU 注意事项 ................................................................................................................... 316 8.1 支持 InstaSPIN 的器件 ................................................................................................... 317 8.1.1 softwareUpdate1p6() - 用户代码中所需的函数............................................................... 317 8.2 ROM 和用户内存概述 .................................................................................................... 318 8.2.1 ROM 中的 InstaSPIN-FOC 完全执行.......................................................................... 318 8.2.2 ROM 中的 InstaSPIN-FOC 最小执行.......................................................................... 320 8.2.3 ROM 中的 InstaSPIN-MOTION ................................................................................ 321 8.3 关于 CPU 负载和内存占用量测量的详细信息 ......................................................................... 322 8.3.1 CPU 利用率测量详情 ............................................................................................ 322 8.3.2 内存分配测量详情................................................................................................ 323 8.3.3 在 ROM 中构建 IQmath ......................................................................................... 324 8.3.4 堆栈利用率测量详情 ............................................................................................. 324 8.3.5 InstaSPIN 主中断 ................................................................................................ 325 8.3.6 时钟速率 .......................................................................................................... 325 8.4 内存占用量................................................................................................................. 325 8.4.1 器件内存映射 ..................................................................................................... 326 8.4.2 InstaSPIN 内存占用量........................................................................................... 328 8.4.3 内存等待状态 ..................................................................................................... 329 8.4.4 用于仅 RAM 执行的所需闪存配置 ............................................................................. 329 8.4.5 只执行内存的调试 (IDE)......................................................................................... 330 8.5 CPU 负载 .................................................................................................................. 330 8.5.1 F2806xF 器件 .................................................................................................... 330 8.5.2 F2806xM 器件.................................................................................................... 339 8.5.3 F805xF 器件 ...................................................................................................... 346 8.5.4 F2805xM 器件.................................................................................................... 347 8.5.5 F2802xF 器件 .................................................................................................... 349 8.6 数字和模拟引脚 ........................................................................................................... 351 8.6.1 引脚利用率........................................................................................................ 351 8.6.2 F2805x 模拟前端 (AFE)......................................................................................... 351 9 实时结构........................................................................................................................... 355 9.1 InstaSPIN 软件执行时钟树 .............................................................................................. 356 9.2 用于实时调度的软件抽取................................................................................................. 359 9.2.1 USER_NUM_ISR_TICKS_PER_CTRL_TICK ............................................................... 359 9.2.2 USER_NUM_CTRL_TICKS_PER_CURRENT_TICK....................................................... 365 9.2.3 USER_NUM_CTRL_TICKS_PER_EST_TICK............................................................... 365 9.2.4 实例 ................................................................................................................ 366 9.2.5 USER_NUM_CTRL_TICKS_PER_SPEED_TICK........................................................... 370 9.2.6 USER_NUM_CTRL_TICKS_PER_TRAJ_TICK ............................................................. 371 9.3 硬件抽取 ................................................................................................................... 373 10 管理启动时间..................................................................................................................... 378 10.1 同时启用偏移和 Rs 重校准功能的启动 ................................................................................. 379 10.2 仅启用偏移重校准时的启动 .............................................................................................. 380 10.3 启用 Rs 重校准时的启动 ................................................................................................. 381 10.4 不启用任何重校准时的启动 .............................................................................................. 383 10.5 忽略惯性估算 .............................................................................................................. 384 11 调整稳压器........................................................................................................................ 386 11.1 PI 控制器简介 ............................................................................................................. 387 11.2 电流控制器的 PI 设计..................................................................................................... 389 11.3 速度控制器的 PI 设计..................................................................................................... 392 6 内容 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 11.4 根据稳定性和带宽计算 PI 增益.......................................................................................... 394 11.5 根据阻尼因子计算速度和电流 PI 增益.................................................................................. 397 11.6 向速度环路添加极点时的考量 ........................................................................................... 401 11.7 速度 PI 控制器需要考虑的参数:电流限制、钳位和惯性 ............................................................ 403 11.8 为 FOC 系统设计 PI 控制器时的注意事项 ............................................................................. 406 11.8.1 电机类型间的 FOC 差异 ....................................................................................... 407 11.8.2 Q 轴与 D 轴间的耦合........................................................................................... 407 11.9 采样和数字系统考量 ...................................................................................................... 410 11.9.1 积分增益中的采样周期考量.................................................................................... 413 11.9.2 数字格式考量 .................................................................................................... 414 11.9.3 PI 系数换算考量................................................................................................. 414 12 InstaSPIN-MOTION 控制器 .................................................................................................. 415 12.1 稳定性 ...................................................................................................................... 416 12.1.1 稳定性量化分析 ................................................................................................. 416 12.1.2 性能............................................................................................................... 418 12.1.3 稳定性和性能之间的权衡....................................................................................... 420 12.1.4 调整 SpinTAC 控制器 .......................................................................................... 420 12.2 SpinTAC 速度控制的软件配置 .......................................................................................... 422 12.2.1 包括头文件....................................................................................................... 422 12.2.2 声明全局结构 .................................................................................................... 423 12.2.3 初始化配置变量 ................................................................................................. 423 12.2.4 调用 SpinTAC 速度控制........................................................................................ 424 12.2.5 SpinTAC 速度控制故障排除 ................................................................................... 424 12.3 速度控制中的最优性能 ................................................................................................... 425 12.3.1 简介............................................................................................................... 425 12.3.2 比较速度控制器 ................................................................................................. 425 12.3.3 抗扰............................................................................................................... 425 12.3.4 系统配置跟踪 .................................................................................................... 427 12.3.5 InstaSPIN-MOTION 速度控制优势 ........................................................................... 428 12.4 SpinTAC 位置控制的软件配置 .......................................................................................... 434 12.4.1 包括头文件....................................................................................................... 434 12.4.2 声明全局结构 .................................................................................................... 435 12.4.3 初始化配置变量 ................................................................................................. 435 12.4.4 调用 SpinTAC 位置控制........................................................................................ 436 12.4.5 SpinTAC 位置控制故障排除 ................................................................................... 436 12.5 位置控制中的最优性能 ................................................................................................... 437 12.5.1 简介............................................................................................................... 437 12.5.2 比较位置控制器 ................................................................................................. 437 12.5.3 抗扰............................................................................................................... 437 12.5.4 系统配置跟踪 .................................................................................................... 439 12.5.5 InstaSPIN-MOTION 位置控制优势 ........................................................................... 440 13 轨迹规划........................................................................................................................... 447 13.1 生成 InstaSPIN-MOTION 系统配置..................................................................................... 448 13.1.1 急动对系统性能的影响 ......................................................................................... 448 13.2 SpinTAC 速度移动的软件配置 .......................................................................................... 449 13.2.1 包括头文件....................................................................................................... 449 13.2.2 声明全局结构 .................................................................................................... 450 13.2.3 初始化配置变量 ................................................................................................. 450 13.2.4 调用 SpinTAC 速度移动........................................................................................ 450 13.2.5 SpinTAC 速度移动故障排除 ................................................................................... 451 13.3 SpinTAC 位置移动的软件配置 .......................................................................................... 452 13.3.1 包括头文件....................................................................................................... 452 13.3.2 声明全局结构 .................................................................................................... 452 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 内容 7 www.ti.com.cn 13.3.3 初始化配置变量 ................................................................................................. 452 13.3.4 调用 SpinTAC 位置移动........................................................................................ 453 13.3.5 SpinTAC 位置移动故障排除 ................................................................................... 453 13.4 InstaSPIN-MOTION 序列规划........................................................................................... 455 13.4.1 SpinTAC 速度规划元素 ........................................................................................ 455 13.4.2 SpinTAC 速度规划元素限制 ................................................................................... 456 13.4.3 SpinTAC 速度规划示例:洗衣机搅动 ....................................................................... 457 13.4.4 SpinTAC 速度规划示例:车库门.............................................................................. 457 13.4.5 SpinTAC 速度规划示例:洗衣机.............................................................................. 458 13.4.6 SpinTAC 位置规划示例:自动售货机 ........................................................................ 460 13.5 SpinTAC 速度规划的软件配置 .......................................................................................... 461 13.5.1 包括头文件....................................................................................................... 461 13.5.2 定义配置数组的大小 ............................................................................................ 462 13.5.3 声明全局结构 .................................................................................................... 462 13.5.4 初始化配置变量 ................................................................................................. 462 13.5.5 调用 SpinTAC 速度规划........................................................................................ 464 13.5.6 调用 SpinTAC 速度规划节拍 .................................................................................. 465 13.5.7 根据 SpinTAC 速度移动状态更新 SpinTAC 速度规划...................................................... 465 13.6 SpinTAC 速度规划故障排除 ............................................................................................. 465 13.6.1 ERR_ID .......................................................................................................... 465 13.6.2 配置错误 ......................................................................................................... 466 13.7 SpinTAC 位置规划的软件配置 .......................................................................................... 467 13.7.1 包括头文件....................................................................................................... 467 13.7.2 定义配置数组的大小 ............................................................................................ 468 13.7.3 声明全局结构 .................................................................................................... 468 13.7.4 初始化配置变量 ................................................................................................. 468 13.7.5 调用 SpinTAC 位置规划........................................................................................ 470 13.7.6 调用 SpinTAC 位置规划节拍 .................................................................................. 471 13.7.7 根据 SpinTAC 位置移动状态更新 SpinTAC 位置规划...................................................... 472 13.8 SpinTAC 位置规划故障排除 ............................................................................................. 472 13.8.1 ERR_ID .......................................................................................................... 472 13.8.2 配置错误 ......................................................................................................... 473 13.9 结论 ......................................................................................................................... 474 14 管理启动、低速和换向时的满负载.......................................................................................... 475 14.1 满载低速运行 .............................................................................................................. 477 14.1.1 满载低速运行时的考量 ......................................................................................... 477 14.1.2 瞬时满载低速运行示例 ......................................................................................... 479 14.2 满载换向 ................................................................................................................... 488 14.2.1 满载低速运行时的换向考量.................................................................................... 488 14.2.2 满载低速运行时的换向示例.................................................................................... 488 14.3 满载电机启动 .............................................................................................................. 495 14.3.1 满载电机启动的考量 ............................................................................................ 495 14.3.2 满载电机启动示例............................................................................................... 496 14.4 满载从静止状态快速加速................................................................................................. 504 14.4.1 无需电机对准时满载最快速度启动电机的考量 .............................................................. 504 14.4.2 需要电机对准时满载最快速度启动电机的考量 .............................................................. 509 14.5 过载和电机过热 ........................................................................................................... 514 14.5.1 过载和电机过热的考量 ......................................................................................... 514 14.5.2 过载和电机过热示例 ............................................................................................ 515 14.6 InstaSPIN-MOTION 和低速运行的考量 ................................................................................ 519 15 Rs 在线重校准 ................................................................................................................... 520 15.1 概要 ......................................................................................................................... 521 15.2 电阻与 温度 ................................................................................................................ 521 8 内容 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 15.3 低速运行(包括启动)时所需的 Rs 准确值 ........................................................................... 521 15.4 Rs 在线重校准介绍 ....................................................................................................... 521 16 PowerWarp™ ................................................................................................................... 539 16.1 概述 ......................................................................................................................... 540 16.2 启用 PowerWarp .......................................................................................................... 541 16.3 PowerWarp 电流斜率..................................................................................................... 542 16.4 实例 ......................................................................................................................... 543 16.5 案例研究 ................................................................................................................... 545 17 分流电流测量..................................................................................................................... 548 17.1 简介 ......................................................................................................................... 549 17.2 信号 ......................................................................................................................... 549 17.3 1 分流....................................................................................................................... 549 17.4 2 分流....................................................................................................................... 552 17.5 3 分流....................................................................................................................... 553 17.6 开发套件 ................................................................................................................... 554 17.6.1 DRV8312 ........................................................................................................ 555 17.6.2 DRV8301 ........................................................................................................ 555 17.7 结论 ......................................................................................................................... 555 18 传感系统........................................................................................................................... 556 18.1 正交编码器的硬件配置 ................................................................................................... 557 18.1.1 引脚用量 ......................................................................................................... 557 18.2 正交编码器的软件配置 ................................................................................................... 557 18.2.1 针对 EQEP 操作配置电机 ..................................................................................... 557 18.2.2 初始化 EQEP 句柄.............................................................................................. 557 18.2.3 设置数字 IO 以连接 QEP 外设 ................................................................................ 558 18.2.4 启用 eQEP 时钟................................................................................................. 558 18.2.5 初始化 ENC 模块 ............................................................................................... 558 18.2.6 设置 ENC 模块 .................................................................................................. 558 18.2.7 调用 eQEP 函数................................................................................................. 559 18.2.8 为 FOC 提供 eQEP 角度....................................................................................... 559 18.3 InstaSPIN-MOTION 位置转换........................................................................................... 559 18.3.1 SpinTAC 位置转换的软件配置 ................................................................................ 559 18.3.2 SpinTAC 位置转换故障排除 ................................................................................... 560 19 疑难电机........................................................................................................................... 562 20 添加系统功能..................................................................................................................... 563 21 构建 InstaSPIN-FOC 和 InstaSPIN-MOTION 电路板 ................................................................. 564 A 术语和缩略词定义............................................................................................................... 565 修订历史记录(E 到 F) ............................................................................................................... 568 修订历史记录(D 到 E)............................................................................................................... 568 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 内容 9 www.ti.com.cn 附图目录 1-1. FAST - 估算磁通、角度、转速、转矩 - 自动电机识别................................................................. 22 1-2. i. ROM 中整个 InstaSPIN-FOC 包的方框图(F2802xF 器件除外) ................................................. 24 1-3. 用户内存中的 InstaSPIN-FOC 方框图,不包括 ROM 中的 FAST ................................................... 25 1-4. 传感 FOC 系统.............................................................................................................. 28 1-5. InstaSPIN-MOTION = C2000 Piccolo 微控制器 + FAST 软件传感器(可选)+ 自动调整内部转矩控制器 + SpinTAC 运动控制套件 .................................................................................................... 30 1-6. SpinTAC 运动控制套件组件............................................................................................... 31 1-7. 简单调整接口................................................................................................................ 33 1-8. SpinTAC Move 中的可用曲线............................................................................................. 33 1-9. 针对一台洗衣机的状态转换图............................................................................................. 34 1-10. 针对一扇车库门系统的状态转换图 ....................................................................................... 35 1-11. 除了 ROM 中的 FAST 和 SpinTAC,用户内存中的 InstaSPIN-MOTION........................................... 37 1-12. ROM 中的 InstaSPIN-MOTION........................................................................................... 38 1-13. 使用机械传感器进行的 InstaSPIN-MOTION 速度控制................................................................. 40 1-14. 使用机械传感器和冗余 FAST 软件传感器进行的 InstaSPIN-MOTION 位置控制 .................................. 42 1-15. 洗衣机系统配置 ............................................................................................................. 44 1-16. InstaSPIN-MOTION 最大限度减少误差.................................................................................. 45 1-17. 第一个旋转周期 - 500rpm ................................................................................................. 46 1-18. 第二旋转周期 - 2000rpm .................................................................................................. 47 2-1. InstaSPIN-MOTION GUI 使用电机识别 (Motor Identification) 标签.................................................. 51 2-2. InstaSPIN-MOTION GUI 使用速度或转矩 (Speed or Torque) 标签 ................................................. 52 2-3. InstaSPIN-MOTION GUI 使用 SpinTAC 1:启动 (pinTAC 1:Startup) 标签......................................... 53 2-4. InstaSPIN-MOTION GUI SpinTAC 2:调整 (SpinTAC 2:Tuning) 标签 ............................................. 54 2-5. InstaSPIN-MOTION GUI 使用 SpinTAC 3:运动 (SpinTAC 3:Motion) 标签 ....................................... 55 3-1. 用户内存中的 InstaSPIN-FOC 方框图,不包括 ROM 中的 FAST ................................................... 67 3-2. InstaSPIN-MOTION 速度控制........................................................................................... 162 3-3. InstaSPIN-MOTION 位置控制........................................................................................... 164 3-4. SpinTAC 模块目录结构 .................................................................................................. 166 3-5. SpinTAC 速度控制接口 .................................................................................................. 170 3-6. SpinTAC 速度控制状态转换图 .......................................................................................... 172 3-7. SpinTAC 速度移动接口 .................................................................................................. 173 3-8. SpinTAC 速度移动状态转换图 .......................................................................................... 174 3-9. SpinTAC 速度规划接口 .................................................................................................. 175 3-10. SpinTAC 速度规划状态转换图 .......................................................................................... 177 3-11. SpinTAC 速度识别接口 .................................................................................................. 179 3-12. SpinTAC 速度识别状态转换图 .......................................................................................... 180 3-13. SpinTAC 位置转换接口 .................................................................................................. 181 3-14. SpinTAC 位置转换状态转换图 .......................................................................................... 182 3-15. SpinTAC 位置控制接口 .................................................................................................. 183 3-16. SpinTAC 位置控制状态转换图 .......................................................................................... 185 3-17. SpinTAC 位置移动接口 .................................................................................................. 186 3-18. SpinTAC 位置移动状态转换图 .......................................................................................... 188 3-19. SpinTAC 位置规划接口 .................................................................................................. 189 4-1. 示例 ACIM 电机数据表 ................................................................................................... 218 5-1. InstaSPIN 中的 USER_MOTOR_MAX_CURRENT .................................................................. 225 5-2. 通过 3.3V 输入生成 1.65V 基准电压电路示例......................................................................... 228 5-3. 典型差分放大器电路 ...................................................................................................... 228 10 附图目录 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 5-4. 计算电阻值电路 ........................................................................................................... 229 5-5. 正反馈 ...................................................................................................................... 229 5-6. 负反馈 ...................................................................................................................... 230 5-7. 电压反馈电路 .............................................................................................................. 231 5-8. 电压反馈电路 .............................................................................................................. 233 5-9. 分流电阻器................................................................................................................. 234 5-10. 死区时间配置 .............................................................................................................. 235 5-11. 模拟连接 ................................................................................................................... 236 5-12. PWM 引脚配置 ............................................................................................................ 237 6-1. InstaSPIN 电机识别组成部分............................................................................................ 239 6-2. InstaSPIN-FOC 完整执行(仅限 F2805xF、F2805xM、F2806xF 和 F2806xM 器件)......................... 240 6-3. InstaSPIN-FOC 最小执行(F2802xF、F2805xF、F2805xM、F2806xF 和 F2806xM 器件) ................. 241 6-4. 控制器 (CTRL) 状态图.................................................................................................... 242 6-5. 估算器 (EST) 状态图 ..................................................................................................... 244 6-6. 控制器和估算器状态图 - 关系图......................................................................................... 246 6-7. EST 状态图中的 PMSM 和 ACIM 状态................................................................................. 247 6-8. PMSM 完全识别 - CTRL 和 EST 状态顺序............................................................................ 252 6-9. 偏移校准后的 CCStudio 观察窗口 ...................................................................................... 253 6-10. 采用 50% PWM 占空比进行偏移计算 .................................................................................. 254 6-11. RoverL EST 状态 ......................................................................................................... 254 6-12. 用于测量 RoverL EST 状态的注入电流 ................................................................................ 256 6-13. 用于设置电流控制器 Kp 和 Ki 初始增益的内部代码 .................................................................. 257 6-14. Rs EST 状态............................................................................................................... 258 6-15. Rs 识别 EST 状态期间的相电流 ........................................................................................ 260 6-16. 斜升 EST 状态............................................................................................................. 261 6-17. 斜升时间 ................................................................................................................... 262 6-18. 斜升 EST 状态期间的相电流 ............................................................................................ 262 6-19. 不同加速度和最终速度下的斜升时间 ................................................................................... 263 6-20. PMSM 额定磁通 EST 状态 .............................................................................................. 263 6-21. 额定磁通 EST 状态期间的相电流 ....................................................................................... 264 6-22. 定子电感 EST 状态 ....................................................................................................... 265 6-23. Ls 识别时的注入电流 ..................................................................................................... 266 6-24. Ls 识别时的电流斜坡 ..................................................................................................... 267 6-25. EST 状态图中的完整 PMSM 电机识别过程 ........................................................................... 268 6-26. 完整 PMSM 电机识别过程的相电流测量............................................................................... 269 6-27. ACIM 完全识别 - CTRL 和 EST 状态顺序 ............................................................................. 270 6-28. 斜升 EST 状态............................................................................................................. 271 6-29. ACIM 斜升加速度示波器图 .............................................................................................. 272 6-30. ACIM Id 额定电流 EST 状态............................................................................................. 272 6-31. Id 额定电流 EST 状态期间的相电流示波器图 ......................................................................... 273 6-32. Id 额定电流测量期间的相电流振荡 ..................................................................................... 274 6-33. Id 额定电流测量期间减少相电流振荡................................................................................... 275 6-34. ACIM 额定磁通 EST 状态................................................................................................ 276 6-35. Id 额定电流 EST 状态期间的相电流 .................................................................................... 276 6-36. ACIM 斜降 EST 状态 ..................................................................................................... 277 6-37. 进入锁定转子状态前斜降 ACIM 相电流 ................................................................................ 278 6-38. ACIM 锁定转子 EST 状态................................................................................................ 278 6-39. ACIM 定子电感 EST 状态................................................................................................ 279 6-40. 定子电感 EST 状态下的 ACIM 电流 .................................................................................... 280 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 附图目录 11 www.ti.com.cn 6-41. 转子电阻 EST 状态 ....................................................................................................... 280 6-42. Rr 识别时的注入电流 ..................................................................................................... 281 6-43. Rr 完成后的 ACIM 斜降 EST 状态...................................................................................... 282 6-44. Rr 和斜降期间的 ACIM 电流............................................................................................. 282 6-45. EST 状态图中的完整 ACIM 电机识别过程............................................................................. 283 6-46. 完整 ACIM 电机识别过程的相电流...................................................................................... 284 6-47. PMSM 和 ACIM 重校准 - CTRL 和 EST 状态顺序 ................................................................... 285 6-48. 电机重校准 EST 状态..................................................................................................... 286 6-49. 偏移重校准期间的相电流................................................................................................. 287 6-50. Rs 重校准期间的相电流时序图.......................................................................................... 289 6-51. 从 EST Rs 状态转换到在线状态 ........................................................................................ 290 6-52. 从 EST Rs 状态转换到在线状态时的相电流........................................................................... 290 6-53. 从 EST 空闲状态转换到在线状态 ....................................................................................... 291 6-54. 从 EST 空闲状态转换到在线时的相电流 ............................................................................... 291 6-55. 完整重校准时序 ........................................................................................................... 292 6-56. 示例 PMSM 电机数据表.................................................................................................. 294 6-57. 根据发电机模式下的电机相电压确定电机磁通 ........................................................................ 296 6-58. 不同加速度下的斜升时间................................................................................................. 299 6-59. PMSM 斜升加速度 ........................................................................................................ 299 7-1. 简单运动系统中的惯性识别示例 ........................................................................................ 303 7-2. 100 次惯性识别试验柱状图 .............................................................................................. 304 7-3. SpinTAC 速度控制器惯性容差 .......................................................................................... 305 7-4. SpinTAC 速度识别过程流程图 .......................................................................................... 306 7-5. SpinTAC 速度识别转矩基准 ............................................................................................. 307 7-6. SpinTAC 速度识别速度反馈 ............................................................................................. 307 7-7. 自动泵惯性识别的速度反馈 .............................................................................................. 312 7-8. 直接驱动型洗衣机惯性识别的速度反馈 ................................................................................ 313 7-9. 直接驱动型洗衣机惯性识别的直流总线电压 ........................................................................... 314 7-10. 压缩机惯性识别的速度反馈 .............................................................................................. 315 8-1. ROM 中的 InstaSPIN-FOC 完全执行................................................................................... 319 8-2. ROM 中的 InstaSPIN-FOC 最小执行................................................................................... 320 8-3. ROM 中的 InstaSPIN-MOTION ......................................................................................... 321 8-4. InstaSPIN 软件执行时钟树 .............................................................................................. 323 8-5. 主 ISR 中的函数调用 ..................................................................................................... 325 8-6. 为 InstaSPIN-FOC 和 SpinTAC 库分配的 F2806x 和 F2806xM 内存.............................................. 326 8-7. 为 InstaSPIN-FOC 和 SpinTAC 库分配的 F2805x 和 F2805xM 内存.............................................. 327 8-8. 为 InstaSPIN-FOC 库分配的 F2802xF 内存........................................................................... 327 8-9. SpinTAC 速度规划示例 .................................................................................................. 344 8-10. 电流信号通过单端连接直接传输到 PGA ............................................................................... 352 8-11. 使用外部差分放大器反馈相电流 ........................................................................................ 353 8-12. 使用 AFE 的内置基准电压测量双极信号 ............................................................................... 354 9-1. 时钟时序 - 从 CPU 到生成 ISR.......................................................................................... 357 9-2. 软件执行时钟树 ........................................................................................................... 358 9-3. 实时调度节拍率 ........................................................................................................... 359 9-4. 节拍计数器流程图......................................................................................................... 359 9-5. InstaSPIN 时序 ............................................................................................................ 360 9-6. InstaSPIN 时序软件执行时钟树 ......................................................................................... 360 9-7. InstaSPIN 完成执行且没有发生 ISR 溢出.............................................................................. 361 9-8. InstaSPIN 时序软件执行时钟树 - 无 ISR 溢出 ........................................................................ 361 12 附图目录 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 9-9. 较高 PWM 频率时的 InstaSPIN 时序................................................................................... 361 9-10. 未执行抽取时的中断溢出时序 ........................................................................................... 362 9-11. 未执行抽取时的中断溢出软件执行时钟树.............................................................................. 362 9-12. 执行抽取时的中断溢出时序 .............................................................................................. 363 9-13. 执行抽取时的中断溢出软件执行时钟树 ................................................................................ 363 9-14. ISR 频率波形 .............................................................................................................. 364 9-15. ISR 波形的软件执行时钟树 .............................................................................................. 364 9-16. 节拍率时序................................................................................................................. 365 9-17. 节拍率软件执行时钟树 ................................................................................................... 365 9-18. FAST 估算器节拍率时序 ................................................................................................. 366 9-19. FAST 估算器节拍率软件执行时钟树 ................................................................................... 366 9-20. 节拍率时序................................................................................................................. 367 9-21. 节拍率软件执行时钟树 ................................................................................................... 367 9-22. CTRL vs. EST 时序 - 节拍率 = 2 ....................................................................................... 368 9-23. CTRL vs. EST 软件执行时钟树 - 节拍率 = 2 .......................................................................... 368 9-24. CTRL vs. EST 时序 - 节拍率 = 3 ....................................................................................... 369 9-25. CTRL vs. EST 软件执行时钟树 - 节拍率 = 3 .......................................................................... 369 9-26. ISR vs. CTRL 时序 - 节拍率 = 2 ........................................................................................ 370 9-27. ISR vs. CTRL 软件执行时钟树 - 节拍率 = 2........................................................................... 370 9-28. 速度控制器时序 - 节拍率 = 10........................................................................................... 371 9-29. 速度控制器软件执行时钟树 - 节拍率 = 10 ............................................................................. 371 9-30. CTRL vs TRAJ 节拍率时序 .............................................................................................. 372 9-31. CTRL vs TRAJ 节拍率软件执行时钟树 ................................................................................ 372 9-32. 所有节拍率和相关性时序................................................................................................. 373 9-33. 所有节拍率和相关性软件执行时钟树 ................................................................................... 373 9-34. 硬件抽取软件执行时钟树................................................................................................. 374 9-35. SOC 事件时序............................................................................................................. 374 9-36. SOC 事件软件执行时钟树 ............................................................................................... 375 9-37. 每两个 PWM 周期触发 PWM 转换的时序 ............................................................................. 376 9-38. 每两个 PWM 周期触发 PWM 转换的软件执行时钟树 ................................................................ 376 9-39. 每三个 PWM 周期触发 PWM 转换的时序 ............................................................................. 377 9-40. 每三个 PWM 周期触发 PWM 转换的软件执行时钟树 ................................................................ 377 10-1. 同时启用偏移和 Rs 重校准功能的启动 ................................................................................. 379 10-2. 各个状态的电流和输出电压 .............................................................................................. 379 10-3. 仅启用偏移重校准时的启动 .............................................................................................. 380 10-4. 偏移状态电流和输出电压................................................................................................. 381 10-5. 启用 Rs 重校准时的启动 ................................................................................................. 382 10-6. Rs 重校准电流和输出电压 ............................................................................................... 382 10-7. 不启用任何重校准时的启动 .............................................................................................. 383 10-8. 不考虑 Rs 重校准时的电流和输出电压 ................................................................................. 384 11-1. 当时使用比例积分微分 (PID) 控制系统改装后的新墨西哥号战舰 ................................................... 387 11-2. 并联拓扑结构 .............................................................................................................. 388 11-3. 串联拓扑结构 .............................................................................................................. 389 11-4. 频率响应 ................................................................................................................... 390 11-5. 电流控制器中的 PI 控制器 ............................................................................................... 390 11-6. 级联速度控制环路......................................................................................................... 393 11-7. 波特图 ...................................................................................................................... 395 11-8. 速度控制器开环幅度和相位响应是 δ 的函数........................................................................... 397 11-9. 速度控制器闭环带宽为 δ 的函数 ........................................................................................ 398 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 附图目录 13 www.ti.com.cn 11-10. 速度控制器阶跃响应为 δ 的函数 ........................................................................................ 399 11-11. 以上示例中的速度控制器设计模拟阶跃响应 ........................................................................... 401 11-12. 含经过滤波的速度反馈的速度控制器 ................................................................................... 401 11-13. 含可变阻尼和极点配置的系统阶跃响应 ................................................................................ 403 11-14. 采用静态积分器钳位的 PI 控制器 ....................................................................................... 404 11-15. 采用动态积分器钳位的 PI 控制器 ....................................................................................... 404 11-16. 积分器钳位技术示例比较................................................................................................. 405 11-17. 平均电机转矩读数......................................................................................................... 406 11-18. PMSM 的典型 FOC 速度控制 ........................................................................................... 406 11-19. PMSM 的去耦合 PI 控制器 .............................................................................................. 408 11-20. 模拟电流稳压器去耦合有效性 ........................................................................................... 409 11-21. ACIM 轴去耦合所使用的补偿模块 ...................................................................................... 410 11-22. 适用于 PMSM 的数字磁场定向控制系统............................................................................... 411 11-23. 采样和保持的幅度和相位曲线 ........................................................................................... 412 11-24. 粘滞阻尼 (kv) 对负载波特图的影响 ..................................................................................... 413 11-25. 典型数字积分器实现 ...................................................................................................... 414 12-1. 稳定系统和不稳定系统的典型阶跃响应 ................................................................................ 416 12-2. 典型的 SpinTAC 速度控制开环波特图 ................................................................................. 417 12-3. 典型的 SpinTAC 位置控制开环波特图 ................................................................................. 418 12-4. 典型的 SpinTAC 速度控制性能波特图 ................................................................................. 419 12-5. 典型的 SpinTAC 位置控制性能波特图 ................................................................................. 419 12-6. SpinTAC 速度控制的带宽比较 .......................................................................................... 421 12-7. SpinTAC 位置控制的带宽比较 .......................................................................................... 422 12-8. 施加转矩干扰的速度调整比较 ........................................................................................... 426 12-9. 移除转矩干扰的速度调整比较 ........................................................................................... 427 12-10. 系统配置跟踪的速度调整比较 ........................................................................................... 428 12-11. 施加转矩干扰时的 PI 和 SpinTAC 速度控制比较 ..................................................................... 430 12-12. 移除转矩干扰时的 PI 和 SpinTAC 速度控制比较 ..................................................................... 431 12-13. PI 和 SpinTAC 中前馈对速度系统配置跟踪的影响比较 .............................................................. 432 12-14. 抗扰期间 PI 和 SpinTAC 速度控制的积分器饱和比较................................................................ 433 12-15. PI 和 SpinTAC 速度控制的阶跃响应比较 .............................................................................. 434 12-16. 施加转矩干扰的位置调整比较 ........................................................................................... 438 12-17. 移除转矩干扰的位置调整比较 ........................................................................................... 439 12-18. 系统配置跟踪的位置调整比较 ........................................................................................... 440 12-19. 施加转矩干扰时的 PI 和 SpinTAC 位置控制比较 ..................................................................... 442 12-20. 移除转矩干扰时的 PI 和 SpinTAC 位置控制比较 ..................................................................... 443 12-21. PI 和 SpinTAC 中前馈对位置系统配置跟踪的影响比较 .............................................................. 444 12-22. PI 和 SpinTAC 低速位置系统配置跟踪的比较......................................................................... 445 12-23. PI 和 SpinTAC 位置控制的阶跃响应比较 .............................................................................. 446 13-1. 对比 SpinTAC 位置移动所提供的曲线 ................................................................................. 448 13-2. 急动对 Iq 参考电流的影响 ............................................................................................... 449 13-3. 洗衣机搅动示例的状态转换图 ........................................................................................... 457 13-4. 车库门示例的状态转换图................................................................................................. 458 13-5. 洗衣机示例的状态转换图................................................................................................. 459 13-6. 洗衣机示例中的速度曲线................................................................................................. 460 13-7. 自动售货机示例的状态转换图 ........................................................................................... 461 14-1. 测试装置照片 .............................................................................................................. 476 14-2. 高压套件的电压反馈电路 (TMDSHVMTRPFCKIT) ................................................................... 478 14-3. 4Hz,无负载至满载瞬态图 .............................................................................................. 480 14 附图目录 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 14-4. 磁通量图 ................................................................................................................... 481 14-5. 角度图 ...................................................................................................................... 481 14-6. 放大的角度图 - 电机负载................................................................................................. 482 14-7. 放大的角度图 - 移除负载................................................................................................. 482 14-8. 速度图 ...................................................................................................................... 483 14-9. 转矩图 ...................................................................................................................... 483 14-10. Iq 电流图 ................................................................................................................... 484 14-11. 2Hz,无负载至满载瞬态图 .............................................................................................. 484 14-12. 磁通量图 ................................................................................................................... 485 14-13. 角度图 ...................................................................................................................... 485 14-14. 放大的角度图 - 电机负载增加 ........................................................................................... 486 14-15. 放大的角度图 - 电机负载减少 ........................................................................................... 486 14-16. 速度图 ...................................................................................................................... 487 14-17. 转矩图 ...................................................................................................................... 487 14-18. Iq 电流图 ................................................................................................................... 488 14-19. 满载情况下从 -4 至 +4Hz 图............................................................................................. 489 14-20. 磁通量图 ................................................................................................................... 489 14-21. 角度图 ...................................................................................................................... 490 14-22. 放大的角度图 .............................................................................................................. 490 14-23. 速度图 ...................................................................................................................... 491 14-24. 转矩图 ...................................................................................................................... 491 14-25. Iq 电流图 ................................................................................................................... 492 14-26. 满载情况下从 -2 至 +2 Hz 图 ............................................................................................ 492 14-27. 磁通量图 ................................................................................................................... 493 14-28. 角度图 ...................................................................................................................... 493 14-29. 放大的角度图 .............................................................................................................. 494 14-30. 速度图 ...................................................................................................................... 494 14-31. 转矩图 ...................................................................................................................... 495 14-32. Iq 电流图 ................................................................................................................... 495 14-33. 启用强制角................................................................................................................. 496 14-34. 满载情况下从静止至 4Hz 图 ............................................................................................. 497 14-35. 速度控制器周期 ........................................................................................................... 497 14-36. 磁通量图 ................................................................................................................... 498 14-37. 角度图 ...................................................................................................................... 498 14-38. 放大的角度图 .............................................................................................................. 499 14-39. 速度图 ...................................................................................................................... 499 14-40. 转矩图 ...................................................................................................................... 500 14-41. Iq 电流图 ................................................................................................................... 500 14-42. 满载情况下从静止至 2Hz 图 ............................................................................................. 501 14-43. 磁通量图 ................................................................................................................... 501 14-44. 角度图 ...................................................................................................................... 502 14-45. 放大的角度图 .............................................................................................................. 502 14-46. 速度图 ...................................................................................................................... 503 14-47. 转矩图 ...................................................................................................................... 503 14-48. Iq 电流图 ................................................................................................................... 504 14-49. 无需对准时的快速加速图................................................................................................. 506 14-50. 磁通量图 ................................................................................................................... 506 14-51. 角度图 ...................................................................................................................... 507 14-52. 放大的角度图 .............................................................................................................. 507 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 附图目录 15 www.ti.com.cn 14-53. 速度图 ...................................................................................................................... 508 14-54. 转矩图 ...................................................................................................................... 508 14-55. Iq 电流图 ................................................................................................................... 509 14-56. 需要电机对准时满载最快速度启动电机的图例 ........................................................................ 510 14-57. 放大的电流图 .............................................................................................................. 511 14-58. 磁通量图 ................................................................................................................... 512 14-59. 角度图 ...................................................................................................................... 512 14-60. 放大的角度图 .............................................................................................................. 513 14-61. 速度图 ...................................................................................................................... 513 14-62. 转矩图 ...................................................................................................................... 514 14-63. Iq 电流图 ................................................................................................................... 514 14-64. 过载和电机过热图......................................................................................................... 515 14-65. 放大的过载和电机过热图................................................................................................. 515 14-66. 定子电阻图................................................................................................................. 516 14-67. 磁通量图 ................................................................................................................... 516 14-68. 角度图 ...................................................................................................................... 517 14-69. 放大的角度图 .............................................................................................................. 517 14-70. 速度图 ...................................................................................................................... 518 14-71. 转矩图 ...................................................................................................................... 518 14-72. Iq 电流图 ................................................................................................................... 519 15-1. FAST 估算器 - Rs 在线特性突出显示 .................................................................................. 520 15-2. Rs 在线重校准............................................................................................................. 522 15-3. 轻负载下的相位电流 - 禁用 Rs 在线重校准............................................................................ 523 15-4. 轻负载下的相位电流 - 启用 Rs 在线重校准............................................................................ 523 15-5. 存在机械负载时的相位电流 - 禁用 Rs 在线重校准.................................................................... 523 15-6. 存在机械负载时的相位电流 - 启用 Rs 在线重校准.................................................................... 524 15-7. Rs 在线和 Rs 离线重校准流程图........................................................................................ 525 15-8. 针对 Rs 在线重校准添加 0.25A 电流的结果 ........................................................................... 529 15-9. 针对 Rs 在线重校准增加负载的结果.................................................................................... 530 15-10. 启用 Rs 在线重校准时的最大电流 ...................................................................................... 531 15-11. 电机电流 2.2A 与 5% Rs 在线电流 ..................................................................................... 531 15-12. 频率等于慢速转角频率时的电流波形变化.............................................................................. 533 15-13. RsOnLine_Angle_Delta_pu 的结果..................................................................................... 534 15-14. 初始值差异的电阻响应 ................................................................................................... 535 15-15. 增量值更改为默认值的两倍 .............................................................................................. 535 15-16. 随截止频率变化的 Rs 在线电阻值 ...................................................................................... 536 16-1. 采用 PowerWarp 的 FAST 估算器...................................................................................... 540 16-2. InstaSPIN 控制器流程图 - 在闭环中执行 PowerWarp................................................................ 541 16-3. FAST 估算器状态机流程图 - 在闭环中执行 PowerWarp............................................................. 542 16-4. PowerWarp 提升电机效率 ............................................................................................... 544 16-5. 启用 PowerWarp 时电流下降............................................................................................ 544 16-6. 禁用 PowerWarp 时的电流斜率 ......................................................................................... 545 16-7. 启用 PowerWarp 算法与 TRIAC 控制感应电机 ....................................................................... 546 16-8. 启用 PowerWarp 时的 InstaSPIN-FOC 与 禁用 PowerWarp 时的 InstaSPIN-FOC .............................. 547 17-1. 通过计数器采样的典型 SVM 波形 ...................................................................................... 549 17-2. 逆变器单分流电流测量电路 .............................................................................................. 550 17-3. 采样时间足够长时的单分流电流测量技术.............................................................................. 550 17-4. SVM 和不允许测量电流的区域 .......................................................................................... 551 17-5. 电流采样窗口消失时的示例 .............................................................................................. 551 16 附图目录 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 17-6. 通过 PWM 相移获得足够大的电流测量窗口 ........................................................................... 552 17-7. 逆变器双分流电流测量电路 .............................................................................................. 552 17-8. 使用双分流测量技术时的电流采样...................................................................................... 553 17-9. 逆变器三分流电流测量电路 .............................................................................................. 554 17-10. 使用三分流采样技术 ...................................................................................................... 554 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 附图目录 17 www.ti.com.cn 附表目录 1-1. FAST 估算器与 典型解决方案对比 ....................................................................................... 26 1-2. InstaSPIN-MOTION 应用示例 ............................................................................................ 30 3-1. 用户代码头文件 ........................................................................................................... 167 3-2. SpinTAC 版本结构 ........................................................................................................ 167 3-3. SpinTAC 结构名称 ........................................................................................................ 168 3-4. SpinTAC 变量 ............................................................................................................. 169 3-5. SpinTAC 速度控制接口参数 ............................................................................................. 171 3-6. SpinTAC 速度控制状态转换 ............................................................................................. 172 3-7. SpinTAC 速度移动接口 .................................................................................................. 173 3-8. SpinTAC 速度移动状态转换 ............................................................................................. 175 3-9. SpinTAC 速度规划接口 .................................................................................................. 176 3-10. SpinTAC 速度规划状态转换 ............................................................................................. 177 3-11. SpinTAC 速度规划附加函数 ............................................................................................. 178 3-12. SpinTAC 速度识别接口和参数 .......................................................................................... 179 3-13. SpinTAC 速度识别状态转换 ............................................................................................. 180 3-14. SpinTAC 位置转换接口和参数 .......................................................................................... 181 3-15. SpinTAC 位置转换状态转换 ............................................................................................. 183 3-16. SpinTAC 位置控制接口参数 ............................................................................................. 184 3-17. SpinTAC 位置控制状态转换 ............................................................................................. 185 3-18. SpinTAC 位置移动接口 .................................................................................................. 186 3-19. 位置移动状态转换......................................................................................................... 188 3-20. SpinTAC 位置规划接口 .................................................................................................. 190 3-21. SpinTAC 位置规划状态转换 ............................................................................................. 191 3-22. SpinTAC 位置规划附加函数 ............................................................................................. 191 4-1. user.h 中的 ACIM 电机参数 ............................................................................................. 218 5-1. hal.c 配置 PLL............................................................................................................. 226 5-2. 最大 SVM 输入范围....................................................................................................... 227 6-1. 控制器 (CTRL) 状态 ...................................................................................................... 242 6-2. 控制器 (CTRL) 状态图的状态转换 ...................................................................................... 242 6-3. 估算器 (EST) 状态 ........................................................................................................ 244 6-4. 估算器 (EST) 状态图的状态转换 ........................................................................................ 245 6-5. PMSM 和 ACIM EST 状态列表 ......................................................................................... 247 6-6. user.h 中的 PMSM 电机参数 ............................................................................................ 293 7-1. SpinTAC 速度识别错误代码 ............................................................................................. 310 8-1. 支持 InstaSPIN 的器件 ................................................................................................... 317 8-2. 为 InstaSPIN-FOC 库分配的内存 ....................................................................................... 326 8-3. ROM 表地址 ............................................................................................................... 326 8-4. InstaSPIN-FOC 占用的 F2806xF 和 F2805xF 器件内存总量 ....................................................... 328 8-5. InstaSPIN-FOC 占用的 F2802xF 器件内存总量 ...................................................................... 328 8-6. 针对 SpinTAC 组成部分的代码尺寸和 RAM 用量 .................................................................... 328 8-7. SpinTAC 组成部分 + InstaSPIN-FOC 的堆栈利用率 ................................................................. 329 8-8. CPU 执行时间等待状态(F2806xF 和 F2806xM 器件) ............................................................ 329 8-9. CPU 执行时间等待状态(F2805xF 和 F2805xM 器件) ............................................................ 329 8-10. CPU 执行时间等待状态(F2802xF 器件) ............................................................................ 329 8-11. 在 RAM 中进行完全执行的内存用量.................................................................................... 331 8-12. 在 RAM 中进行完全执行 ................................................................................................. 332 8-13. 在 RAM 中进行最小执行的内存用量.................................................................................... 332 18 附表目录 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 8-14. 在 RAM 中进行最小执行 ................................................................................................. 332 8-15. 在闪存中进行完全执行的内存用量...................................................................................... 333 8-16. 在闪存中进行完全执行 ................................................................................................... 333 8-17. 在闪存中进行最小执行的内存用量...................................................................................... 334 8-18. 在闪存中进行最小执行 ................................................................................................... 334 8-19. 在 ROM 和闪存中进行完全执行......................................................................................... 335 8-20. 在 ROM 和闪存中进行最小执行......................................................................................... 336 8-21. 在 ROM 和闪存中进行完全执行......................................................................................... 336 8-22. 在 ROM 和闪存中进行最小执行......................................................................................... 337 8-23. F2806xM 器件在 RAM 中执行库时 SpinTAC 的 CPU 周期利用率 ................................................. 339 8-24. F2806xM 器件在闪存中执行库时 SpinTAC 的 CPU 周期利用率 ................................................... 340 8-25. 在 ROM 和闪存中进行完全执行......................................................................................... 346 8-26. 在 ROM 和闪存中进行完全执行......................................................................................... 347 8-27. F2805xM 器件在闪存中执行库时 SpinTAC 的 CPU 周期利用率 ................................................... 347 8-28. 在闪存中进行最小执行的内存用量...................................................................................... 349 8-29. 在闪存中进行最小执行 ................................................................................................... 349 8-30. 在 ROM、RAM 和闪存中进行最小执行 ................................................................................ 350 8-31. 在 ROM、RAM 和闪存中进行最小执行 ................................................................................ 350 8-32. 每个电机的引脚利用率 ................................................................................................... 351 12-1. 时域常见标准 .............................................................................................................. 420 12-2. SpinTAC 速度控制 ERR_ID 代码 ....................................................................................... 424 12-3. SpinTAC 位置控制 ERR_ID 代码 ....................................................................................... 436 12-4. InstaSPIN-MOTION 位置控制优势 ..................................................................................... 441 13-1. SpinTAC 速度移动 ERR_ID 代码 ....................................................................................... 451 13-2. SpinTAC 位置移动 ERR_ID 代码 ....................................................................................... 454 13-3. SpinTAC 速度规划元素的内存要求 ..................................................................................... 456 13-4. SpinTAC 速度规划 ERR_ID ............................................................................................. 465 13-5. SpinTAC 速度规划 ERR_code .......................................................................................... 466 13-6. SpinTAC 位置规划 ERR_ID ............................................................................................. 472 13-7. SpinTAC 位置规划 ERR_code .......................................................................................... 473 15-1. 温度传感器实现值......................................................................................................... 538 17-1. 八种 SVM 开关状态....................................................................................................... 550 17-2. TI 开发套件的电流和电压额定值 ........................................................................................ 554 17-3. 针对相应检测电阻器数量的推荐运算放大器转换率 ................................................................... 555 18-1. 将正交编码器连接到 eQEP 模块所需的引脚 .......................................................................... 557 18-2. SpinTAC 位置转换 ERR_ID 代码 ....................................................................................... 560 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 附表目录 19 Chapter 1 ZHCU083F – January 2013 – Revised July 2014 简介 欢迎并感谢您选择德州仪器 (TI) InstaSPIN™ 解决方案。 本文档将提供 InstaSPIN 的详细技术信息,指导您 将此解决方案集成到应用中。 本文档的结构汇总如下: • 简介 – InstaSPIN-FOC™ 和 FAST™ – InstaSPIN-MOTION™ 和 SpinTAC™ • 利用 TI 硬件和软件直接运行电机 • 了解软件详细信息,从回顾 API 函数调用到状态图再到调整速度和位置控制环路 • 了解直接影响 InstaSPIN 性能的硬件部分。 上述提供的所有内容均有助于您使用 InstaSPIN-FOC 或 InstaSPIN-MOTION 软件开发出成功的产品。 各个 示例项目(实验)是取得成功的关键部分,专为本文档中的主题而设计。 它们不仅可以用于 InstaSPIN 实 验,还可用作设计参考。 有关最新的 InstaSPIN-FOC 和 InstaSPIN-MOTION 解决方案与设计资源,以及实 用视频,请参见 http://www.ti.com/instaspin。 有关本文档中使用的术语的定义,请参见本文档末尾的附录 A。 以下为最常用的术语: • FOC: – 磁场定向控制 • InstaSPIN-FOC: – 通过特定器件(FAST 观测器,FOC,速度和电流环路)上的 TI 片上 ROM 提供完整的无传感器 FOC 解决方案,无需使用任何机械转子传感器即可有效控制电机。 • FAST – 统一观测器结构,此结构充分利用那些使用磁通量进行能量转换的所有电机之间的相似性,自动识别 所需的电机参数并提供电机反馈信号:磁通、磁通角、电机转轴转速和转矩。 • SpinTAC 运动控制套件: – 包括一个高级速度和位置控制器,一个运动引擎,和一个运动序列规划器。 SpinTAC 抗扰速度控制 器主动估算且实时补偿系统干扰,从而提升总体产品性能。 SpinTAC 运动电机根据用户定义的参数 来计算理想基准信号(具有前馈)。 SpinTAC 支持标准工业曲线以及 LineStream 的专有“平滑轨迹” 曲线。 SpinTAC 运动序列规划器运行用户定义的状态转换图,从而轻松设计复杂运动序列。 • InstaSPIN-MOTION: – 一款无传感器或传感 FOC 综合解决方案,用于电机控制、运动控制、速度控制和位置控制。 此解决 方案以最高效率为运行在不同运动状态转换中的电机应用提供稳健耐用的系统性能。 InstaSPINMOTION 包含 FAST 统一软件观测器,可与 LineStream Technologies 公司的 SpinTA 运动控制套件 配套使用。 • MotorWare™ 软件: – TI 提供的电机控制可扩展软件架构,InstaSPIN-FOC 是其中一部分。 20 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC 和 InstaSPIN-MOTION 软件可在 TMS320F2806xF、TMS320F2086xM、TMS320F2802xF、TMS320F2805xF 和 TMS320F2805xM 器件系 列上使用,未来计划开发更多版本以便在更多器件上使用。 有关更多详细信息,请参见器件专用数据表和器 件专用技术参考手册 (TRM)。 InstaSPIN TRM 含有 TI 电机实验室测得的最新性能数据。 本文档(即 《InstaSPIN 用户指南》)的不同之处在于它是介绍“如何”在应用中使用 InstaSPIN-FOC 或 InstaSPINMOTION 的功能性指南。 无论您是使用 TI 提供的逆变器和电机,还是使用自己的逆变器和电机,本文档都可帮助您了解 TI 的这项功 能强大的新型解决方案。 Topic ........................................................................................................................... Page 1.1 InstaSPIN-FOC 和 FAST 概述 ............................................................................... 22 1.2 InstaSPIN-MOTION 和 SpinTAC 概述 ..................................................................... 29 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 21 InstaSPIN-FOC 和 FAST 概述 www.ti.com.cn 1.1 InstaSPIN-FOC 和 FAST 概述 TMS320F2806xF(69F、68F 和 62F — 80 或 100 引脚封装)、TMS320F2802xF(26F 和 27F — 48 引 脚封装)和 TMS320F2805xF(54F 和 52F — 80 引脚封装)是德州仪器 (TI) 首批包含级联速度和转矩环路 所需的 FAST (图 1-1) 评估器和其它电机控制功能的器件,可实现有效的三相磁场定向电机控制 (FOC)。 它们与 F2806xF、F2805xF 和 F2802xF 外设驱动程序一起可构成一个无传感器(也称为自感) InstaSPINFOC 解决方案,此解决方案能够识别、调整转矩控制器,并能在几分钟内有效控制电机,而且无需使用任 何机械转子传感器。 整个软件包被称为 InstaSPIN-FOC,在 ROM 中提供。 对于 F2806xF 器件,ROM 中 包含 FAST 估算器和 FOC 块;对于 F2802xF 器件,ROM 中仅包含 FAST 估算器;而对于 F2805xF 器 件,ROM 中包含 FAST 估算器和 FOC 块。 对于 F2806xF 器件,用户还可以选择在用户存储器(闪存或 RAM)中执行所有 FOC 功能,这需要调用 ROM 中的专有 FAST 估算器固件。 对于 F2805xF 器件,用户 还可以选择在用户存储器(闪存或 RAM)中执行所有 FOC 功能,这需要调用 ROM 中的专有 FAST 估算器 固件。 对于 F2802xF 器件,所有 FOC 块均通过用户存储器(闪存或 RAM)加载和执行,而估算器则通过 ROM 运行。InstaSPIN-FOC 的设计可以灵活适应广泛的系统软件架构。 这种灵活性的范围如图 1-2 和 图 1-3 所示。 Flux Angle Speed Torque a T EST_run \a a Irated a T \a IH_in Motor Phase IJ_in Currents Za Za &^d¡š]uš}Œ VH_in Flux, Angle, Speed, Torque Motor Phase aW aW Motor Parameters ID VJ_in Voltages Vbus Bus Voltage ROM a Rs Rar a Lsd aLsq \a rated a Irated Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 1-1. FAST - 估算磁通、角度、转速、转矩 - 自动电机识别 InstaSPIN, InstaSPIN-FOC, FAST, InstaSPIN-MOTION, MotorWare, PowerWarp, C2000, Piccolo, NexFET, Code Composer Studio, ControlSUITE are trademarks of Texas Instruments. SpinTAC is a trademark of LineStream Technologies. All other trademarks are the property of their respective owners. 22 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC 和 FAST 概述 1.1.1 FAST 估算器特性 • 充分利用所有使用磁通量进行能量转换的电机间的相似性的统一观测器结构 – 可实现同步电机(无刷直流 (BLDC),永磁同步电机 (SPM),内部永磁电机 (IPM)),和异步电 机(交流感应电机 (ACIM))控制 – 针对内部永磁电机的凸极补偿:观测器在 Ls-d 和 Ls-q 被提供时正确跟踪转子磁通和角度 • 用于控制系统中的独特、高质量反馈信号 – 用于稳定磁通监视和场强减弱的高质量 磁通信号 – 与独立于 ACIM 全部转子参数的传统观测器技术相比,在更宽的速度范围内具有出色的转子磁通角估 算精度 – 实时低噪声电机转轴 速度信号 – 针对负载监视和失衡检测的准确高带宽 转矩信号 • 角度估算器在施加的波形的第一个周期内收敛,与速度无关。 • 在全部功率象限内稳定运行,其中包括发电机象限 • 满转矩时,在低于 1Hz(典型值)的稳定状态速度下可准确估算角度 • 即使在经过零速度的低速反向期间也能保持角度完整性 • 在停转情况下保持角度完整性,从而实现平滑的停转恢复 • 电机识别过程可在 2 分钟(典型值)内测量空载电机所需的电机参数 • “高速数据传输错误纠正 (On-the-fly)”定子电阻重校准(在线 Rs)实时跟踪定子电阻变化,从而实现温度 范围内的稳定运行。 这个特性也可被用作电机绕组的温度传感器(需要基点校准)。 • 大大优于传统观测器的转子磁通角度跟踪的瞬态响应 • PowerWarp™ 自适应减少流耗以最大限度地降低组合(转子和定子)铜损耗,而不会影响 ACIM 输出功 率级。 1.1.2 InstaSPIN-FOC 解决方案特性 • 包括测量无传感器 FOC 系统中转子磁通(幅度和角度)的 FAST 估算器 • 自动转矩(电流)环路调整,具有用户调节选项 • 自动配置速度环增益(Kp 和 Ki)可为绝大多数应用提供稳定运行,还可提供最优瞬态响应所需的用户调 节 • 自动或手工场强减弱和场强增强 • 总线电压补偿 • 自动偏移校准确保反馈信号的高质量采样样本 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 23 InstaSPIN-FOC 和 FAST 概述 1.1.3 InstaSPIN-FOC 方框图 Torque Mode User_SpdRef User_IqRef Traj Ramp Zref Za Speed PI Spdout User_IdRef + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out Id Iq PARK CTRL_run CTRL_setup Ta SVM Tb Tc Flux Angle Speed Torque a a T EST_run T \a a Irated a T \a IH_in Ia IJ_in CLARKE Ib Ic Za Za &^d¡š]uš}Œ VH_in Flux, Angle, Speed, Torque Va aW aW Motor Parameters ID VJ_in CLARKE Vb Vc Vbus ROM ROM a Rs a Rr a Lsd a Lsq \a rated a Irated voW}ÁŒtŒ‰¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 1-2. i. ROM 中整个 InstaSPIN-FOC 包的方框图(F2802xF 器件除外) www.ti.com.cn HAL_run PWM Driver FLASH/RAM HAL_acqAdcInt HAL_readAdcData ADC Driver FLASH/RAM 24 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC 和 FAST 概述 Torque Mode User_SpdRef User_IqRef User_IdRef Traj Ramp Zref Za Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out Id Iq PARK CTRL_run CTRL_setup Ta SVM Tb Tc HAL_run PWM Driver FLASH/RAM \a Flux a T Angle Za Speed aW Torque a Irated \a a a T EST_run T IH_in IJ_in Za &^d¡š]uš}Œ Flux, Angle, Speed, Torque aW Motor Parameters ID VH_in VJ_in FLASH/RAM Ia CLARKE Ib Ic Va CLARKE Vb Vc Vbus ROM a Rs Rar a Lsd aLsq \a rated a Irated Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 1-3. 用户内存中的 InstaSPIN-FOC 方框图,不包括 ROM 中的 FAST HAL_acqAdcInt HAL_readAdcData ADC Driver FLASH/RAM ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 25 InstaSPIN-FOC 和 FAST 概述 1.1.4 将 FAST 估算器与典型解决方案相比较 www.ti.com.cn 主题 电机参数 估算器调整 估算器准确度 启动 电流环路 反馈信号 电机类型 场强减弱 电机温度 速度估算 转矩估算 表 1-1. FAST 估算器与 典型解决方案对比 典型软件传感器和 FOC 解决方案 TI 的 Fast 估算器和 InstaSPIN-FOC 解决方案 基于电机模型的观测器在很大程度上取决 依赖更少的电机参数,电机的离线参数识别 – 无需数据表!定子 于电机参数 电阻的在线参数监视和重新估算 针对每个电机的转速/负载完成多次复杂的 无需估算器调整。 一旦识别了电机参数,在转速/转矩动态范围内 观测器调整 每次的运行方式都一样 角度跟踪性能通常只在频率超过 5-10Hz 时才令人满意,这是因为在更高速度时会 遇到问题,并且要对场强减弱进行补偿; 动态性能受到观测器手动调整的影响;电 机停转通常使观测器损毁 FAST 提供可靠的角度跟踪,此角度跟踪在施加波形的一个电周期 内收敛,并且能够在频率低于 1Hz 时进行跟踪(取决于模拟感应 的质量和分辨率)。角度跟踪展现出出色的瞬态响应(即使在突 发负载瞬变导致电机停转时也是如此,这样可以满转矩实现受控 重启)。 很难从零速启动或者无法从零速启动。零 速时的观测器反馈是不稳定的,这将导致 较差的转子角度精度和速度反馈信号。 InstaSPIN-FOC 包括: • 具有强制角的零速度启动 • 启动时 100% 转矩 • FAST 转子磁通角跟踪在一个电周期内收敛 FAST 在通过零速度时完全稳定,从而提供准确速度和角度估计。 调整 FOC 电流控制具有挑战性 - 对于新手 尤其如此 根据确定的参数自动设定电流控制器的初始调整。 如有需要,用 户可以更新增益或使用自己的控制器。完全调整观测器和转矩控 制器的识别过程所花费的时间少于 2 分钟 未管理系统偏移和漂移 FAST 包括硬件/软件自动校准和偏移补偿。FAST 需要 2 相电 流(针对 100% 和过调制时需要 3 相)、3 相电压来支持完全动 态性能,针对电流控制器纹波补偿还需要直流总线电压。FAST 包 括一个在线定子电阻跟踪算法 针对多个电机的多项技术:标准反电势、 滑动模式、凸极跟踪、感应磁通估算器, 或“混合模式”观测器 FAST 能够与全部 3 相电机类型、同步和异步电机配套使用,无 需考虑负载动态性能。 支持具有不同的 Ls-d 和 Ls-q 的凸极 IPM 电机。包括用于感应电机的 PowerWarp,可实现节能 场强减弱区域对于观测器具有挑战性 - 由 于反电势信号变得太强,跟踪性能和稳定 性会受到影响 凭借宽范围内磁通估算的稳定性,FAST 估算器支持场强减弱或场 强增强应用 角度跟踪性能随定子温度的变化而降低 在线定子电阻重校准可提升角度估算的准确性 不良的速度估算会导致 FOC 系统损失效率 并且动态运行的稳定性下降 高质量低噪声速度估算器,包括感应电机的转差率计算 通常需要转矩和振动传感器 高带宽电机转矩估算器 1.1.5 FAST 提供无传感器 FOC 性能 1.1.5.1 FAST 估算器取代机械传感器 电机磁场定向控制 (FOC) 可实现出色的转矩控制、更低的转矩纹波,相对于传统交流控制技术,这项技术在 很多情况下还可提升效率。 为了实现最佳动态响应,转子磁通基准控制算法更适用于定子磁通基准技术。 为了正确运行,这些系统需要知道相对于定子框(通常为相位 A 定子线圈的磁轴)上一个固定点的转子磁通 空间角。 传统上,这已经由安装在电机转轴上的机械传感器(例如,编码器或解算器)完成。 这些传感器 提供出色的角反馈,但是给系统设计带来很大负担。 如下面 3.5.4 节 中讨论且图示的那样,传感角反馈对 系统产生 6 个主要影响: 1. 传感器本身非常昂贵(一个优质解算器的价格通常超过 2500 美元,而大容量集成编码器的价格仅几美 元) 2. 安装传感器要求具有娴熟的组装技巧,这会增加劳动力成本 3. 传感器通常需要独立的电源,这会增加系统成本并降低稳定性 4. 传感器是系统中最精密的组件,它可影响系统稳定性,在恶劣环境应用中更是如此 5. 传感器反馈信号通过连接器接回至控制器电路板,这也会增加系统成本并大幅降低稳定性,具体取决于 所用的连接器类型。 6. 将传感器信号传回控制器所需的电缆对系统设计人员提出了多重挑战。 26 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC 和 FAST 概述 • 所用电缆产生额外成本,特别是当电机和控制器之间的距离较远时 • 对于噪声源的敏感性,具有特殊屏蔽层或双绞线的电缆会增加成本 • 出于安全考虑,传感器和相关电缆必须接地。 隔离这些信号通常需要增加额外成本,特别是在处理 传感器信号的处理器未接地的情况下 在电机处于封闭环境中的某些应用中(例如,压缩机),由于通过外壳接入馈线会增加成本,因此传感解决 方案并不实用。 由于这些原因,FOC 系统设计人员很愿意通过处理那些可在控制器电路板上获得的信号来 完全免除对传感器的需要,并且获得转子磁通角信息。 对于同步机器,大多数与执行电机软件模型相关的技 术受到控制,以估计反电势波形(转子磁通),然后对这些感测到的波形进行处理,以便提取转子转轴角的 估计值,并且推导出它的速度。 对于异步机器,过程有一些复杂,这是因为软件模型(观测器)还必须解决 存在于转子和转子磁通之间的转速差。 然而,在这两个情况下,由于反电势波形的振幅与电机速度直接成比例,性能在较低速时会受到影响(假定 无磁通减弱)。 由于反电势振幅下降至噪底,或者如果模数转换器 (ADC) 的分辨率不能如实地复制小型反 电势信号,那么信号估计失败,并且电机驱动性能受到影响。 为了解决低速问题,我们开发了依靠高频注入的新技术,以角度函数(即,磁凸极)的形式测量磁异,从而 实现低至零速的准确角度重建。 然而,这会引入另外一组控制问题。 首先,凸极信号对于异步电机是不存 在的,而且对于大多数同步机器来说,这个信号的值也很小(特别是那些具有表面贴装转子磁体的机器)。 对于那些表现出超强凸极信号的电机(例如,IPM 电机),信号经常相对于转子角发生偏移(以负载函数表 示),必须对此偏移进行补偿。 最后,这个角度测量技巧只在速度较低时起作用,此时,电机基频不会干扰 询问频率。 此控制系统必须创建一个混合控制策略,在低速时使用高频注入跟踪,然后在标称和高速时移动 进入基于反电势的观测器。 借助于任一技巧,产生一个稳定软件传感器的过程也是十分具有挑战性的,这是因为从本质上说,这个电机 模型(观测器)是其自己的控制系统,此控制系统需要在使用范围内根据每个电机进行调整。 这个调整必须 由一个稳定的正向控制环路完成。 所需的是一个稳定的转矩(通常为速度)环路来调整观测器,但是您如何 在不具有可用观测器的情况下预先调整您的正向控制呢? 一个选择就是使用一个用于反馈的机械传感器来创 建稳定电流和速度环路,然后调整与机械传感器并联的软件传感器。 然而,机械传感器的使用通常是不现实 的。 这一问题已经推迟了用于控制无传感器 FOC 的软件传感器的上市。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 27 InstaSPIN-FOC 和 FAST 概述 www.ti.com.cn Sensor Issues Texas Instruments Dave ¶ s Motor Control Center + V sensor - V sensor Sensor Power Supplies Sensor Connector Sensor Cabling Noise Susceptibility 图 1-4. 传感 FOC 系统 总之,这些现有的解决方案全都受到不同问题的影响,其中包括: • 较差的低速性能(反电势和滑模观测器 (SMO)) • 较差的高速性能(凸极观测器) • 不良的动态响应 • 计算强度(多模观测器) • 参数灵敏度 • 需要观测器调整 无传感器控制革命的最新创新是 InstaSPIN-FOC。 在嵌入在 TI 处理器内的片上 ROM 中提供 C 语言的可调 用库,InstaSPIN-FOC 被创建用来解决全部这些问题,以及更多问题。 它减少了系统成本和开发时间,同 时提升了三相可变速度电机系统的性能。 这主要通过将机械传感器替代为专有 FAST 估算器来实现。 FAST 是一款估算器,它能够: • 与所有三相电机高效协同工作,并将同步/异步、凸极/非凸极和永磁/非永磁/感应磁体之间的差异考虑在 内 • 对于多种应用,大幅提升了整个工作频率和负载范围内的性能和稳定性 • 解决了传统 FOC 系统的手工调整困难: – 观测器和估算器,完全免去了所需调整 – 电流环路稳压器,大大减少了所需调整 • 消除或减少了电机参数变化的影响 • 在少于 2 分钟的时间里,为大多数电机自动设计一个稳定且实用的控制系统。 28 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 1.1.5.2 对性能十分关键的转子角准确度 为什么很多使用机械传感器的应用需要转子磁通角的精确估算? 对于三相电机的高效控制,其目的是在定子上创建一个旋转磁通矢量,此定子与相对于转子的理想方向对 齐,这样,转子磁场在创建所需转矩并使用最少量电流的同时跟随定子磁场。 • 定子:电机上连接至由微控制器控制的逆变器的固定部分 • 理想方向:对于非凸极同步电机,为 90 度;对于凸极电机,略大于 90 度,而对于异步电机则略小于 90 度,因为电流矢量的一部分也被用来产生转子磁通 • 转子:电机的旋转部分,在转轴上产生工作转矩 为了实现这一目的,您需要从电机上获得以下信息: • 每相所耗电流 • 转子磁通磁场的精确相对角(通常在 ±3 度电角以内),以便能够正确定向定子磁场 • 对于速度环路,您还需要知道转子速度。 1.2 InstaSPIN-MOTION 和 SpinTAC 概述 InstaSPIN-MOTION [TMS320F2806xM(69M 和 68M — 80 引脚或 100 引脚封装)和 TMS320F2805xM(54M 和 52M — 80 引脚封装)] 是德州仪器 (TI) 的特色器件,首次将 TI 32 位 C2000™ Piccolo™ 微控制器与综合电机、运动、速度、和位置控制软件组合在一起。 InstaSPIN-MOTION 以最高效 率为运行在不同运动状态转换中的电机应用提供稳健耐用的速度和位置控制。 InstaSPIN-MOTION 是您自 己的单片运动控制专家。 InstaSPIN-MOTION 是一款无传感器或传感 FOC 解决方案,此解决方案能够在几分钟的时间内识别、调整 并且控制电机。 InstaSPIN-MOTION 具有 FAST 优质软件传感器和 SpinTAC 运动控制套件(图 1-5)。 核 心算法被嵌入到 TI 32 位 C2000 Piccolo 微控制器 (MCU) 上的只读存储器 (ROM) 内。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 29 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn User_ SpdRef InstaSPIN¡ -MOTION User_ SpdRef Torque Mode Velocity Mode Motion Sequence STVELPLAN _ run STVELMOVE _run ^‰]vd¡ Velocity ZZ.Z.. llSiimmP Plan ^‰]vd¡ Velocity Z. ref Z ref Move FLASH / RAM ROM STVELCTL _run ^‰]vd¡ Velocity Control ROM Za ^‰]vd¡D}š]}v Control Suite STVELID _ run ^‰]vd¡ Velocity Identify ROM User_ IdRef \a F lux a T A ngle Za S peed aW T orque Zref Traj Ramp Za User_ IqRef Speed PI Spdout + + Iq _ref Iq Iq PI Id_ ref Id Id PI Vq INV Vd PARK a T VH_ out VJ _out Id Iq PARK a a T EST_ run T a Irated IH_in \a IJ_ in Za &^d¡ Software Encoder VH_in Wa Rotor Flux Observer Motor Parameters ID VJ _in Vbus CTRL_ run CTRL_ setup Ta SVM Tb Tc FLASH / RAM Ia CLARKE Ib Ic Va CLARKE Vb Vc HAL_ run PWM Driver FLASH / RAM HAL_ acqAdcInt HAL_ readAdcData ADC Driver a Rs Rar a Lsd aLsq \a rated a I rated ROM Enable PowerWarp ¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type FLASH / RAM InstaSPIN¡ -FOC 图 1-5. InstaSPIN-MOTION = C2000 Piccolo 微控制器 + FAST 软件传感器(可选)+ 自动调整内部转矩控制器 + SpinTAC 运动控制套件 InstaSPIN-MOTION 十分适合于需要精确速度和位置控制,最小干扰的应用,或者要进行多状态变换或经历 动态速度或负载变化的应用。 表 1-2 提供将大大得益于 InstaSPIN-MOTION 的应用示例。 应用特性 精确的速度控制 精确的位置控制 最小干扰 表 1-2. InstaSPIN-MOTION 应用示例 示例 • 工业用风扇 • 传送带系统 • 升降机/自动扶梯 • 汽车车体部件(电动车窗、天窗等) • 光盘驱动器/硬盘驱动器 • 医用混合 • 监控系统 • 封装系统 • 医用机器人 • 平衡环系统 • 纺织/缝纫机器 • 牙科工具 • 电动工具 • 安全门 30 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 表 1-2. InstaSPIN-MOTION 应用示例 (continued) 应用特性 示例 进行多状态变换/动态变化 • HVAC 泵、风扇和风机 • 发电机 • 空调压缩机 • 洗衣机 • 运动器材 • 医用泵 1.2.1 InstaSPIN-MOTION 关键功能和优势 InstaSPIN-MOTION 用最大限度提高系统性能且尽可能减少设计工作的解决方案来取代低效率、之前的设计 技术。 通过嵌入与芯片相关的电机专业技术,InstaSPIN-MOTION 使得用户能够专注于优化他们的应用, 而不是纠结于运动控制。 InstaSPIN-MOTION 提供以下核心功能: • FAST 统一软件观测器,此观测器充分利用那些使用磁通量用于能量转换的所有电机之间的相似性。 FAST 估算器测量转子磁通(幅度,角度和速度)以及一个无传感器 FOC 系统中的转轴转矩。 • 电机参数识别,被用来调整 FAST 软件观测器,并且初始化针对 FOC 系统的 Iq 和 Id 控制的最内部电 流(转矩)PI 控制器。 • SpinTAC,LineStream Technologies 公司的综合性运动控制套件(请见图 1-6),简化了调整并且确保 动态速度和位置范围内的最优性能。 SpinTAC Plan SpinTAC Move SpinTAC Motion Control Suite SpinTAC Control SpinTAC Identify Iq Reference Motion System 图 1-6. SpinTAC 运动控制套件组件 1.2.1.1 FAST 统一软件观测器 FAST 统一观测器结构充分利用那些使用磁通量用于能量转换的所有电机之间的相似性: • 支持同步电机(BLDC、SPM、IPM)和异步电机 (ACIM) 控制。 • 针对内部永磁电机提供凸极补偿:在已提供 Ls-d 和 Ls-q 时观测器可正确跟踪转子磁通和角度。 FAST 为控制系统提供独特的高质量电机反馈信号: • 用于稳定磁通监视和场强减弱的高质量磁通信号。 • 与独立于 ACIM 全部转子参数的传统观测器技术相比,在更宽的速度范围内具有出色的转子磁通角估算 精度。 • 实时低噪声电机转轴速度信号。 • 针对负载监视和失衡检测的准确高带宽转矩信号。 FAST 可替代机械编码器和解算器,加快控制系统设计: • 施加波形第一个周期内的角度估算器收敛,与速度无关。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 31 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn • 全部功率象限内的稳定运行,其中包括发电机象限。 • 满转矩时,稳定状态速度下(典型值低于 1Hz)的准确角度估算。 • 即使在经历零速度的低速反向期间也可保持角度完整性。 • 停转情况下保持角度完整性,从而实现平稳的停转恢复。 • 电机识别可在 2 分钟(典型值)内测量空载电机所需的电机参数。 • 高速数据传输错误纠正 (On-the-fly) 定子电阻重校准(在线 Rs)实时跟踪定子电阻变化,从而实现温度 范围内的稳定运行。 这个特性也可被用作电机绕组的温度传感器(需要基点校准)。 • 大大优于传统观测器的转子磁通角度跟踪的瞬态响应。 • PowerWarp自适应减少流耗以最大限度地将组合(转子和定子)铜损耗降到最低,而不会影响 ACIM 输 出功率级。 1.2.1.2 SpinTAC 运动控制套件 SpinTAC 最大限度地减少您在定义电机旋转方式时所花费的时间,并且确保您的电机以最佳水平运转,从而 实现理想性能。 关键优势包括: • 经简化的调整 - 使用单个可轻松评估的参数即在整个位置和速度运行范围内调整系统。 • 直观轨迹规划 - 轻松设计和执行复杂运动序列。 • 机械可靠运动 - 根据您系统的机械限制来优化速度转换。 • 理想控制 - 基于 LineStream 公司已获专利的主动抗扰控制,受益于市面上最准确的速度和位置控制。 在 SpinTAC 运动控制套件中包含四个组成部分:Identify(识别),Control(控制),Move(移动)和 Plan(规划)。 这些组成部分中的每一个都用于速度和位置解决方案。 1.2.1.2.1 IDENTIFY SpinTAC Identify 估算惯性(一个物体围绕轴旋转加速的阻力)。 系统的惯性越大,电机加速或减速所需的 转矩也就越大。 SpinTAC 控制器使用系统的惯性值来提供最准确的系统控制。 SpinTAC Identify 通过使电 机在应用中旋转并且测量反馈来自动测量系统惯性。 1.2.1.2.2 CONTROL SpinTAC Control 是一款高级速度和位置控制器,此控制器特有主动抗扰控制 (ADRC),可实时估算并补偿 系统干扰。 SpinTAC 自动补偿由以下因素导致的不良系统行为: • 不确定性(例如,谐振模式) • 非线性摩擦 • 负载变化 • 环境变化 SpinTAC Control 能够提供优于 PI 控制器的干扰抑制功能和轨迹跟踪性能,并且能够承受宽范围的惯性变 化。 这意味着 SpinTAC 可提升精度和系统性能,并且最大限度地减少机械系统压力。 借助于单系数调整,SpinTAC 控制器使得用户能够快速地将他们的速度和位置控制从软响应测试和调整为硬 响应。 这个单个增益(带宽)通常在应用的整个可变速度、位置和负载范围内起作用,从而减少了基于 PI 的多变量系统中的典型复杂度和系统调整时间。 一个单个参数控制位置和速度。 这些系统常常需要十二个 或更多的已调整系数集合来处理全部可能的动态情况。 32 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 图 1-7. 简单调整接口 通过 InstaSPIN-MOTION(F2805xM 和 F2806xM)GUI(请参见图 1-7)连同 InstaSPIN-MOTION 快速入 门指南,用户能够使用 TI 评估套件以及 TI 提供的电机,或者自己的电机快速评估 InstaSPIN-MOTION(速 度控制)。 GUI 的设计可指导您快速完成 InstaSPIN-MOTION 评估过程。 您可以从 ti.com/tool/motorkitscncd69miso 免费获得 GUI。 确定 InstaSPIN-MOTION 适用于相关应用后,可立即使用 基于 MotorWare 的项目连同本文档来设计项目并进行性能测试。 1.2.1.2.3 MOVE SpinTAC Move 通过计算点 A 和点 B 之间的最快路径来提供一个速度或位置到另外一个速度或位置平稳转 换的简单方法。SpinTAC 移动生成一个基于启动速度或位置、所需速度或位置,以及针对加速和急动的已配 置系统限制的系统配置。 急动代表加速度变化率。 更大的加速度变化率将增加更快速率时的加速度。 步 进,或两个点之间的突然运动会导致系统振荡。 步进越大,这个趋势越明显。 对于急动的控制可使速度角 变得圆滑,从而减少振荡。 因此,加速度可被设定的更高一些。 控制您系统中的急动将减少您系统组件上 的机械应力,并且能够获得更好的稳定性和更少的故障部件。 与预先定义的查询表相反,SpinTAC Move 在处理器上运行,从而比传统解决方案占用更少的存储器。 除了 行业标准梯形曲线和 s 曲线 SpinTAC 还提供一个专有的 s 曲线,此曲线比 s 曲线更平滑,并且使得用户能 够限制突然的机械运动。 图 1-8. SpinTAC Move 中的可用曲线 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 33 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn 图 1-8 描述了可在 SpinTAC Move 内使用的曲线。 LineStream 专有 st 曲线通过使系统配置的加速变得平 滑来提供最平稳的机械运动。 对于大多数应用,st 曲线代表最佳机械运动系统配置。 1.2.1.2.4 PLAN SpinTAC Plan 可简单设计和执行复杂的机械运动序列。 轨迹规划特性允许用户快速构建不同的运动状 态(A 点至 B 点),然后通过基于状态的逻辑将它们连在一起。 SpinTAC Plan 可被用来执行一个针对几乎 全部应用的机械运动序列。公式 76 显示一个洗衣机的机械运行序列,而 图 1-10 显示一个车库门的机械运 行序列。 可使用 SpinTAC Plan 来轻松设计这些机械运动序列。 一旦设计完成,轨迹被直接嵌入到微控制 器上的 C 语言代码中。 Dry Stage Idle Stage Fill Stage Fill_Flag == 0 Dry State Idle Set Agitation State Counter Start Button pushed Fill_Valve Fill Open State Fill_Valve Closed Start Button not pushed Fill_Flag == 1 Drain_Flag == 0 Drain Stage Agitation Counter decreases by 1 State A Variable Agitation Counter > 0 Agitation State 1 Transition Condition Drain_Valve Closed Drain State Drain_Valve Open Agitation Counter <= 0 Agitation State 2 Action Drain_Flag == 1 Wash Stage 图 1-9. 针对一台洗衣机的状态转换图 34 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Idle Stage InstaSPIN-MOTION 和 SpinTAC 概述 Idle State Button == 1 && Up Sensor == 1 State Down Sensor == 1 Up Sensor == 1 Button == 1 && Down Sensor == 1 Down State A Variable Transition Condition Action Up State Button == 1 Down Stage Button == 1 Up Stage 图 1-10. 针对一扇车库门系统的状态转换图 1.2.1.3 其它 InstaSPIN-MOTION 特性 • 自动转矩(电流)环路调整,具有用户调节选项 • 自动或手动减弱场强和增强场强 • 总线电压补偿 • 自动偏移校准可确保反馈信号采样的质量 1.2.2 InstaSPIN-MOTION 方框图 InstaSPIN-MOTION 采用模块化设计。 客户可确定他们系统中所包含的函数。 FAST 观测器驻留在 ROM 中。 SpinTAC 库的核心控制算法嵌入在 ROM 内,可通过应用程序接口 (API) 根据用户代码访问这些函 数。 InstaSPIN-MOTION 支持大量的系统设计。 InstaSPIN-MOTION 针对无传感器 FOC 系统使用 FAST 软件 编码器 [有关更多信息,请参见《TMS320F2802xF InstaSPIN-FOC 技术参考手册》(文献编号 SPRUHP4)、《TMS320F2805xF InstaSPIN-FOC 技术参考手册》(文献编号 SPRUHW0)和 《TMS320F2806xF InstaSPIN-FOC 技术参考手册》(文献编号 SPRUHI9)]。 InstaSPIN-MOTION 还支 持利用机械传感器(例如,编码器、解算器)的解决方案。 这些情况将在下文介绍。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 35 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn 注意,8.6 节、图 1-12、图 1-13 和图 1-14 中使用的变量定义如下: • θQep:编码器的位置角信号 • θM:SpinTAC 位置控制器中要使用的格式化锯齿位置信号 • θSP:Sawtooth 位置移动生成的锯齿位置基准信号 • ω. lim:速度限值(用于生成位置系统配置) • Tlim:加速度限值 .. • Tlim:急动限值 • ω. Ref:速度基准 • TRef:加速度基准 • ~Jr:电机时间常量 情况 1:借助 FAST 软件编码器的 InstaSPIN-MOTION 速度控制 在这个情况下(请见 8.6 节 和 图 1-12),SpinTAC 速度控制接收来自 FAST 估算器的速度估计值,并且生 成转矩基准信号。 这对于用户存储器(请参见8.6 节)中或 ROM(请参见图 1-12)中的 InstaSPINMOTION 同样适用。 SpinTAC 机械运动控制套件提供运动序列状态机,生成基准轨迹并且控制系统速度。 36 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 HAL_run HAL_acqAdcInt DRV_readAdcData 图 1-11. 除了 ROM 中的 FAST 和 SpinTAC,用户内存中的 InstaSPIN-MOTION ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 37 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn User_SpdRef User_SpdRef Torque Mode InstaSPIN-DKd/KE¡ Velocity Mode Motion Sequence STVELPLAN_run STVELMOVE_run ^‰]vd¡ Velocity Plan ZZ.Z.. llSiimmP ^‰]vd¡ Velocity ZZ. rreeff Move STVELCTL_run ^‰]vd¡ Velocity Control FLASH/RAM ROM ROM Za ^‰]vd¡D}š]}v Control Suite STVELID_run ^‰]vd¡ Velocity Identify ROM UUsseerr__IdIdRReef f \a Flux a T Angle Za Speed aW Torque Zref Traj Ramp Za User_IqRef Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out Id Iq PARK a a T EST_run T a IH_in Irated \a IJ_in Za &^d¡ Software Encoder VH_in aW Rotor Flux Observer Motor Parameters ID VJ_in Vbus CTRL_run CTRL_setup Ta SVM Tb Tc FLASH/RAM Ia CLARKE Ib Ic Va CLARKE Vb Vc HAL_run PWM Driver FLASH/RAM HAL_acqAdcInt HAL_readAdcData ADC Driver a Rs a Rr a Lsd a Lsq \a rated a Irated 图 1-12. ROM 中的 InstaSPIN-MOTION ROM ROM Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type FLASH/RAM 38 简介 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated ZHCU083F – January 2013 – Revised July 2014 www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 情况 2:借助机械传感器的 InstaSPIN-MOTION 速度控制 虽然它对于很多应用来说机具吸引力且划算的无传感器解决方案,有很多应用需要严格且高精度的机械传感 器。 对于这些应用来说(请参见图 1-13),正交编码器提供位置信息,此信息随后通过 SpinTAC 位置转换 器转换为速度反馈。 SpinTAC 速度控制接收速度反馈,然后通过 IqRef 生成转矩基准信号。 SpinTAC 运动 控制套件提供运动序列状态机,生成基准轨迹并控制系统速度。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 39 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn 40 简介 图 1-13. 使用机械传感器进行的 InstaSPIN-MOTION 速度控制 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated ZHCU083F – January 2013 – Revised July 2014 www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 情况 3:使用机械传感器和冗余 FAST 软件传感器进行的 InstaSPIN-MOTION 位置控制 有很多需要高精度位置控制的应用。 对于这些应用,很难去平衡很多所需的调整参数。 InstaSPINMOTION 具有位置和速度单变量组合调节功能,可实现准确位置、速度和转矩控制。 这一特性简化了调整 工作,并且使您能够专注于您的应用,而不是将精力放在电机调整方面。 位置应用需要一个机械传感器,以 便准确识别零速和极低速时的电机角度。 FAST 软件编码器可在位置控制应用中实现冗余;这一特性可在机 械编码器出现故障时提供安全保护(请参见图 1-14)。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 41 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn 42 简介 图 1-14. 使用机械传感器和冗余 FAST 软件传感器进行的 InstaSPIN-MOTION 位置控制 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated ZHCU083F – January 2013 – Revised July 2014 www.ti.com.cn 1.2.3 应用示例 InstaSPIN-MOTION 和 SpinTAC 概述 InstaSPIN-MOTION 十分适合于需要精确的速度和位置控制以及最小干扰的应用,以及要进行多状态变换或 经历动态变化的应用。 下文提供几个示例。 1.2.3.1 跑步机传送带:不同速度和负载下的平滑运动。 持续速度控制对于跑步机传送带十分关键。 当有人在跑步机上跑动时,他们的跨步动作会干扰传送带的运 动。 如果驱动传送带的电机不能快速提供足够的转矩来克服干扰,那么跑步者的跨步动作将被打断。 这个 问题在用户将变速运动作为他们锻炼方式的一部分时加剧。 如果传送带无法平滑加速或减速,那么看起来就 好像跑步机无法正常工作。 此外,低速时,当用户在传送带上行走时,他们的体重会使得传送带停止。 InstaSPIN-MOTION 被应用于使用 4HP,220V 交流感应电机的商用跑步机,以驱动传送带。 此跑步机的调 速范围已经过测试:最低速 42rpm,最高速 3300rpm。 客户会发现,InstaSPIN-MOTION 的高级控制器自动补偿干扰,从而在跑动和速度变化的情况下保持运行速 度不变。 低速时,此控制器防止传送带在负载施加时停止。 此外,一个单个增益被用来控制整个工作范 围。 1.2.3.2 视频摄像机:低速时平滑运动和位置准确度 高端安保和会议室摄像机以极低速运转(例如,0.1rpm),并且需要准确且平滑的位置控制来转动,倾斜和 缩放。 很难在低速时对驱动这些摄像机的电机进行调节,并且他们通常需要最少四个调整集。 此外,启动 时会有跳动,这会导致抖动或未聚焦画面。 InstaSPIN-MOTION 被应用于由具有磁编码器的 2 极 BLDC 电机驱动的高精度安保摄像机。 InstaSPINMOTION 能够使用一个在整个工作范围内都有效的单一调整参数来控制速度和位置。 SpinTAC Move 被用 来控制电机急动,从而获得平滑启动。 1.2.3.3 洗衣机:低速时的平滑运动和位置准确度 周期变换、负载变化和环境干扰会导致严重的电机磨损。 自动、实时的干扰减少能够延长电机的使用寿命和 性能。 例如,让我们看一看洗衣机。图 6-59 显示针对一个标准洗衣机三个阶段的机械运动系统配置。 第一阶段代 表搅动周期,在 250rpm 到 -250rpm 之间重复旋转。 第二和第三阶段代表两个不同的旋转周期。 第二阶段 的旋转速度为 500rpm,而第三阶段旋转速度为 2000rpm。 此系统配置可通过 SpinTAC Plan 轻松创建。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 43 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn 图 1-15. 洗衣机系统配置 InstaSPIN-MOTION 被施加到一个洗衣机应用中。 SpinTAC Plan 轨迹规划特性用于快速构建不同的运动状 态(速度 A 至速度 B),然后通过基于状态的逻辑将它们连在一起。 洗衣机应用运行了两次,一次使用标准 PI 控制器,一次使用 LineStream 公司的 SpinTAC 控制器。 然后, 在参考曲线上标出数据进行比较。 1.2.3.3.1 搅动周期 搅动期间,电机在 250rpm 和 -250rpm 设定点之间切换 20 次。 图 1-16 中的结果表示 InstaSPIN-MOTION 更加贴近参考曲线。 此外,PI 的最大误差为 91rpm (341 - 250 = 91rpm),而 InstaSPIN-MOTION 的最大误 差为 30rpm (280 - 250 = 30rpm)。 44 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 InstaSPINMOTION 图 1-16. InstaSPIN-MOTION 最大限度减少误差 1.2.3.3.2 旋转周期 在第一个旋转周期内,运行目标是保持 500rpm 转速,即使在引入干扰时也是如此。图 7-7 表明,相对于 PI 控制器,InstaSPIN-MOTION 从干扰中恢复的速度更快,振荡更少。 此外,当尝试达到初始 500rpm 设定 值时,InstaSPIN-MOTION 不会受到 PI 控制器所表现出的过冲和下冲的影响。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 45 InstaSPIN-MOTION 和 SpinTAC 概述 www.ti.com.cn InstaSPINMOTION 图 1-17. 第一个旋转周期 - 500rpm 在第二个旋转周期内,如图 1-18 中所示,相对于 PI 控制器,InstaSPIN-MOTION 在 2000rpm 时从干扰中 恢复的速度更快,振荡更少。 请注意,当尝试达到初始 2000rpm 设定值时,InstaSPIN-MOTION 不会受到 PI 控制器所表现出的过冲和下冲的影响。 46 简介 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 和 SpinTAC 概述 InstaSPINMOTION 图 1-18. 第二旋转周期 - 2000rpm 此外,PI 控制器不能从 9.75 秒标记的斜坡干扰中恢复。 相反地,它表现出一个大约为 20rpm 的稳定状态 误差。 1.2.3.3.3 InstaSPIN-MOTION 在整个工作范围内的运行 在执行洗衣机应用前,InstaSPIN-MOTION 控制器和 PI 控制器被调整一次。 从示例中可得知,InstaSPINMOTION 的调整功能在整个工作范围内均有效。 不论电机是在 250rpm 到 -250rpm 间切换,或者是保持在 500rpm 或 2000rpm 旋转周期,都不需要新的调整集。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 简介 47 Chapter 2 ZHCU083F – January 2013 – Revised July 2014 快速入门套件 - TI 提供的软件和硬件 TI 提供几个基于 GUI 的应用,方便用户轻松便捷地评估 InstaSPIN-FOC 和 InstaSPIN–MOTION 软件。 使 用预配置的图形用户界面 (GUI) 是最快的用户入门方式,其中为 F2806xM 和 F2806xF 器件提供了演示平 台。 通用 GUI 所提供的 GUI 选项适用于任何可定制的 MotorWare 项目。 可以在 Code Composer Studio 外或集成开发环境 (IDE) 内使用此 GUI。 GUI 快速入门指南将为您介绍评估过程的详细信息。 以下网址提 供了预配置 GUI 的简单概述:http://www.ti.com/tool/instaspinfocmotorwaregui 目前提供的套件均使用同一款处理器 TMDSCNCD28069MISO Piccolo F28069M (ROM) controlCARD,与 以下任意一种 3 相逆变器配套: • 低压/低电流:DRV8312 – PN:DRV8312-69M-KIT http://www.ti.com/tool/DRV8312-69M-KIT – DRV8312 三相逆变器集成了电源模块基板,通过 controlCARD 接口支持高达 50V 电压和 3.5A 持续 电流 – 1 个 NEMA17 BLDC/PMSM 55W 电机 – 若要进行位置控制,需要购买 Anaheim Automation 电机(含编码器):BLY172D-24V-4000-2000SI • 低压/中等电流:适用于 LaunchPad 的 BoosterPack – 6-24V、14A 持续电流 – PN:BOOSTXL-DRV8301 BoosterPack http://www.ti.com/tool/BOOSTXL-DRV8301 – PN:支持 InstaSPIN 的 LaunchPad:http://www.ti.com/launchpad – DRV8301 2.3A 灌电流/1.7A 拉电流三相逆变器,具有用于 1.5A 外部负载的集成降压转换器 – NexFET™ 功率 MOSFET – 不包含电机或电源 • 低压/高电流:DRV8301 – PN:DRV8301-69M-KIT http://www.ti.com/tool/DRV8301-69M-KIT – DRV8301 2.3A 灌电流/1.7A 拉电流三相逆变器,具有用于 1.5A 外部负载的集成降压转换器 – 不包含电机 – 若要进行位置控制,需要购买 http://www.ti.com/tool/lvservomtr • 高压:hvmtrkit – PN:TMDSHVMTRINSPIN http://www.ti.com/tool/TMDSHVMTRINSPIN – 支持交流感应电机、永久磁性同步电机、无刷直流电机 – 使用 350V 直流总线时电机驱动器级最高为持续 10A – 可订购以下高压电机: • ACIM http://www.ti.com/tool/hvacimtr • BLDC http://www.ti.com/tool/hvbldcmtr 48 快速入门套件 - TI 提供的软件和硬件 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn • PMSM http://www.ti.com/tool/hvpmsmmtr – 若要进行位置控制,需要购买 http://www.ti.com/tool/hvpmsmmtr MotorWare 软件下载中提供了所有软件和文档,网址为: http://www.ti.com/tool/motorware。 套件信息也可以通过资源浏览器访问,资源浏览器是适用于 TI MCU 的 Code Composer Studio™ (CCStudio) IDE 中的一个应用。 资源浏览器还将显示首次在新工作区使用的 CCStudio,如果稍后要将其打 开,可选择:帮助 (Help) -> 欢迎使用 CCS (Welcome to CCS)。 以下是所提供的信息示例。 本文档以及使用 InstaSPIN 开发套件的所有相关文档均可通过资源浏览器访问: ZHCU083F – January 2013 – Revised July 2014 快速入门套件 - TI 提供的软件和硬件 49 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 附加硬件信息通过 ControlSUITE™ 库(针对 C2000™ 微处理器)提供,该库包含全套软件基础设施和软件 工具,旨在最大限度缩短软件开发时间。 controlSUITE 库可从以下位置下载:ti.com/tool/controlsuite。 Topic ........................................................................................................................... Page 2.1 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION ............................................................ 51 50 快速入门套件 - TI 提供的软件和硬件 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION 2.1 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION GUI 提供了一种可以轻松便捷地评估 InstaSPIN-FOC 和 InstaSPIN–MOTION 的方法。 InstaSPIN-FOC 和 InstaSPIN-MOTION 快速入门指南将为您介绍评估过程的详细信息。 此处提供简单的概述: Step 1. 识别电机参数 (图 2-1)。 图 2-1. InstaSPIN-MOTION GUI 使用电机识别 (Motor Identification) 标签 Step 2. 调整转矩和速度控制 (图 10-5)。 ZHCU083F – January 2013 – Revised July 2014 快速入门套件 - TI 提供的软件和硬件 51 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION www.ti.com.cn 图 2-2. InstaSPIN-MOTION GUI 使用速度或转矩 (Speed or Torque) 标签 Step 3. 识别系统惯性 (图 2-3)。 52 快速入门套件 - TI 提供的软件和硬件 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION 图 2-3. InstaSPIN-MOTION GUI 使用 SpinTAC 1:启动 (pinTAC 1:Startup) 标签 Step 4. 调整抗扰速度控制器 (图 2-4)。此操作将替代第 2 步中的速度控制器。 ZHCU083F – January 2013 – Revised July 2014 快速入门套件 - TI 提供的软件和硬件 53 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION www.ti.com.cn 图 2-4. InstaSPIN-MOTION GUI SpinTAC 2:调整 (SpinTAC 2:Tuning) 标签 Step 5. 设置目标速度并选择曲线类型 (图 2-5)。 54 快速入门套件 - TI 提供的软件和硬件 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 评估 InstaSPIN-FOC 和 InstaSPIN-MOTION 图 2-5. InstaSPIN-MOTION GUI 使用 SpinTAC 3:运动 (SpinTAC 3:Motion) 标签 通过浏览 InstaSPIN 快速入门套件和快速入门指南,您可以熟悉软件并能够参考硬件原理图设计自己的电路 板。 已配置的代码示例(实验)可在各个套件上运行。 无论是否对 InstaSPIN-FOC 或 InstaSPIN-MOTION 的代码感兴趣,您都可以找到快速开始项目所需的各个示例。 有关示例软件和文档,请参见 MotorWare 软 件下载中的 MotorWare InstaSPIN 项目和实验用户指南(网址:http://www.ti.com/tool/motorware)。 ZHCU083F – January 2013 – Revised July 2014 快速入门套件 - TI 提供的软件和硬件 55 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Chapter 3 ZHCU083F – January 2013 – Revised July 2014 InstaSPIN 和 MotorWare MotorWare™ 库是一套全面的软件和技术资源,旨在最大限度地缩短电机控制系统开发时间。 从器件专用驱动程序及支持软件,到完整的系统示例和技术培训,MotorWare 软件可为开发及评估的各个阶 段提供支持。 MotorWare 软件设计成可轻松集成一流的电机控制技术。 该软件旨在实现: • 跨 TI MCU 支持 • 跨 MCU、电力电子设备和控制技术的模块化和便携性 • 面向对象的软件设计 • 基于 API MotorWare 内提供 InstaSPIN-FOC 和 InstaSPIN-MOTION 电机控制解决方案。 有关最新的完整 API 函数 列表、MotorWare 的软件编码标准和架构,请参见 CCStudio 内的 Resource Explorer。 56 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Topic ........................................................................................................................... Page 3.1 MotorWare 目录结构............................................................................................ 58 3.2 MotorWare 面向对象的设计................................................................................... 63 3.3 InstaSPIN-FOC API ............................................................................................. 66 3.4 InstaSPIN-MOTION 和 SpinTAC API .................................................................... 162 3.5 SpinTAC API .................................................................................................... 170 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 57 MotorWare 目录结构 www.ti.com.cn 3.1 MotorWare 目录结构 MotorWare 的目录结构包含了运行每个电机控制项目所需的所有代码。 Code Composer Studio (CCStudio) 项目中的文件引用是相对的。 通过相对目录链接能够打开项目并进行首 次编译。 MotorWare 目录结构旨在提供查找头文件、库和源代码的简单方式。 MotorWare 目录结构的核心由四个文件夹组成: • drivers - 外设驱动程序 API 代码。 • ide - CCStudio 使用的通用连接器文件 • modules - 电机控制使用的函数 • solutions - 包含 CCStudio 项目,这些项目用于运行基于电机示例套件的软件解决方案。 将 TI 的 MotorWare 软件与您的应用程序集成时,建议创建一个单独的 MotorWare 目录结构,在其中包含 多个项目的板特定文件。 之后您的软件便可引用 TI 的 MotorWare 目录内的文件。 这是可选的,但建议这 样做,以简化 TI 计划的未来更新的使用,请参见下面的屏幕截图。 有关目录结构的实际内容,请参见 MotorWare 软件的最新版本。 58 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 3.1.1 MotorWare – drivers drivers 目录包含用于配置特定处理器的外设 API。 MotorWare 目录结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 59 MotorWare 目录结构 3.1.2 MotorWare – ide IDE 目录包含编译器工具所需的通用连接器文件。 www.ti.com.cn 60 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 3.1.3 MotorWare – modules MotorWare 目录结构 modules 目录包含处理器和项目间通用的算法。 如果某个模块与处理器有特定的依赖关系,则有子目录对应 此依赖关系。 模块将具有源代码和/或库函数。 3.1.4 MotorWare – solutions solutions 目录包含完整的解决方案,其中含有针对特定目标的完整 CCStudio 项目。 InstaSPIN-FOC 和 InstaSPIN-MOTION 示例代码在多个目标器件间通用。 通过分层的目录结构可将与目标无关的通用源代码 与不同的处理器和目标板一起使用。 如果存在与目标相关或与处理器相关的源代码,则有特定的源代码目录 用于这些用途。 下图说明了此结构。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 61 MotorWare 目录结构 www.ti.com.cn 62 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn MotorWare 面向对象的设计 3.2 MotorWare 面向对象的设计 MotorWare 软件已使用面向对象的方法。 通过使用对象,软件实现了自我文档化,并且减少了在 main.c 文 件中使用的空间。 对象实际是一种结构,其中包含对象用来执行其函数的变量。 与对象关联的是方法,它 们是用来设置和运行对象计算的函数调用。 当我们讨论面向对象的软件技术的定义时,使用帕克变换对象来 演示对象编写方式的示例。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 63 MotorWare 面向对象的设计 3.2.1 对象 对象是一种结构。 帕克变换结构示例如下所示。 Park.h 是包含结构声明的文件。 typedef struct _PARK_Obj_{ _iq sinTh; //!< the sine of the angle between the d,q and the alpha,beta coordinate systems _iq cosTh; //!< the cosine of the angle between the d,q and the alpha,beta coordinate systems } PARK_Obj; www.ti.com.cn 每个对象都有一个句柄。 句柄是对象的指针。 在函数间传递对象时,句柄非常有用。 对象的句柄还允许函 数仅对该对象起作用,或者称为可重入代码。 下面列出了帕克变换对象的句柄声明。 typedef struct PARK_Obj *PARK_Handle; 3.2.2 方法 每个对象都必须做一些事情。 目前,对象只是变量的容器。 为了让对象执行计算,甚至在其变量间发送和 接收数据,必须使用方法。 方法是特定于对象的函数,作用于对象包含的变量。 MotorWare 中的每个对象 有四个主要方法,它们的命名如下。 • Init 方法 - 仅用于创建对象的句柄 • Set 方法 - 设置对象的内部变量 • Get 方法 - 返回对象的内部变量值 • Run 方法 - 执行对象的计算函数 3.2.2.1 Init 方法 init 方法仅用于将句柄指向对象。 帕克变换 init 方法的代码如下所示。 PARK_Handle PARK_init(void *pMemory,const size_t numBytes) { PARK_Handle parkHandle; if(numBytes < sizeof(PARK_Obj)) return((PARK_Handle)NULL); // assign the handle parkHandle = (PARK_Handle)pMemory; return(parkHandle); } init 方法仅有两个参数,第一个参数是对象的地址,第二个参数是对象的大小(以字节为单位)。 创建对象 后,将使用其它方法。 64 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn MotorWare 面向对象的设计 3.2.2.2 Set 方法 set 方法将一个值放入对象包含的变量中。 在下面的帕克变换示例代码中,set 函数将正弦值和余弦值指定 给 sinTh 和 cosTh 对象变量。 static inline void PARK_setup(PARK_Handle parkHandle,const _iq angle_pu) { PARK_Obj *park = (PARK_Obj *)parkHandle; park->sinTh = _IQsinPU(angle_pu); park->cosTh = _IQcosPU(angle_pu); return; } 在帕克变换示例中,set 方法的参数为对象句柄和角度 θ。 Set 函数不返回任何值。 3.2.2.3 Get 方法 Get 方法返回对象变量。 帕克对象中仅包含两个变量。 由于帕克对象外部需要对象中包含的两个变量,因 此有两个 get 方法。 其中一个 get 方法如下所示。 static inline _iq PARK_getSinTh(PARK_Handle parkHandle) { PARK_Obj *park = (PARK_Obj *)parkHandle; return(park->sinTh); } get 方法仅返回该方法名称所对应的变量。 在上面的示例代码中,帕克对象 get 方法返回 sinTh 变量。 对 象的句柄是传递给 get 方法的唯一变量。 get 方法仅返回一个变量。 3.2.2.4 Run 方法 Run 方法执行对象变量的计算。 使用嵌入式软件时,run 方法可能还操作外设或其它一些硬件。 帕克 run 方法计算输入矢量 {Id, Iq } 的帕克变换,然后返回输出矢量 {Iα, Iβ}。 帕克 run 方法的代码如下所示。 static inline void PARK_run(PARK_Handle parkHandle,const MATH_vec2 *pInVec,MATH_vec2 *pOutVec) { PARK_Obj *park = (PARK_Obj *)parkHandle; _iq sinTh = park->sinTh; _iq cosTh = park->cosTh; _iq value_0 = pInVec->value[0]; _iq value_1 = pInVec->value[1]; pOutVec->value[0] = _IQmpy(value_0,cosTh) + _IQmpy(value_1,sinTh); pOutVec->value[1] = _IQmpy(value_1,cosTh) - _IQmpy(value_0,sinTh); return; } // end of PARK_run() function ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 65 InstaSPIN-FOC API www.ti.com.cn 在 run 方法中,第一个参数是对象的句柄,后面的参数是单个量时的输入和输出变量或者矢量的指针。 run 方法不返回任何值。 3.3 InstaSPIN-FOC API InstaSPIN-FOC 的所有功能都可通过丰富的 API 访问。 无论 InstaSPIN-FOC 在 ROM 中还是在用户内存 中,该 API 都保持不变。 在本节,我们将介绍最常用的提供变量访问和使应用程序实现系统控制的函数。 本指南结尾的实验示例项目中使用了这些函数。 有关最新的完整 API 函数列表,请参见 CCStudio 内的 Resource Explorer。 在软件开发过程中,另一个特别有用的 API 函数资源是 CCStudio 内的 Outline View。 通过此功能可利用一 个完整的超链接在多个文件之间导航,该超链接列出了您正在使用的 CCStudio 项目文件内的所有符号。 通 过以下 CCStudio 菜单访问此视图:窗口 (Window) -> 显示视图 (Show View) -> 大纲 (Outline)。 下面是使用此视图显示 ctrl.c 的屏幕截图。 请注意,单击大纲 (Outline) 窗口中的函数名称时,源 (Source) 窗口中的光标会突出显示相关代码。 您可以快速浏览一个文件内的函数和所有符号,这对于 InstaSPINFOC 中的大量 API 函数特别有用。 66 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC API 使用 Outline View 显示 ctrl.h 时,您会注意到一些函数没有列出源代码。 这些函数的文件名旁边有一个白底 的绿色圆圈,而不是绿色的实心圆圈。 这表示它是必须保留在 ROM 中的几个文件之一,因为它是直接与 FAST 估算器相连的函数。 下图显示了这种情况的一个示例,其中 CTRL_initCtrl() 函数没有源代码,但 CTRL_isError() 函数有源代码。 图 3-1 中的方框图很好地概述了 InstaSPIN-FOC 系统的与用户内存和 ROM 有关的函数和变量。 请注意关 键函数:CTRL_run、CTRL_setup、EST_run、HAL_run、HAL_acqAdcInt 和 HAL_readAdcData。 另外, 图中显示的变量全部可用。 例如,用于 Id 和 Iq 的 PI 的 Ki 增益可使用 CTRL_getKi 函数读取,并使用 CTRL_setKi 设置。 目的是提供对所有函数和变量的完全访问。 Torque Mode User_SpdRef User_IqRef User_IdRef Traj Ramp Zref Za Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out CTRL_run CTRL_setup Ta SVM Tb Tc HAL_run PWM Driver FLASH/RAM Id Iq PARK \a Flux a T Angle Za Speed aW Torque a Irated \a a a T EST_run T IH_in IJ_in Za &^d¡š]uš}Œ Flux, Angle, Speed, Torque aW Motor Parameters ID VH_in VJ_in FLASH/RAM Ia CLARKE Ib Ic Va CLARKE Vb Vc Vbus ROM a Rs a Rr a Lsd a Lsq \a rated a Irated Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 3-1. 用户内存中的 InstaSPIN-FOC 方框图,不包括 ROM 中的 FAST HAL_acqAdcInt HAL_readAdcData ADC Driver FLASH/RAM ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 67 InstaSPIN-FOC API API 可分组为以下四个类别: • 控制器 – ctrl.c(可移动到用户内存的软件) • 估算器 – FAST 库(ROM 中的 FAST 估算器) • HAL – hal.c(硬件抽象层) • 用户 – user.c(用户设置) 接下来的几节列出了每个分组中的常用函数。 对于 F2802xF 器件,API 在用户内存中有一个附加库: • 公共库 – fast_public.lib(必须在用户内存中加载的软件) 接下来的几节列出了每个分组中的常用函数。 3.3.1 控制器 API 函数 - ctrl.c、ctrl.h、CTRL_obj.h www.ti.com.cn 3.3.1.1 CTRL 枚举和结构 CTRL_Obj 定义控制器 (CTRL) 对象。 控制器对象实现所有 FOC 算法和估算器功能。 typedef struct _CTRL_Obj_ { CTRL_Version version; //!< the controller version CTRL_State_e state; //!< the current state of the controller CTRL_State_e prevState; //!< the previous state of the controller CTRL_ErrorCode_e errorCode; //!< the error code for the controller CLARKE_Handle clarkeHandle_I; //!< the handle for the current Clarke transform CLARKE_Obj clarke_I; //!< the current Clarke transform object CLARKE_Handle clarkeHandle_V; //!< the handle for the voltage Clarke transform CLARKE_Obj clarke_V; //!< the voltage Clarke transform object EST_Handle estHandle; //!< the handle for the parameter estimator PARK_Handle parkHandle; //!< the handle for the Park object PARK_Obj park; //!< the Park transform object PID_Handle pidHandle_Id; //!< the handle for the Id PID controller PID_Obj pid_Id; //!< the Id PID controller object PID_Handle pidHandle_Iq; //!< the handle for the Iq PID controller PID_Obj pid_Iq; //!< the Iq PID controller object PID_Handle pidHandle_spd; //!< the handle for the speed PID controller PID_Obj pid_spd; //!< the speed PID controller object IPARK_Handle iparkHandle; //!< the handle for the inverse Park transform IPARK_Obj ipark; //!< the inverse Park transform object SVGEN_Handle svgenHandle; //!< the handle for the space vector generator SVGEN_Obj svgen; //!< the space vector generator object TRAJ_Handle trajHandle_Id; //!< the handle for the Id trajectory generator TRAJ_Obj traj_Id; //!< the Id trajectory generator object TRAJ_Handle trajHandle_spd; //!< handle for the speed trajectory generator TRAJ_Obj traj_spd; //!< the speed trajectory generator object TRAJ_Handle trajHandle_spdMax; //!< handle for max speed traj generator 68 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC API TRAJ_Obj traj_spdMax; //!< the max speed trajectory generator object MOTOR_Params motorParams; //!< the motor parameters uint_least32_t waitTimes[CTRL_numStates]; //!< an array of wait times for each state, estimator clock counts uint_least32_t counter_state; //!< the state counter uint_least16_t numIsrTicksPerCtrlTick; //!< # of isr ticks per controller tick uint_least16_t numCtrlTicksPerCurrentTick; //!< # of controller ticks per current controller tick uint_least16_t numCtrlTicksPerSpeedTick; //!< # of controller ticks per speed controller tick uint_least16_t numCtrlTicksPerTrajTick; //!< # of controller ticks per trajectory tick uint_least32_t ctrlFreq_Hz; //!< Defines the controller frequency, Hz uint_least32_t trajFreq_Hz; //!< Defines the trajectory frequency, Hz _iq trajPeriod_sec; //!< Defines the trajectory period, sec float_t ctrlPeriod_sec; //!< Defines the controller period, sec _iq maxVsMag_pu; //!< the maximum voltage vector that is allowed, pu MATH_vec2 Iab_in; //!< the Iab input values MATH_vec2 Iab_filt; //!< the Iab filtered values MATH_vec2 Idq_in; //!< the Idq input values MATH_vec2 Vab_in; //!< the Vab input values _iq spd_out; //!< the speed output value MATH_vec2 Vab_out; //!< the Vab output values MATH_vec2 Vdq_out; //!< the Vdq output values float_t Rhf; //!< the Rhf value float_t Lhf; //!< the Lhf value float_t RoverL; //!< the R/L value _iq Kp_Id; //!< the desired Kp_Id value _iq Kp_Iq; //!< the desired Kp_Iq value _iq Kp_spd; //!< the desired Kp_spd value _iq Ki_Id; //!< the desired Ki_Id value _iq Ki_Iq; //!< the desired Ki_Iq value _iq Ki_spd; //!< the desired Ki_spd value _iq Kd_Id; //!< the desired Kd_Id value _iq Kd_Iq; //!< the desired Kd_Iq value _iq Kd_spd; //!< the desired Kd_spd value _iq Ui_Id; //!< the desired Ui_Id value _iq Ui_Iq; //!< the desired Ui_Iq value _iq Ui_spd; //!< the desired Ui_spd value MATH_vec2 Idq_ref; //!< the Idq reference values, pu _iq IdRated; //!< the Id rated current, pu _iq spd_ref; //!< the speed reference, pu _iq spd_max; //!< the maximum speed, pu uint_least16_t counter_current; //!< the isr counter uint_least16_t counter_isr; //!< the isr counter uint_least16_t counter_speed; //!< the speed counter uint_least16_t counter_traj; //!< the traj counter bool flag_enableCtrl; //!< a flag to enable the controller bool flag_enableDcBusComp; //!< a flag to enable the DC bus compensation in the controller bool flag_enablePowerWarp; //!< a flag to enable PowerWarp bool flag_enableOffset; //!< a flag to enable offset estimation after idle state bool flag_enableSpeedCtrl; //!< a flag to enable the speed controller bool flag_enableUserMotorParams; //!< a flag to use known motor parameters from user.h file } CTRL_Obj; ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 69 InstaSPIN-FOC API CTRL_State_e www.ti.com.cn 控制器状态的枚举 typedef enum { CTRL_State_Error=0, CTRL_State_Idle, CTRL_State_OffLine, CTRL_State_OnLine, CTRL_numStates } CTRL_State_e; //!< the controller error state //!< the controller idle state //!< the controller offline state //!< the controller online state //!< the number of controller states CTRL_ErrorCode_e 错误代码的枚举 typedef enum { CTRL_ErrorCode_NoError=0, CTRL_ErrorCode_IdClip, CTRL_ErrorCode_EstError, CTRL_numErrorCodes } CTRL_ErrorCode_e; //!< no error error code //!< Id clip error code //!< estimator error code //!< the number of controller error codes CTRL_TargetProc_e 目标处理器的枚举 typedef enum { CTRL_TargetProc_2806x=0, CTRL_TargetProc_2805x, CTRL_TargetProc_2803x, CTRL_TargetProc_2802x, CTRL_TargetProc_Unknown } CTRL_TargetProc_e; //!< 2806x processor //!< 2805x processor //!< 2803x processor //!< 2802x processor //!< Unknown processor CTRL_Type_e 目标处理器的枚举 typedef enum { CTRL_Type_PID_spd=0, CTRL_Type_PID_Id, CTRL_Type_PID_Iq } CTRL_Type_e; //!< PID Speed controller //!< PID Id controller //!< PID Iq controller CTRL_Version 定义控制器 (CTRL) 版本号 typedef struct _CTRL_Version_ { uint16_t rsvd; CTRL_TargetProc_e targetProc; uint16_t major; uint16_t minor; } CTRL_Version; //!< reserved value //!< the target processor //!< the major release number //!< the minor release number 70 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 3.3.1.2 CTRL 状态控制和错误处理 CTRL_initCtrl() ctrlHandle = CTRL_initCtrl(ctrlNumber,estNumber) InstaSPIN-FOC API ctrlNumber: estNumber: 返回: 初始化指定的控制器 FOC (CTRL) 控制器编号 – FOC 控制器的编号。 估算器 (EST) 编号 – InstaSPIN 估算器的编号。 控制器 (CTRL) 对象句柄 - 返回的句柄指向特定的估算器和控制器。 CTRL_updateState () bool CTRL_updateState(CTRL_Handle handle) 句柄: 返回: 反馈控制器状态是否发生变化 控制器 (CTRL) 句柄 指示状态是否变化的布尔值 (true/false) CTRL_isError () inline bool CTRL_isError(CTRL_Handle handle) 句柄: 返回: 确定是否存在控制器错误 控制器 (CTRL) 句柄 指示是否存在控制器错误的布尔值 (true/false) CTRL_checkForErrors () inline void CTRL_checkForErrors(CTRL_Handle handle) 句柄: 错误: 检查估算器是否存在错误,如果存在,则将控制器状态设置为错误状态 控制器 (CTRL) 句柄 CTRL_State_Error、CTRL_ErrorCode_EstError ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 71 InstaSPIN-FOC API 3.3.1.3 CTRL Get 函数 www.ti.com.cn CTRL_getCount_current () inline uint_least16_t CTRL_getCount_current(CTRL_Handle handle) 句柄: 返回: 获取当前循环计数 控制器 (CTRL) 句柄 当前循环计数,obj->counter_current CTRL_getCount_isr () inline uint_least16_t CTRL_getCount_isr(CTRL_Handle handle) 句柄: 返回: 获取 isr 计数 控制器 (CTRL) 句柄 isr 计数,obj->counter_isr CTRL_getCount_speed () inline uint_least16_t CTRL_getCount_speed(CTRL_Handle handle) 句柄: 返回: 获取速度环路计数 控制器 (CTRL) 句柄 速度环路计数,obj->counter_speed CTRL_getCount_state () inline uint_least32_t CTRL_getCount_state(CTRL_Handle handle) 句柄: 返回: 获取状态计数 控制器 (CTRL) 句柄 状态计数,obj->counter_state CTRL_getCount_traj () inline uint_least32_t CTRL_getCount_state(CTRL_Handle handle) 句柄: 返回: 获取轨迹环路计数 控制器 (CTRL) 句柄 轨迹环路计数,obj->counter_traj CTRL_getCtrlFreq () inline uint_least32_t CTRL_ getCtrlFreq(CTRL_Handle handle) 句柄: 获取控制器执行频率 控制器 (CTRL) 句柄 72 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 返回: 控制器执行频率,Hz,obj->ctrlFreq_Hz InstaSPIN-FOC API CTRL_getCtrlPeriod_sec () inline float_t CTRL_getCtrlPeriod_sec(CTRL_Handle handle) 句柄: 返回: 获取控制器执行周期 控制器 (CTRL) 句柄 控制器执行周期,秒,obj->ctrlPeriod_sec CTRL_getErrorCode () inline CTRL_ErrorCode_e CTRL_getErrorCode(CTRL_Handle handle) 句柄: 返回: 获取控制器 (CTRL) 对象的错误代码 控制器 (CTRL) 句柄 错误代码,obj->errorCode CTRL_getEstHandle () inline EST_Handle CTRL_getEstHandle(CTRL_Handle handle) 句柄: 返回: 获取给定控制器的估算器句柄 控制器 (CTRL) 句柄 给定控制器的估算器句柄,obj->estHandle CTRL_getFlag_enableCtrl () inline bool CTRL_getFlag_enableCtrl(CTRL_Handle handle) 句柄: 返回: 获取估算器的使能控制器标志值 控制器 (CTRL) 句柄 使能控制器标志值,obj->flag_enableCtrl CTRL_getFlag_enableDcBusComp () inline bool CTRL_getFlag_enableDcBusComp(CTRL_Handle handle) 句柄: 返回: 获取估算器的使能直流总线补偿标志值 控制器 (CTRL) 句柄 使能直流总线补偿标志值,obj-> flag_enableDcBusComp CTRL_getFlag_enablePowerWarp () inline bool CTRL_getFlag_enablePowerWarp(CTRL_Handle handle) 获取估算器的 PowerWarp 使能标志值 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 73 InstaSPIN-FOC API 句柄: 返回: 控制器 (CTRL) 句柄 PowerWarp 使能标志值,obj-> flag_enablePowerWarp www.ti.com.cn CTR CTRL_getFlag_enableOffset () inline bool CTRL_getFlag_enableOffset(CTRL_Handle handle) 句柄: 返回: 获取控制器的使能偏移标志值 控制器 (CTRL) 句柄 使能偏移标志值,obj->flag_enableOffset CTRL_getFlag_enableSpeedCtrl () inline bool CTRL_getFlag_enableSpeedCtrl(CTRL_Handle handle) 句柄: 返回: 获取控制器的使能速度控制标志值 控制器 (CTRL) 句柄 使能速度控制标志值,obj->flag_enableSpeedCtrl CTRL_getFlag_enableUserMotorParams () inline bool CTRL_getFlag_enableSpeedCtrl(CTRL_Handle handle) 句柄: 返回: 获取估算器的使能用户电机参数标志值 控制器 (CTRL) 句柄 使能用户电机参数标志值: • true = 使用 user.h 中的用户电机参数 • false = 执行电机参数估算 CTRL_getGains () void CTRL_getGains(CTRL_Handle handle, const CTRL_Type_e ctrlType, iq *pKp,_iq *pKi,_iq *pKd) 句柄: ctrlType: pKp: pKi: pKd: 更新控制器对象中的 Kp、Ki 和 Kd 控制器 (CTRL) 句柄 控制器类型 Kp 值的指针,pu Ki 值的指针,pu Kd 值的指针,pu CTRL_getIab_filt_pu () void CTRL_getIab_filt_pu (CTRL_Handle handle,MATH_vec2 *pIab_filt_pu) 更新控制器对象中的 alpha/beta 滤波电流矢量值 74 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: pIab_filt_pu: 控制器 (CTRL) 句柄 alpha/beta 滤波电流矢量的矢量值,pu InstaSPIN-FOC API CTRL_getIab_filt_addr () inline MATH_vec2 *CTRL_getIab_filt_addr(CTRL_Handle handle) 句柄: 返回: 获取控制器中的 alpha/beta 滤波电流矢量内存地址 控制器 (CTRL) 句柄 alpha/beta 滤波电流矢量内存地址,obj->Iab_filt CTRL_getIab_in_addr () inline MATH_vec2 *CTRL_getIab_in_addr(CTRL_Handle handle) 句柄: 返回: 获取控制器中的 alpha/beta 电流输入矢量内存地址 控制器 (CTRL) 句柄 alpha/beta 电流输入矢量内存地址,obj-> Iab_in CTRL_getIab_in_pu () void CTRL_getIab_in_pu(CTRL_Handle handle,MATH_vec2 *pIab_in_pu); 句柄: pIab_in_pu: 获取控制器中的 alpha/beta 电流输入矢量值 控制器 (CTRL) 句柄 alpha/beta 电流输入矢量的矢量值,pu CTRL_getId_in_pu () inline _iq CTRL_getId_in_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的直流电流输入值 控制器 (CTRL) 句柄 直流电流输入值,pu,obj->Idq_in.value[0] CTRL_getId_ref_pu () inline _iq CTRL_getId_ref_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的直流电流 (Id) 参考值 控制器 (CTRL) 句柄 直流电流参考值,pu,obj->Idq_ref.value[0] CTRL_getIdq_in_addr () inline MATH_vec2 *CTRL_getIdq_in_addr(CTRL_Handle handle) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 75 InstaSPIN-FOC API 句柄: 返回: 获取控制器中的直流/正交电流输入矢量内存地址 控制器 (CTRL) 句柄 直流/正交电流输入矢量内存地址,obj-> Idq_in www.ti.com.cn CTRL_getIdq_in_pu () void CTRL_getIdq_in_pu(CTRL_Handle handle,MATH_vec2 *pIdq_in_pu); 句柄: pIdq_in_pu: 获取控制器中的直流/正交电流输入矢量值 控制器 (CTRL) 句柄 直流/正交输入电流矢量的矢量值,pu CTRL_getIdq_ref_pu () void CTRL_getIdq_ref_pu(CTRL_Handle handle,MATH_vec2 *pIdq_ref_pu); 句柄: pIdq_ref_pu: 获取控制器中的直流/正交电流参考矢量值 控制器 (CTRL) 句柄 直流/正交电流参考矢量的矢量值,pu CTRL_getIdRated_pu () inline _iq CTRL_getIdRated_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的 Id 额定电流值 控制器 (CTRL) 句柄 Id 额定电流值,pu,obj-> IdRated CTRL_getIq_in_pu () inline _iq CTRL_getIq_in_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的正交电流输入值 控制器 (CTRL) 句柄 正交电流输入值,pu,obj-> Idq_in.value[1] CTRL_getIq_ref_pu () inline _iq CTRL_getIq_ref_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的正交电流 (Id) 参考值 控制器 (CTRL) 句柄 正交电流参考值,pu,obj-> Idq_ref.value [1] CTRL_getKi () _iq CTRL_getKi (CTRL_Handle handle,const CTRL_Type_e ctrlType) 76 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: ctrlType: 返回: 获取控制器状态 控制器 (CTRL) 句柄 控制器类型 Ki 值 InstaSPIN-FOC API CTRL_getKd () _iq CTRL_getKd (CTRL_Handle handle,const CTRL_Type_e ctrlType) 句柄: ctrlType: 返回: 获取指定控制器的比例增益 (Kd) 值 控制器 (CTRL) 句柄 控制器类型 Kd 值 CTRL_getKp () _iq CTRL_getKp (CTRL_Handle handle,const CTRL_Type_e ctrlType) 句柄: ctrlType: 返回: 获取控制器状态 控制器 (CTRL) 句柄 控制器类型 Kp 值 CTRL_getLhf () inline float_t CTRL_getLhf(CTRL_Handle handle) 句柄: 返回: 获取控制器的高频电感 (Lhf) 值 控制器 (CTRL) 句柄 返回:Lhf 值,obj->Lhf CTRL_getMagCurrent_pu () _iq CTRL_getMagCurrent_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的磁化电流值 控制器 (CTRL) 句柄 磁化电流值 CTRL_getMaxVsMag_pu () inline _iq CTRL_getMaxVsMag_pu(CTRL_Handle handle) 句柄: 返回: 获取最大电压矢量 控制器 (CTRL) 句柄 最大电压矢量(值介于 0 和 4/3 之间) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 77 InstaSPIN-FOC API www.ti.com.cn CTRL_getMaximumSpeed_pu () _iq CTRL_getMaximumSpeed_pu(CTRL_Handle handle); 句柄: 返回: 获取控制器的最大速度值 控制器 (CTRL) 句柄 最大电压矢量(值介于 0 和 4/3 之间) CTRL_getMotorRatedFlux () inline float_t CTRL_getMotorRatedFlux(CTRL_Handle handle) 句柄: 返回: 获取控制器的电机额定磁通 控制器 (CTRL) 句柄 电机额定磁通,V*sec,obj->motorParams.ratedFlux_VpHz CTRL_getMotorType () inline MOTOR_Type_e CTRL_getMotorType(CTRL_Handle handle) 句柄: 返回: 获取控制器的电机类型 控制器 (CTRL) 句柄 电机类型,obj-> motorParams.type CTRL_getNumCtrlTicksPerCurrentTick () inline uint_least16_t CTRL_getNumCtrlTicksPerCurrentTick(CTRL_Handle handle) 句柄: 返回: 获取每个电流控制器时钟节拍的控制器时钟节拍数 控制器 (CTRL) 句柄 每个估算器时钟节拍的控制器时钟节拍数,obj-> numCtrlTicksPerCurrentTick CTRL_getNumCtrlTicksPerSpeedTick () inline uint_least16_t CTRL_getNumCtrlTicksPerSpeedTick(CTRL_Handle handle) 句柄: 返回: 获取每个速度控制器时钟节拍的控制器时钟节拍数 控制器 (CTRL) 句柄 每个速度时钟节拍的控制器时钟节拍数,obj-> numCtrlTicksPerSpeedTick CTRL_getNumCtrlTicksPerTrajTick () inline uint_least16_t CTRL_getNumCtrlTicksPerTrajTick(CTRL_Handle handle) 句柄: 获取每个轨迹时钟节拍的控制器时钟节拍数 控制器 (CTRL) 句柄 78 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 返回: InstaSPIN-FOC API 每个轨迹时钟节拍的控制器时钟节拍数,obj-> numCtrlTicksPerTrajTick CTRL_getNumIsrTicksPerCtrlTick () inline uint_least16_t CTRL_getNumIsrTicksPerCtrlTick(CTRL_Handle handle) 句柄: 返回: 获取每个控制器时钟节拍的中断服务程序 (ISR) 时钟节拍数 控制器 (CTRL) 句柄 每个控制器时钟节拍的中断服务程序 (ISR) 时钟节拍数,obj-> numIsrTicksPerCtrlTick CTRL_getRefValue_pu () inline _iq CTRL_getRefValue_pu(CTRL_Handle handle,const CTRL_Type_e ctrlType) 句柄: ctrlType: 返回: 获取指定控制器的参考值 控制器 (CTRL) 句柄 控制器类型 参考值,pu CTRL_getRhf () inline float_t CTRL_getRhf(CTRL_Handle handle) 句柄: 返回: 获取控制器的高频电阻 (Rhf) 值 控制器 (CTRL) 句柄 Rhf 值,obj->Rhf CTRL_getRoverL () inline float_t CTRL_getRoverL(CTRL_Handle handle) 句柄: 返回: 获取控制器的 R/L 值 控制器 (CTRL) 句柄 R/L 值,obj-> RoverL CTRL_getSpd_max_pu () i nline _iq CTRL_getSpd_max_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的最大速度值 控制器 (CTRL) 句柄 最大速度值,pu,obj-> spd_max CTRL_getSpd_out_addr () inline _iq *CTRL_getSpd_out_addr(CTRL_Handle handle) 获取控制器的输出速度内存地址 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 79 InstaSPIN-FOC API 句柄: 返回: 控制器 (CTRL) 句柄 输出速度内存地址,obj-> spd_out CTRL_getSpd_out_pu () inline _iq CTRL_getSpd_out_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的输出速度值 控制器 (CTRL) 句柄 输出速度值,pu,obj-> spd_out CTRL_getSpd_ref_pu () inline _iq CTRL_getSpd_ref_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的输出速度基准值 控制器 (CTRL) 句柄 输出速度基准值,pu,obj-> spd_ref CTRL_getSpd_int_ref_pu () inline _iq CTRL_getSpd_int_ref_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的输出速度中间基准值 控制器 (CTRL) 句柄 输出速度中间基准值,pu,obj-> trajHandle_ref CTRL_getState () CTRL_State_e CTRL_getState(CTRL_Handle handle) 句柄: 返回: 获取控制器状态 控制器 (CTRL) 句柄 控制器状态 CTRL_getTrajFreq () inline uint_least32_t CTRL_getTrajFreq(CTRL_Handle handle) 句柄: 返回: 获取轨迹执行频率 控制器 (CTRL) 句柄 轨迹执行频率,Hz,obj->trajFreq_Hz CTRL_getTrajPeriod_sec () inline _iq CTRL_getTrajPeriod_sec(CTRL_Handle handle) 获取轨迹执行频率 www.ti.com.cn 80 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: 控制器 (CTRL) 句柄 轨迹执行周期,秒,obj-> trajPeriod_sec InstaSPIN-FOC API CTRL_getTrajStep () void CTRL_getTrajStep(CTRL_Handle handle); 句柄: 返回: 获取轨迹步长 控制器 (CTRL) 句柄 轨迹执行频率,Hz CTRL_getUi () inline _iq CTRL_getUi(CTRL_Handle handle,const CTRL_Type_e ctrlType) 句柄: 返回: 获取指定控制器的积分器 (Ui) 值 控制器 (CTRL) 句柄 Ui 值 CTRL_getVab_in_pu () void CTRL_getVab_in_pu(CTRL_Handle handle,MATH_vec2 *pVab_in_pu); 句柄: pVab_in_pu: 获取控制器中的 alpha/beta 电压输入矢量值 控制器 (CTRL) 句柄 alpha/beta 电压输入矢量的矢量值,pu CTRL_getVab_out_addr () inline MATH_vec2 *CTRL_getVab_out_addr(CTRL_Handle handle) 句柄: 返回: 获取控制器中的 alpha/beta 电压输出矢量内存地址 控制器 (CTRL) 句柄 alpha/beta 电压输出矢量内存地址,&(obj->Vab_out) CTRL_getVab_out_pu () void CTRL_getVab_out_pu(CTRL_Handle handle,MATH_vec2 *pVab_out_pu); 句柄: 返回: 获取控制器中的 alpha/beta 电压输出矢量值 控制器 (CTRL) 句柄 alpha/beta 电压输出矢量的矢量值,pu CTRL_getVd_out_addr () inline _iq *CTRL_getVd_out_addr(CTRL_Handle handle) 获取控制器中的直流电压输出值内存地址 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 81 InstaSPIN-FOC API 句柄: 返回: 控制器 (CTRL) 句柄 直流电压输出值内存地址,&(obj->Vdq_out.value[0]) www.ti.com.cn CTRL_getVd_out_pu () inline _iq CTRL_getVd_out_pu(CTRL_Handle handle) 句柄: 返回: 获取控制器的直流电压输出值 控制器 (CTRL) 句柄 直流电压输出值,pu,obj->Vdq_out.value[0]) CTRL_getVdq_out_addr () inline MATH_vec2 *CTRL_getVdq_out_addr(CTRL_Handle handle) 句柄: 返回: 获取控制器中的直流/正交电压输出矢量内存地址 控制器 (CTRL) 句柄 直流/正交电压输出矢量内存地址,&(obj->Vdq_out) CTRL_getVdq_out_pu () void CTRL_getVdq_out_pu(CTRL_Handle handle,MATH_vec2 *pVdq_out_pu); 句柄: pVdq_out_pu: 获取控制器中的直流/正交电压输出矢量值 控制器 (CTRL) 句柄 直流/正交电压输出矢量的矢量值,pu CTRL_getVersion () void CTRL_getVersion(CTRL_Handle handle,CTRL_Version *pVersion); 句柄: pVersion: 获取控制器版本号 控制器 (CTRL) 句柄 版本的指针 CTRL_getVq_out_addr () inline _iq *CTRL_getVq_out_addr(CTRL_Handle handle) 句柄: 返回: 获取控制器中的正交电压输出值内存地址 控制器 (CTRL) 句柄 正交电压输出值内存地址,&(obj->Vdq_out.value[1]) CTRL_getVq_out_pu () inline _iq CTRL_getVq_out_pu(CTRL_Handle handle) 获取控制器的正交电压输出值 82 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: 控制器 (CTRL) 句柄 正交电压输出值,pu,obj->Vdq_out.value[1]) InstaSPIN-FOC API CTRL_getWaitTime () inline uint_least32_t CTRL_getWaitTime(CTRL_Handle handle,const CTRL_State_e ctrlState) 句柄: ctrlState: 返回: 获取给定状态的等待时间 控制器 (CTRL) 句柄 控制器状态 等待时间,控制器时钟计数,waitTimes[ctrlState] ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 83 InstaSPIN-FOC API 3.3.1.4 CTRL 计数器函数 CTRL_incrCounter_current () inline void CTRL_incrCounter_current(CTRL_Handle handle) www.ti.com.cn 句柄: counter_current: 递增电流计数器 控制器 (CTRL) 句柄 递增的 CTRL 对象成员 CTRL_incrCounter_isr () inline void CTRL_incrCounter_isr(CTRL_Handle handle) 句柄: counter_isr: 递增 ISR 计数器 控制器 (CTRL) 句柄 递增的 CTRL 对象成员 CTRL_incrCounter_speed () inline void CTRL_incrCounter_speed(CTRL_Handle handle) 句柄: counter_speed: 递增速度计数器 控制器 (CTRL) 句柄 递增的 CTRL 对象成员 CTRL_incrCounter_state () inline void CTRL_incrCounter_state(CTRL_Handle handle) 句柄: counter_state: 递增状态计数器 控制器 (CTRL) 句柄 递增的 CTRL 对象成员 CTRL_incrCounter_traj () inline void CTRL_incrCounter_traj(CTRL_Handle handle) 句柄: counter_traj: 递增轨迹计数器 控制器 (CTRL) 句柄 递增的 CTRL 对象成员 CTRL_resetCounter_current () inline void CTRL_resetCounter_current(CTRL_Handle handle) 将电流计数器重置为 0 句柄: 控制器 (CTRL) 句柄 84 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn counter_current: 重置为 0 的 CTRL 对象成员 CTRL_resetCounter_isr () inline void CTRL_resetCounter_isr(CTRL_Handle handle) 句柄: counter_isr: 将 ISR 计数器重置为 0 控制器 (CTRL) 句柄 重置为 0 的 CTRL 对象成员 CTRL_resetCounter_speed () inline void CTRL_resetCounter_speed(CTRL_Handle handle) 句柄: counter_speed: 将速度计数器重置为 0 控制器 (CTRL) 句柄 重置为 0 的 CTRL 对象成员 CTRL_resetCounter_state () inline void CTRL_resetCounter_state(CTRL_Handle handle) 句柄: counter_state: 将状态计数器重置为 0 控制器 (CTRL) 句柄 重置为 0 的 CTRL 对象成员 CTRL_resetCounter_traj () inline void CTRL_resetCounter_traj(CTRL_Handle handle) 句柄: counter_traj: 将轨迹计数器重置为 0 控制器 (CTRL) 句柄 重置为 0 的 CTRL 对象成员 InstaSPIN-FOC API ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 85 InstaSPIN-FOC API 3.3.1.5 CTRL Set 函数 www.ti.com.cn CTRL_setCtrlFreq_Hz () nline void CTRL_setCtrlFreq_Hz(CTRL_Handle handle,const uint_least32_t ctrlFreq_Hz) 句柄: ctrlFreq_Hz: 设置控制器频率 控制器 (CTRL) 句柄 控制器频率,Hz CTRL_setCtrlFreq_sec () inline void CTRL_setCtrlPeriod_sec(CTRL_Handle handle,const float_t ctrlPeriod_sec) 句柄: ctrlPeriod_sec: 设置控制器执行周期 控制器 (CTRL) 句柄 控制器执行周期,秒 CTRL_setErrorCode () inline void CTRL_setErrorCode(CTRL_Handle handle,const CTRL_ErrorCode_e errorCode) 句柄: errorCode: 设置控制器中的错误代码 控制器 (CTRL) 句柄 错误代码 CTRL_setEstParams () void CTRL_setEstParams(EST_Handle estHandle,USER_Params *pUserParams); estHandle: pUserParams: 设置默认估算器参数。 将 user.h 文件中定义的和 CTRL 使用的所有换算系数复制到 CTRL 对象中。 估算器 (EST) 句柄 用户参数的指针 CTRL_setFlag_enableCtrl () void CTRL_setFlag_enableCtrl(CTRL_Handle handle,const bool_t state) 句柄: 状态: 使能 FOC 控制器(使能电机控制器) 控制器 (CTRL) 句柄 所需状态: • True -> 使能控制器 • False -> 禁用控制器 86 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC API CTRL_setFlag_enableDcBusComp () void CTRL_setFlag_enableDcBusComp (CTRL_Handle handle,bool_t state) 句柄: 状态: 设置估算器的使能直流总线补偿标志值。 直流总线补偿算法将补偿 PI 控制器的 Iq 和 Id。 控制器 (CTRL) 句柄 所需状态的布尔值 CTRL_setFlag_enablePowerWarp () inline void CTRL_setFlag_enablePowerWarp(CTRL_Handle handle,const bool state) 句柄: 状态: 设置估算器的 PowerWarp 使能标志值。 仅当控制感应电机时才使用 PowerWarp。 PowerWarp 会调整磁场级别,根据电机负载使用最少的功耗。 控制器 (CTRL) 句柄 所需状态的布尔值 CTRL_setFlag_enableOffset () void CTRL_setFlag_enableOffset(CTRL_Handle handle,const bool_t state) 句柄: 状态: 启用或禁用电压和电流偏移校准 控制器 (CTRL) 句柄 所需状态: • True -> 执行偏移校准 • False -> 不执行偏移校准 calibrationCTRL_setFlag_enableSpeedCtrl () void CTRL_setFlag_enableSpeedCtrl(CTRL_Handle handle,const bool_t state) 句柄: 状态: 启用速度控制模式或启用转矩控制模式(将速度 PI 输出连接到 Iq) 控制器 (CTRL) 句柄 所需状态: • True -> 启用速度控制(将速度 PI 输出连接到 Iq 输入) • False -> 禁用速度控制(断开速度 PI 与 Iq 的连接。 Iq 可用于直流输入) CTRL_setFlag_enableUserMotorParams () void CTRL_setFlag_enableUserMotorParams(CTRL_Handle handle,const bool_t state) 设置估算器的使能用户电机参数标志值 句柄: 控制器 (CTRL) 句柄 状态: 所需状态: ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 87 InstaSPIN-FOC API • True -> 使用 user.h 中的用户电机参数 • False -> 执行电机参数估算 www.ti.com.cn CTRL_setGains () void CTRL_setGains(CTRL_Handle handle,const CTRL_Type_e ctrlType, const _iq Kp,const _iq Ki,const _iq Kd); 句柄: ctrlType: Kp: Ki: Kd: 设置指定控制器的增益值 控制器 (CTRL) 句柄 控制器类型 Kp 增益值,pu Ki 增益值,pu Kd 增益值,pu CTRL_setIab_in_pu () inline void CTRL_setIab_in_pu(CTRL_Handle handle,const MATH_vec2 *pIab_in_pu) 句柄: pIab_in_pu: 设置控制器中的 alpha/beta 电流(实验)输入矢量值 控制器 (CTRL) 句柄 alpha/beta 电流输入矢量的矢量值,pu CTRL_setIab_filt_pu () void CTRL_setIab_filt_pu(CTRL_Handle handle,const MATH_vec2 *pIab_filt_pu); 句柄: pIab_filt_pu: 设置控制器中的 alpha/beta 滤波电流矢量值 控制器 (CTRL) 句柄 alpha/beta 滤波电流矢量的矢量值,pu CTRL_setId_ref_pu () inline void CTRL_setId_ref_pu(CTRL_Handle handle,const _iq Id_ref_pu) 句柄: Id_ref_pu: 设置控制器的直流电流 (Id) 参考值 控制器 (CTRL) 句柄 正交电流参考值,pu,obj-> Idq_ref.value [0] CTRL_setIdq_in_pu () inline void CTRL_setIdq_in_pu(CTRL_Handle handle,const MATH_vec2 *pIdq_in_pu) 设置控制器中的直流/正交电流 (Idq) 输入矢量值 句柄: 控制器 (CTRL) 句柄 88 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn pIdq_in_pu: 直流/正交电流输入矢量的矢量值,pu,obj-> Idq_in.value [0,1] InstaSPIN-FOC API CTRL_setIdq_ref_pu () inline void CTRL_setIdq_ref_pu(CTRL_Handle handle,const MATH_vec2 *pIdq_ref_pu) 句柄: pIdq_ref_pu: 设置控制器中的直流/正交电流 (Idq) 参考矢量值 控制器 (CTRL) 句柄 直流/正交电流参考矢量的矢量值,pu,obj-> Idq_ref.value[0,1] CTRL_setIdRated_pu () inline void CTRL_setIdRated_pu(CTRL_Handle handle,const _iq IdRated_pu) 句柄: IdRated_pu: 设置控制器的 Id 额定电流值 控制器 (CTRL) 句柄 Id 额定电流值,pu,obj-> IdRated CTRL_setIq_ref_pu () void CTRL_setIq_ref_pu (CTRL_Handle handle, const _iq IqRef_pu) 句柄: IqRef_pu: 设置控制器的正交电流 (Id) 参考值 控制器 (CTRL) 句柄 正交电流参考值,pu,Idq_ref.value[1] CTRL_setKd () void CTRL_setKd (CTRL_Handle handle, const CTRL_Type_e ctrlType,const _iq Kd) 句柄: ctrlType: 设置指定控制器(速度、Id 或 Iq)的微分增益 (Kd) 值 控制器 (CTRL) 句柄 控制器类型 Kd:Kd 值 CTRL_setKi () void CTRL_setKi (CTRL_Handle handle, const CTRL_Type_e ctrlType,const _iq Ki) 句柄: ctrlType: 设置指定控制器(速度、Id 或 Iq)的积分增益 (Kd) 值 控制器 (CTRL) 句柄 控制器类型 Ki:Ki 值 CTRL_setKp () void CTRL_setKp (CTRL_Handle handle, const CTRL_Type_e ctrlType,const _iq Kp) 句柄: 设置指定控制器(速度、Id 或 Iq)的比例增益 (Kp) 值 控制器 (CTRL) 句柄 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 89 InstaSPIN-FOC API ctrlType: Kp: 控制器类型 Kp 值 www.ti.com.cn CTRL_setLhf () inline void CTRL_setLhf(CTRL_Handle handle,const float_t Lhf) 句柄: ctrlType: Lhf: 设置控制器的高频电感 (Lhf) 值 控制器 (CTRL) 句柄 控制器类型 Lhf 值 CTRL_setMagCurrent_pu () void CTRL_setMagCurrent_pu(CTRL_Handle handle,const _iq magCurrent_pu); 句柄: magCurrent_pu: 设置控制器的磁化电流值 控制器 (CTRL) 句柄 磁化电流值,pu CTRL_setMaxVsMag_pu () inline void CTRL_setMaxVsMag_pu(CTRL_Handle handle,const _iq maxVsMag) 句柄: maxVsMag: 设置控制器中的最大电压矢量 控制器 (CTRL) 句柄 最大电压矢量(值介于 0 和 4/3 之间),obj->maxVsMag_pu CTRL_setMaxAccel_pu () inline void CTRL_setMaxAccel_pu(CTRL_Handle handle,const _iq maxAccel_pu) 句柄: maxAccel_pu: 设置速度控制器的最大加速度 设置速度基准的最大加速率 控制器 (CTRL) 句柄 最大加速度(值介于 0 和 1 之间),pu,obj->traj_spd.maxDelta CTRL_setMaximumSpeed_pu () void CTRL_setMaximumSpeed_pu(CTRL_Handle handle,const _iq maxSpeed_pu); 句柄: maxSpeed_pu: 设置控制器的最大速度值 控制器 (CTRL) 句柄 最大速度值,pu CTRL_setParams() void CTRL_setParams(CTRL_Handle handle,USER_Params *pUserParams) 设置默认控制器参数。 此函数允许在实时操作控制器期间更新换算系数。 90 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: pUserParams: 控制器 (CTRL) 句柄 用户参数的指针 InstaSPIN-FOC API CTRL_setNumCtrlTicksPerCurrentTick () inline void CTRL_setNumCtrlTicksPerCurrentTick(CTRL_Handle handle, const uint_least16_t numCtrlTicksPerCurrentTick) 设置每个电流控制器时钟节拍的控制器时钟节拍数。 句柄: 控制器 (CTRL) 句柄 numCtrlTicksPerCurrentTick: 每个估算器时钟节拍的控制器时钟节拍数,obj-> numCtrlTicksPerCurrentTick CTRL_setNumCtrlTicksPerSpeedTick () inline void CTRL_setNumCtrlTicksPerSpeedTick(CTRL_Handle handle,,const uint_least16_t numCtrlTicksPerSpeedTick)numCtrlTicksPerCurrentTick) 设置每个速度控制器时钟节拍的控制器时钟节拍数。 句柄: 控制器 (CTRL) 句柄 numCtrlTicksPerSpeedTick: 每个速度时钟节拍的控制器时钟节拍数,obj-> numCtrlTicksPerSpeedTick CTRL_setNumCtrlTicksPerTrajTick () inline void CTRL_setNumCtrlTicksPerTrajTick(CTRL_Handle handle, const uint_least16_t numCtrlTicksPerTrajTick) 设置每个轨迹时钟节拍的控制器时钟节拍数。 句柄: 控制器 (CTRL) 句柄 numCtrlTicksPerTrajTick: 每个轨迹时钟节拍的控制器时钟节拍数,obj-> numCtrlTicksPerTrajTick CTRL_setNumIsrTicksPerCtrlTick () inline void CTRL_setNumIsrTicksPerCtrlTick(CTRL_Handle handle, const uint_least16_t numIsrTicksPerCtrlTick) 设置每个控制器时钟节拍的中断服务程序 (ISR) 时钟节拍数。 句柄: 控制器 (CTRL) 句柄 numIsrTicksPerCtrlTick: 每个控制器时钟节拍的 ISR 时钟节拍数 CTRL_setRhf () inline void CTRL_setRhf(CTRL_Handle handle,const float_t Rhf) 句柄: Rhf: 设置控制器的高频电阻 (Rhf) 值 控制器 (CTRL) 句柄 Rhf 值,obj->Rhf CTRL_setRoverL () inline void CTRL_setRoverL(CTRL_Handle handle,const float_t RoverL) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 91 InstaSPIN-FOC API 句柄: RoverL: 设置控制器的 R/L 值 控制器 (CTRL) 句柄 R/L 值,obj-> RoverL www.ti.com.cn CTRL_setSpdMax () void CTRL_setSpdMax (CTRL_Handle handle, const _iq spdMax) 句柄: spdMax: 设置控制器中的 PI 速度基准值 控制器 (CTRL) 句柄 速度控制器的最大允许输出 CTRL_setSpd_max_pu () inline void CTRL_setSpd_max_pu(CTRL_Handle handle,const _iq maxSpd_pu) 句柄: maxSpd_pu: 设置控制器的最大速度值 控制器 (CTRL) 句柄 最大速度值,pu CTRL_setSpd_out_pu () inline void CTRL_setSpd_out_pu(CTRL_Handle handle,const _iq spd_out_pu) 句柄: spd_out_pu: 设置控制器的输出速度值 控制器 (CTRL) 句柄 输出速度值,pu CTRL_setSpd_ref_pu () void CTRL_setSpd_ref_pu(CTRL_Handle handle,const _iq spd_ref_pu); 句柄: spd_ref_pu: 设置控制器的输出速度基准值 控制器 (CTRL) 句柄 输出速度基准值,pu CTRL_setSpd_ref_krpm () void CTRL_setSpd_ref_krpm(CTRL_Handle handle,const _iq spd_ref_krpm) 句柄: spd_ref_krpm: 设置控制器中的 PI 速度基准值 控制器 (CTRL) 句柄 输出速度基准值,krpm CTRL_setState () inline void CTRL_setState(CTRL_Handle handle,const CTRL_State_e state) 设置控制器状态 92 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 状态: 控制器 (CTRL) 句柄 新状态 InstaSPIN-FOC API CTRL_setTrajFreq_Hz () inline void CTRL_setTrajFreq_Hz(CTRL_Handle handle,const uint_least32_t trajFreq_Hz) 句柄: trajFreq_Hz: 设置轨迹执行频率 控制器 (CTRL) 句柄 轨迹执行频率,Hz,obj->trajFreq_Hz CTRL_setTrajPeriod_sec () inline void CTRL_setTrajPeriod_sec(CTRL_Handle handle,const _iq trajPeriod_sec) 句柄: trajPeriod_sec: 设置轨迹执行周期 控制器 (CTRL) 句柄 轨迹执行周期,秒,obj-> trajPeriod_sec CTRL_setUi () inline void CTRL_setUi(CTRL_Handle handle,const CTRL_Type_e ctrlType,const _iq Ui) 句柄: ctrlType: Ui: 设置指定控制器(速度、Id 或 Iq)的积分器 (Ui) 值 控制器 (CTRL) 句柄 控制器类型 Ui 值 CTRL_setupClarke_I () void CTRL_setupClarke_I(CTRL_Handle handle,uint_least8_t numCurrentSensors); 设置电流传感器数。 当读取不同数量的电流时,可使用不同的算法来计算克拉克变换。 句柄: 控制器 (CTRL) 句柄 ctrlType: 控制器类型 numCurrentSensors: 电流传感器数 CTRL_setupClarke_V () void CTRL_setupClarke_V(CTRL_Handle handle,uint_least8_t numVoltageSensors); 句柄: 设置电压传感器数。 当读取不同数量的电压时,可使用不同的算法来计算克拉克变换。 控制器 (CTRL) 句柄 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 93 InstaSPIN-FOC API ctrlType: 控制器类型 numVoltageSensors: 电压传感器数 CTRL_setupEstIdleState () void CTRL_setupEstIdleState(CTRL_Handle handle); 句柄: 针对估算器空闲状态设置控制器和轨迹生成器 控制器 (CTRL) 句柄 www.ti.com.cn 句柄: 控制器 (CTRL) 句柄 : CTRL_setupEstOnLineState () void CTRL_setupEstOnLineState(CTRL_Handle handle); 句柄: 针对估算器空闲状态设置控制器和轨迹生成器 控制器 (CTRL) 句柄 CTRL_setUserMotorParams () void CTRL_setUserMotorParams(CTRL_Handle handle); 句柄: 使用 user.h 文件中的电机参数设置控制器和估算器 控制器 (CTRL) 句柄 CTRL_setVab_in_pu () inline void CTRL_setVab_in_pu(CTRL_Handle handle,const MATH_vec2 *pVab_in_pu) 句柄: 设置控制器中的 alpha/beta 电压输入矢量值 控制器 (CTRL) 句柄 CTRL_setVab_out_pu () inline void CTRL_setVab_out_pu(CTRL_Handle handle,const MATH_vec2 *pVab_out_pu) 句柄: 设置控制器中的 alpha/beta 电压输出矢量值 控制器 (CTRL) 句柄 CTRL_setVdq_out_pu () inline void CTRL_setVdq_out_pu(CTRL_Handle handle,const MATH_vec2 *pVdq_out_pu) 94 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: pVdq_out_pu: 设置控制器中的直流/正交电压输出矢量值 控制器 (CTRL) 句柄 直流/正交电流输出矢量的矢量值,pu InstaSPIN-FOC API CTRL_setWaitTimes () void CTRL_setWaitTimes(CTRL_Handle handle,const uint_least32_t *pWaitTimes) 句柄: pWaitTimes: 设置控制器状态的等待时间 控制器 (CTRL) 句柄 等待时间矢量的指针,控制器时钟计数 CTRL_setup () void CTRL_setup(CTRL_Handle handle) 句柄: 设置控制器 控制器 (CTRL) 句柄 CTRL_setupCtrl () void CTRL_setupCtrl(CTRL_Handle handle); 句柄: 设置控制器 (CTRL) 对象及所有从属对象(运行 InstaSPIN 状态机) 控制器 (CTRL) 句柄 CTRL_setupEst () void CTRL_setupEst(CTRL_Handle handle); 句柄: 设置控制器 (CTRL) 对象及所有从属对象(运行 InstaSPIN 状态机) 控制器 (CTRL) 句柄 CTRL_setupTraj () void CTRL_setupTraj(CTRL_Handle handle); 句柄: 设置轨迹 (TRAJ) 对象 控制器 (CTRL) 句柄 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 95 InstaSPIN-FOC API 3.3.1.6 CTRL Run 和 Compute 函数 www.ti.com.cn CTRL_angleDelayComp () inline _iq CTRL_angleDelayComp(CTRL_Handle handle, const _iq angle_pu) 句柄: angle_pu: 返回: 运行角度延迟补偿。 此函数采用抽取率计算相位延迟,并对延迟进行补偿。 这使得电压输 出可更好地纠正误差。 控制器 (CTRL) 句柄 延迟的角度 相位延迟补偿角度,angleComp_pu CTRL_computePhasor () inline void CTRL_computePhasor(const _iq angle_pu,MATH_vec2 *pPhasor) angle_pu: pPhasor: 计算给定角度的相量 角度,pu 相量矢量值的指针 CTRL_doCurrentCtrl () inline bool CTRL_doCurrentCtrl(CTRL_Handle handle) 句柄: 返回: 确定是否应运行电流控制器 控制器 (CTRL) 句柄 指示是否应运行电流控制器的值 (true/false),结果 CTRL_doSpeedCtrl () inline bool CTRL_doSpeedCtrl(CTRL_Handle handle) 句柄: 返回: 确定是否应执行速度控制器 控制器 (CTRL) 句柄 指示是否应执行速度控制器的布尔值 (true/false) CTRL_run() void CTRL_run(CTRL_Handle handle,HAL_Handle halHandle,const HAL_AdcData_t *pAdcData, HAL_PwmData_t *pPwmData) 句柄: halHandle: pAdcData: pPwmData: 运行电机控制器计算,必须以 ISR 速率调用 控制器 (CTRL) 句柄 驱动程序 (HAL) 句柄 “HAL_AdcData_t”类型格式的 ADC 数据的指针 “HAL_AdcData_t”类型格式的 PWM 数据的指针 96 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC API CTRL_runTraj () void CTRL_runTraj(CTRL_Handle handle) 句柄: 运行轨迹 控制器 (CTRL) 句柄 CTRL_runOffLine () inline void CTRL_runOffLine(CTRL_Handle handle,HAL_Handle halHandle, const HAL_AdcData_t *pAdcData,HAL_PwmData_t *pPwmData) 句柄: halHandle: pAdcData: pPwmData: 运行离线控制器 控制器 (CTRL) 句柄 硬件抽象层 (HAL) 句柄 ADC 数据的指针 PWM 数据的指针 CTRL_runOnLine () inline void CTRL_runOnLine(CTRL_Handle handle,const HAL_AdcData_t *pAdcData,HAL_PwmData_t *pPwmData) 句柄: pAdcData: pPwmData: 运行在线控制器 控制器 (CTRL) 句柄 ADC 数据的指针 PWM 数据的指针 CTRL_runOnLine_User () inline void CTRL_runOnLine_User(CTRL_Handle handle, const HAL_AdcData_t *pAdcData,HAL_PwmData_t *pPwmData) 句柄: pAdcData: pPwmData: 运行在线控制器 控制器 (CTRL) 句柄 ADC 数据的指针 PWM 数据的指针 CTRL_useZeroIq_ref () inline bool CTRL_useZeroIq_ref(CTRL_Handle handle) 句柄: 返回: 确定是否应在控制器中使用零 Iq 电流参考 控制器 (CTRL) 句柄 指示是否应使用零 Iq 电流参考的布尔值 (true/false) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 97 InstaSPIN-FOC API 3.3.2 估算器 API 函数 - FAST 库 - est.h、est_states.h www.ti.com.cn 3.3.2.1 EST 枚举和结构 EST_RsOnLineFilterType_e Rs 在线滤波器类型的枚举 typedef enum { EST_RsOnLineFilterType_Current=0, EST_RsOnLineFilterType_Voltage } EST_RsOnLineFilterType_e; < Current Filter < Voltage Filter EST_ErrorCode_e 估算器错误代码的枚举 typedef enum { EST_ErrorCode_NoError=0, EST_ErrorCode_Flux_OL_ShiftOverFlow, code EST_ErrorCode_FluxError, EST_ErrorCode_Dir_ShiftOverFlow, EST_ErrorCode_Ind_ShiftOverFlow, EST_numErrorCodes } EST_ErrorCode_e; < no error error code < flux open loop shift overflow error < flux estimator error code < direction shift overflow error code < inductance shift overflow error code < the number of estimator error codes EST_State_e 估算器状态的枚举 typedef enum { EST_State_Error=0, EST_State_Idle, EST_State_RoverL, EST_State_Rs, EST_State_RampUp, EST_State_IdRated, EST_State_RatedFlux_OL, EST_State_RatedFlux, EST_State_RampDown, EST_State_LockRotor, EST_State_Ls, EST_State_Rr, EST_State_MotorIdentified, EST_State_OnLine, EST_numStates } EST_State_e; < error < idle < R/L estimation < Rs estimation state < ramp up the speed < control Id and estimate the rated flux < estimate the open loop rated flux < estimate the rated flux < ramp down the speed < lock the rotor < stator inductance estimation state < rotor resistance estimation state < motor identified state < online parameter estimation < the number of estimator states 98 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 3.3.2.2 EST Set 函数 InstaSPIN-FOC API EST_setRsOnLineId_pu () extern void EST_setRsOnLineId_pu(EST_Handle handle,const _iq Id_pu); 句柄: 返回: 获取用于在线定子电阻估算的 Id 值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 值,pu EST_setAngle_pu () extern void EST_setAngle_pu(EST_Handle handle,const _iq angle_pu); 句柄: angle_pu: 设置估算器中的角度值,标么值 (pu),IQ24 此函数会用用户提供的角度覆盖估算角度。 设置的值应介于 0x00000000 到 0x00FFFFFF 或 _IQ(0.0) 到 _IQ(1.0) 之间。 以下示例说明了如何覆盖估算角度: _iq Overwrite_Flux_Angle_pu = _IQ(0.5); EST_setAngle_pu(handle, Overwrite_Flux_Angle_pu); 一般用途不建议使用此函数,因为此函数会自动在转子磁通轴与驱动电机的控制信号之间 产生轴失准。 建议对执行需要绕过估算器的开环启动算法感兴趣的高级用户使用此函数。 估算器 (EST) 句柄 角度值,pu EST_setDcBus_pu () extern void EST_setDcBus_pu(EST_Handle handle,const _iq dcBus_pu); 句柄: dcBus_pu: 设置估算器中的直流总线电压,标么值 (pu),IQ24 估算器 (EST) 句柄 直流总线电压,pu EST_setDir_qFmt () extern void EST_setDir_qFmt(EST_Handle handle,const uint_least8_t dir_qFmt); 句柄: dir_qFmt: 设置估算器中的方向 Q 格式 估算器 (EST) 句柄 方向 Q 格式 EST_setFe_neg_max_pu () extern void EST_setFe_neg_max_pu(EST_Handle handle,const _iq fe_neg_max_pu); 设置估算器中的最大负电频率 句柄: 估算器 (EST) 句柄 fe_neg_max_pu: 最大负电频率,Hz ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 99 InstaSPIN-FOC API www.ti.com.cn EST_setFe_pos_min_pu () extern void EST_setFe_pos_min_pu(EST_Handle handle,const _iq fe_pos_min_pu); 句柄: fe_pos_min_pu: 设置估算器中的最小正电频率 估算器 (EST) 句柄 最小正电频率,Hz EST_setFlag_enableFluxControl () extern void EST_setFlag_enableFluxControl(EST_Handle handle,const bool state); 句柄: 状态: 设置估算器中的使能磁通控制标志 估算器 (EST) 句柄 所需的标志状态,开 (1) 或关 (0) EST_setFlag_enableForceAngle () void EST_setFlag_enableForceAngle (EST_Handle handle,const bool_t state) 句柄: 状态: 设置估算器中的使能强制角标志 启用或禁用电机启动时的 Rs 直流测量 估算器 (EST) 句柄 所需的标志状态,开 (1) 或关 (0) • TRUE:启用强制角。 如果磁通频率低于以下定义中的阈值,则绕过估算角度: #define USER_ZEROSPEEDLIMIT (0.001) 该定义在 user.h 中。 此频率的典型值为以下定义中的满量程频率乘以 0.001: #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) 强制角算法有效时,也就是转子磁通电频率低于阈值时,将强制以下面定义设置的频率 旋转一定角度: #define USER_FORCE_ANGLE_FREQ_Hz (1.0) • FALSE:禁用强制角。 估算器不会被任何强制角算法绕过。 EST_setFlag_enableRsOnLine () void EST_setFlag_enableRsOnLine(EST_Handle handle,const bool_t state) 句柄: 状态: 启用或禁用估算器句柄中的 Rs 在线估算 估算器 (EST) 句柄 所需的标志状态,开 (1) 或关 (0) EST_setFlag_enableRsRecalc () void EST_setFlag_enableRsRecalc(EST_Handle handle,const bool_t state) 设置估算器中的使能定子电阻 (Rs) 重新计算标志 100 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 状态: 启用或禁用电机启动时的 Rs 直流测量 估算器 (EST) 句柄 所需的标志状态,开 (1) 或关 (0) InstaSPIN-FOC API EST_setFlag_estComplete () extern void EST_setFlag_estComplete(EST_Handle handle,const bool state); 句柄: 状态: 设置估算器中的估算完成标志 估算器 (EST) 句柄 所需的标志状态,true (1) 或 false (0) EST_setFlag_updateRs () void EST_setFlag_updateRs(EST_Handle handle,const bool_t state) 句柄: 状态: 设置估算器中的更新定子电阻 (Rs) 标志。 将 Rs 在线估算器中的 Rs 值复制为 InstaSpin 角度估算器使用的 Rs 值 估算器 (EST) 句柄 所需的标志状态,开 (1) 或关 (0) EST_setForceAngleDelta_pu () extern void EST_setForceAngleDelta_pu(EST_Handle handle,const _iq angleDelta_pu); 句柄: angleDelta_pu: 设置估算器中的强制角增量值,标么值 (pu),IQ24 此函数设置一个强制角增量,表示强制角要加上或减去的增量。 该值越大,强制角时生成 的频率越高(在强制角模式下将绕过估算角度)。 默认情况下,强制角频率在 user.h 中 设置。 以下示例说明了如何将强制角频率的单位从赫兹 (Hz) 设为标么值: #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_EST_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_EST_TICK) #define USER_FORCE_ANGLE_FREQ_Hz (1.0) _iq delta_hz_to_pu_sf = _IQ(1.0/(float_t)USER_EST_FREQ_Hz); _iq Force_Angle_Freq_Hz = _IQ(USER_FORCE_ANGLE_FREQ_Hz); _iq Force_Angle_Delta_pu = _IQmpy(Force_Angle_Freq_Hz, delta_hz_to_pu_sf); EST_setForceAngleDelta_pu(handle, Force_Angle_Delta_pu); 估算器 (EST) 句柄 强制角增量值,pu ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 101 InstaSPIN-FOC API www.ti.com.cn EST_setFreqB0_lp_pu () extern void EST_setFreqB0_lp_pu(EST_Handle handle,const _iq b0_lp_pu); 句柄: b0_lp_pu: 设置频率估算器中的低通滤波器分子值,标么值 (pu),IQ30 估算器 (EST) 句柄 低通滤波器分子值,pu EST_setFreqBeta_lp_pu () extern void EST_setFreqBeta_lp_pu(EST_Handle handle,const _iq beta_lp_pu); 句柄: beta_lp_pu: 设置用于设置频率估算器中的低通极点位置的值,标么值 (pu),IQ30 估算器 (EST) 句柄 用于设置滤波器极点位置的值,pu EST_setFullScaleCurrent () extern void EST_setFullScaleCurrent(EST_Handle handle,const float_t fullScaleCurrent); 句柄: fullScaleCurrent: 设置估算器中的满量程电流,安培 (A) 估算器 (EST) 句柄 满量程电流,A EST_setFullScaleFlux () extern void EST_setFullScaleFlux(EST_Handle handle,const float_t fullScaleFlux); 句柄: fullScaleFlux: 设置估算器中使用的满量程磁通值,伏*秒 (V.s) 估算器 (EST) 句柄 满量程磁通值,V*s EST_setFullScaleFreq () extern void EST_setFullScaleFreq(EST_Handle handle,const float_t fullScaleFreq); 句柄: fullScaleFreq: 设置估算器中的满量程频率,赫兹 (Hz) 估算器 (EST) 句柄 满量程频率,Hz EST_setFullScaleInductance () extern void EST_setFullScaleInductance(EST_Handle handle,const float_t fullScaleInductance); 设置估算器中的满量程电感,亨利 (H) 102 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 估算器 (EST) 句柄 fullScaleInductance: 满量程电感,亨利 InstaSPIN-FOC API EST_setFullScaleResistance () extern void EST_setFullScaleResistance(EST_Handle handle,const float_t fullScaleResistance); 设置估算器中的满量程电阻,欧姆 句柄: 估算器 (EST) 句柄 fullScaleResistance: 满量程电阻,欧姆 EST_setFullScaleVoltage () extern void EST_setFullScaleVoltage(EST_Handle handle,const float_t fullScaleVoltage); 句柄: fullScaleVoltage: 设置估算器中的满量程电压,伏特 (V) 估算器 (EST) 句柄 满量程电压,V EST_setIdle () extern void EST_setIdle(EST_Handle handle); 句柄: 将估算器设置为空闲 估算器 (EST) 句柄 EST_setIdle_all () extern void EST_setIdle_all(EST_Handle handle); 句柄: 将估算器及所有从属估算器设置为空闲 估算器 (EST) 句柄 EST_setId_ref_pu () extern void EST_setId_ref_pu(EST_Handle handle,const _iq Id_ref_pu); 句柄: Id_ref_pu: 设置估算器中的直流电流 (Id) 参考值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 参考值,pu EST_setIdRated_pu () extern void EST_setIdRated_pu(EST_Handle handle,const _iq IdRated_pu); 句柄: IdRated_pu: 设置估算器中的 Id 额定电流值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 额定电流值,pu ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 103 InstaSPIN-FOC API www.ti.com.cn EST_setIq_ref_pu () extern void EST_setIq_ref_pu(EST_Handle handle,const _iq Iq_ref_pu); 句柄: Iq_ref_pu: 设置估算器中的正交电流 (Iq) 参考值,标么值 (pu),IQ24 估算器 (EST) 句柄 Iq 参考值,pu EST_setLs_d_pu () extern void EST_setLs_d_pu(EST_Handle handle,const _iq Ls_d_pu); 句柄: Ls_d_pu: 设置估算器中的直流定子电感值,标么值 (pu),IQ30 调用此函数可实时更改估算器使用的内部直流电感 (Ls_d)。 下面显示了此操作的一个示 例: #define USER_MOTOR_Ls_d (0.012) float_t fullScaleInductance = EST_getFullScaleInductance(handle); float_t Ls_coarse_max = _IQ30toF(EST_getLs_coarse_max_pu(handle)); int_least8_t lShift = ceil(log(USER_MOTOR_Ls_d/(Ls_coarse_max*fullScaleInductance))/log(2.0)); uint_least8_t Ls_qFmt = 30 - lShift; float_t L_max = fullScaleInductance * pow(2.0,lShift); _iq Ls_d_pu = _IQ30(USER_MOTOR_Ls_d / L_max); EST_setLs_d_pu(handle, Ls_d_pu); EST_setLs_qFmt(handle, Ls_qFmt); 估算器 (EST) 句柄 直流定子电感值,pu EST_setLs_delta_pu () extern void EST_setLs_delta_pu(EST_Handle handle,const _iq Ls_delta_pu); 句柄: Ls_delta_pu: 设置精确估算过程中的定子电感增量值 估算器 (EST) 句柄 定子电感增量值,pu EST_setLs_dq_pu () extern void EST_setLs_dq_pu(EST_Handle handle,const MATH_vec2 *pLs_dq_pu); 设置估算器中的直流/正交定子电感矢量值,标么值 (pu),IQ30 调用此函数可实时更改估算器使用的内部直流和正交电感 (Ls_d 和 Ls_q)。 下面显示了此 操作的一个示例: #define USER_MOTOR_Ls_d (0.012) #define USER_MOTOR_Ls_q (0.027) float_t fullScaleInductance = EST_getFullScaleInductance(handle); float_t Ls_coarse_max = _IQ30toF(EST_getLs_coarse_max_pu(handle)); int_least8_t lShift = ceil(log(USER_MOTOR_Ls_d/(Ls_coarse_max*fullScaleInductance))/log(2.0)); uint_least8_t Ls_qFmt = 30 - lShift; float_t L_max = fullScaleInductance * pow(2.0,lShift); MATH_vec2 Ls_dq_pu; 104 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC API 句柄: pLs_dq_pu: Ls_dq_pu.value[0] = _IQ30(USER_MOTOR_Ls_d / L_max); Ls_dq_pu.value[1] = _IQ30(USER_MOTOR_Ls_q / L_max); EST_setLs_dq_pu(handle, &Ls_dq_pu); EST_setLs_qFmt(handle, Ls_qFmt); 估算器 (EST) 句柄 直流/正交定子电感矢量值的指针,pu EST_setLs_q_pu () extern void EST_setLs_q_pu(EST_Handle handle,const _iq Ls_q_pu); 句柄: Ls_q_pu: 设置估算器中的正交定子电感值,标么值 (pu),IQ30 调用此函数可实时更改估算器使用的内部正交电感 (Ls_q)。 下面显示了此操作的一个示 例: #define USER_MOTOR_Ls_q (0.027) float_t fullScaleInductance = EST_getFullScaleInductance(handle); float_t Ls_coarse_max = _IQ30toF(EST_getLs_coarse_max_pu(handle)); int_least8_t lShift = ceil(log(USER_MOTOR_Ls_q/(Ls_coarse_max*fullScaleInductance))/log(2.0)); uint_least8_t Ls_qFmt = 30 - lShift; float_t L_max = fullScaleInductance * pow(2.0,lShift); _iq Ls_d_pu = _IQ30(USER_MOTOR_Ls_q / L_max); EST_setLs_q_pu(handle, Ls_q_pu); EST_setLs_qFmt(handle, Ls_qFmt); 估算器 (EST) 句柄 正交定子电感值,pu EST_setLs_qFmt () extern void EST_setLs_qFmt(EST_Handle handle,const uint_least8_t Ls_qFmt); 设置估算器中的定子电感 Q 格式,8 位无符号整数 (uint_least8_t) 更新内部电感还需要更新 Q 格式变量,该变量用于扩展覆盖范围。 此 qFmt(Q 格式)变 量会使用定点数学运算生成浮点。 需要注意的是,通过调用 EST_setLs_qFmt() 设定的电 感 Q 格式将被标么电感计算值 Ls_d 和 Ls_q 同时使用。 下面显示了如何设置该 Q 格式的 示例: #define USER_MOTOR_Ls_d (0.012) #define USER_MOTOR_Ls_q (0.027) float_t fullScaleInductance = EST_getFullScaleInductance(handle); float_t Ls_coarse_max = _IQ30toF(EST_getLs_coarse_max_pu(handle)); int_least8_t lShift = ceil(log(USER_MOTOR_Ls_d/(Ls_coarse_max*fullScaleInductance))/log(2.0)); uint_least8_t Ls_qFmt = 30 - lShift; float_t L_max = fullScaleInductance * pow(2.0,lShift); MATH_vec2 Ls_dq_pu; Ls_dq_pu.value[0] = _IQ30(USER_MOTOR_Ls_d / L_max); Ls_dq_pu.value[1] = _IQ30(USER_MOTOR_Ls_q / L_max); EST_setLs_dq_pu(handle, &Ls_dq_pu); EST_setLs_qFmt(handle, Ls_qFmt); 句柄: 估算器 (EST) 句柄 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 105 InstaSPIN-FOC API Ls_qFmt: 定子电感 Q 格式 www.ti.com.cn EST_setMaxAccel_pu () extern void EST_setMaxAccel_pu(EST_Handle handle,const _iq maxAccel_pu); 句柄: maxAccel_pu: 设置估算器中的最大加速度值,标么值 (pu),IQ24 估算器 (EST) 句柄 最大加速度值,pu EST_setMaxAccel_est_pu () extern void EST_setMaxAccel_est_pu(EST_Handle handle,const _iq maxAccel_pu); 句柄: maxAccel_pu: 设置估算器中的最大估算加速度值,标么值 (pu),IQ24 估算器 (EST) 句柄 最大估算加速度值,pu EST_setMaxCurrentSlope_pu () void EST_setMaxCurrentSlope_pu (EST_Handle handle, const _iq maxCurrentSlope_pu ) 确定电机是否已被识别 句柄: 估算器 (EST) 句柄 maxCurrentSlope_pu: 最大电流斜率值,pu EST_setMaxCurrentSlope_PowerWarp_pu () extern void EST_setMaxCurrentSlope_PowerWarp_pu(EST_Handle handle,const _iq maxCurrentSlope_pu); 设置估算器中使用的最大 PowerWarp 电流斜率值,标么值 (pu),IQ24 句柄: 估算器 (EST) 句柄 maxCurrentSlope_pu: 最大电流斜率值,pu EST_setRr_pu () extern void EST_setRr_pu(EST_Handle handle,const _iq Rr_pu); 句柄: Rr_pu: 设置估算器中的转子电阻值,标么值 (pu),IQ30 估算器 (EST) 句柄 转子电阻值,pu EST_setRr_qFmt () extern void EST_setRr_qFmt(EST_Handle handle,uint_least8_t Rr_qFmt); 设置估算器中的转子电阻 Q 格式,8 位无符号整数 (uint_least8_t) 106 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: Rr_qFmt: 估算器 (EST) 句柄 转子电阻 Q 格式 InstaSPIN-FOC API EST_setRs_delta_pu () extern void EST_setRs_delta_pu(EST_Handle handle,const _iq Rs_delta_pu); 句柄: Rs_delta_pu: 设置定子电阻增量值 估算器 (EST) 句柄 定子电阻增量值,pu EST_setRsOnLine_pu () extern void EST_setRsOnLine_pu(EST_Handle handle,const _iq Rs_pu); 句柄: Rs_pu: 设置在线定子电阻估算器中的定子电阻值,标么值 (pu),IQ30 估算器 (EST) 句柄 定子电阻值,pu EST_setRsOnLine_qFmt () extern void EST_setRsOnLine_qFmt(EST_Handle handle,const uint_least8_t Rs_qFmt); 句柄: Rs_qFmt: 设置在线定子电阻估算器中的定子电阻 Q 格式,8 位无符号整数 (uint_least8_t) 估算器 (EST) 句柄 定子电阻 Q 格式 EST_setRsOnLineFilterParams () extern void EST_setRsOnLineFilterParams(EST_Handle handle,const EST_RsOnLineFilterType_e filterType, const _iq filter_0_b0,const _iq filter_0_a1,const _iq filter_0_y1, const _iq filter_1_b0,const _iq filter_1_a1,const _iq filter_1_y1); 句柄: filterType: filter_0_b0: filter_0_a1: filter_0_y1: filter_1_b0: filter_1_a1: 设置在线定子电阻滤波器参数,标么值 (pu),IQ24 估算器 (EST) 句柄 滤波器类型 z^0 的滤波器 0 分子系数值 z^(-1) 的滤波器 0 分母系数值 时间采样 n=-1 时的滤波器 0 输出值 z^0 的滤波器 1 分子系数值 z^(-1) 的滤波器 1 分母系数值 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 107 InstaSPIN-FOC API filter_1_y1: 时间采样 n=-1 时的滤波器 1 输出值 www.ti.com.cn EST_setRsOnLineId_mag_pu () extern void EST_setRsOnLineId_mag_pu(EST_Handle handle,const _iq Id_mag_pu); 句柄: Id_mag_pu: 设置用于在线定子电阻估算的 Id 幅值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 幅值,pu EST_setRs_pu () extern void EST_setRs_pu(EST_Handle handle,const _iq Rs_pu); 句柄: Rs_pu: 设置估算器中使用的定子电阻值,标么值 (pu),IQ30 估算器 (EST) 句柄 定子电阻值,pu EST_setRs_qFmt () extern void EST_setRs_qFmt(EST_Handle handle,uint_least8_t Rs_qFmt); 句柄: Rs_qFmt: 设置估算器中的定子电阻 Q 格式,8 位无符号整数 (uint_least8_t) 估算器 (EST) 句柄 定子电阻 Q 格式 EST_updateId_ref_pu () extern void EST_updateId_ref_pu(EST_Handle handle,_iq *pId_ref_pu); 句柄: pId_ref_pu: 更新用于在线定子电阻估算的 Id 参考值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 参考值的指针,pu 108 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 3.3.2.3 EST Get 函数 EST_get_krpm_to_pu_sf () extern _iq EST_get_krpm_to_pu_sf(EST_Handle handle); InstaSPIN-FOC API 句柄: 返回: 获取 krpm 到 pu 的换算系数,标么值 (pu),IQ24 当用户需要将电机速度值从 krpm(每 分钟千转数)值换算为标么值时,需要使用此函数。 此换算系数的计算和使用如下所示: #define USER_MOTOR_NUM_POLE_PAIRS #define USER_IQ_FULL_SCALE_FREQ_Hz (2) (500.0) _iq scale_factor = _IQ(USER_MOTOR_NUM_POLE_PAIRS * 1000.0 / (60.0 * USER_IQ_FULL_SCALE_FREQ_Hz)); _iq Speed_krpm = EST_getSpeed_krpm(handle); _iq Speed_krpm_to_pu_sf = EST_get_krpm_to_pu_sf(handle); _iq Speed_pu = _IQmpy(Speed_krpm,Speed_krpm_to_pu_sf); 估算器 (EST) 句柄 krpm 到 pu 的换算系数。 该值为 IQ24 格式 EST_get_pu_to_krpm_sf () extern _iq EST_get_pu_to_krpm_sf(EST_Handle handle); 句柄: 返回: 获取 pu 到 krpm 的换算系数,标么值 (pu),IQ24 当用户需要将电机速度值从标么值换算 为 krpm(每分钟千转数)值时,需要使用此函数。 此换算系数的计算和使用如下所示: #define USER_MOTOR_NUM_POLE_PAIRS #define USER_IQ_FULL_SCALE_FREQ_Hz (2) (500.0) _iq scale_factor = IQ(60.0 * USER_IQ_FULL_SCALE_FREQ_Hz / (USER_MOTOR_NUM_POLE_PAIRS * 1000.0)); _iq Speed_pu = EST_getFm_pu(handle); _iq Speed_pu_to_krpm_sf = EST_get_pu_to_krpm_sf(handle); _iq Speed_krpm = _IQmpy(Speed_krpm,Speed_krpm_to_pu_sf); 估算器 (EST) 句柄 krpm 到 pu 的换算系数。 该值为 IQ24 格式 EST_getAngle_pu () _iq EST_getAngle_pu(EST_Handle handle) 句柄: 返回: 获取估算器中的角度值,标么值 (pu),IQ24 此函数返回转子磁通角的标么值。 该值在 1.0 处计满循环,因此返回值介于 0x00000000 到 0x00FFFFFF 或 _IQ(0.0) 到 _IQ(1.0) 之 间。 使用此角度的示例如下所示: _iq Rotor_Flux_Angle_pu = EST_getAngle_pu(handle); 估算器 (EST) 句柄 磁通角度值,pu EST_getDcBus_pu () _iq EST_getDcBus_pu(EST_Handle handle) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 109 InstaSPIN-FOC API 句柄: 返回: www.ti.com.cn 获取估算器中的直流总线值,标么值 (pu),IQ24 调用函数 EST_run() 时,该值最初作为 一个参数传递。 一个类似的函数可以简单地读取 ADC 转换器通过 pAdcData->dcBus 读 取和换算的数据。 库在内部使用该值来计算直流总线值的倒数,以补偿电流控制器的比例 增益。 以下示例说明了如何使用此函数计算直流总线值(以千伏为单位): #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) _iq Vbus_pu = EST_getDcBus_pu(handle); _iq Vbus_pu_to_kV_sf = _IQ(USER_IQ_FULL_SCALE_VOLT _iq Vbus_kV = _IQmpy(Vbus_pu,Vbus_pu_to_kV_sf); 估算器 (EST) 句柄 直流总线值,pu EST_ErrorCode_e EST_getErrorCode () extern EST_ErrorCode_e EST_getErrorCode(EST_Handle handle); 句柄: 返回: 获取控制器的错误代码 估算器 (EST) 句柄 错误代码 EST_getFe () extern int32_t EST_getFe(EST_Handle handle); 句柄: 返回: 获取电机的电频率,赫兹 (Hz)。 此频率 (Hz) 是进入电机的电流和电压的频率。 要获取电 机的速度,最好使用 EST_getFm()。 估算器 (EST) 句柄 电频率,Hz EST_getFe_pu () extern _iq EST_getFe_pu(EST_Handle handle); 句柄: 返回: 获取电机的电频率,标么值 (pu),IQ24 与 EST_getFe() 函数类似,该函数返回电机的电 频率(标么值)。 要将电频率从标么值转换为 Hz,用户需要将返回值乘以以下换算系 数: _iq Full_Scale_Freq_Elec_Hz = _IQ(USER_IQ_FULL_SCALE_FREQ_Hz); _iq Freq_Elec_Hz = _IQmpy(EST_getFe_pu(handle),Full_Scale_Freq_Elec_Hz); 估算器 (EST) 句柄 电频率,pu EST_getFlag_enableForceAngle () extern bool EST_getFlag_enableForceAngle(EST_Handle handle); 获取估算器的使能强制角标志值。 句柄: 估算器 (EST) 句柄 返回: 标志值,布尔型,bool • TRUE: 启用强制角,如果磁通频率低于以下定义中的阈值,则将绕过估算角度: 110 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn #define USER_ZEROSPEEDLIMIT (0.001) InstaSPIN-FOC API 此频率的典型值为以下定义中的满量程频率乘以 0.001: #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) 强制角算法有效时,也就是转子磁通电频率低于阈值时,将强制以下面定义设置的频率 旋转一定角度: #define USER_FORCE_ANGLE_FREQ_Hz (1.0) • FALSE:禁用强制角。 估算器不会被任何强制角算法绕过。 EST_getFlag_enableRsOnLine () extern bool EST_getFlag_enableRsOnLine(EST_Handle handle); 句柄: 返回: 获取使能在线定子电阻 (Rs) 估算的标志值 估算器 (EST) 句柄 使能在线 Rs 标志值 • true - 使能 Rs 在线再校准算法。 估算器将运行一组与 Rs 在线再校准算法相关的函 数,该算法会在电机旋转时重新计算定子电阻。 当电机升温并且定子电阻因此增大 时,此算法非常有用。 • false - 禁用 Rs 在线再校准算法,即使电机升温也不对 Rs 进行更新。 如果定子电阻由 于电机升温而发生变化,可能会影响低速性能和满转矩时的启动性能。 定子电阻将固 定,并等于 EST_getRs_Ohm() 返回的值。 EST_getFlag_enableRsRecalc () extern bool EST_getFlag_enableRsRecalc(EST_Handle handle); 句柄: 返回: 获取使能在线定子电阻 (Rs) 估算的标志值 估算器 (EST) 句柄 使能在线 Rs 标志值 • true - 使能 Rs 在线再校准算法。 估算器将运行一组与 Rs 在线再校准算法相关的函 数,该算法会在电机旋转时重新计算定子电阻。 当电机升温并且定子电阻因此增大 时,此算法非常有用。 • false - 禁用 Rs 在线再校准算法,即使电机升温也不对 Rs 进行更新。 如果定子电阻由 于电机升温而发生变化,可能会影响低速性能和满转矩时的启动性能。 定子电阻将固 定,并等于 EST_getRs_Ohm() 返回的值。 EST_getFlag_estComplete () extern bool EST_getFlag_estComplete(EST_Handle handle); 句柄: 获取指示估算完成的标志值。 每次运行 EST_run() 函数时,此标志都会设置为 true。 可 通过以下示例将此标志重置为 false: bool estComplete_Flag = EST_getFlag_estComplete(handle); 估算器 (EST) 句柄 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 111 InstaSPIN-FOC API 返回: www.ti.com.cn 使能在线 Rs 标志值 • true - 自上次调用 EST_setFlag_estComplete(handle, false) 以来,估算器已运行至少 一次。 • false - 自上次调用 EST_setFlag_estComplete(handle, false) 以来,估算器尚未运行。 EST_getFlag_updateRs () extern bool EST_getFlag_updateRs(EST_Handle handle); 句柄: 返回: 获取使能更新定子电阻 (Rs) 值的标志值。 启用在线电阻估算器时,更新标志允许将在线 电阻复制为估算器模型使用的电阻。 如果更新标志未设置为 true,估算器模型将不会使用 在线电阻估算,而且如果由于温度升高使电阻变化过大,模型可能无法按预期工作。 bool update_Flag = EST_getFlag_updateRs(handle); 估算器 (EST) 句柄 更新 Rs 标志值 • true - Rs 在线模块估算的定子电阻将复制为模块使用的定子电阻,因此当电机的温度 发生变化时,将根据最新的定子电阻计算估算角度。 • false - Rs 在线模块估算的定子电阻会根据使能标志更新,但不会在用于生成估算速度 和角度的电机模型中使用。 EST_getFlux_VpHz () int32_t EST_getFlux_VpHz(EST_Handle handle) 句柄: 返回: 获取磁通值 (V/Hz) 估算器会不断计算转子与定子之间的磁链,它是磁通中产生转矩的一部分。 此函数返回转 子和定子线圈之间的磁链,并忽略匝数,单位为伏/赫兹 (V/Hz)。 仅当识别电机后,此函 数才会返回精确值,这可通过以下代码示例检查: if(EST_isMotorIdentified(handle)) { // once the motor has been identified, get the flux float_t Flux_VpHz = EST_getFlux_VpHz(handle); } 估算器 (EST) 句柄 磁通值,V/Hz EST_getFlux_Wb () int32_t EST_getFlux_Wb(EST_Handle handle) 获取磁通值(韦伯) 估算器会不断计算转子与定子之间的磁链,它是磁通中产生转矩的一部分。 此函数返回转 子和定子线圈之间的磁链,并忽略匝数,单位为韦伯 (Wb) 或伏*秒 (V.s)。 仅当识别电机 后,此函数才会返回精确值,这可通过以下代码示例检查: if(EST_isMotorIdentified(handle)) { // once the motor has been identified, get the flux float_t Flux_Wb = EST_getFlux_Wb(handle); } 112 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: 估算器 (EST) 句柄 磁通值,韦伯 InstaSPIN-FOC API EST_getFlux_pu () extern _iq EST_getFlux_pu(EST_Handle handle); 句柄: 返回: 获取磁通值,标么值 (pu),IQ24 估算器会不断计算转子与定子之间的磁链,它是磁通中产生转矩的一部分。 此函数返回转 子和定子线圈之间的磁链,并忽略匝数,标么值。 仅当识别电机后,此函数才会返回精确 值,这可通过以下代码示例检查: if(EST_isMotorIdentified(handle)) { // once the motor has been identified, get the flux _iq Flux_pu = EST_getFlux_pu(handle); } 对于一些应用,获取此标么值非常重要,因为处理该值的速度要快得多,特别是微控制器 的架构没有浮点处理单元时。 为了将此标么值转换为 _iq 换算值,必须考虑一个换算系数 将此标么磁通转换为所需单位。 以下示例说明了如何将标么值转换为 IQ 格式的 Wb 和 V/Hz 以进行更快的处理: float_t FullScaleFlux = (USER_IQ_FULL_SCALE_VOLTAGE_V/(float_t)USER_EST_FREQ_Hz); float_t maxFlux = (USER_MOTOR_RATED_FLUX*((USER_MOTOR_TYPE==MOTOR_Type_Induction)?0.05:0.7)); float_t lShift = -ceil(log(FullScaleFlux/maxFlux)/log(2.0)); _iq gFlux_pu_to_Wb_sf = _IQ(FullScaleFlux/(2.0*MATH_PI)*pow(2.0,lShift)); _iq gFlux_pu_to_VpHz_sf = _IQ(FullScaleFlux*pow(2.0,lShift)); // The value of gFlux_pu_to_Wb_sf and gFlux_pu_to_VpHz_sf can be calculated once at the beginning of the // code and stored as global variables _iq Flux_Wb; _iq Flux_VpHz; _iq Flux_pu = EST_getFlux_pu(handle); Flux_Wb = _IQmpy(Flux_pu, gFlux_pu_to_Wb_sf); Flux_VpHz = _IQmpy(Flux_pu, gFlux_pu_to_VpHz_sf); 估算器 (EST) 句柄 磁通值,pu EST_getFm () extern int32_t EST_getFm(EST_Handle handle); 句柄: 返回: 获取电机的机械频率,赫兹 (Hz)。 此频率 (Hz) 是电机的机械频率。 如果电机是永磁电 机,机械频率将等于电频率,因为是同步电机。 如果电机是交流感应电机,机械频率将等 于电频率减去转差频率。 以下代码示例说明了如何使用此函数计算每分钟转数 (RPM)(浮 点): #define USER_MOTOR_NUM_POLE_PAIRS (2) float_t Mechanical_Freq_Hz = EST_getFm(handle); float_t hz_to_rpm_sf = 60.0/USER_MOTOR_NUM_POLE_PAIRS; float_t Speed_RPM = Mechanical_Freq_Hz * hz_to_rpm_sf; 估算器 (EST) 句柄 机械频率,Hz ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 113 InstaSPIN-FOC API www.ti.com.cn EST_getFm_pu () extern _iq EST_getFm_pu(EST_Handle handle); 句柄: 返回: 获取电机的机械频率,标么值 (pu),IQ24 与 EST_getFe_pu() 函数类似,该函数返回电机 的机械频率(标么值)。 要将机械频率从标么值转换为 KHz(以避免 IQ24 饱和),用户 需要将返回值乘以以下换算系数: #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) _iq pu_to_khz_sf = _IQ(USER_IQ_FULL_SCALE_FREQ_Hz/1000.0); _iq khz_to_krpm_sf = _IQ(60.0/USER_MOTOR_NUM_POLE_PAIRS); _iq Mechanical_Freq_kHz = _IQmpy(EST_getFm_pu(handle),pu_to_khz_sf); _iq Speed_kRPM = _IQmpy(Mechanical_Freq_kHz,khz_to_krpm_sf); 估算器 (EST) 句柄 机械频率,pu EST_getForceAngleDelta_pu () extern _iq EST_getForceAngleDelta_pu(EST_Handle handle); 句柄: 返回: 获取估算器中的强制角增量值,标么值 (pu),IQ24 仅当通过调用 CTRL_setParams() 函 数初始化控制器对象后,此函数才返回有效值。 强制角增量表示强制角要加上或减去的增 量。 该值越大,强制角时生成的频率越高(在强制角模式下将绕过估算角度)。 默认情况 下,强制角频率在 user.h 中设置。 以下示例说明了如何将增量的单位从标么值转换为千 赫兹 (kHz)。 #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_EST_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_EST_TICK) _iq delta_pu_to_kHz_sf = _IQ((float_t)USER_EST_FREQ_Hz/1000.0); _iq Force_Angle_Delta_pu = EST_getForceAngleDelta_pu(handle); _iq Force_Angle_Freq_kHz = _IQmpy(Force_Angle_Delta_pu, delta_pu_to_kHz_sf); 注意首选 kHz,以避免 IQ24 变量溢出。 估算器 (EST) 句柄 强制角增量,pu 最小值 _IQ(0.0) 和最大值 _IQ(1.0)。 EST_getForceAngleStatus () extern bool EST_getForceAngleStatus(EST_Handle handle); 获取估算器中的强制角操作的状态。 当通过调用以下函数启用强制角模式后,状态才能变 为活动:EST_setFlag_enableForceAngle(handle, true);当电机的电频率低于 user.h 中 #define USER_ZEROSPEEDLIMIT (0.001) 定义的阈值时,强制角模式将处于活动状态。 可使用以下代码示例手动检查强制角状态: _iq fe_pu = EST_getFe_pu(handle); bool is_forced_angle_active; if(_IQabs(fe_pu) < _IQ(USER_ZEROSPEEDLIMIT)) { is_forced_angle_active = true; 114 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: } else { is_forced_angle_active = false; } 注意首选 kHz,以避免 IQ24 变量溢出。 InstaSPIN-FOC API 估算器 (EST) 句柄 指示是否已强制角的布尔值 (true/false) • true - 估算器的上次迭代使用强制角来运行帕克变换和帕克逆变换。 估算器也与强制角 并行运行,但未使用估算器输出。 \retval • false - 强制角模式已被禁用,或电频率未低于预先定义的阈值。 估算器输出用于运行 帕克变换和帕克逆变换。 EST_getFreqB0_lp_pu () extern _iq EST_getFreqB0_lp_pu(EST_Handle handle); 句柄: 返回: 获取频率估算器中的低通滤波器分子值,标么值 (pu),IQ30 估算器 (EST) 句柄 低通滤波器分子值,pu EST_getFreqBeta_lp_pu () extern _iq EST_getFreqBeta_lp_pu(EST_Handle handle); 句柄: 返回: 获取用于设置频率估算器的低通滤波器中的极点位置的值,标么值 (pu),IQ30 估算器 (EST) 句柄 用于设置滤波器极点位置的值,pu EST_getFslip () extern int32_t EST_getFslip(EST_Handle handle); 句柄: 返回: 获取电机的转差频率,赫兹 (Hz)。 估算器 (EST) 句柄 转差频率,Hz 句柄: 返回: 估算器 (EST) 句柄 krpm 到 pu 的换算系数。 该值为 IQ24 格式 EST_getFslip_pu () extern _iq EST_getFslip_pu(EST_Handle handle); 获取电机的转差频率,标么值 (pu),IQ24 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 115 InstaSPIN-FOC API 句柄: 返回: www.ti.com.cn 与 EST_getFe_pu() 函数类似,该函数返回电机的转差频率(标么值)。 要将转差频率从 标么值转换为 Hz,用户需要将返回值乘以以下换算系数: #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) _iq Full_Scale_Freq_Elec_Hz = _IQ(USER_IQ_FULL_SCALE_FREQ_Hz); _iq Freq_Slip_Hz = _IQmpy(EST_getFslip_pu(handle),Full_Scale_Freq_Elec_Hz); 估算器 (EST) 句柄 转差频率,pu EST_getFullScaleCurrent () extern int32_t EST_getFullScaleCurrent(EST_Handle handle); 句柄: 返回: 获取估算器中使用的满量程电流值,安培 (A) 此函数返回的值与 user.h 中定义的值相同。 当用户需要以真实单位(即,安培)显示值 时,使用该值将电流标么值转换为安培值。 以下示例说明了执行该转换的两种不同方法, 一种使用浮点,另一种使用 IQ 数学运算。 使用浮点的示例: float_t pu_to_amps_sf = EST_getFullScaleCurrent(handle); _iq Id_rated_pu = EST_getIdRated_pu(handle); float_t Id_rated_A = _IQtoF(Id_rated_pu) * pu_to_amps_sf; Example using fixed point: #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) _iq pu_to_amps_sf = _IQ(USER_IQ_FULL_SCALE_CURRENT_A); _iq Id_rated_pu = EST_getIdRated_pu(handle); _iq Id_rated_A = _IQmpy(Id_rated_pu, pu_to_amps_sf); 估算器 (EST) 句柄 满量程电流值,A EST_getFullScaleFlux () extern int32_t EST_getFullScaleFlux(EST_Handle handle); 句柄: 返回: 获取估算器中使用的满量程磁通值,伏/赫兹 (V/Hz) 估算器 (EST) 句柄 满量程磁通值 EST_getFullScaleFreq () extern int32_t EST_getFullScaleFreq(EST_Handle handle); 获取估算器中使用的满量程频率值,赫兹 (Hz) 满量程频率可用作将标么值转换为赫兹的换算系数。 以下代码示例说明了如何使用此函数 通过浮点数学运算将频率从标么值转换为 Hz: float_t Mechanical_Frequency_pu = _IQtoF(EST_getFm_pu(handle)); float_t pu_to_hz_sf = EST_getFullScaleFreq(handle); float_t Mechanical_Frequency_hz = Mechanical_Frequency_pu * pu_to_hz_sf 116 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: InstaSPIN-FOC API 为了使执行更快,可使用 user.h 中的满量程频率定义来避免调用此函数。 以下示例显示 了相同功能,但使用了定点数学运算以加快执行: #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) _iq Mechanical_Frequency_pu = EST_getFm_pu(handle); _iq pu_to_khz_sf = _IQ(USER_IQ_FULL_SCALE_FREQ_Hz/1000.0); _iq Mechanical_Frequency_khz = _IQmpy(Mechanical_Frequency_pu, pu_to_khz_sf); 估算器 (EST) 句柄 满量程频率值,Hz EST_getFullScaleInductance () extern int32_t EST_getFullScaleInductance(EST_Handle handle); 句柄: 返回: 获取估算器中使用的满量程电感值,亨利 (H)。 获取估算器使用的电感有不同的方法。 将电感从标么值转换为 H 时,此函数很有用。但 返回值为浮点格式,因此使用该满量程值将标么值转换为 H 并不是最高效的方式。 下面 提供了两个示例,说明了为加快执行而进行的浮点标么值到 H 的转换以及定点标么值到 H 的转换。 浮点示例: uint_least8_t Ls_qFmt = EST_getLs_qFmt(handle); float_t fullScaleInductance = EST_getFullScaleInductance(handle); float_t Ls_d_pu = _IQ30toF(EST_getLs_d_pu(handle)); float_t pu_to_h_sf = fullScaleInductance * pow(2.0, 30 - Ls_qFmt); float_t Ls_d_H = Ls_d_pu * pu_to_h_sf; 另一个示例的目的是避免使用浮点数学运算以加快执行。 在此示例中,使用预编译器数学 运算根据 user.h 中的用户参数计算满量程电感值: #define VarShift(var,nshift) (((nshift) < 0) ? ((var)>>((nshift))) : ((var) <<(nshift))) #define MATH_PI (3.1415926535897932384626433832795) #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_VOLTAGE_FILTER_POLE_Hz (335.648) #define USER_VOLTAGE_FILTER_POLE_rps (2.0 * MATH_PI * USER_VOLTAGE_FILTER_POLE_Hz) uint_least8_t Ls_qFmt = EST_getLs_qFmt(handle); _iq fullScaleInductance = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/(USER_IQ_FULL_SCALE_CURRENT_A * USER_VOLTAGE_FILTER_POLE_rps)); _iq Ls_d_pu = _IQ30toIQ(EST_getLs_d_pu(handle)); _iq pu_to_h_sf = VarShift(fullScaleInductance, 30 - Ls_qFmt); _iq Ls_d_H = _IQmpy(Ls_d_pu, pu_to_h_sf); 估算器 (EST) 句柄 满量程电感值,亨利 EST_getFullScaleResistance () extern int32_t EST_getFullScaleResistance(EST_Handle handle); 获取估算器中使用的满量程电阻值(欧姆)。获取估算器使用的电阻有不同的方法。 将电 阻从标么值转换为欧姆时,此函数很有用。 但返回值为浮点格式,因此使用该满量程值将 标么值转换为欧姆并不是最高效的方式。 下面提供了两个示例,说明了为加快执行而进行 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 117 InstaSPIN-FOC API 句柄: 返回: www.ti.com.cn 的浮点标么值到欧姆的转换以及定点标么值到欧姆的转换。 浮点示例: uint_least8_t Rs_qFmt = EST_getRs_qFmt(handle); float_t fullScaleResistance = EST_getFullScaleResistance(handle); float_t Rs_pu = _IQ30toF(EST_getRs_pu(handle)); float_t pu_to_ohms_sf = fullScaleResistance * pow(2.0, 30 - Rs_qFmt); float_t Rs_Ohms = Rs_pu * pu_to_ohms_sf; 另一个示例的目的是避免使用浮点数学运算以加快执行。 在以下示例中,使用预编译器数 学运算根据 user.h 中的用户参数计算满量程电阻值: #define VarShift(var,nshift) (((nshift) < 0) ? ((var)>>((nshift))) : ((var)<<(nshift))) #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) uint_least8_t Rs_qFmt = EST_getRs_qFmt(handle); _iq fullScaleResistance = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/USER_IQ_FULL_SCALE_CURRENT_A); _iq Rs_pu = _IQ30toIQ(EST_getRs_pu(handle)); _iq pu_to_ohms_sf = VarShift(fullScaleResistance, 30 - Rs_qFmt); _iq Rs_Ohms = _IQmpy(Rs_pu, pu_to_ohms_sf); 估算器 (EST) 句柄 满量程电阻值,欧姆 EST_getFullScaleVoltage () extern int32_t EST_getFullScaleVoltage(EST_Handle handle); 句柄: 返回: 获取估算器中使用的满量程电压值,伏 (V)。 此函数返回的值与 user.h 中定义的值相同。 当用户需要以真实单位(即,伏)显示值 时,使用该值将电压标么值转换为伏值。 以下示例说明了执行该转换的两种不同方法,一 种使用浮点,另一种使用 IQ 数学运算。 使用浮点的示例: float_t pu_to_v_sf = EST_getFullScaleVoltage(handle); _iq DcBus_pu = EST_getDcBus_pu(handle); float_t DcBus_V = _IQtoF(DcBus_pu) * pu_to_v_sf; 使用定点的示例: #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) _iq pu_to_kv_sf = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/1000.0); _iq DcBus_pu = EST_getDcBus_pu(handle); _iq DcBus_kV = _IQmpy(DcBus_pu, pu_to_kv_sf); 估算器 (EST) 句柄 满量程电阻值,欧姆 EST_getIdRated () float_t EST_getIdRated(EST_Handle handle) 句柄: 返回: 获取估算器的 Id 额定电流值 估算器 (EST) 句柄 Id 额定电流值,A 118 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC API EST_getIdRated_pu () extern _iq EST_getIdRated_pu(EST_Handle handle); 句柄: 返回: 获取估算器中的 Id 额定电流值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 额定电流值,pu EST_getIdRated_indEst_pu () _iq EST_getIdRated_indEst_pu(EST_Handle handle) 句柄: 返回: 获取用于感应估算的 Id 额定电流值 估算器 (EST) 句柄 Id 额定值,pu EST_getIdRated_ratedFlux_pu () extern _iq EST_getIdRated_ratedFlux_pu(EST_Handle handle); 句柄: 返回: 获取用于感应电机磁通估算的 Id 电流值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 额定值,pu EST_getLr_H () extern int32_t EST_getLr_H(EST_Handle handle); 句柄: 返回: 获取转子电感值,亨利 (H)。 估算器 (EST) 句柄 Id 额定值,pu EST_getLr_pu () extern _iq EST_getLr_pu(EST_Handle handle); 获取转子电感值,标么值 (pu),IQ30 还可以使用转子电感的标么值通过定点数学运算来计算感应电机的转子电感。 下面显示了 此操作的一个示例: #define VarShift(var,nshift) (((nshift) < 0) ? ((var)>>((nshift))) : ((var)<<(nshift))) #define MATH_PI (3.1415926535897932384626433832795) #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_VOLTAGE_FILTER_POLE_Hz (335.648) #define USER_VOLTAGE_FILTER_POLE_rps (2.0 * MATH_PI * USER_VOLTAGE_FILTER_POLE_Hz) uint_least8_t Lr_qFmt = EST_getLr_qFmt(handle); _iq fullScaleInductance = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/(USER_IQ_FULL_SCALE_CURRENT_A * USER_VOLTAGE_FILTER_POLE_rps)); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 119 InstaSPIN-FOC API 句柄: 返回: _iq Lr_pu = _IQ30toIQ(EST_getLr_pu(handle)); _iq pu_to_h_sf = VarShift(fullScaleInductance, 30 - Lr_qFmt); _iq Lr_H = _IQmpy(Lr_pu, pu_to_h_sf); 估算器 (EST) 句柄 转子电感值,pu www.ti.com.cn EST_getLr_qFmt () extern uint_least8_t EST_getLr_qFmt(EST_Handle handle); 句柄: 返回: 获取转子电感 Q 格式,8 位无符号整数 (uint_least8_t)。 估算器识别电机后,各种识别的参数均使用 Q 格式。 该 Q 格式是用于识别的实际 Q 格式 与识别电机参数期间内部使用的 IQ30 的区别。 要了解如何在用户代码中使用此 Q 格式, 请参见以下将读取自估算器的标么值转换为亨利的示例: #define VarShift(var,nshift) (((nshift) < 0) ? ((var)>>((nshift))) : ((var)<<(nshift))) #define MATH_PI (3.1415926535897932384626433832795) #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_VOLTAGE_FILTER_POLE_Hz (335.648) #define USER_VOLTAGE_FILTER_POLE_rps (2.0 * MATH_PI * USER_VOLTAGE_FILTER_POLE_Hz) uint_least8_t Lr_qFmt = EST_getLr_qFmt(handle); _iq fullScaleInductance = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/(USER_IQ_FULL_SCALE_CURRENT_A * USER_VOLTAGE_FILTER_POLE_rps)); _iq Lr_pu = _IQ30toIQ(EST_getLr_pu(handle)); _iq pu_to_h_sf = VarShift(fullScaleInductance, 30 - Lr_qFmt); _iq Lr_H = _IQmpy(Lr_pu, pu_to_h_sf); 估算器 (EST) 句柄 转子电感值 Q 格式 EST_getLs_d_H () float_t EST_getLs_d_H(EST_Handle handle) 句柄: 返回: 获取直流定子电感值(亨利) 估算器 (EST) 句柄 直流定子电感值,亨利 EST_getLs_d_pu () extern _iq EST_getLs_d_pu(EST_Handle handle); 获取直流定子电感值,标么值 (pu),IQ30 还可以使用直流定子电感的标么值通过定点数学运算来计算永磁电机的直流定子电感。 下 面显示了此操作的一个示例: #define VarShift(var,nshift) (((nshift) < 0) ? ((var)>>((nshift))) : ((var)<<(nshift))) #define MATH_PI (3.1415926535897932384626433832795) #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_VOLTAGE_FILTER_POLE_Hz (335.648) 120 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: #define USER_VOLTAGE_FILTER_POLE_rps (2.0 * MATH_PI * USER_VOLTAGE_FILTER_POLE_Hz) InstaSPIN-FOC API uint_least8_t Ls_qFmt = EST_getLs_qFmt(handle); _iq fullScaleInductance = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/(USER_IQ_FULL_SCALE_CURRENT_A * USER_VOLTAGE_FILTER_POLE_rps)); _iq Ls_d_pu = _IQ30toIQ(EST_getLs_d_pu(handle)); _iq pu_to_h_sf = VarShift(fullScaleInductance, 30 - Ls_qFmt); _iq Ls_d_H = _IQmpy(Ls_d_pu, pu_to_h_sf); 估算器 (EST) 句柄 直流定子电感值,pu EST_getLs_delta_pu () extern _iq EST_getLs_delta_pu(EST_Handle handle); 句柄: 返回: 获取定子电感估算器中的定子电感增量值 估算器 (EST) 句柄 定子电感增量值,pu EST_getLs_dq_pu () extern void EST_getLs_dq_pu(EST_Handle handle,MATH_vec2 *pLs_dq_pu); 句柄: pLs_dq_pu: 获取估算器中的直流/正交定子电感矢量值,标么值 (pu),IQ30。通过使用此函数调用并向 存储直流和正交定子电感值的结构传递一个指针,可以读取估算器中的这两个值。 估算器 (EST) 句柄 直流/正交定子电感矢量值的指针,pu EST_getLs_q_H () float_t EST_getLs_q_H(EST_Handle handle) 句柄: 返回: 获取正交坐标方向上的定子电感值(亨利) 估算器 (EST) 句柄 定子电感值,亨利 EST_getLs_q_pu () extern _iq EST_getLs_q_pu(EST_Handle handle); 获取正交坐标方向上的定子电感值,标么值 (pu),IQ30 还可以使用正交定子电感的标么值通过定点数学运算来计算永磁电机的正交定子电感。 下 面显示了此操作的一个示例: #define VarShift(var,nshift) (((nshift) < 0) ? ((var)>>((nshift))) : ((var)<<(nshift))) #define MATH_PI (3.1415926535897932384626433832795) #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_VOLTAGE_FILTER_POLE_Hz (335.648) #define USER_VOLTAGE_FILTER_POLE_rps (2.0 * MATH_PI * USER_VOLTAGE_FILTER_POLE_Hz) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 121 InstaSPIN-FOC API 句柄: 返回: uint_least8_t Ls_qFmt = EST_getLs_qFmt(handle); _iq fullScaleInductance = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/(USER_IQ_FULL_SCALE_CURRENT_A * USER_VOLTAGE_FILTER_POLE_rps)); _iq Ls_q_pu = _IQ30toIQ(EST_getLs_q_pu(handle)); _iq pu_to_h_sf = VarShift(fullScaleInductance, 30 - Ls_qFmt); _iq Ls_q_H = _IQmpy(Ls_q_pu, pu_to_h_sf); 估算器 (EST) 句柄 定子电感值,pu www.ti.com.cn EST_getLs_qFmt () extern uint_least8_t EST_getLs_qFmt(EST_Handle handle); 句柄: 返回: 获取定子电感 Q 格式,8 位无符号整数 (uint_least8_t)。 估算器识别电机后,各种识别的参数均使用 Q 格式。 该 Q 格式是用于识别的实际 Q 格式 与识别电机参数期间内部使用的 IQ30 的区别。 要了解如何在用户代码中使用此 Q 格式, 请参见以下将读取自估算器的标么值转换为亨利的示例: #define VarShift(var,nshift) (((nshift) < 0) ? ((var)>>((nshift))) : ((var)<<(nshift))) #define MATH_PI (3.1415926535897932384626433832795) #define USER_IQ_FULL_SCALE_VOLTAGE_V (300.0) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_VOLTAGE_FILTER_POLE_Hz (335.648) #define USER_VOLTAGE_FILTER_POLE_rps (2.0 * MATH_PI * USER_VOLTAGE_FILTER_POLE_Hz) uint_least8_t Ls_qFmt = EST_getLs_qFmt(handle); _iq fullScaleInductance = _IQ(USER_IQ_FULL_SCALE_VOLTAGE_V/(USER_IQ_FULL_SCALE_CURRENT_A * USER_VOLTAGE_FILTER_POLE_rps)); _iq Ls_q_pu = _IQ30toIQ(EST_getLs_q_pu(handle)); _iq pu_to_h_sf = VarShift(fullScaleInductance, 30 - Ls_qFmt); _iq Ls_q_H = _IQmpy(Ls_q_pu, pu_to_h_sf); 估算器 (EST) 句柄 定子电感 Q 格式 EST_getLs_max_pu () extern _iq EST_getLs_max_pu(EST_Handle handle); 句柄: 返回: 获取定子电感估算器中的最大定子电感值 估算器 (EST) 句柄 最大定子电感值,pu EST_getLs_min_pu () extern _iq EST_getLs_min_pu(EST_Handle handle); 获取定子电感估算器中的最小定子电感值 句柄: 估算器 (EST) 句柄 返回: 最小定子电感值,pu 122 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-FOC API EST_getLs_coarse_max_pu () extern _iq EST_getLs_coarse_max_pu(EST_Handle handle); 句柄: 返回: 获取粗略估算期间定子电感估算器中的最大定子电感值 估算器 (EST) 句柄 最大定子电感值,pu EST_getMaxAccel_pu () extern _iq EST_getMaxAccel_pu(EST_Handle handle); 句柄: 返回: 获取估算器中使用的最大加速度值,标么值 (pu),IQ24 最大加速度是轨迹模块的一项设置,用于设置速度基准。 识别电机后,使用此函数调用返 回的加速度。 该值表示如何从初始值增大或减小速度基准以达到目标值。 以下示例说明了 如何将此函数的返回值转换为千赫兹/秒 (kHz/s) 和千 RPM/秒 (kRPM/s): #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) #define USER_MOTOR_NUM_POLE_PAIRS (4) _iq pu_to_khzps_sf = _IQ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_FREQ_Hz / 1000.0); _iq khzps_to_krpmps_sf = _IQ(60.0 / (float_t)USER_MOTOR_NUM_POLE_PAIRS); _iq Accel_pu = EST_getMaxAccel_pu(handle); _iq Accel_kilo_hz_per_sec = _IQmpy(Accel_pu, pu_to_khzps_sf); _iq Accel_kilo_rpm_per_sec = _IQmpy(Accel_kilo_hz_per_sec, khzps_to_krpmps_sf); 默认值由 user.h 中的用户定义值设置,默认标么值的内部计算方式如下: #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) #define USER_MAX_ACCEL_Hzps (20.0) _iq hzps_to_pu_sf = _IQ(1.0 / ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_FREQ_Hz)); _iq Accel_hertz_per_sec = _IQ(USER_MAX_ACCEL_Hzps); _iq Accel_pu = _IQmpy(Accel_hertz_per_sec, hzps_to_pu_sf); 估算器 (EST) 句柄 最大加速度值,pu ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 123 InstaSPIN-FOC API www.ti.com.cn EST_getMaxAccel_est_pu () extern _iq EST_getMaxAccel_est_pu(EST_Handle handle); 句柄: 返回: 获取估算器中使用的最大估算加速度值,标么值 (pu),IQ24 最大加速度是轨迹模块的一项设置,用于设置速度基准。 电机识别过程中使用此函数调用 返回的加速度。 该值表示如何从初始值增大或减小速度基准以达到目标值。 以下示例说明 了如何将此函数的返回值转换为千赫兹/秒 (kHz/s) 和千 RPM/秒 (kRPM/s): #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) #define USER_MOTOR_NUM_POLE_PAIRS (4) _iq pu_to_khzps_sf = _IQ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_FREQ_Hz / 1000.0); _iq khzps_to_krpmps_sf = _IQ(60.0 / (float_t)USER_MOTOR_NUM_POLE_PAIRS); _iq est_Accel_pu = EST_getMaxAccel_est_pu(handle); _iq est_Accel_kilo_hz_per_sec = _IQmpy(est_Accel_pu, pu_to_khzps_sf); _iq est_Accel_kilo_rpm_per_sec = _IQmpy(est_Accel_kilo_hz_per_sec, khzps_to_krpmps_sf); 默认值由 user.h 中的用户定义值设置,默认标么值的内部计算方式如下: #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) #define USER_MAX_ACCEL_EST_Hzps (2.0) _iq hzps_to_pu_sf = _IQ(1.0 / ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_FREQ_Hz)); _iq est_Accel_hertz_per_sec = _IQ(USER_MAX_ACCEL_EST_Hzps); _iq est_Accel_pu = _IQmpy(est_Accel_hertz_per_sec, hzps_to_pu_sf); 估算器 (EST) 句柄 最大估算加速度值,pu EST_getMaxCurrentSlope_pu () extern _iq EST_getMaxCurrentSlope_pu(EST_Handle handle); 获取估算器中使用的最大电流斜率值,标么值 (pu),IQ24 获取 Id 参考的斜率。 以下示例说明了如何将返回值转换为千安培/秒 (kA/s): #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) 124 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: InstaSPIN-FOC API #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) _iq pu_to_kA_per_sec_sf = _IQ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_CURRENT_A / 1000.0); _iq currentSlope_pu = EST_getMaxCurrentSlope_pu(handle); _iq currentSlope_kAps = _IQmpy(currentSlope_pu, pu_to_kA_per_sec_sf); 默认值由 user.h 中的用户定义值设置,默认标么值的内部计算方式如下: #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_MOTOR_RES_EST_CURRENT (1.0) _iq A_per_sec_to_pu_sf = _IQ(1.0 / ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_CURRENT_A)); _iq currentSlope_Aps = _IQ(USER_MOTOR_RES_EST_CURRENT); _iq currentSlope_pu = _IQmpy(currentSlope_Aps, A_per_sec_to_pu_sf); 估算器 (EST) 句柄 最大电流斜率值,pu EST_getMaxCurrentSlope_PowerWarp_pu () extern _iq EST_getMaxCurrentSlope_PowerWarp_pu(EST_Handle handle); 获取估算器中使用的最大 PowerWarp 电流斜率值,标么值 (pu),IQ24 获取启用有效部分负载时的 Id 参考变化斜率。 此模式仅适用于感应电机。 以下示例说明 了如何将返回值转换为千安培/秒 (kA/s): #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) _iq pu_to_kA_per_sec_sf = _IQ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_CURRENT_A / 1000.0); _iq currentSlope_PowerWarp_pu = EST_getMaxCurrentSlope_PowerWarp_pu(handle); _iq currentSlope_PowerWarp_kAps = _IQmpy(currentSlope_PowerWarp_pu, pu_to_kA_per_sec_sf); 默认值由 user.h 中的用户定义值设置,默认标么值的内部计算方式如下: #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) #define USER_PWM_FREQ_kHz (15.0) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 125 InstaSPIN-FOC API 句柄: 返回: www.ti.com.cn #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz/USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_TRAJ_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz/USER_NUM_CTRL_TICKS_PER_TRAJ_TICK) #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_MOTOR_RES_EST_CURRENT (1.0) _iq A_per_sec_to_pu_sf = _IQ(1.0 / ((float_t)USER_TRAJ_FREQ_Hz * USER_IQ_FULL_SCALE_CURRENT_A)); _iq currentSlope_PowerWarp_Aps = _IQ(0.3 * USER_MOTOR_RES_EST_CURRENT); _iq currentSlope_PowerWarp_pu = _IQmpy(currentSlope_PowerWarp_Aps, A_per_sec_to_pu_sf); 估算器 (EST) 句柄 最大 PowerWarp 电流斜率值,pu EST_getOneOverDcBus_pu () extern _iq EST_getOneOverDcBus_pu(EST_Handle handle); 句柄: 返回: 获取直流总线电压的反向电压,标么值 (pu),IQ24 估算器 (EST) 句柄 直流总线电压的反向电压,pu EST_getRr_Ohm () extern int32_t EST_getRr_Ohm(EST_Handle handle); 句柄: 返回: 获取转子电阻值(欧姆) 估算器 (EST) 句柄 转子电阻值,欧姆 EST_getRr_pu () extern _iq EST_getRr_pu(EST_Handle handle); 句柄: 返回: 获取转子电阻值,标么值 (pu),IQ30 估算器 (EST) 句柄 转子电阻值,pu EST_getRr_qFmt () extern uint_least8_t EST_getRr_qFmt(EST_Handle handle); 句柄: 返回: 获取转子电阻 Q 格式,8 位无符号整数 (uint_least8_t)。 估算器 (EST) 句柄 转子电阻 Q 格式 EST_getRs_delta_pu () extern _iq EST_getRs_delta_pu(EST_Handle handle); 获取定子电阻估算器中的定子电阻增量值 126 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: 估算器 (EST) 句柄 定子电阻增量值,pu InstaSPIN-FOC API EST_getRs_Ohm () float_t EST_getRs_Ohm(EST_Handle handle) 句柄: 返回: 获取角度估算器使用的定子电阻值 估算器 (EST) 句柄 定子电阻值,欧姆 EST_getRs_pu () extern _iq EST_getRs_pu(EST_Handle handle); 句柄: 返回: 获取定子电阻值,标么值 (pu),IQ30 估算器 (EST) 句柄 定子电阻值,pu EST_getRs_qFmt () extern uint_least8_t EST_getRs_qFmt(EST_Handle handle); 句柄: 返回: 获取定子电阻 Q 格式,8 位无符号整数 (uint_least8_t) 估算器 (EST) 句柄 定子电阻 Q 格式 EST_getRs_qFmt () extern void EST_getRsOnLineFilterParams(EST_Handle handle,const EST_RsOnLineFilterType_e filterType, _iq *pFilter_0_b0,_iq *pFilter_0_a1,_iq *pFilter_0_y1, _iq *pFilter_1_b0,_iq *pFilter_1_a1,_iq *pFilter_1_y1); 句柄: filterType: pFilter_0_b0: pFilter_0_a1: pFilter_0_y1: pFilter_1_b0: pFilter_1_a1: pFilter_1_y1: 获取在线定子电阻滤波器参数,标么值 (pu),IQ24 估算器 (EST) 句柄 滤波器类型 z^0 的滤波器 0 分子系数值的指针 z^(-1) 的滤波器 0 分母系数值的指针 时间采样 n=-1 时的滤波器 0 输出值的指针 z^0 的滤波器 1 分子系数值的指针 z^(-1) 的滤波器 1 分母系数值的指针 时间采样 n=-1 时的滤波器 1 输出值的指针 EST_getRsOnLine_Ohm () extern int32_t EST_getRsOnLine_Ohm(EST_Handle handle) 获取在线定子电阻值 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 127 InstaSPIN-FOC API 句柄: 返回: 估算器 (EST) 句柄 在线定子电阻值,欧姆 EST_getRsOnLine_pu () extern _iq EST_getRsOnLine_pu(EST_Handle handle); 句柄: 返回: 获取在线定子电阻值,标么值 (pu),IQ30 估算器 (EST) 句柄 在线定子电阻 Q 格式 EST_getRsOnLineId_mag_pu () extern _iq EST_getRsOnLineId_mag_pu(EST_Handle handle); 句柄: 返回: 获取用于在线定子电阻估算的 Id 幅值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 幅值,pu EST_getRsOnLineId_pu () extern _iq EST_getRsOnLineId_pu(EST_Handle handle); 句柄: 返回: 获取用于在线定子电阻估算的 Id 值,标么值 (pu),IQ24 估算器 (EST) 句柄 Id 值,pu EST_getSpeed_krpm () _iq EST_getSpeed_krpm(EST_Handle handle) 句柄: 返回: 获取速度值 (krpm) 估算器 (EST) 句柄 速度值,krpm EST_getSignOfDirection () extern int_least8_t EST_getSignOfDirection(EST_Handle handle); 句柄: 返回: 获取 8 位有符号整数方向值 (int_least8_t) 的符号 估算器 (EST) 句柄 方向值的符号(-1 表示负,1 表示正) EST_getSpeed_krpm () _iq EST_getSpeed_krpm(EST_Handle handle) www.ti.com.cn 128 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: 返回: 获取速度值,标么值 (pu),IQ24 估算器 (EST) 句柄 速度值,krpm EST_getState () EST_State_e EST_getState(EST_Handle handle) 句柄: 返回: 获取估算器的状态 估算器 (EST) 句柄 估算器状态 EST_getTorque_lbin () _iq EST_getTorque_lbin(EST_Handle handle) 句柄: 返回: 获取转矩值,标么值 (pu),IQ24 估算器 (EST) 句柄 转矩值,lb*in EST_getTorque_Nm () extern _iq EST_getTorque_Nm(EST_Handle handle); 句柄: 返回: 获取转矩值,标么值 (pu),IQ24 估算器 (EST) 句柄 转矩值,N*m EST_getDir_qFmt () extern uint_least8_t EST_getDir_qFmt(EST_Handle handle); 句柄: 返回: 获取估算器中的方向 Q 格式 估算器 (EST) 句柄 方向 Q 格式 InstaSPIN-FOC API ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 129 InstaSPIN-FOC API 3.3.2.4 EST Run 和 Compute 函数 www.ti.com.cn EST_computeLr_H () extern int32_t EST_computeLr_H(EST_Handle handle,const _iq current); 句柄: 电流: 返回: 计算转子电感,亨利 (H) 估算器 (EST) 句柄 转子电流 转子电感,H EST_doCurrentCtrl () extern bool EST_doCurrentCtrl(EST_Handle handle); 句柄: 返回: 确定是否应在电机识别期间执行电流控制 估算器 (EST) 句柄 指示是否执行电流控制的布尔值 (true/false) EST_genOutputLimits_Pid_Id () extern void EST_genOutputLimits_Pid_Id(EST_Handle handle, const _iq maxDutyCycle, _iq *outMin,_iq *outMax); 句柄: maxDutyCycle: outMin: outMax: 生成 PID Id 控制器输出限制 估算器 (EST) 句柄 最大占空比,pu 指向最小输出值的指针 指向最大输出值的指针 EST_genOutputLimits_Pid_Iq () extern void EST_genOutputLimits_Pid_Iq(EST_Handle handle, const _iq maxDutyCycle, const _iq out_Id,_iq *outMin,_iq *outMax); 句柄: maxDutyCycle: out_Id: outMin: outMax: 生成 PID Iq 控制器输出限制 估算器 (EST) 句柄 最大占空比,pu Id 输出值 指向最小输出值的指针 指向最大输出值的指针 EST_run () extern void EST_run(EST_Handle handle, const MATH_vec2 *pIab_pu, const MATH_vec2 *pVab_pu, const _iq dcBus_pu, const _iq speed_ref_pu); 130 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 句柄: pIab_pu: IQ24 pVab_pu: IQ24 dcBus_pu: IQ24 speed_ref_pu: 运行估算器 估算器 (EST) 句柄 指向 alpha/beta 坐标系中的相电流的指针,pu 指向 alpha/beta 坐标系中的相电压的指针,pu 直流总线电压,pu 控制器的速度基准值,pu IQ24 InstaSPIN-FOC API EST_computeDirection_qFmt () extern uint_least8_t EST_computeDirection_qFmt(EST_Handle handle,const int32_t flux_max); 句柄: flux_max: 返回: 计算估算器的方向 Q 格式 估算器 (EST) 句柄 最大磁通值 方向 Q 格式 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 131 InstaSPIN-FOC API 3.3.2.5 EST 计数器函数 EST_resetCounter_ctrl () extern void EST_resetCounter_ctrl(EST_Handle handle); 句柄: 重置控制计数器 估算器 (EST) 句柄 EST_resetCounter_state () extern void EST_resetCounter_state(EST_Handle handle); 句柄: 重置状态计数器 估算器 (EST) 句柄 www.ti.com.cn 132 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 3.3.2.6 EST 状态控制和错误处理函数 EST_isError () extern bool EST_isError(EST_Handle handle); InstaSPIN-FOC API 句柄: 返回: 确定是否存在估算器错误 估算器 (EST) 句柄 指示是否存在估算器错误的布尔值 (true/false) EST_isIdle () extern bool EST_isIdle(EST_Handle handle); 句柄: 返回: 确定估算器是否空闲 估算器 (EST) 句柄 指示估算器是否空闲的布尔值 (true/false) EST_isLockRotor () extern bool EST_isLockRotor(EST_Handle handle); 句柄: 返回: 确定估算器是否正在等待转子锁定 估算器 (EST) 句柄 指示估算器是否正在等待转子锁定的布尔值 (true/false) EST_isMotorIdentified () EST_State_e EST_isMotorIdentified (EST_Handle handle) 句柄: 返回: 确定电机是否已被识别 估算器 (EST) 句柄 估算器状态 EST_isOnLine () extern bool EST_isOnLine(EST_Handle handle); 句柄: 返回: 确定估算器是否准备好在线控制 估算器 (EST) 句柄 指示估算器是否准备好在线控制的布尔值 (true/false) EST_updateState () extern bool EST_updateState(EST_Handle handle,const _iq Id_target_pu); 句柄: Id_target_pu: 返回: 更新估算器状态 估算器 (EST) 句柄 各个估算器状态期间的目标 Id 电流,pu,IQ24 指示状态是否变化的布尔值 (true/false) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 133 InstaSPIN-FOC API EST_useZeroIq_ref () extern bool EST_useZeroIq_ref(EST_Handle handle); 句柄: 返回: 确定是否应在控制器中使用零 Iq 电流参考 估算器 (EST) 句柄 指示是否应使用零 Iq 电流参考的布尔值 (true/false) www.ti.com.cn 134 InstaSPIN 和 MotorWare ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 3.3.3 硬件抽象层 (HAL) API 函数 - hal.c、hal.h、hal_obj.h InstaSPIN-FOC API HAL_Obj 是包含器件外设句柄的结构。 HAL_init() 为 HAL 对象分配内存,内存分配完毕 后,HAL_setParams() 根据对象 USER_Params 中的用户设置来配置各个外设。 3.3.3.1 HAL 枚举和结构 HAL_AdcData_t 定义 ADC 数据。该数据结构包含执行 HAL_AdcRead 时使用的电压和电流值,该结构随 后将传递给 CTRL 控制器和 FAST 估算器。 typedef struct _HAL_AdcData_t_ { MATH_vec3 I; //!< the current values MATH_vec3 V; //!< the voltage values _iq dcBus; //!< the dcBus value } HAL_AdcData_t; HAL_DacData_t 定义 DAC 数据。该数据结构包含用于许多硬件套件上的 DAC 输出的 pwm 值,以供调试 之用。 typedef struct _HAL_DacData_t_ { _iq value[4]; //!< the DAC data } HAL_DacData_t; HAL_PwmData_t 定义 PWM 数据。该结构包含三相的 pwm 电压值。 HAL_PwmData_t 变量将填充空间矢 量调制器之类的值,然后发送到类似 HAL_writePwmData() 的函数以写入 PWM 外设。 typedef struct _HAL_PwmData_t_ { MATH_vec3 Tabc; //!< the PWM time-durations for each motor phase } HAL_PwmData_t; HAL_LedNumber_e 用于定义 ControlCARD 上的 LED 的枚举 typedef enum { HAL_Gpio_LED2=GPIO_Number_31, HAL_Gpio_LED3=GPIO_Number_34 } HAL_LedNumber_e; //!< GPIO pin number for ControlCARD LED 2 //!< GPIO pin number for ControlCARD LED 3 GPIO_Number_e 用于定义通用 I/O (GPIO) 编号的枚举 typedef enum { GPIO_Number_0=0, //!< Denotes GPIO number 0 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN 和 MotorWare 135 InstaSPIN-FOC API GPIO_Number_1, GPIO_Number_2, ... GPIO_Number_57, GPIO_Number_58, GPIO_numGpios } GPIO_Number_e; //!< Denotes GPIO number 1 //!< Denotes GPIO number 2 //!< Denotes GPIO number 57 //!< Denotes GPIO number 58 www.ti.com.cn HAL_SensorType_e typedef enum { HAL_SensorType_Current=0, HAL_SensorType_Voltage } HAL_SensorType_e; //!< Enumeration for current sensor //!< Enumeration for voltage sensor HAL_Obj HAL 对象包含所有外设句柄。 访问处理器上的外设时,将 HAL 函数与该处理器的 HAL 句柄一起使用才能访问其外设。 typedef struct _HAL_Obj_ { ADC_Handle adcHandle; //!< the ADC handle CLK_Handle clkHandle; //!< the clock handle CPU_Handle cpuHandle; //!< the CPU handle FLASH_Handle flashHandle; //!< the flash handle GPIO_Handle gpioHandle; //!< the GPIO handle OFFSET_Handle offsetHandle_I[3]; //!< the handles for the current offset estimators OFFSET_Obj offset_I[3]; //!< the current offset objects OFFSET_Handle offsetHandle_V[3]; //!< the handles for the voltage offset estimators OFFSET_Obj offset_V[3]; //!< the voltage offset objects OSC_Handle oscHandle; //!< the oscillator handle PIE_Handle pieHandle; // 1 2 ´ Immoatxor ´ Ls _ d ´ wfilter _ pole ymq ax = Immaoxtor ´ Ls _ q ´ wfilter _ pole VImQax yields < 2.0 ® VImQax > 1 2 ´ Immaoxtor ´ Ls _ q ´ wfilter _ pole 在以上示例中,两个电感相同 (Ls_d = Ls_q),因此 VImQax 电压必须大于: VImQax > 1 2 ´ Immoatxor ´ Ls _ d ´ wfilter _ pole VImQax > 1 ´ 4.2A ´ 0.0006 2 H ´ 4487.1 rad / s VImQax > 5.65 V 建议在此最小值的基础上留 20-30% 余量。 在以上示例中,电机的最大运行电压可为 48 V,由于此电压大 于 VImQax(含余量),因此可以将满量程电压设置为 48 V: //! \brief Defines the full-scale voltage for the IQ variable, V #define USER_IQ_FULL_SCALE_VOLTAGE_V (48.0) 用户必须选择相关参数以防止溢出。 如果电感未知,则必须在上述计算中使用粗略估算以便了解是否存在溢 出条件。 除在 USER_IQ_FULL_SCALE_VOLTAGE_V 中设置最小值外,还需要在此设置一个最大值。 最大值与 InstaSPIN 可识别的最小磁通相关。 可识别的最小磁通按如下公式进行计算: 最小磁通 (V/Hz) = USER_IQ_FULL_SCALE_VOLTAGE_V/USER_EST_FREQ_Hz/0.7 例如,如果电机的磁通为 0.001V/Hz(如果使用磁通值极低的小型低成本电机,此值为常规值)且估算器的 工作频率为 20kHz,则可用于识别此电机的 USER_IQ_FULL_SCALE_VOLTAGE_V 最大值为: USER_IQ_FULL_SCALE_VOLTAGE_V < 0.001 * 20000 / 0.7 = 28.57V 建议留出 30% 余量,以保证可以稳定识别。 因此,在以上示例中,建议 USER_IQ_FULL_SCALE_VOLTAGE_V 取值 20.0V。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理电机信号 223 软件必要条件 5.1.3 IQ 满量程电流 www.ti.com.cn IQ 满量程电流的作用与上述频率和电压的 IQ 满量程值相同,不过它还可用于电流反馈。 IQ 满量程电流用 于将电流反馈按照标么值进行标准化。 此值必须大于任何可测量电流。 IQ 满量程电流必须大于任何可测量电流 例如,如果峰值电流为每相 8A,则 IQ 满量程电流值应设置为含 20-30% 余量的更大值,在本例中为 10A。 //! \brief Defines the full-scale current for the IQ variables, A #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) CAUTION 如果测量电流在任意时刻均大于 IQ 满量程电流,则可能软件中存在数值溢出条 件。 请确保可测量电流小于 IQ 满量程电流值,以避免软件出现异常行为。 为了 避免出现此类问题,用户必须确保 (USER_IQ_FULL_SCALE_CURRENT_A * 2) 始终大于通过 ADC 测量的电流。 此处使用“乘 2”因数是因为 USER_IQ_FULL_SCALE_CURRENT_A 参数的范围为零至最大振幅(峰值), 而 USER_ADC_FULL_SCALE_ CURRENT_A 则为峰峰值。 按照以下指南操作可防止电流测量出现数值溢出: (USER_IQ_FULL_SCALE_CURRENT_A * 2) >= USER_ADC_FULL_SCALE_CURRENT_A 5.1.4 最大电流 最大电流用于定义速度控制器的最大输出,这与 IQ 满量程电流不同,后者用于定义通过 ADC 转换器测得电 流的标准化因数。 最大电流必须始终小于 IQ 满量程电流,因为最大电流只是软件限制,而 IQ 满量程电流 代表最大硬件输入的最大软件表示。 最大电流必须始终小于 IQ 满量程电流。 最大电流的定义用于设置最大软件限制。 这表示可将速度控制器所需的最大电流钳制到最大电流定义。 例 如,如果将最大电流定义设置为 4.2A,而速度控制器要求通过电流控制器提高转矩,则最大所需电流为 4.2A 或此定义中设置的任意值。 建议将最大电流设置为小于或等于电机制造商建议的最大电流以避免损坏 电机。 最大电流小于或等于电机制造商建议的最大电流。 例如,Anaheim 电机(与 DRV8312 版本 D 开发板配套提供)的额定转矩为 21oz-in,转矩常数为 5ozin/A,这会产生 4.2A 的额定电流,从而产生额定转矩。将 4.2A 设置为电机最大电流(峰值电流振幅),如 以下代码所示: #define USER_MOTOR_MAX_CURRENT (4.2) 224 管理电机信号 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 软件必要条件 请注意,在 user.h 中定义的最大电流不会提供硬件限制或过流保护。 也就是说,这不是硬件电流限制,而 是软件限制,仅用于限制电流控制器的最大输入而不限制其输出。 图 5-1 显示了此 USER_MOTOR_MAX_CURRENT 在 InstaSPIN 中使用位置的图示。 如下图中所示,最大 电流不是逐周期限制电流,而是在为电流控制器提供基准电流之前提供速度控制器积分部分输出饱和以及总 体速度控制器输出饱和。 图 5-1. InstaSPIN 中的 USER_MOTOR_MAX_CURRENT 5.1.5 抽取率 利用抽取率,用户可以配置各个循环速率以满足相应的代码执行要求。 建议使用默认抽取率作为起始点。 用户必须验证是否满足实时调度,从而验证单次中断期间是否允许在 ISR 中执行所有软件。 只需在 ISR 中 两 (2) 次切换 GPIO 引脚(一次在 ISR 开始执行时,一次在 ISR 结束执行时)并观察示波器即可完成上述 操作。 如果不满足实时调度,则不能预测 InstaSPIN 性能。 为使 InstaSPIN 性能一致,需要满足实时调度。 以下是默认抽取率: // Defines the number of pwm clock ticks per isr clock tick // Note: Valid values are 1, 2 or 3 only #define USER_NUM_PWM_TICKS_PER_ISR_TICK (1) // Defines the number of isr ticks (hardware) per controller clock tick (software) #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) // Defines the number of controller clock ticks per estimator clock tick #define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) // Defines the number of controller clock ticks per current controller clock tick #define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK (1) // Defines the number of controller clock ticks per speed controller clock tick #define USER_NUM_CTRL_TICKS_PER_SPEED_TICK (10) // Defines the number of controller clock ticks per trajectory clock tick #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) 如果中断期间不允许完成这些抽取率,请参见 9.1 节了解有关更改抽取率的更多信息。 5.1.6 系统频率 系统频率为 MCU 的时钟速率。 建议以可能的最高频率运行,以便以最快的速度执行代码。 有两个部分需 要用户将系统频率设置为最大值。 ZHCU083F – January 2013 – Revised July 2014 管理电机信号 225 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 软件必要条件 www.ti.com.cn 将 MCU 配置为最快 CPU 时钟以实现最佳实时性能。 第一个部分在 user.h 文件中。 此 #define 语句可确保相应地计算所有定时模块的相关计算。 第二个部分在 hal.c 文件中使用 HAL_setParams 函数进行配置,请参见表 5-1 中的代码示例,针对 2806x 器件配置 PLL 以最大频率 90MHz 运行,针对 2805x 和 2802x 器件配置 PLL 以最大频率 60MHz 运行。 器件 2806x 2805x 2802x 表 5-1. hal.c 配置 PLL 最快系统频率 user.h 90MHz #define USER_SYSTEM_FREQ_MHz (90) 60MHz #define USER_SYSTEM_FREQ_MHz (60) 60MHz #define USER_SYSTEM_FREQ_MHz (60) hal.c HAL_setupPll(handle,PLL_ClkFreq_90_ MHz) HAL_setupPll(handle,PLL_ClkFreq_60_ MHz) HAL_setupPll(handle,PLL_ClkFreq_60_ MHz) 5.1.7 PWM 频率 PWM 频率在 user.h 文件中设置。 根据电机电感,某些电机需要比其它电机更高的 PWM 频率。 通常,为 避免过多电流纹波,电机的电感越低,所需的 PWM 频率越高。 对于大多数电机,通常建议使用 20kHz, 对于需要使用更高 PWM 频率的特殊情况将在本文档的后续章节中进行介绍。 电机的电感越低,所需的 PWM 频率越高。 以下代码示例显示如何在软件中设置 20kHz PWM 频率: //! \brief Defines the Pulse Width Modulation (PWM) frequency, kHz #define USER_PWM_FREQ_kHz (20.0) 5.1.8 最大电压矢量 最大电压矢量在 user.h 文件中设置,可用于设置 Id 和 Iq PI 电流控制器输出的最大幅度。 Id 和 Iq PI 电流 控制器的输出为 Vd 和 Vq。 Vs、Vd 与 Vq 之间的关系为: Vs = sqrt(Vd^2 + Vq^2) Vq = sqrt(USER_MAX_VS_MAG^2 - Vd^2) 在此 FOC 控制器中,将 Vd 值设置为等于: USER_MAX_VS_MAG*USER_VD_MAG_FACTOR。 USER_MAX_VS_MAG_PU 最大可达 1.0(全局 IQ 格式),如果未使用电流重构,则可达 _IQ(1.0)。 有关 更多讨论和示例,请参见实验 10a-x。 //! \brief Defines the voltage vector magnitude #define USER_MAX_VS_MAG_PU (1.0) 226 管理电机信号 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 硬件必要条件 除此最大电压矢量幅度定义外,还可以更改控制器对象的成员,从而更改电流控制器的输出(即空间矢量调 制 (SVM) 的输入)。 需要注意的是,虽然最大电压矢量幅度在 user.h 中定义的最大值为 1.0(或 100%),但是 SVM 的输入可达 4.0/3.0 = 1.3333(允许过调制)。 SVM 的输入大于 1.0 即为过调制区 域。 输入为 2/SQRT(3) = 1.1547 时,正弦波波峰的占空比接近 100%。 输入为 1.3333 时,SVM 生成器将 生成梯形波形。 以下代码示例将电流控制器的输出更改为 1.3333,从而允许最大过调制: // Set the maximum current controller output for the Iq and Id current // controllers to enable overmodulation. CTRL_setMaxVsMag_pu(ctrlHandle, _IQ(pUserParams->maxVsMag_pu)); 表 5-2 描述了最大 SVM 输入的不同范围以及对于空间矢量调制 (SVM) 的意义。 表 5-2. 最大 SVM 输入范围 #define USER_MAX_VS_MAG_PU (value) (1.0) CTRL_setMaxVsMag_pu(handle, value) IQ(1.0) 峰值时 EPWM 的占空比 86.6% 2 = 1.1547 3 4 = 1.3333 3 _IQ(2/SQRT(3)) _IQ(1.3333) 100.0% 100.0% 波形类型 理想正弦波 准正弦波 梯形波 电流重构 不需要 需要 需要 在过调制区运行时,电压波形根据应用过调制的程度开始从正弦波向梯形波转换。 随着电机运行逐渐深入过 调制区,预期会出现电机振动和转矩纹波。 SVM 模块在表 8-1 中有详细介绍。 可产生 100% 峰值占空比的最大电压幅值要求采用三分流电流测量。 由最大电压幅值产生的实际占空比范围取决于电流采样所用的分流电阻器数量。 如果应用要求占空比为 100%,则用户必须使用三个分流电阻器对电机的相电流进行采样。 如果只有两个分流电阻器,则会将占空 比限制为小于 100%。 使用两个分流电阻器时的最大占空比取决于 OPAMP 参数和布局本身。 有关选择正 确的电流反馈组件的详细信息,请参见Chapter 17。 5.2 硬件必要条件 为了正确识别电机以及使用 InstaSPIN 高效运行电机,需要正确设置几个硬件相关参数。 以下参数即为硬 件相关参数,下文会对各参数进行详细介绍: • 电流反馈增益 - 最大 ADC 输入范围 • 电流反馈极性 - 匹配软件与硬件极性 • 电压反馈 • 电压滤波器极 • 分流电阻器数量 • 死区时间配置 • 模拟输入配置 • PWM 输出配置 以下章节将分别介绍各个参数。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理电机信号 227 硬件必要条件 5.2.1 电流反馈增益 www.ti.com.cn 为了测量双向电流(即正电流和负电流),以下电路需要使用 1.65V 基准电压。此电压在 3.3V 系统中通常 不会提供,但可通过电压跟随器轻松生成。图 5-2 为通过 3.3V 系统中提供的 3.3V 输入生成 1.65V 基准电 压的电路示例。 对于连接 1.65V 的后续电路,假定使用此电路。 3.3 V R1 R1 = R2 + R2 - 1.65 V 图 5-2. 通过 3.3V 输入生成 1.65V 基准电压电路示例 图 5-3 显示用于电流测量的典型差分放大器配置。 1.65 V Rfbk Iin Rin + Rshunt Rin Vout - Rfbk 图 5-3. 典型差分放大器电路 此电路的传输函数由 公式 3 给定。 Vout = 1.65 + Iin ´ Rshunt Rfbk ´ Rin (3) 为了演示此电路中的某些值,下面以定义的最大相电流为 10A 的电机为例。在本例中,微处理器要测量的最 大电流为 ±10A,使用此电路可生成最大电压 1.65V (±1.65V) 来支持 3.3V ADC 输入范围。 对于 10A 电流的最差情况,可考虑使用 0.01Ω 分流电阻器。 Rfbk = Vout - 1.65 = 3.3 - 1.65 = 16.5 Rin Iin ´ Rshunt 10 ´ 0.01 (4) 现在,如果使用 1.0kΩ 的输入电阻,则可根据输入电阻和所需比值计算反馈电阻。 Rƒbk = 16.5 ´ Rin = 16.5kW (5) 根据计算的电阻值可生成如图 5-4 所示电路,其中提供电压范围 0-3.3V 表示测量的 ±10A 相电流。 228 管理电机信号 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 1.65 V 硬件必要条件 16.5 k3 Iin 1 k3 + Vout 0.01 3 1 k3 - 16.5 k3 Iin = 10 A Vout = 3.3 V Iin = -10 A Vout = 0.0 V 图 5-4. 计算电阻值电路 如本例所示,微处理器可测量的最大峰峰值电流为 20A,峰峰值为 ±10A。以下代码段显示如何在 user.h 中 该值: //! \brief Defines the maximum current at the AD converter #define USER_ADC_FULL_SCALE_CURRENT_A (20.0) OPAMP 转换率对于电流测量质量起重要作用。 有关详细信息,请参见Chapter 17。 5.2.2 电流反馈极性 正确的电流反馈极性也很重要,因为这样才能确保微处理器精确测量电流。 5.2.2.1 正反馈 在此硬件配置中,分流电阻器的负引脚接地,同时与运算放大器的反向引脚连接。图 5-5 显示硬件中的正极 性及其软件配置。 为了在软件中获得电流反馈正极性,需要对突出显示的符号进行配置。 函数 HAL_updateAdcBias 位于 hal.h 文件中。 1.65 V Rfbk Iin Rin + + Vout Rshunt - Rin - Rfbk 图 5-5. 正反馈 //! \brief Updates the ADC bias values ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理电机信号 229 硬件必要条件 //! \param[in] handle The driver (HAL) handle inline void HAL_updateAdcBias(HAL_Handle handle) { uint_least8_t cnt; HAL_Obj *obj = (HAL_Obj *)handle; _iq bias; // update the current bias for(cnt=0;cntoffsetHandle_I[cnt]); HAL_setBias(handle,HAL_SensorType_Current,cnt,bias); } // update the voltage bias for(cnt=0;cntoffsetHandle_V[cnt]); HAL_setBias(handle,HAL_SensorType_Voltage,cnt,bias); } return; } // end of HAL_updateAdcBias() function www.ti.com.cn 5.2.2.2 负反馈 另一方面,图 5-6 表示负反馈。 在此硬件配置中,分流电阻器的负引脚接地,同时与运算放大器的非反向引 脚连接。 配置负反馈所需的代码中显示了突出显示的符号,为了在软件中获得负反馈,需要对该符号进行配 置。 函数 HAL_updateAdcBias 位于 hal.h 文件中。 Rfbk Iin Rin + - Vout Rshunt - Rin + 1.65 V Rfbk 图 5-6. 负反馈 //! \brief Updates the ADC bias values //! \param[in] handle The driver (HAL) handle inline void HAL_updateAdcBias(HAL_Handle handle) { uint_least8_t cnt; HAL_Obj *obj = (HAL_Obj *)handle; _iq bias; // update the current bias 230 管理电机信号 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn for(cnt=0;cntoffsetHandle_I[cnt]); HAL_setBias(handle,HAL_SensorType_Current,cnt,bias); } // update the voltage bias for(cnt=0;cntoffsetHandle_V[cnt]); HAL_setBias(handle,HAL_SensorType_Voltage,cnt,bias); } return; } // end of HAL_updateAdcBias() function 硬件必要条件 5.2.3 电压反馈 FAST 估算器中需要使用电压反馈,以便在更宽的速度范围内实现最佳性能。 其它算法无法准确表示电压相 位,需要依赖软件变量。 在 FAST 中,相电压直接从电机相位测量而不需通过软件估算。 正因如此,电压 反馈的硬件设置是 InstaSPIN 运行和电机识别的另一个必要条件。 此软件值 (USER_ADC_FULL_SCALE_VOLTAGE_V) 取决于检测电机相位电压反馈的电路。图 5-7 是基于电阻分压 器的电压反馈电路的示例。 Three Phase Inverter Va Vb Vc Motor VADC_a VADC_b VADC_c 95.3 k3 4.99 k3 95.3 k3 95.3 k3 4.99 l3 47 nF 4.99 l3 47 nF 47 nF 图 5-7. 电压反馈电路 在本例中,微处理器可测量的最大相电压反馈可按以下公式进行计算,ADC 输入的最大电压为 3.3V: Vamax = VAmDaCx _ a ´ (4.99kW + 95.3kW) 4.99kW = 3.3 V ´ (4.99kW + 95.3kW) 4.99kW = 66.3 V (6) 使用上述电压反馈电路时,需要在 user.h 中完成以下设置: //! \brief Defines the maximum voltage at the input to the AD converter #define USER_ADC_FULL_SCALE_VOLTAGE_V (66.3) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理电机信号 231 硬件必要条件 www.ti.com.cn 如果考虑针对此值留 20-30% 余量,则建议系统最大输入电压介于 66.3*0.7 = 46.4V 与 66.3*0.8 = 53V 之 间,因此,此电压反馈电阻分压器是 48V 电机的理想选择。 下面介绍不同标称电压的示例。 如果要驱动的电机的标称电压为 24V,则需要修改电压反馈电路,使 ADC 分辨率针对测量电压达到最大值。 遵照关于余量的相同建议,考虑标称电压 24V 和余量值 30%。 这样可得 到 USER_ADC_FULL_SCALE_VOLTAGE_V(24*1.3 = 31.2V),如公式 7 中所示,其中一个电阻器固 定,仅剩下一个可变电阻器。 Vamax = 31.2 V = Vmax ADCa ´ (4.99kW + R) 4.99kW = 3.3 V ´ (4.99kW + R) 4.99kW R = 31.2 V ´ 4.99kW - 4.99kW = 42.2kW 3.3 V (7) 我们可据此得到最大电压 31.2V,配置如下: 232 管理电机信号 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn //! \brief Defines the maximum voltage at the input to the AD converter #define USER_ADC_FULL_SCALE_VOLTAGE_V (31.2) 硬件必要条件 图 5-8 中显示了含上述值的电压反馈电路。 Three Phase Inverter Va Vb Vc Motor VADC_a VADC_b VADC_c 42.2 k3 4.99 k3 42.2 k3 42.2 k3 4.99 l3 47 nF 4.99 l3 47 nF 47 nF 图 5-8. 电压反馈电路 5.2.4 电压滤波器极 FAST 估算器中需要使用电压滤波器极,以便准确检测电压反馈。 滤波器的电压应足够低,以便能够过滤 PWM 信号,同时允许高速电压反馈信号通过滤波器。 通常,使用几百 Hz 的截止频率便足以过滤掉 10 至 20kHz 的 PWM 频率。 只有在运行超高速电机时生成几 kHz 相电压频率的情况下,才需更改硬件滤波器。 本例中以 DRV8312 版本 D 开发板配套提供的电机(即 Anaheim PMSM 电机)为例,最大速度约为 8000RPM,极对数为 4。 提供的电压频率为 8000/60*4 = 533.3Hz。 对于此电机和速度,采用上述频率近 似值 533Hz 的电压滤波器的截止频率应足够大。 根据 DRV8312 版本 D 硬件,以图 5-8 中所示的同一电压反馈电路为例。 滤波器极设置可按如下公式计算: Ffilter _ pole = 1 2 ´ p ´ Rparallel ´C = 2 ´ p ´ æ çè 1 95.3kW ´ 4.99kW 95.3kW + 4.99kW ö ÷ø ´ 47nF = 714.15Hz (8) 以下代码示例显示如何在 user.h 中定义此参数: //! \brief Defines the analog voltage filter pole location, Hz #define USER_VOLTAGE_FILTER_POLE_Hz (714.15) Tips and Tricks: • 为获得最佳结果,需保持滤波器极 > 200Hz • 滤波器极必须 > IQ_FULLSCALE_FREQUENCY_Hz / 4.0,以避免出现数值饱和。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理电机信号 233 硬件必要条件 5.2.5 分流电阻器数量 www.ti.com.cn 选择硬件配置的一大重点是要使用的分流电阻器数量。 此数字最终由 Clarke 变换使用,可将三相系统转换 为两相系统。 如果所有相位均通过一个分流电阻器从底部的晶体管接地,则使用三个分流电阻器,如图 5-9 所示。 Motor Ia Ib Ic 图 5-9. 分流电阻器 如果此配置存在,则用户应在软件中定义三个分流电阻器以获得最佳结果。 以下代码示例显示如何配置软件 以使用三个分流电阻器: //! \brief Defines the number of current sensors used #define USER_NUM_CURRENT_SENSORS (3) 如果硬件使用两个分流电阻器测量电流,则必须将软件配置为只使用两个分流电阻器,如下所示: //! \brief Defines the number of current sensors used #define USER_NUM_CURRENT_SENSORS (2) 有关 InstaSPIN 的分流电阻器测量要求的详细信息,请参见Chapter 17。 5.2.6 死区时间配置 必须根据使用的硬件正确配置死区时间,以避免击穿逆变器高侧和低侧晶体管(请参见图 5-10)。 有关 EPWM 模块和死区时间配置的详细信息,请参见 MCU 技术参考手册。 234 管理电机信号 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn EPWM1A EPWM1B Gate Driver 硬件必要条件 Motor EPWM1A EPWM1B Dead Time 2.0 μs 2.0 μs Example of 2.0 μs deadtime 图 5-10. 死区时间配置 死区时间取决于使用的晶体管和栅极驱动器,可按照以下代码示例所示进行配置,假定需要的死区时间为 2.0µs,以 90MHz 的系统频率在 F2805xF 和 F2806xF 器件上运行。 //! \brief Defines the system clock frequency, MHz //! #define USER_SYSTEM_FREQ_MHz (90) //! \brief Defines the PWM dead band in terms of the number of system clocks //! #define USER_PWM_DBCNT_INIT_STATE \ ((uint16_t)(2.0 * (float_t)USER_SYSTEM_FREQ_MHz)) 以 60MHz 系统频率在 F2802xF 器件上运行: //! \brief Defines the system clock frequency, MHz //! #define USER_SYSTEM_FREQ_MHz (60) //! \brief Defines the PWM dead band in terms of the number of system clocks //! #define USER_PWM_DBCNT_INIT_STATE \ ((uint16_t)(2.0 * (float_t)USER_SYSTEM_FREQ_MHz)) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理电机信号 235 硬件必要条件 www.ti.com.cn 触发区和比较器可用于保护硬件,防止出现过流或过压条件,具体取决于使用的特定硬件配置,而最终用户 负责使用 EPWM 和 ADC 模块的所有可用功能来保护硬件。 此外,也可以借助 EPWM 模块的灵活性来实 现死区时间的备用实施方案,但本文档的范围仅限于 InstaSPIN 软件的功能,并不涵盖所有 EPWM 实施方 案。 5.2.7 模拟输入配置 模拟引脚必须在软件中配置。 为了演示如何进行配置,下面以图 5-11 为例,表示在使用 F2806xF 器件和 DRV8312 版本 D 开发板时如何连接模拟引脚。 Ia Ic Vb Vbus Vc Ib Va 28069F 图 5-11. 模拟连接 有关 ADC 配置的详细信息,请参见《TMS320x2806x Piccolo 技术参考指南》(文献编号 SPRUH18)、 《TMS320x2805x Piccolo 技术参考指南》(文献编号 SPRUHE5)以及 《TMS320F2802x,TMS320F2802xx Piccolo 系统控制和中断参考指南》(文献编号 SPRUFN3)。 有关 特定封装相关引脚的详细信息,请参见数据手册《TMS320F2806x Piccolo 微控制器》(文献编号 SPRS698)、《TMS320F2805x Piccolo 微控制器》(文献编号 SPRS797)以及 《TMS320F2802x,TMS320F2802xx Piccolo 微控制器》(文献编号 SPRS523)。 以下代码示例显示了如何配置 ADC 输入引脚以表示上图。 用于执行实际配置的代码行在代码示例中会突出 显示。 此代码是 hal.c 文件中 HAL_setupAdcs 函数的一部分。 ADC_setSocChanNumber (obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A1); ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA); ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles); ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_B5); ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA); ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles); ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_A5); ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA); ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles); ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_B7); ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM1_ADCSOCA); ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles); 236 管理电机信号 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_A7); ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM1_ADCSOCA); ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles); ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_B4); ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM1_ADCSOCA); ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles); ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B2); ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM1_ADCSOCA); ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles); 硬件必要条件 5.2.8 PWM 输出配置 图 5-12 描述了 PWM 引脚的配置,其中电机相位 A 由 EPWM1A/EPWM1B 驱动,电机相位 B 由 EPWM2A/EPWM2B 驱动,电机相位 C 由 EPWM3A/EPWM3B 驱动。 此硬件配置与 DRV8312 版本 D 开 发板相同,可作为本文档中的示例。 EPWM1A EPWM1B EPWM2A EPWM2B EPWM3A EPWM3B 28069F 图 5-12. PWM 引脚配置 有关 EPWM 配置的详细信息,请参见《TMS320x2806x Piccolo 技术参考指南》(文献编号 SPRUH18)、《TMS320x2805x Piccolo 技术参考指南》(文献编号 SPRUHE5)以及 《TMS320F2802x,TMS320F2802xx Piccolo 系统控制和中断参考指南》(文献编号 SPRUFN3)。 有关 特定封装相关引脚的详细信息,请参见数据手册《TMS320F2806x Piccolo 微控制器》(文献编号 SPRS698)、《TMS320F2805x Piccolo 微控制器》(文献编号 SPRS797)以及 《TMS320F2802x,TMS320F2802xx Piccolo 微控制器》(文献编号 SPRS523)。 以下代码示例显示如何针对上图设置 PWM 引脚。 此代码示例是驱动程序对象 (HAL_init) 的初始化部分,包 含在 hal.c 文件中。 为使用前三对 EPWM 而初始化句柄后,可针对初始化的句柄完成其它 PWM 配置: // initialize PWM handle obj->pwmHandle[0] = PWM_init((void *)PWM_ePWM1_BASE_ADDR,sizeof(PWM_Obj)); obj->pwmHandle[1] = PWM_init((void *)PWM_ePWM2_BASE_ADDR,sizeof(PWM_Obj)); obj->pwmHandle[2] = PWM_init((void *)PWM_ePWM3_BASE_ADDR,sizeof(PWM_Obj)); 突出显示的文本指示以下对象之间的对应关系: • pwmHandle[0] = EPWM1A/EPWM1B,用于驱动电机相位 A • pwmHandle[1] = EPWM2A/EPWM2B,用于驱动电机相位 B • pwmHandle[2] = EPWM3A/EPWM3B,用于驱动电机相位 C。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理电机信号 237 Chapter 6 ZHCU083F – January 2013 – Revised July 2014 电机识别和状态图 本节将讨论电机识别功能:比较 ACIM 和 PMSM 识别过程的差异、了解每个过程的详细信息并探讨需要非 典型步骤的特殊情况。 有些无传感器的电机控制应用需要依靠电机型号。 此电机型号要求您了解某些参数才能精确地表示电机。 此型号随后用于运行估算器,进而将提供未知变量,如转子磁通角度或速度。 在电机参数未知的情况下,或 如果参数随时间变化,将发生问题。 通常,定义明确的电机用于最终应用,但在有些情况下,电机尚未定 义,或者产品生命周期中使用了多个电机。 确定并跟踪电机参数的一种方法是使用测量电机参数的软件。 尽管识别电机不是所有应用的强制要求,但是 这样可以提供简单、更好的开箱即用体验 - 在没有传感器的情况下轻松运行任何给定的电机。 市面上的其它 算法要求提前采用密集调整过程,甚至是在电机闭环运行之前。 以下各节详细介绍了采用 InstaSPIN 解决方案的电机识别过程。 为确保介绍的算法和相关步骤能够成功识 别大量的电机类型,我们投入了大量精力。 但不能确保所介绍的算法和步骤始终能够成功识别所有电机或电 机类型。 故障排除部分提到了几个需要特别注意的特定电机类型。 Topic ........................................................................................................................... Page 6.1 InstaSPIN 电机识别............................................................................................ 239 6.2 电机识别过程概述............................................................................................... 241 6.3 PMSM 和 ACIM 识别过程的差别 ........................................................................... 247 6.4 必要条件........................................................................................................... 247 6.5 PMSM 电机完全识别........................................................................................... 251 6.6 ACIM 电机完全识别 ............................................................................................ 269 6.7 PMSM 和 ACIM 电机识别重校准 ........................................................................... 284 6.8 在 user.h 中设置 PMSM 电机参数 ......................................................................... 292 6.9 电机识别故障排除............................................................................................... 296 238 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 6.1 InstaSPIN 电机识别 图 6-1 中突出显示的块与 InstaSPIN 电机识别功能相关。 InstaSPIN 电机识别 图 6-1. InstaSPIN 电机识别组成部分 电机识别是 InstaSPIN-FOC 的一项附加功能,借此功能可以识别估算器在无传感器条件下闭环运行所需的 参数。 如果用户已熟知电机参数,则可以选择是否进行电机识别。 凭借 InstaSPIN 的电机识别功能,即使 电机参数未知,用户也可使电机达到最佳运行性能。 如果电机已知或之前已经过识别,则所需电机参数会记 录到头文件中,因此可以选择是否运行 InstaSPIN 的电机识别功能。 user.h 即为类似的头文件。 以下示例 显示了绕过电机识别时所需的 PMSM 电机参数: #if (USER_MOTOR == User_PMSM) #define USER_MOTOR_Rs (2.83) #define USER_MOTOR_Ls_d (0.0115) #define USER_MOTOR_Ls_q (0.0135) #define USER_MOTOR_RATED_FLUX (0.502) 以下示例显示了绕过电机识别时所需的 ACIM 电机参数: #elif (USER_MOTOR == User_ACIM) #define USER_MOTOR_Rr (5.5) #define USER_MOTOR_Rs (10.7) #define USER_MOTOR_Ls_d (0.053) #define USER_MOTOR_Ls_q USER_MOTOR_Ls_d #define USER_MOTOR_MAGNETIZING_CURRENT (1.4) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 239 InstaSPIN 电机识别 www.ti.com.cn 有关所需 PMSM 和 ACIM 电机参数的详细信息,请参见Chapter 4。 InstaSPIN 完整执行和最小执行时均可运行电机识别功能,请参见图 6-2 和图 6-3。 如果在 InstaSPIN 最小 执行时运行电机识别,用户必须将磁场定向控制 (FOC) 块包含在 InstaSPIN 开源库内。 Torque Mode User_SpdRef User_IqRef User_IdRef Traj Ramp Zref Za Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out CTRL_run CTRL_setup Ta SVM Tb Tc HAL_run PWM Driver FLASH/RAM Id Iq PARK Flux Angle Speed Torque a a T EST_run T HAL_acqAdcInt HAL_readAdcData \a a Irated a T \a IH_in Ia IJ_in CLARKE Ib Ic Za Za &^d¡š]uš}Œ VH_in Flux, Angle, Speed, Torque Va ADC aW aW Motor Parameters ID VJ_in CLARKE Vb Vc Driver Vbus ROM ROM FLASH/RAM a Rs a Rr a Lsd a Lsq \a rated a Irated voW}ÁŒtŒ‰¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 6-2. InstaSPIN-FOC 完整执行(仅限 F2805xF、F2805xM、F2806xF 和 F2806xM 器件) 240 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 电机识别过程概述 Torque Mode User_SpdRef User_IqRef User_IdRef Traj Ramp Zref Za Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out Id Iq PARK CTRL_run CTRL_setup Ta SVM Tb Tc HAL_run PWM Driver FLASH/RAM \a Flux a T Angle Za Speed aW Torque a Irated \a a a T EST_run T IH_in IJ_in Za &^d¡š]uš}Œ Flux, Angle, Speed, Torque aW Motor Parameters ID VH_in VJ_in Vbus FLASH/RAM Ia CLARKE Ib Ic Va CLARKE Vb Vc HAL_acqAdcInt HAL_readAdcData ADC Driver ROM FLASH/RAM a Rs Rar a Lsd a Lsq \a rated a Irated Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 6-3. InstaSPIN-FOC 最小执行(F2802xF、F2805xF、F2805xM、F2806xF 和 F2806xM 器件) 6.2 电机识别过程概述 6.2.1 控制器 (CTRL) 状态机 表 6-1 汇总了图 6-4 中显示的所有状态并对各个状态进行了简要说明。 本文档中会在说明详细的电机识别过 程时对此给出更加详细的介绍。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 241 电机识别过程概述 www.ti.com.cn Start Controller Disabled OR (Controller Enabled AND Estimator Not Idle AND }v[šWŒ(}Œu>}lZ}š}Œdš) Controller Enabled AND Wait Not Expired Controller Enabled AND Estimator is Idle AND (Motor Not Identified OR (Motor Identified AND Idle Offset Recalibration Enabled)) Offline Hardware Offsets Recalibration Controller Disabled (Controller Enabled AND Estimator is Idle AND Motor Identified AND Offset Recalibration Disabled) OR (Estimator Not Idle AND Perform Locked Rotor Test) Controller Enabled AND (Estimator Not In Locked Rotor OR Estimator Not Idle) Online Controller Enabled AND Wait Expired Controller Enabled AND ((Estimator Idle AND Motor Identified AND Offset Recalibration Disabled) OR (Estimator Not Idle AND Perform Locked Rotor Test)) 图 6-4. 控制器 (CTRL) 状态图 Motor running in closed loop or is being Identified, depending on Estimator (EST) State Machine 控制器状态 启动 空闲 CTRL_State_Idle 离线 CTRL_State_OffLine 在线 CTRL_State_OnLine 表 6-1. 控制器 (CTRL) 状态 简要说明 启动状态仅显示为整个状态机的起点。 但它并不实际存在于控制器状态机中。 当控制器等待用户输入以启动时会出现该状态。 如果识别交流感应电机,当系统等待用户输入以启 动锁定转子测试时也会出现此状态。 硬件偏移校准在控制器的这一状态下完成 电机正在闭环运行或正在被识别。 当控制器 (CTRL) 状态机处于在线状态时,整个估算器 (EST) 状 态机处于运行状态 表 6-2 汇总了图 6-4 中显示的所有状态转换条件。 条件 控制器已禁用 控制器已启用 估算器不空闲 估算器空闲 不执行锁定转子测试 执行锁定转子测试 表 6-2. 控制器 (CTRL) 状态图的状态转换 简要说明 此条件在控制器尚未启用时出现,可通过以下指令进行检查: if(CTRL_getFlag_enableCtrl(ctrlHandle)== FALSE) 另外,也可随时使用用户代码调用以下含有指定参数的函数,以此来禁用控制器: CTRL_setFlag_enableCtrl(ctrlHandle,FALSE); 此条件在控制器已启用时出现,可通过以下指令进行检查: if(CTRL_getFlag_enableCtrl(ctrlHandle)== TRUE) 可通过以下指令启用控制器: CTRL_setFlag_enableCtrl(ctrlHandle,TRUE); 此条件在估算器处于非空闲状态时出现。 可通过以下指令进行检查: if(EST_getState(obj->estHandle)!=EST_State_Idle) 此条件在估算器处于空闲状态时出现。 可通过以下指令进行检查: if(EST_getState(obj->estHandle)==EST_State_Idle) 此条件在估算器状态机内部进行检查,不可通过用户代码公开访问。 此条件仅在电机类型设置为感 应电机时进行内部检查。 与上述“不执行锁定转子测试”的说明相同 242 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 电机识别过程概述 表 6-2. 控制器 (CTRL) 状态图的状态转换 (continued) 条件 简要说明 电机未识别 当电机尚未被识别或用户电机的参数尚未加载到控制器对象中时,此条件为真。 “电机未识别”条件 可通过以下示例进行检查: if(EST_isMotorIdentified(obj->estHandle)== FALSE) 电机已识别 电机识别完成后或用户电机的参数加载到控制器后,电机已识别条件为真。 此条件也可通过以下示 例进行检查: if(EST_isMotorIdentified(obj->estHandle)==TRUE) 偏移重校准已启用 当硬件偏移重校准已启用时,此条件为真。 偏移重校准默认为启用状态。 此条件可通过以下指令示 例进行检查: if(CTRL_getFlag_enableOffset(ctrlHandle)==TRUE) 偏移重校准已禁用 当硬件偏移重校准已禁用时,此条件为真。 该条件可通过以下示例进行检查: if(CTRL_getFlag_enableOffset(ctrlHandle)==FALSE) 等待未超时 此为内部条件,在执行偏移重校准时进行检查。 偏移重校准所耗时间通过 user.c 文件中的以下指令 定义: pUserParams->ctrlWaitTime[CTRL_State_OffLine] = (uint_least32_t)( 5.0 * USER_CTRL_FREQ_Hz); 其中,USER_CTRL_FREQ_Hz 在 user.h. 中定义。 此条件在估算器状态机未处于锁定转子测试状态时出现。 用户可通过使用以下指令示例检查此条 估算器未处于锁定转子测试状态 件: if(EST_getState(obj->estHandle) !=EST_State_LockRotor); 等待已超时 与时间有关的状态转换基于内部计数器,而不是基于 user.c 中对应等待时间中存储的值: uint_least32_t ctrlWaitTime[CTRL_numStates]; 6.2.2 估算器 (EST) 状态机 表 6-3 汇总了图 6-5 中显示的所有状态并对各个状态进行了简要说明。 本文档中会在说明详细的电机识别过 程时对此给出更加详细的介绍。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 243 电机识别过程概述 Controller Enabled Motor is Identified AND Rs Recalibration Disabled AND Controller Enabled Online Controller Disabled Controller Disabled Motor is Identified AND Rs Recalibration Enabled Wait Expired AND Motor Is Identified www.ti.com.cn Start Idle Wait Expired Motor Ident Wait Expired AND Motor Is Identified Ramp Down Motor Is Not Identified RoverL Wait Expired AND Motor Is Not Identified AND Controller Motor is an ACIM Disabled Wait Expired Rr Lock Rotor Wait Expired Wait Expired AND Motor Is Not an ACIM Rated Flux OL Rs Wait Expired AND Motor Is Not Identified Ramp Up Wait Expired AND Motor Is an ACIM Id Rated Wait Expired AND Motor Is Not an ACIM Wait Expired AND Motor Is an ACIM Ls Controller Enabled Wait Expired Wait Expired AND Motor Is Not an ACIM Rated Flux Wait Expired AND Motor Is an ACIM Wait Expired 图 6-5. 估算器 (EST) 状态图 估算器状态 启动 空闲 EST_State_Idle RoverL EST_State_RoverL Rs EST_State_Rs 在线 EST_State_OnLine 斜升 EST_State_RampUp 额定磁通 OL EST_State_RatedFluxOL 额定磁通 EST_State_RatedFlux 表 6-3. 估算器 (EST) 状态 简要说明 启动状态仅显示为整个状态机的起点。 但它并不实际存在于估算器状态机中。 在空闲状态期间,估算器状态机不执行任何代码。 只是等待控制器状态机更改估算器的状态。 估算器的 R/L 状态在电机识别过程期间执行,用于测量电机的电气常量。 此状态结束时,可 使用产生的 R/L 比来计算 ID 和 IQ 电流控制器增益。 首次识别电机定子电阻时或在完全识别电机后重新校准定子电阻时,估算器处于 Rs 状态。 估算器在线状态在电机闭环运行时出现。 要进入此状态,必须完全识别电机或将电机参数记录 到头文件 user.h 中,并且控制器已运行。 在此状态下,可更改速度参考值并且电机转轴可满 载运行。 在估算器斜升状态下,电机可上升至已配置的频率以执行其它识别任务,例如磁通和电感识 别。 在此状态期间,不会估算任何参数,仅仅使电机上升至特定频率。 这是识别电机额定磁通之前估算器的一个过渡状态。 在此状态期间,将识别电机定子到转子的磁链。 244 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 电机识别过程概述 估算器状态 额定 Id EST_State_IdRated Ls EST_State_Ls Rr EST_State_Rr 锁定转子 EST_State_LockRotor 斜降 EST_State_RampDown 电机已识别 EST_State_MotorIdentified 表 6-3. 估算器 (EST) 状态 (continued) 简要说明 仅适用于 ACIM 电机,该状态在识别 user.h 中定义的所需磁通对应的电机磁化电流时出现。 估算器的这一状态期间将识别定子电感。 仅适用于 ACIM 电机,在此状态期间,将识别转子电阻。 必须锁定转子后才能识别转子电 阻。 此状态用于告知用户转子必须锁定,并且转子锁定后必须重新启用控制器才能继续余下的识别 过程。 估算器处于锁定转子状态时,控制器处于空闲状态。 识别电机的所有参数后将出现斜降状态,在此状态期间可移除流经电机绕组的电流。 此状态仅 为识别过程结束前的过渡状态,因此,期间不会识别任何参数。 电机已识别状态也是一个过渡状态,用于告知估算器状态机电机已完全识别,此状态结束后, 状态机将返回空闲状态。 电机已识别状态结束后,控制器状态机也会进入空闲状态。 表 6-4 汇总了图 6-5 中显示的所有状态转换条件。 条件 电机未识别 电机已识别 Rs 重校准已禁用 Rs 重校准已启用 控制器已禁用 控制器已启用 电机不是 ACIM 电机为 ACIM 等待已超时 表 6-4. 估算器 (EST) 状态图的状态转换 简要说明 已在控制器状态机中进行说明 已在控制器状态机中进行说明 InstaSPIN 定子电阻重校准功能也称为 Rs 离线重校准,当电机静止后,在已完全识别电机或用户已 将电机参数记录到 user.h 文件后闭环运行电机之前可使用该功能。 此功能禁用后将出现 Rs 重校准 被禁用的条件,该条件可通过以下代码示例进行检查: if(EST_getFlag_enableRsRecalc(obj->estHandle)==FALSE) 启用控制器前,可通过调用以下包含指定参数的函数禁用 Rs 重校准功能: EST_setFlag_enableRsRecalc(obj->estHandle, FALSE); Rs 重校准功能默认为启用状态。 此功能启用后将出现 Rs 重校准已启用的条件,该条件可通过以下代码示例进行检查: if(EST_getFlag_enableRsRecalc(obj->estHandle)==TRUE) 启用控制器前,可通过调用以下包含指定参数的函数启用 Rs 重校准功能: EST_setFlag_enableRsRecalc(obj->estHandle, TRUE); Rs 重校准功能默认为启用状态。 已在控制器状态机中进行说明 已在控制器状态机中进行说明 当电机类型不是 ACIM 时此条件为真,可通过以下示例进行检查: if(CTRL_getMotorType(ctrlHandle)!=MOTOR_Type_Induction) 当电机类型为 ACIM 时此条件为真,可通过以下示例进行检查: if(CTRL_getMotorType(ctrlHandle)==MOTOR_Type_Induction) 与时间有关的状态转换基于内部计数器,而不是基于 user.c 中对应等待时间中存储的值: uint_least32_t estWaitTime[EST_numStates]; uint_least32_t FluxWaitTime[EST_Flux_numStates]; uint_least32_t LsWaitTime[EST_Ls_numStates]; uint_least32_t RsWaitTime[EST_Rs_numStates]; 6.2.3 控制器 (CTRL) 和估算器 (EST) 状态机的相关性 控制器状态机管理估算器状态机。 事实上,所有估算器状态转换仅在控制器处于在线状态时发生。 为对此 进行说明,现以下面的简化控制器状态机(图 6-6)为例,图中以放大的在线状态来显示控制器状态机内的 整个估算器状态机。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 245 电机识别过程概述 Start Idle Offline CTRL State == Online EST State Machine www.ti.com.cn 图 6-6. 控制器和估算器状态图 - 关系图 246 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 和 ACIM 识别过程的差别 6.3 PMSM 和 ACIM 识别过程的差别 PMSM 和 ACIM 电机识别过程中的某些状态存在差异。图 6-7 突出显示了与 PMSM 电机相关的状态、与 ACIM 电机相关的状态以及与二者均相关的状态。 Controller Enabled Motor is Identified AND Rs Recalibration Disabled AND Controller Enabled Online Controller Disabled Controller Disabled Motor is Identified AND Rs Recalibration Enabled Wait Expired AND Motor Is Identified Applicable to both PMSM and ACIM Motors Only Applicable to ACIM Motors Start Idle Wait Expired Motor Ident Wait Expired AND Motor Is Identified Ramp Down Motor Is Not Identified RoverL Wait Expired AND Motor Is Not Identified AND Controller Motor is an ACIM Disabled Wait Expired Rr Lock Rotor Wait Expired Wait Expired AND Motor Is Not an ACIM Rated Flux OL Only Applicable to PMSM Motors Rs Wait Expired AND Motor Is Not Identified Ramp Up Wait Expired AND Motor Is an ACIM Id Rated Wait Expired AND Motor Is Not an ACIM Wait Expired AND Motor Is an ACIM Ls Controller Enabled Wait Expired Wait Expired AND Motor Is Not an ACIM Rated Flux Wait Expired AND Motor Is an ACIM Wait Expired 图 6-7. EST 状态图中的 PMSM 和 ACIM 状态 表 6-5 为图 6-7 的补充,其中列出了所有状态以及这些状态相关的电机。 表 6-5. PMSM 和 ACIM EST 状态列表 状态适用的电机 PMSM 和 ACIM 仅 ACIM 仅 PMSM 估算器状态 空闲、在线、R/L、Rs、斜升、额定磁通、Ls、斜降和电机已识别 额定 Id、锁定转子和 Rr 额定磁通 OL 6.4 必要条件 要想成功识别 PMSM 电机,需满足几个必要条件。 以下各个小节将从机械、硬件和软件这三个主要方面介 绍这些必要条件: ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 247 必要条件 6.4.1 机械必要条件 www.ti.com.cn 6.4.1.1 电机连接 在运行电机识别功能之前,电机必须连接到驱动板。 此驱动板可以是开发板或用户板,不论是哪种板,均需 对软件进行相应配置使其与指定板配合工作。 6.4.1.2 相序 板上连接的相序不会影响对电机动态性能的控制(方向除外)。 如果方向很关键,建议在开始识别之前按所 需方向连接电机。 如果电机旋转方向不是所需方向,请交换电机的其中两相,电机将反向旋转。 之后再次 尝试识别。 6.4.1.3 最小机械负载 实现最小机械负载同样非常重要。 这是因为识别过程会运行一系列电机测试,其中一些测试在开环条件下进 行。 这些开环测试无法在电机转轴上产生最大转矩,因此,要求电机转轴上的负载尽可能小,空载即为理想 条件。节 6.9.2.1介绍了在无法移除机械负载(例如在压缩机或直驱洗衣机中)的情况下识别电机时所要遵循 的一些准则。 6.4.2 硬件必要条件 有关详细信息,请参见Chapter 5。 6.4.3 软件必要条件 有关详细信息,请参见Chapter 5。 6.4.4 PMSM 电机识别的软件配置 • 电机类型 • 极对数 • Rhf 和 Lhf 频率 • Rs 电流 • Ls 电流 • Ls 和磁通频率 6.4.4.1 电机类型 用户必须已知电机类型才能运行电机识别。 对于 PMSM 电机识别,请为 PMSM 电机类型 (MOTOR_Type_Pm) 设置如下所示定义。 此定义位于 user.h 中: #define USER_MOTOR_TYPE MOTOR_Type_Pm 如果选择了错误的电机(例如,连接 ACIM 时选择了 PMSM),估算器将无法识别正确的参数。 电机识别 功能无法识别所连电机的类型,而是会识别电机参数。 要求指定正确的电机定义,否则,电机识别将不起作 用。 248 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 必要条件 6.4.4.2 极对数 极对数并非关键因素,但应正确设置,以便正确测量转速(每分转数 (RPM))和转矩。 以具有四对电极的 电机为例。 以下代码示例显示如何在 user.h 中设置此极对数: #define USER_MOTOR_NUM_POLE_PAIRS (4) 6.4.4.3 Rhf 和 Lhf 频率 电机识别算法使用此频率来估算定子电阻和定子电感的初始值,以便计算电流控制器增益。 此估算过程在 100 Hz 的默认频率下完成,如 user.h 中的以下代码示例所示: //! \brief Defines the R/L estimation frequency, Hz //! #define USER_R_OVER_L_EST_FREQ_Hz (100) 本文档后续部分在介绍识别步骤时将更详细地介绍此频率。 6.4.4.4 Rs 电流 定子电阻通过注入恒定电流来估算,该电流通过此参数进行设置。 尽管本文档将会详细说明此部分识别过 程,但设置该值的一个通用准则是将其设为电机额定相电流的 10% 到 20%。 例如,如果某个电机需要 4A 电流来产生额定转矩,则用于估算定子电阻 (Rs) 的电流应为 0.5A 左右。 #define USER_MOTOR_RES_EST_CURRENT (0.5) 在电机识别过程的后续阶段,该电流还用于使电机开环旋转。 如果电机在整个斜升过程中不旋转,则以额定 电流的 10% 为增量增大该电流,直至转轴在整个斜升过程中旋转。 6.4.4.5 Ls 电流 通常,估算定子电感 (Ls) 所需的电流应为额定相电流(负电流)的 10% 到 20%。 仍以电阻评估示例中的 同一电机为例,其额定电流为 4A,因此建议的电流约为 -0.5A,如下所示。 #define USER_MOTOR_IND_EST_CURRENT (-0.5) 请记住,用于估算 Ls 的电流与用于识别 Rs 的电流无关。 尽管这两种电流的通用准则均为电机额定电流的 10-20%,但如果电机需要更大的 Rs 电流来通过开环斜坡,由于电机已处于旋转状态,因此 Ls 电流可能无 需过高。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 249 必要条件 www.ti.com.cn 6.4.4.6 Ls 和磁通频率 该频率用于斜升正在识别的电机,以估算定子电感 (Ls) 和磁通。 通常,对于 PMSM 电机而言,使用 20Hz 频率便足以估算几十 µH 及更大的定子电感。 如果已知电感为几 µH 甚至更小,建议使用较高频率(高达 60Hz)来估算超低电感。 以 DRV8312 套件(版本 D 开发板)中的 Anaheim 电机为例: #define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0) 如果典型值 20Hz 超出电机额定速度,请降低设定的频率,使其保持低于电机额定转速。 6.4.5 ACIM 电机识别的软件配置 • 电机类型 • 极数 • Rhf 和 Lhf 频率 • 额定磁通 • Rs 电流 • IdRated、Ls 和 Rr 频率 6.4.5.1 电机类型 如前文所述,用户必须已知电机类型才能运行电机识别。 对于 ACIM 电机识别,请为 ACIM 电机类型 (MOTOR_Type_Induction) 设置如下所示定义。 此定义位于 user.h 中: #define USER_MOTOR_TYPE MOTOR_Type_Induction 6.4.5.2 极对数 需遵循节 6.4.4.2中介绍的相同条件。 6.4.5.3 Rhf 和 Lhf 频率 需遵循节 6.4.4.3中介绍的相同条件。 6.4.5.4 额定磁通 进行完全识别时需要 ACIM 电机的额定磁通。 此额定磁通在 user.h 中按如下设置: #define USER_MOTOR_RATED_FLUX (0.8165*220.0/60.0) 此磁通的计算方法是借助电机铭牌。 例如,如果电机的额定值为单相 220VAC 和 60Hz,则磁通值的计算方 法如下: 1 220VAC 220VAC RatedFlux = 2´ ´ 3 60Hz = 0.8165 ´ 60Hz = 2.9938 (9) 又如,某个电机的输入电压同为 220VAC 但额定频率为 50Hz。 此时的额定磁通为: 250 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 1 220VAC 220VAC RatedFlux = 2´ ´ 3 50Hz = 0.8165 ´ 50Hz = 3.5926V / Hz PMSM 电机完全识别 (10) √2 项用于将单相 RMS 电压值转换为峰值电压,1/√3 项用于将电机线电压转换为电机相电压。 基于给定电 机的额定磁通来识别一半额定磁通对应的 Id 额定电流。 在这种情况下,只需输入所需磁通或所需磁通的一 部分。 请注意,计算额定磁通所需的电压为电机相电压,因此需要从 220VAC(线电压)转换为 VDC(线 电压),再从 VDC(线电压)转换为 VDC(相电压)。 6.4.5.5 Rs 电流 需遵循节 6.4.4.4中介绍的相同条件。 6.4.5.6 IdRated、Ls 和 Rr 频率 此频率用于斜升正在识别的电机,以估算 ACIM 电机的 Id 额定电流、定子电感和转子电阻。 感应电机所使 用的典型频率为 5 Hz: #define USER_MOTOR_FLUX_EST_FREQ_Hz (5.0) 6.5 PMSM 电机完全识别 对 PMSM 电机进行完全识别时,图 6-8 显示了控制器和估算器状态机内部发生事件的顺序。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 251 PMSM 电机完全识别 CTRL State Machine EST State Machine Idle CTRL_State_Idle Idle EST_State_Idle CTRL_setFlag_enableCtrl(ctrlHandle,TRUE); Offline CTRL_State_OffLine Online CTRL_State_OnLine RoverL EST_State_RoverL Rs EST_State_Rs RampUp EST_State_RampUp RatedFlux_OL EST_State_RatedFlux_OL RatedFlux EST_State_RatedFlux Ls EST_State_Ls RampDown EST_State_RampDown MotorIdentified EST_State_MotorIdentified Idle CTRL_State_Idle Idle EST_State_Idle 图 6-8. PMSM 完全识别 - CTRL 和 EST 状态顺序 启用控制器之前,代码得知以下两个条件为真时将执行电机完全识别: 1. 电机尚未识别 2. 未使用任何来自 user.h 的参数。 www.ti.com.cn 252 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn if( (EST_isMotorIdentified(obj->estHandle) == FALSE) && (CTRL_getFlag_enableUserMotorParams(ctrlHandle) == FALSE)) PMSM 电机完全识别 本文档接下来将详细介绍识别期间的各个状态。 6.5.1 CTRL_State_Idle 和 EST_State_Idle 在启用控制器之前,控制器和估算器状态机均处于空闲状态,分别表示为 CTRL_State_Idle 和 EST_State_Idle。 这也称作这两个状态机的非活动状态。 6.5.2 CTRL_State_OffLine 和 EST_State_Idle(硬件偏移已校准) 启用控制器并且开始完全识别后,控制器状态机执行的首个任务为偏移计算。 此过程通过控制器状态机的以 下状态表示:CTRL_State_OffLine。 估算器在控制器离线状态期间保持空闲状态 (EST_State_Idle)。 执行偏移计算的目的在于为电流测量和电压测量设置零点。 为了计算偏移,在 EPWM 引脚上设定 50% 占 空比并持续预配置的一段时间。 用户可更改计算这些偏移的时间,该时间在 user.c 文件中按如下所示进行 配置: pUserParams->ctrlWaitTime[CTRL_State_OffLine]=(uint_least32_t)(5.0*USER_CTRL_FREQ_Hz); 在上述示例中,偏移校准的持续时间为 5s。 尽管 5s 的偏移校准时间足以应对大多数硬件,但如果用户需要 更短或更长的时间来满足其特定需求,则只需更改上述代码行中的值 5.0,随后执行偏移校准的时间将根据 新设置发生变化。 执行偏移校准后,最终结果将存储在驱动程序对象 (HAL_Obj) 中。 有关 HAL_Obj 的更多详细信息,请参见 表 8-1。图 6-9 显示了 DRV8312 版本 D 开发板执行偏移校准后的最终结果。 图 6-9. 偏移校准后的 CCStudio 观察窗口 理想条件下,电流偏移(也称为偏置值)应为: bias = 0.5 ´ Current _ sƒ (11) 注意:有关以下公式中所用变量的定义,请参见4.1 节。 在以下示例中,此电流换算系数(Current_sf 或 USER_CURRENT_SF)通过 DRV8312 版本 D 开发板的 值计算得出: ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 253 PMSM 电机完全识别 www.ti.com.cn USER_CURRENT_SF = USER_ADC_FULL_SCALE_CURRENT_A = 17.69 = 1.769 USER_IQ_FULL_SCALE_CURRENT_A 10.0 Current_BiasIdeal = 1.65 ´ USER_CURRENT_SF = 0.5 ´ 1.769 = 0.8845 3.3 (12) 电流反馈电路为双向,理想零点位于 VDD/2(即 1.65V),得出的换算系数为 0.5。 电压偏置按如下公式计算。 首先按如下公式计算电压换算系数: USER_ADC_FULL_SCALE_VOLTAGE_V 66.32 USER_VOLTAGE_SF = = = 1.3817 USER_IQ_FULL_SCALE_VOLTAGE_V 48.0 VBUS Voltage_BiasIdeal = 2 ´ USER_VOLTAGE_SF = 0.25 USER_ADC_FULL_SCALE_VOLTAGE_V (13) 理想电压偏置基于以下事实:引入 50% 占空比来测量这些偏移时,相电压将呈现接近 VBUS * 50% 的电 压,随后该电压将根据 ADC 测量的最大电压按比例缩小。 以 VBUS 为 24V 的 DRV8312 版本 D 开发板为 例,理想电压偏置为 0.25,如下所示: 24 Voltage_BiasIdeal = 2 ´ 1.3817 = 0.25 66.32 (14) 在图 6-10 的示波器图中,所示占空比为 50%,同时通过游标测得偏移校准执行时间为 5s。 在左图中,由 于水平标尺分辨率的原因,无法观察到任何 PWM 曲线。 左侧显示了 1.65V 幅值,表示 3.3V 信号占空比为 50%。 右侧显示了实际的 PWM 信号,该信号放大为每分度 50µs。 Offset Recalibration for 5 seconds At 50% Duty Cycle CTRL_State_OffLine EST_State_Idle CTRL_State_Idle EST_State_Idle CTRL_State_OnLine EST_State_RoverL 图 6-10. 采用 50% PWM 占空比进行偏移计算 6.5.3 CTRL_State_OnLine 和 EST_State_RoverL 偏移(也称为偏置)校准完成后,将启用估算器并开始进入识别过程的以下状态。 估算器状态机进入空闲状 态后要执行的首个状态称为 R/L 状态,即 RoverL(图 6-11)。 EST States Start Idle RoverL Motor Is Not Identified 图 6-11. RoverL EST 状态 254 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 电机完全识别 估算器的这一状态通过除以所测的电阻和电感来测量定子电路的电子时间常量。 控制器对象使用 RoverL 时 间常量来设置电流控制器 IQ 和 ID 的电流控制器增益 KP 和 KI。 如果绕过电机识别,则将使用 user.h 中提 供的参数来设置电流控制器增益。 RoverL 时间常量的具体测量过程为:在固定频率下向定子绕组注入固定幅值的电流。 注入电流的各个参数 如下:幅值、频率和测量时间。 6.5.3.1 RoverL 状态下注入电流的幅值 要确定定子注入电流的幅值,需要将 user.h 中的以下参数 (USER_MOTOR_RES_EST_CURRENT) 除以 2。 例如,如果 user.h 中的以下参数 (USER_MOTOR_RES_EST_CURRENT) 值为 1.0,则注入电流的大小为 该值的 ½,即 0.5A。要达到目标电流幅值,此注入电流的斜坡速率为 0.5s。 #define USER_MOTOR_RES_EST_CURRENT (1.0) 通常,此电流需要足够高才能在 ADC 测量中产生有效位数,但也不可过高,因为过高电流会导致电机运动 或电机过热。 按照这一通用规则,电流约为电机额定相电流的 10% 到 20%。 6.5.3.2 RoverL 状态下注入电流的频率 用于计算 RoverL 的注入电流频率通过 user.h 中的以下参数设置(规定频率单位为 Hz)。 //! \brief Defines the R/L estimation frequency, Hz //! #define USER_R_OVER_L_EST_FREQ_Hz (100) 对于高速电机而言,默认频率值 100Hz 可能会导致电机旋转或往复运动。 如果正在测试的电机出现这种情 况,请以 50Hz 增量将该频率增加到更高值,直至电机不再在 R/L 状态下发生移动。 6.5.3.3 RoverL 状态下的测量时间 执行 R/L 测量时要考虑的第三个参数就是执行此测量所花费的时间。 该参数在 user.c 中配置如下,尽管默 认设置适用于大多数情况,但仍可按需对该参数进行更改: pUserParams->estWaitTime[EST_State_RoverL] = (uint_least32_t)(5.0 * USER_EST_FREQ_Hz); 图 6-12 显示了如何注入该电流。 配置的参数用红色突出显示:5s 持续时间、1.0 A / 2 = 0.5 A 电流幅值和 100Hz 频率。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 255 PMSM 电机完全识别 CTRL_State_OffLine EST_State_Idle CTRL_State_OnLine EST_State_Rs CTRL_State_OnLine EST_State_RoverL 5s Frequency = 100 Hz 0.5 s 0.5 A www.ti.com.cn 图 6-12. 用于测量 RoverL EST 状态的注入电流 可通过调用以下函数返回 RoverL 比的方式从估算器中读取 R/L 状态生成的值。 // Code example to get RoverL into a variable float_t RoverL = CTRL_getRoverL(ctrlHandle); 检查 RoverL 状态生成的估算值的另一种方法是调用两个函数,一个函数用于高频电阻估算值 (Rhf),另一个 函数用于高频电感估算值 (Lhf)。 以下代码示例使用这两个函数获取 RoverL 状态期间生成值的本地副本: // Code example to get high frequency R (Rhf) and high frequency inductance // (Lhf) to variables float_t Rhf = CTRL_getRhf(ctrlHandle); float_t Lhf = CTRL_getLhf(ctrlHandle); float_t RoverL = Rhf/Lhf; 上述代码示例中计算得出的 RoverL 生成值与函数 CTRL_getRoverL() 返回的值完全相同。 如果不进行电机识别,用户可使用以下代码示例基于 user.h 文件中提供的参数来计算 RoverL 常量: // Code example to get RoverL into a variable based on user.h parameters #define USER_MOTOR_Rs (4.0) #define USER_MOTOR_Ls_d (0.03) float_t RoverL = USER_MOTOR_Rs/USER_MOTOR_Ls_d; 256 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 电机完全识别 最后,控制器对象 (CTRL_Obj) 将根据 RoverL 比来初始化电流控制器增益。图 6-13 显示了控制器对象 (CTRL_Obj) 如何在内部设置电流控制器增益。 此处列出的代码仅用于说明电流控制器初始设置背后的运算 过程。 由于代码在控制器内部执行,因此用户无需执行代码。 // get the full scale current and voltage values from #defines in user.h #define USER_IQ_FULL_SCALE_CURRENT_A (10.0) #define USER_IQ_FULL_SCALE_VOLTAGE_V (48.0) // deriving controller period in seconds from #defines in user.h #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_PWM_FREQ_kHz (15.0) #define USER_PWM_PERIOD_usec (1000.0/USER_PWM_FREQ_kHz) #define USER_ISR_PERIOD_usec USER_PWM_PERIOD_usec #define USER_CTRL_PERIOD_usec (USER_ISR_PERIOD_usec*USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_CTRL_PERIOD_sec ((float_t)USER_CTRL_PERIOD_usec/(float_t)1000000.0) // get Lhf and RoverL from the controller object float_t RoverL = CTRL_getRoverL(ctrlHandle); float_t Lhf = CTRL_getLhf(ctrlHandle); // get full scale current and voltage values in local variables float_t fullScaleCurrent = USER_IQ_FULL_SCALE_CURRENT_A; float_t fullScaleVoltage = USER_IQ_FULL_SCALE_VOLTAGE_V; // get the controller period in seconds in a local variable float_t ctrlPeriod_sec = USER_CTRL_PERIOD_sec; // get the controller object handle CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // set the Id controller gains Kp = _IQ((0.25*Lhf*fullScaleCurrent)/(ctrlPeriod_sec*fullScaleVoltage)); Ki = _IQ(RoverL*ctrlPeriod_sec); Kd = _IQ(0.0); PID_setGains(obj->pidHandle_Id,Kp,Ki,Kd); PID_setUi(obj->pidHandle_Id,_IQ(0.0)); CTRL_setGains(ctrlHandle,CTRL_Type_PID_Id,Kp,Ki,Kd); // set the Iq controller gains Kp = _IQ((0.25*Lhf*fullScaleCurrent)/(ctrlPeriod_sec*fullScaleVoltage)); Ki = _IQ(RoverL*ctrlPeriod_sec); Kd = _IQ(0.0); PID_setGains(obj->pidHandle_Iq,Kp,Ki,Kd); PID_setUi(obj->pidHandle_Iq,_IQ(0.0)); CTRL_setGains(ctrlHandle,CTRL_Type_PID_Iq,Kp,Ki,Kd); 图 6-13. 用于设置电流控制器 Kp 和 Ki 初始增益的内部代码 6.5.3.4 RoverL 识别期间的电流控制器稳定性故障排除 请参见6.9 节。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 257 PMSM 电机完全识别 www.ti.com.cn 6.5.3.5 调节高速电机产生的电流控制器增益 从上述代码可以看出,ID 和 IQ 电流控制器均初始化为由 RoverL 和 Lhf 计算得出的相同增益。 这两个控制 器的比例增益中还引入了系数 0.25。 该系数用于将比例增益设置为理论限值的 ¼。 在电机运行速度需要远 高于额定速度的应用中(即场强减弱),Id 和 Iq 电流控制器的比例增益需要增大到 4 倍,从而使增益达到 理论限值。 使用以下的代码示例便可轻松将这些增益增大到 4 倍: _iq Kp_Id = CTRL_getKp(handle,CTRL_Type_PID_Id); _iq Kp_Iq = CTRL_getKp(handle,CTRL_Type_PID_Iq); CTRL_setKp(handle,CTRL_Type_PID_Id, _IQmpy(Kp_Id, _IQ(4.0))); CTRL_setKp(handle,CTRL_Type_PID_Iq, _IQmpy(Kp_Iq, _IQ(4.0))); 如果用户想要确认电流控制器增益是在 RoverL 时间常量设置电流控制器后设置,可使用以下代码示例: // declare global variables for the Id controller gains _iq gKp_Id, gKi_Id, gKd_Id; // declare global variables for the Iq controller gains _iq gKp_Iq, gKi_Iq, gKd_Iq; // get the current controller gains for the Id controller CTRL_g etGains(ctrlHandle,CTRL_Type_PID_Id,&gKp_Id,&gKi_Id,&gKd_Id); // get the current controller gains for the Iq controller CTRL_g etGains(ctrlHandle,CTRL_Type_PID_Iq,&gKp_Iq,&gKi_Iq,&gKd_Iq); 如果用户选择忽略 RoverL 常量设置的增益并决定使用自己设定的增益,只需使用以下函数来设置电流控制 器增益,该过程在 ctrl.h 中实现: void CTRL_setKi(CTRL_Handle handle,const CTRL_Type_e ctrlType,const _iq Ki); void CTRL_setKp(CTRL_Handle handle,const CTRL_Type_e ctrlType,const _iq Kp); void CTRL_setGains(CTRL_Handle handle,const CTRL_Type_e ctrlType, const _iq Kp,const _iq Ki,const _iq Kd); 6.5.4 CTRL_State_OnLine 和 EST_State_Rs 识别过程的此状态执行定子电阻识别(图 6-14)。 EST States Idle RoverL Rs Motor Is Not Wait Expired Identified 图 6-14. Rs EST 状态 D 轴中注入直流电流,电流幅值在 user.h 中按如下定义: #define USER_MOTOR_RES_EST_CURRENT (1.0) 258 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 电机完全识别 请注意,该电流的定义与 RoverL 状态所使用的定义相同,但 RoverL 使用该值的一半,而 Rs 状态则使用 定义中的完整值。 注入的电流应足够高,能够在 ADC 转换器中产生有效的测量值;同时又要足够低,以避 免电机过热。 通常,电机额定电流的 10% 至 20% 便足以产生精确的定子电阻估算值。 此状态的时间间隔由 user.c 中的三个时间值设置,如下所示: ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 259 PMSM 电机完全识别 www.ti.com.cn pUserParams->RsWaitTime[EST_Rs_State_RampUp] = (uint_least32_t)(1.0*USER_EST_FREQ_Hz); pUserParams->RsWaitTime[EST_Rs_State_Coarse] = (uint_least32_t)(2.0*USER_EST_FREQ_Hz); pUserParams->RsWaitTime[EST_Rs_State_Fine] = (uint_least32_t)(4.0*USER_EST_FREQ_Hz); 默认情况下,定子电阻 Rs 的整个识别过程耗费 7s。 Rs 识别过程的第一部分是 1s 的斜升阶段。 在此阶 段,定义的直流电流注入到 D 轴。 斜升阶段结束后,Rs 识别过程将开始粗调所识别的 Rs。 粗调过程所耗 费的时间为 RsWaitTime [EST_Rs_State_Coarse] 存储的时间之前定义的时间。 该时间默认设置为 2s,对 于经过 InstaSPIN 库版本测试的所有电机而言,2s 足以执行粗调校准。 不过,该时间设置比较灵活,用户 可以按需调整,尽管无法预测是否有此需要。 粗调过程结束后,将开始精确 Rs 重校准。 识别过程完成精确 Rs 重校准所耗费的时间默认设置为 4s,用户 可通过修改 RsWaitTime [EST_Rs_State_Fine] 中存储的值灵活更改该时间值。 图 6-15 显示了整个 Rs 识别过程,图中突出显示了斜升时间、幅值以及过程的持续时间。 CTRL_State_OnLine EST_State_RoverL CTRL_State_OnLine EST_State_RampUp CTRL_State_OnLine EST_State_Rs 7s 1s 2s 4s 1A EST_Rs_State_Fine EST_Rs_State_Coarse EST_Rs_State_RampUp 图 6-15. Rs 识别 EST 状态期间的相电流 用户可使用以下代码示例监视估算电阻的过程。 这在调整识别电阻所耗时间时尤其有用。 // get the stator resistance gMotorVars.Rs_Ohm = EST_getRs_Ohm(obj->estHandle); 例如,监视正在识别的电阻值能够向用户反馈识别电阻达到稳定状态所需的时间。 识别电阻达到稳定状态所 需的时间可以在 user.c 文件中配置,下次识别电机时便可加快电阻识别过程。 260 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 6.5.4.1 Rs 识别期间的电流控制器稳定性故障排除 请参见6.9 节。 PMSM 电机完全识别 6.5.5 CTRL_State_OnLine 和 EST_State_RampUp 定子电阻识别完成后,将执行新的估算器状态。 接下来的这一状态称为斜升状态,即 EST_State_RampUp。 在识别过程的这一状态期间,电机会加速到某一速度,从而开始识别其它参数。 该 状态期间不会识别任何参数,而是启动相应条件。 此状态的影响因素有多种。 6.5.5.1 斜升电流幅值 第一个因素就是斜升过程使用的电流的幅值。 该电流幅值同时也是识别定子电阻时使用的幅值。图 6-16 给 出了该电流的定义,在本例中,斜升过程使用 1A 电流: #define USER_MOTOR_RES_EST_CURRENT (1.0) EST States Idle Motor Is Not Identified RoverL Wait Expired Rs Wait Expired AND Motor Is Not Identified 图 6-16. 斜升 EST 状态 Ramp Up 6.5.5.1.1 斜升期间的电机转轴停转故障排除 请参见6.9 节。 6.5.5.2 斜升时间和加速度 斜升状态期间的下一个参数为电机斜升的时间(图 6-17)。 该值默认设置为 20s,如 user.c 文件中的以下 代码示例所示: pUserParams->estWaitTime[EST_State_RampUp] = (uint_least32_t)(20.0*USER_EST_FREQ_Hz); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 261 PMSM 电机完全识别 Freq b a = estWaitTime[EST_State_RampUp] b = USER_MAX_ACCEL_EST_Hzps c = USER_MOTOR_FLUX_EST_FREQ_Hz c t www.ti.com.cn a 图 6-17. 斜升时间 该时间可更改为任意所需值。图 6-18 是通过电流探针测量相电流得出的,其中显示了斜升状态时间。 CTRL_State_OnLine EST_State_RatedFlux CTRL_State_OnLine EST_State_RoverL CTRL_State_OnLine EST_State_RampUp 20 s CTRL_State_OffLine EST_State_Idle CTRL_State_OnLine EST_State_Rs 图 6-18. 斜升 EST 状态期间的相电流 此斜坡的加速度为 user.c 中设置的另一个参数,可根据用户要求进行更改。 在高惯性负载的同一示例中, 该加速度可更改。 斜升加速度默认设置为 2.0Hz/s,如下所示: //! \brief Defines maximum acceleration for the estimation speed profiles, Hz/s #define USER_MAX_ACCEL_EST_Hzps (2.0) 6.5.5.2.1 平滑斜坡的电机转轴故障排除 请参见6.9 节。 262 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 电机完全识别 6.5.5.3 PMSM 最终斜升速度 斜升后的最终速度作为电机参数在 user.h 中设置。 该速度单位为 Hz,应根据相位电感范围进行设置。 对 于几 µH 电感而言,该值应为 50Hz 左右。 对于几十到几百 µH 电感而言,20Hz 的值便足以准确识别电 感。 // During Motor ID, maximum commanded speed in Hz #define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0) 请记住,增大该频率可能需要增加斜升时间,从而在足够长时间的斜升状态下以指定加速度达到最终频率。 之前的图中也显示了 20Hz 最终频率。 Freq a = estWaitTime[EST_State_RampUp] b = USER_MAX_ACCEL_EST_Hzps c = USER_MOTOR_FLUX_EST_FREQ_Hz [ b [< b, for high inertia loads [ c ~ 20 Hz for [10 uH < Lphase < 1000 uH] c [~ 50 Hz for [1 uH < Lphase < 10 uH] t a 图 6-19. 不同加速度和最终速度下的斜升时间 6.5.6 CTRL_State_OnLine 和 EST_State_RatedFlux 一旦电机以 user.h 中设置的指定频率运行,便会立即开始额定磁通识别过程(图 6-20)。 Idle RoverL Rs Motor Is Not Wait Expired Identified Wait Expired AND Motor Is Not Identified Wait Expired AND Motor Is Not an ACIM Ramp Up Rated Flux OL Wait Expired Rated Flux 图 6-20. PMSM 额定磁通 EST 状态 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 263 PMSM 电机完全识别 www.ti.com.cn 6.5.6.1 电流斜降 识别磁通时,将首先由电机识别状态机内部启用闭环。 该闭环不是由用户启用。 启用该闭环时,电流消耗 降至机械负载在相同频率下保持旋转状态所需的最小电流值。 电流降低期间的斜率为一个固定值,即每秒的 Rs 估算值除以 3。除数 3 是在电机识别过程的设计阶段选择的,旨在提供一个更小的斜率。 用户可使用以下公式计算该斜率: 本示例中使用 1A 电流来进行电阻识别: RatedFlux _ CurrentSlope = USER _ MOTOR _ RES _ EST 1s _ CURRENT ´ 1 3 = 0.33 A / s (15) 图 6-21 中斜率为 0.33 A/s,显示了出现额定磁通状态时电流如何减小。 该图还突出显示了识别额定磁通所 耗费的时间。 7s Current Slope = 0.66 A / 2 s = 0.33 A/s 2s 0.66 A 3s EST_Flux_State_CL1 4s EST_Flux_State_Fine CTRL_State_OnLine EST_State_RatedFlux CTRL_State_OnLine EST_State_RampUp CTRL_State_OnLine EST_State_Ls 图 6-21. 额定磁通 EST 状态期间的相电流 6.5.6.2 总测量时间 此图中显示的时间基于默认设置:3s 电流斜降时间(EST_Flux_State_CL1,CL1 代表闭环 1)和 4s 额定 磁通微调时间 (EST_Flux_State_Fine),共计 7s。 这两个值均通过函数调用在 user.c 文件中设置,如下所 示: pUserParams->FluxWaitTime[EST_Flux_State_CL1] =(uint_least32_t)(3.0*USER_EST_FREQ_Hz); pUserParams->FluxWaitTime[EST_Flux_State_Fine]=(uint_least32_t)(4.0*USER_EST_FREQ_Hz); 这两个默认值被认为适用于算法验证期间测试的所有电机。 用户可通过监视由算法识别的额定磁通来确认识 别时间是否足够,并确保当估算器处于 EST_State_RatedFlux 状态时所识别的值处于稳定状态。 264 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 电机完全识别 以下代码示例显示了如何监视所识别的磁通值,如果观察窗口中该值的变化幅度不超过典型变化幅度(约 5%),则可认为所识别的磁通处于稳定状态。 // get the flux gMotorVars.Flux_VpHz = EST_getFlux_VpHz(obj->estHandle); 6.5.6.3 磁通测量故障排除 请参见6.9 节。 6.5.7 CTRL_State_OnLine 和 EST_State_Ls 额定磁通测量结束后,将立即开始定子电感识别过程(图 6-22)。 Idle RoverL Rs Motor Is Not Wait Expired Identified Wait Expired AND Motor Is Not Identified Ramp Down Wait Expired AND Motor Is Not an ACIM Ls Wait Expired AND Motor Is Not an ACIM Ramp Up Rated Flux OL Wait Expired Wait Expired AND Motor Is Not an ACIM Rated Flux 图 6-22. 定子电感 EST 状态 要识别 PMSM 电机的定子电感,相关算法会向 D 轴注入电流(也称为 ID)。 该电流在 user.h 中设置,必 须为负值。 通常,该电流应为电机额定电流的 10% 到 20%,符号为负。 以下值针对 4A 电机设置,因此, 用于识别定子电感的电流设置为 -0.5A,如下所示: #define USER_MOTOR_IND_EST_CURRENT (-0.5) 定子电感识别所耗费的时间在 user.c 中按如下设置: pUserParams->LsWaitTime[EST_Ls_State_Init] = (uint_least32_t)( 3.0*USER_EST_FREQ_Hz); pUserParams->LsWaitTime[EST_Ls_State_Fine] = (uint_least32_t)(30.0*USER_EST_FREQ_Hz); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 265 PMSM 电机完全识别 www.ti.com.cn 图 6-23 显示了运行电感识别状态所耗费的时间。 图中还显示了注入电流的幅值。 尽管我们将电流设置为 0.5A,该电流注入 D 轴,这样即可将其视为相电流波形中幅值为 0.5A、使负载保持移动所需的电流。 由于 需要从转轴移动所有机械负载,因此电流幅值将接近所示的 0.5A。 33 s 0.5 A CTRL_State_OnLine EST_State_Ls CTRL_State_OnLine EST_State_RatedFlux 图 6-23. Ls 识别时的注入电流 CTRL_State_OnLine EST_State_RampDown 6.5.7.1 斜升电流 电流增加到指定电流时的初始斜率由每秒电阻估算所使用的电流来设置。 例如,以采用以下配置的 1A 电阻 估算电流为例: #define USER_MOTOR_RES_EST_CURRENT (1.0) -0.5A 电感估算电流配置如下: #define USER_MOTOR_IND_EST_CURRENT (-0.5) 在这两种配置中,从增加 0.5A 电流到将电流注入 D 轴共需耗费 0.5s,如图 6-24 所示。 266 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 0.5 s Current Slope = 0.5 A / 0.5 s = 1 A/s 0.5 A PMSM 电机完全识别 图 6-24. Ls 识别时的电流斜坡 6.5.7.2 Ls 识别故障排除 请参见6.9 节。 6.5.7.3 Ls_d 和 Ls_q(定子直流电感和定子正交电感) 请记住,即使给定电机的 Ls_d 值和 Ls_q 值不同,所估算的电感将同时存储到 Ls_d 和 Ls_q 中。 换言之, 该版本 InstaSPIN 不单独识别 Ls_d 和 Ls_q,而是识别平均 Ls,然后将同一平均值同时存储到 Ls_d 和 Ls_q 中。 当 InstaSPIN 今后单独识别 Ls_d 和 Ls_q 时,这两个函数将返回不同的值。 如果电机参数在 user.h 中设置为不同的 Ls_d 和 Ls_q,且忽略电机识别,则当前版本 InstaSPIN 在随后调用函数 EST_getLs_d_H 和 EST_getLs_q_H 时也将返回不同的值。 6.5.8 CTRL_State_OnLine 和 EST_State_RampDown 该状态下不执行任何特定操作,直至估算过程开始。 可将其视作状态机的过渡阶段。 如下所示,尽管有一 段时间与此状态相关,但更改该时间不会影响识别变量。 pUserParams->estWaitTime[EST_State_RampDown] = (uint_least32_t)(2.0*USER_EST_FREQ_Hz); 6.5.9 CTRL_State_OnLine 和 EST_State_MotorIdentified 识别过程的最终状态也是一个过渡状态,用于告知内部状态机电机已被识别。 在 EST_State_MotorIdentified 过渡状态结束后,CTRL 和 EST 这两个状态机均会返回空闲状态。 用户可通过 调用以下函数来检查电机是否已被识别。 如果该函数返回 TRUE,则表示电机已被识别(经过上述所有状态 或使用头文件中的电机参数): gMotorVars.Flag_MotorIdentified = EST_isMotorIdentified(obj->estHandle); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 267 PMSM 电机完全识别 www.ti.com.cn 电机完全识别后,如果用户需要再次运行电机识别过程,控制器必须重新初始化以将状态机设置为初始状 态,同时将电机识别标志恢复为 FALSE。 以下函数调用会将控制器重新初始化为初始状态,并将电机识别 标志恢复为 FALSE: // set the default controller parameters CTRL_setParams(ctrlHandle,&gUserParams); 有关识别过程完整状态机汇总,请参见图 6-25。 Idle Wait Expired Motor Is Not Identified Motor Ident Wait Expired AND Motor Is Identified Ramp Down Wait Expired AND Motor Is Not an ACIM Ls RoverL Wait Expired Wait Expired AND Motor Is Not an ACIM Rated Flux OL Wait Expired Wait Expired AND Motor Is Not an ACIM Rs Wait Expired AND Motor Is Not Identified Ramp Up Rated Flux 图 6-25. EST 状态图中的完整 PMSM 电机识别过程 图 6-26 也显示了完整的 PMSM 电机识别过程,并绘制了一个相电流。 268 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 电机完全识别 CTRL_State_OffLine EST_State_RoverL EST_State_Rs EST_State_RatedFlux EST_State_RampUp EST_State_Ls ~83 s 图 6-26. 完整 PMSM 电机识别过程的相电流测量 6.5.10 CTRL_State_Idle 和 EST_State_Idle 电机完全识别后,这两个状态机均设置为空闲状态。 6.6 ACIM 电机完全识别 对 ACIM 电机进行完全识别时,图 6-27 显示了控制器和估算器状态机内部发生事件的顺序。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 269 ACIM 电机完全识别 www.ti.com.cn CTRL State Machine EST State Machine Idle CTRL_State_Idle Idle EST_State_Idle CTRL_setFlag_enableCtrl(ctrlHandle,TRUE); Offline CTRL_State_OffLine Online CTRL_State_OnLine RoverL EST_State_RoverL Rs EST_State_Rs RampUp EST_State_RampUp IdRated EST_State_IdRated RatedFlux EST_State_RatedFlux RampDown EST_State_RampDown Idle CTRL_State_Idle Online CTRL_State_OnLine LockRotor EST_State_LockRotor Ls EST_State_Ls Rr EST_State_Rr RampDown EST_State_RampDown MotorIdentified EST_State_MotorIdentified Idle CTRL_State_Idle Idle EST_State_Idle 图 6-27. ACIM 完全识别 - CTRL 和 EST 状态顺序 启用控制器之前,代码得知以下两个条件为真时将执行电机完全识别: 1. 电机尚未识别 2. 未使用任何来自 user.h 的参数。 if( (EST_isMotorIdentified(obj->estHandle) == FALSE) && (CTRL_getFlag_enableUserMotorParams(ctrlHandle) == FALSE)) 270 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ACIM 电机完全识别 本文档接下来将详细介绍识别期间的各个状态。 6.6.1 CTRL_State_Idle 和 EST_State_Idle 两个电机的控制器和估算器状态机的空闲状态均相同。 有关该状态的更多信息,请参见6.5.1 节。 6.6.2 CTRL_State_OffLine 和 EST_State_Idle 当控制器处于离线状态时,将进行偏移校准。 有关该状态的更多信息,请参见6.5.2 节。 6.6.3 CTRL_State_OnLine 和 EST_State_RoverL 要计算电流控制器增益,需执行与 PMSM 电机相同的过程和操作。 有关该状态的更多信息,请参见6.5.3 节。 6.6.4 CTRL_State_OnLine 和 EST_State_Rs 当估算器处于 Rs 状态时,将进行定子电阻校准。 有关该状态的更多信息,请参见6.5.4 节。 6.6.5 CTRL_State_OnLine 和 EST_State_RampUp 定子电阻识别完成后,将执行新的估算器状态。 接下来的这一状态称为斜升状态,即 EST_State_RampUp(图 6-28)。 在识别过程的这一状态期间,电机会加速到某一速度,从而开始识别其 它参数。 该状态期间不会识别任何参数,而是启动相应条件。 此状态的影响因素有多种。 就功能而言,有关 EST_State_RampUp 状态期间相关情况的详细说明,请参见6.5.5 节。 EST States Idle RoverL Rs Motor Is Not Wait Expired Identified Wait Expired AND Motor Is Not Identified 图 6-28. 斜升 EST 状态 Ramp Up 6.6.5.1 ACIM 最终斜升速度 PMSM 和 ACIM 电机识别过程在此状态下的唯一差别为:ACIM 电机采用 5Hz 典型频率,而 PMSM 电机采 用 20Hz 典型频率。 // During Motor ID, maximum commanded speed in Hz #define USER_MOTOR_FLUX_EST_FREQ_Hz (5.0) 以下示波器图显示的是经过放大的相电流图,其中的频率斜升到 5Hz。 请注意,6.5.5 节之前介绍 PMSM 的默认斜升加速度为 2.0Hz/s,该值同样用于图 6-7 所示的 ACIM 示例。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 271 ACIM 电机完全识别 2.5 s www.ti.com.cn Acceleration = 5 Hz / 2.5 s = 2 Hz/s 20 x Zoom Frequency = 5 Hz 图 6-29. ACIM 斜升加速度示波器图 6.6.6 CTRL_State_OnLine 和 EST_State_IdRated 一旦电机以 user.h 中设置的指定频率运行,便会立即开始 Id 额定电流识别过程(图 6-30)。 Start Idle RoverL Motor Is Not Wait Expired Identified Rs Wait Expired AND Motor Is Not Identified Ramp Up Wait Expired AND Motor Is an ACIM Id Rated 图 6-30. ACIM Id 额定电流 EST 状态 在 EST_State_IdRated 状态下,估算器用于计算产生特定磁通所需的电流。 在此状态期间,需考虑 user.h 和 user.c 中的多个参数。 第一个参数是此状态的持续时间,该参数在 user.c 文件中按如下配置: pUserParams->estWaitTime[EST_State_IdRated]=(uint_least32_t)(20.0*USER_EST_FREQ_Hz); 272 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ACIM 电机完全识别 在此期间,注入 Id 将以 user.h 中的 USER_IDRATED_DELTA 定义的增量开始增加: //! \brief Defines the IdRated delta to use during estimation //! #define USER_IDRATED_DELTA (0.00002) 通过上述增量方法,注入 d 轴的电流将不断增加,直至产生的磁通达到 user.h 中的 USER_MOTOR_RATED_FLUX 所指定的值: #define USER_MOTOR_RATED_FLUX (0.8165*220.0/60.0) 有关设置 ACIM 电机额定磁通的详细信息,请参见节 6.4.5.4。 当 IdRated 状态开始时,电流将不断增加,直至电机中出现所需磁通。图 6-31 显示电流不断增加并且随后 稳定下来的过程。 Minimum Time to be set in: estWaitTime[EST_State_IdRated] IdRated = 1.075 A EST_State_RampUp EST_State_IdRated 图 6-31. Id 额定电流 EST 状态期间的相电流示波器图 Id 电流达到稳定的时间取决于电机,建议调整 pUserParams->estWaitTime[EST_State_IdRated] 中配置的 时间,使电流能够在没有过度振荡的情况下稳定到某个值。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 273 ACIM 电机完全识别 www.ti.com.cn 6.6.6.1 减少振荡以改善 Id 额定电流测量 IdRated 识别期间要调节的另一个参数是该电流的递增增量。 如果该值对于特定电机而言过高,即使在执行 IdRated 识别时,余下的振荡也会持续很长时间。 例如,图 6-32 显示了使用以下参数时的电流情况。 //! \brief Defines the IdRated delta to use during estimation //! #define USER_IDRATED_DELTA (0.0001) IdRated Oscillation == 125 mA EST_State_RampUp EST_State_IdRated 图 6-32. Id 额定电流测量期间的相电流振荡 如示波器图中所示,即使电流增长速度加快,余下的振荡也不会使 Id 额定电流达到稳定值。 尝试用一个较 小的值 0.00002 来代替 0.0001 可提高稳态电流的稳定性,如图 6-33 所示。 274 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ACIM 电机完全识别 IdRated Oscillation == 0.0 A EST_State_RampUp EST_State_IdRated 图 6-33. Id 额定电流测量期间减少相电流振荡 6.6.6.2 读取 Id 额定电流最终值 该状态结束时,用户可以通过以下函数读取所识别的 Id 额定电流,也称为 ACIM 电机的额定磁化电流。 // get the Id Rated, or rated magnetizing current IdRated = EST_getIdRated(obj->estHandle); 6.6.7 CTRL_State_OnLine 和 EST_State_RatedFlux Id 额定电流识别完成后,接下来的状态为额定磁通状态(图 6-34)。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 275 ACIM 电机完全识别 www.ti.com.cn Start Idle RoverL Motor Is Not Wait Expired Identified Rs Wait Expired AND Motor Is Not Identified Ramp Up Wait Expired AND Motor Is an ACIM Id Rated Rated Flux Wait Expired 图 6-34. ACIM 额定磁通 EST 状态 在此状态期间,估算器内的闭环系统使用之前识别的 Id 额定电流来计算转子和定子间的磁链。 仅使用 50% 的 Id 额定电流。 该状态结束时,通过 Id 额定电流计算得出的额定磁通保存为机器的额定磁通。 对于额定磁通状态而言,两种电机的电流斜降时间和总测量时间均相同。 有关更多信息,请参见节 6.5.6.1 和节 6.5.6.2。 图 6-35 显示了如何实现闭环,其中的电流比 IdRated 状态的电流更加稳定,用户可在观察窗口中复查所估 算的磁通,确认磁通估算值是否为 user.h 中最初设定的值。 EST_State_RampDown EST_State_LockRotor IdRated = 1.075 A IdRated / 2 = 0.5375 A EST_State_IdRated 7s EST_State_RatedFlux 276 电机识别和状态图 图 6-35. Id 额定电流 EST 状态期间的相电流 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 6.6.7.1 磁通测量故障排除 请参见6.9 节。 ACIM 电机完全识别 6.6.8 CTRL_State_OnLine 和 EST_State_RampDown 要移除电机绕组中的电流,需要运行中间状态来斜降流经电机的电流(图 6-36)。 此状态即为斜降状态, 其持续时间在 user.c 文件中按如下设置: pUserParams->estWaitTime[EST_State_RampDown]=(uint_least32_t)(2.0*USER_EST_FREQ_Hz); Start Ramp Down Idle RoverL Motor Is Not Wait Expired Identified Rs Wait Expired AND Motor Is Not Identified Ramp Up Wait Expired AND Motor Is an ACIM Id Rated Rated Flux Wait Expired Wait Expired AND Motor Is an ACIM 图 6-36. ACIM 斜降 EST 状态 图 6-37 由前一状态得来,显示了逐渐从电机中移除相电流,从而使电机平稳停机的过程。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 277 ACIM 电机完全识别 www.ti.com.cn 2s EST_State_RampDown EST_State_LockRotor EST_State_IdRated EST_State_RatedFlux 图 6-37. 进入锁定转子状态前斜降 ACIM 相电流 6.6.9 CTRL_State_Idle 和 EST_State_LockRotor 在锁定转子状态期间,一旦电机转轴锁定,状态机将等待用户重新启用控制器(图 6-38)。 要识别其余的 ACIM 电机参数:串联电感 (Ls) 和转子电阻 (Rr),则需要锁定转子。 Start Idle RoverL Motor Is Not Wait Expired Identified Rs Wait Expired AND Motor Is Not Identified Wait Expired AND Motor Is Not Identified AND Controller Motor is an ACIM Disabled Ramp Up Wait Expired AND Motor Is an ACIM Ramp Down Lock Rotor Id Rated Rated Flux Wait Expired Wait Expired AND Motor Is an ACIM 图 6-38. ACIM 锁定转子 EST 状态 278 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 状态机将一直保持此状态,直到用户通过调用以下指令重新启用控制器: // enable or disable the control CTRL_setFlag_enableCtrl(ctrlHandle, TRUE); ACIM 电机完全识别 6.6.9.1 锁定转子测试故障排除 请参见6.9 节。 6.6.10 CTRL_State_OnLine 和 EST_State_Ls 锁定转子参数测量完成后,将立即开始定子电感过程(图 6-39)。 Start Idle RoverL Motor Is Not Wait Expired Identified Rs Wait Expired AND Motor Is Not Identified Wait Expired AND Motor Is Not Identified AND Controller Motor is an ACIM Disabled Ramp Up Wait Expired AND Motor Is an ACIM Ramp Down Lock Rotor Controller Enabled Id Rated Rated Flux Wait Expired Ls Wait Expired AND Motor Is an ACIM 图 6-39. ACIM 定子电感 EST 状态 对于定子电感状态而言,两种电机的步骤是相同的。 有关详细信息,请参见6.5.7 节。 图 6-40 显示的是 ACIM 电机电流流经 Ls 状态并进入后续状态的过程。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 279 EST_State_LockRotor EST_State_Rr EST_State_RampDown EST_State_Idle ACIM 电机完全识别 33 s EST_State_Ls www.ti.com.cn 图 6-40. 定子电感 EST 状态下的 ACIM 电流 6.6.11 CTRL_State_OnLine 和 EST_State_Rr 定子电感测量完成后,将立即开始转子电阻过程(图 6-41)。 Start Idle RoverL Motor Is Not Wait Expired Identified Rs Wait Expired AND Motor Is Not Identified Wait Expired AND Motor Is Not Identified AND Controller Motor is an ACIM Disabled Ramp Up Wait Expired AND Motor Is an ACIM Ramp Down Rr Lock Rotor Wait Expired AND Motor Is an ACIM Controller Enabled Id Rated Rated Flux Wait Expired 280 电机识别和状态图 Ls Wait Expired AND Motor Is an ACIM 图 6-41. 转子电阻 EST 状态 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ACIM 电机转子电阻识别过程的持续时间由 user.c 中配置的以下数组成员所配置: ACIM 电机完全识别 pUserParams->estWaitTime[EST_State_Rr]=(uint_least32_t)(5.0*USER_EST_FREQ_Hz); 图 6-42 显示了 Rr 识别过程注入的电流。 事实上,Ls 和 Rr 识别过程的电流波形并无差异。 EST_State_Ls 5s EST_State_Rr EST_State_Idle EST_State_RampDown 图 6-42. Rr 识别时的注入电流 6.6.12 CTRL_State_OnLine 和 EST_State_RampDown 转子电阻测量完成后,将立即开始斜降过程(图 6-43)。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 281 ACIM 电机完全识别 www.ti.com.cn Start Idle RoverL Motor Is Not Wait Expired Identified Rs Wait Expired AND Motor Is Not Identified Wait Expired AND Motor Is Not Identified AND Controller Motor is an ACIM Disabled Wait Ramp Down Expired Rr Lock Rotor Ramp Up Wait Expired AND Motor Is an ACIM Id Rated Wait Expired AND Motor Is an ACIM Controller Enabled Rated Flux Wait Expired Ls Wait Expired AND Motor Is an ACIM 图 6-43. Rr 完成后的 ACIM 斜降 EST 状态 图 6-44 显示了完全识别后的 ACIM 电流波形,请注意,电流以斜降方式从电机中移除。 有关该状态的更多 信息,请参见6.5.8 节。 EST_State_Ls EST_State_Rr 2 s EST_State_RampDown EST_State_Idle 282 电机识别和状态图 图 6-44. Rr 和斜降期间的 ACIM 电流 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 6.6.13 CTRL_State_OnLine 和 EST_State_MotorIdentified ACIM 电机完全识别 当估算器处于电机已识别状态时,ACIM 电机的完全识别状态即完成(图 6-45)。 有关该状态的更多信 息,请参见6.5.9 节。 Start Idle Wait Expired Motor Is Not Identified RoverL Wait Expired Motor Ident Wait Expired AND Motor Is Identified Ramp Down Wait Expired AND Motor Is Not Identified AND Controller Motor is an ACIM Disabled Wait Expired Rr Lock Rotor Wait Expired AND Motor Is an ACIM Controller Enabled Rs Wait Expired AND Motor Is Not Identified Ramp Up Wait Expired AND Motor Is an ACIM Id Rated Rated Flux Wait Expired Ls Wait Expired AND Motor Is an ACIM 图 6-45. EST 状态图中的完整 ACIM 电机识别过程 图 6-46 也显示了完整的 ACIM 电机识别过程,并绘制了一个相电流。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 283 CTRL_State_OffLine EST_State_RoverL EST_State_Rs EST_State_RampUp EST_State_RatedFlux EST_State_RampDown EST_State_LockRotor EST_State_Rr EST_State_RampDown ACIM 电机完全识别 EST_State_IdRated EST_State_Ls ~100 s www.ti.com.cn 图 6-46. 完整 ACIM 电机识别过程的相电流 6.6.14 CTRL_State_Idle 和 EST_State_Idle 电机完全识别后,这两个状态机均设置为空闲状态。 6.7 PMSM 和 ACIM 电机识别重校准 重校准是电机识别的一部分,因为该过程将识别和调整两个参数:电机的偏移和定子电阻。 6.7.1 完全识别后的 PMSM 和 ACIM 电机重校准 本小节介绍 PMSM 和 ACIM 电机重校准。 电机重校准用于微调或重校准硬件偏移和定子电阻。 与 PMSM 和 ACIM 电机完全校准相比,重校准仅涵盖估算器状态机的三个状态,如公式 49 所示。 PMSM 电机和 ACIM 电机的重校准完全相同。 如本文档后续内容所述,开发板偏移和定子电阻的重校准可单独启用或禁 用。 284 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 和 ACIM 电机识别重校准 CTRL State Machine EST State Machine Idle CTRL_State_Idle Idle Idle EST_State_Idle CTRL_setFlag_enableCtrl(ctrlHandle,TRUE); Offline CTRL_State_OffLine Controller Enabled Online CTRL_State_OnLine Rs EST_State_Rs Recalibration Online EST_State_OnLine Motor Running Closed-loop CTRL_setFlag_enableCtrl(ctrlHandle,FALSE); Idle CTRL_State_Idle Idle Idle EST_State_Idle 图 6-47. PMSM 和 ACIM 重校准 - CTRL 和 EST 状态顺序 当两个状态机均在线且在线状态将持续到控制器禁用时,电机将闭环运行(如图 6-48 所示)。 电机重校准将在以下两种情况下执行:电机已完成完全识别过程时以及电机参数已通过头文件 user.h 提供 时。 这两种情况下执行的状态完全相同,下文将对此详细说明。 启用控制器之前,代码得知以下两个条件为真时将执行电机重校准:电机已识别以及未使用任何来自 user.h 的参数。 if( (EST_isMotorIdentified(obj->estHandle) == TRUE) && (CTRL_getFlag_enableUserMotorParams(ctrlHandle) == FALSE)) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 285 PMSM 和 ACIM 电机识别重校准 Motor is Identified && Rs Recal Disabled && Controller Enabled Controller Enabled Controller Disabled Online Motor is Identified && Rs Recal Enabled && Controller Enabled www.ti.com.cn Wait Expired && Motor Is Identified Start Idle Rs Controller Disabled 图 6-48. 电机重校准 EST 状态 6.7.1.1 启动阶段注意事项 尽管执行重校准需耗时,但仍建议始终启用偏移重校准和 Rs 重校准以确保各个参数精准,然后再运行电 机,尤其是在电机长时间空闲后。 如果电机已长时间未通过代码运行,则环境温度可能会影响电机定子电 阻,因此建议进行 Rs 重校准。 开发板偏移取决于硬件,所以此类偏移重校准并非关键步骤,不过,无源元 件的寿命以及温度变化可能会影响硬件偏移,因此建议定期调整这些偏移。 6.7.1.2 CTRL_State_Idle 和 EST_State_Idle 在启用控制器前,控制器状态机和估算器状态机均处于空闲状态,分别表示为 CTRL_State_Idle 和 EST_State_Idle。 这也称作这两个状态机的非活动状态。 6.7.1.3 CTRL_State_OffLine 和 EST_State_Idle 通过以下函数启用控制器可使其退出空闲状态: CTRL_s etFlag_enable Ctrl(ctrlHandle, TRUE); 启用控制器并且电机已识别后,控制器状态机执行的首个任务就是偏移重校准。 这种情况仅发生在启用了偏 移计算时。 要检查是否启用了偏移重校准标志,用户可使用以下代码示例: if(CTRL_getFlag_enableOffset(ctrlHandle) == TRUE) 电机已识别标志在内部检查,也可由用户通过以下代码示例检查: 286 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn if(EST_isMotorIdentified(obj->estHandle) == TRUE) PMSM 和 ACIM 电机识别重校准 偏移重校准默认启用,但也可在启用控制器前通过以下代码示例将其启用: CTRL_s etFlag_enableOffset(ctrlHandle, TRUE); 以下代码示例用于禁用偏移重校准。 CTRL_s etFlag_enableOffset(ctrlHandle, FALSE); 6.2 节 中说明的状态 (CTRL_State_OffLine and EST_State_Idle) 通过控制器状态机的状态 CTRL_State_OffLine 表示。 估算器在控制器离线状态期间保持空闲状态 (EST_State_Idle)。 电机完全识别 期间,可绕过偏移重校准,但需要进行偏移校准。 执行电机完全识别时,不可绕过偏移校准。 有关电机完全识别过程中偏移校准的详细信息,请参见6.5.2 节。 从图 6-48 中可以看出,“RoverL”状态并不 是重校准过程的一部分。 图 6-49 显示了相电流示波器图的相应状态。 Offset Recalibration for 5 seconds At 50% Duty Cycle CTRL_State_OffLine EST_State_Idle CTRL_State_Idle EST_State_Idle CTRL_State_OnLine EST_State_Rs Or EST_State_OnLine 图 6-49. 偏移重校准期间的相电流 6.7.1.4 CTRL_State_OnLine 和 EST_State_Rs 完成电机识别且启用 Rs 重校准后,将退出 EST 空闲状态,进入 Rs 状态(请参见图 6-48)。 请注意,当 控制器离线(电机静止)且启用了偏移重校准时,将在进入 Rs 状态前进行偏移重校准。 当估算器状态机进 入 Rs 状态 (EST_State_Rs) 后,便会立即开始定子电阻重校准。 电机静止时执行的 Rs 重校准也称为离线定子电阻重校准。 Chapter 15将介绍另一种在电机旋转时执行的 Rs 重校准。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 287 PMSM 和 ACIM 电机识别重校准 尽管 Rs 启用标志由状态机在内部进行检查,但用户也可使用以下代码示例来检查该标志: www.ti.com.cn if(EST_getFlag_enableRsRecalc(obj->estHandle) == TRUE) 尽管 Rs 重校准默认启用,但也可在启用控制器前使用以下代码示例将其启用: EST_ setFlag_enableRsRecalc(obj->estHandle, TRUE); 以下代码示例可用于在启用控制器前禁用 Rs 重校准: EST_ setFlag_enableRsRecalc(obj->estHandle, FALSE); 6.7.1.4.1 管理 Rs 重校准所需的时间 当估算器进入 Rs 状态 (EST_State_Rs) 后,便会立即开始定子电阻重校准。 EST_State_Rs 包括以下三个 在电机完全识别期间执行的状态: • EST_Rs_State_RampUp • EST_Rs_State_Coarse • EST_Rs_State_Fine 定子电阻重校准期间仅执行两个状态:EST_Rs_State_RampUp 和 EST_Rs_State_Fine,因此,重校准时 间将短于电机识别期间的完全校准时间。 要计算电机重校准期间的 EST_State_Rs 执行时间,需考虑在 user.c 文件中配置的以下两个等待时间: pUserParams->RsWaitTime[EST_Rs_State_RampUp] = (uint_least32_t)(1.0*USER_EST_FREQ_Hz); pUserParams->RsWaitTime[EST_Rs_State_Fine] = (uint_least32_t)(3.0*USER_EST_FREQ_Hz); 图 6-50 显示了定子电阻重校准情况。 图中显示该过程耗费的时间以及 Rs 重校准前后的状态。 288 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn EST_Rs_State_RampUp EST_Rs_State_Fine 4s 1s 3s 1A PMSM 和 ACIM 电机识别重校准 CTRL_State_OnLine EST_State_Rs CTRL_State_Idle Or CTRL_State_OffLine EST_State_Idle CTRL_State_OnLine EST_State_OnLine 图 6-50. Rs 重校准期间的相电流时序图 6.7.1.4.2 Rs 重校准的软件配置 成功执行定子电阻重校准所用的配置步骤与电机识别的 Rs 测量期间所用的步骤相同,有关详细信息,请参 见6.5.4 节。 Rs 重校准(电机识别后)和 Rs 校准(电机识别期间)使用相同的软件配置。 6.7.1.5 CTRL_State_OnLine 和 EST_State_OnLine 偏移重校准(如果启用)后,控制器状态设置为在线;Rs 重校准(如果启用)后,估算器状态设置为在 线。 当控制器状态机和估算器状态机均处于在线状态时,电机将闭环运行,同时将使用估算角度来运行磁场 定向控制 (FOC) 功能块并将估算的速度用于速度控制器。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 289 PMSM 和 ACIM 电机识别重校准 6.7.1.5.1 从 CTRL 在线状态和 EST Rs 状态转换到在线状态 Controller Enabled Motor is Identified && Rs Recal Disabled && Controller Enabled Controller Disabled Online Motor is Identified && Rs Recal Enabled && Controller Enabled Wait Expired && Motor Is Identified Start Idle Rs Controller Disabled 图 6-51. 从 EST Rs 状态转换到在线状态 图 6-52 显示了从 Rs 重校准状态转换到在线状态时的一相电流。 0.75 s Current Slope = 0.75 A / 0.75 s = 1 A/s www.ti.com.cn 0.75 A CTRL_State_OnLine EST_State_OnLine CTRL_State_OnLine EST_State_Rs 图 6-52. 从 EST Rs 状态转换到在线状态时的相电流 从图中可以看出,该相电流从 Rs 重校准的注入电流逐渐升至负载所需的电流。 图中显示此过程耗费 0.75s。 我们可以清楚地看到,在电机转轴无机械负载的情况下,电流斜率即为 Rs 重校准每秒的注入电流。 例如, 如果使用 1A 电流来重校准定子电阻,控制器需耗费 1s 时间来完全移除 D 轴 (ID) 的注入电流。 电机剩余的 相电流将为 IQ 电流,该电流将取决于电机的机械负载。 290 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PMSM 和 ACIM 电机识别重校准 6.7.1.5.2 从(CTRL 空闲状态或 CTRL 离线状态)和 EST 空闲状态转换到在线状态 另一个以在线状态为目标的转换过程发生在电阻重校准禁用时。 在这种情况下,不会向电机注入之前的任何 电流。 之前的状态为离线状态(如果偏移重校准已启用)或空闲状态,如图 6-53 和图 6-54 所示。 Controller Enabled Motor is Identified && Rs Recal Disabled && Controller Enabled Controller Disabled Online Motor is Identified && Rs Recal Enabled && Controller Enabled Wait Expired && Motor Is Identified Start Idle Rs Controller Disabled 图 6-53. 从 EST 空闲状态转换到在线状态 CTRL_State_OnLine EST_State_OnLine CTRL_State_Idle Or CTRL_State_OffLine EST_State_Idle 图 6-54. 从 EST 空闲状态转换到在线时的相电流 6.7.1.6 CTRL_State_Idle 和 EST_State_Idle 在通过调用以下函数禁用控制器之前,将一直保持在线状态: CTRL_s etFlag_enable Ctrl(ctrlHandle, FALSE); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 291 PMSM 和 ACIM 电机识别重校准 www.ti.com.cn 调用以上函数会禁用控制器,并将控制器状态机和估算器状态机均设为空闲状态。 图 6-55 显示了每个状态的电流和输出电压。 第一个状态是偏移重校准状态,第二个状态是 Rs 重校准状 态。 第三个状态是在线状态,此时电机指令速度或转矩在闭环运行中跟随。 Fixed 50% Duty Cycle Variable Duty Cycle Idle Closed Loop CTRL_State_OffLine EST_State_Idle Offsets Recalibration CTRL_State_OnLine EST_State_Rs Rs Recalibration 图 6-55. 完整重校准时序 CTRL_State_OnLine EST_State_OnLine 6.7.2 使用 user.h 中的参数后的 PMSM 和 ACIM 电机重校准 本小节介绍 PMSM 和 ACIM 电机重校准,其中相关电机参数通过头文件提供。 6.7.1 节中使用的状态机同 样适用于本小节。 启用控制器之前,代码得知以下条件为真时将通过 user.h 中的电机参数执行电机重校准: if(CTRL_getFlag_enableUserMotorParams(ctrlHandle) == TRUE) 6.7.1 节中介绍的完全识别后重校准所对应的状态、状态转换条件和功能同样适用于通过 user.h 中的参数执 行重校准的情况。 6.8 在 user.h 中设置 PMSM 电机参数 下面列出了 user.h 中为 PMSM 电机提供的参数: #if (USER_MOTOR == User_PMSM) #define USER_MOTOR_TYPE MOTOR_Type_Pm #define USER_MOTOR_NUM_POLE_PAIRS (4) #define USER_MOTOR_Rs (2.83) #define USER_MOTOR_Ls_d (0.0115) #define USER_MOTOR_Ls_q (0.0135) #define USER_MOTOR_RATED_FLUX (0.502) #define USER_MOTOR_MAX_CURRENT (4.0) 292 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 在 user.h 中设置 PMSM 电机参数 表 6-6 汇总了绕过 PMSM 电机识别时所需的 user.h 头文件中的全部参数。 表 6-6. user.h 中的 PMSM 电机参数 user.h 中的 PMSM 电机参数 USER_Motor_Rs USER_Motor_Ls_d USER_Motor_Ls_q USER_Motor_RATED_FLUX PMSM 电机参数和单位 定子电阻 (Ω) 定子直接电感 (H) 定子正交电感 (H) 额定磁通 (V/Hz) PMSM 电机模型符 号 Rs Lsd Lsq ψ 从电机数据表中提取电机参数时,可参考以下 PMSM 模型: Vsd = Rsisd - wmLsqisq + Lsd disd dt Vsq = Rsisq + wmLsdisd + Lsq disq dt + wmy (16) 其中: Rs:定子电阻 Lsd:D 轴定子电感 Lsq:Q 轴定子电感 ψ:转子磁通 vsd:D 轴电压分量 vsq:Q 轴电压分量 isd:D 轴电流分量 isq:Q 轴电流分量 ωm:磁场角频率 下一节将具体介绍上述所有参数以及如何从典型电机制造商数据表中获取这些参数。 6.8.1 从 PMSM 数据表中获取参数 图 6-56 即为用作示例的 PMSM 电机数据表。 电机部件号:2310P,制造商:Teknic, Inc. (www.teknic.com) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 293 在 user.h 中设置 PMSM 电机参数 www.ti.com.cn 8 (4 Pairs) 图 6-56. 示例 PMSM 电机数据表 6.8.1.1 极对数 极对数用于计算每分钟转数 (RPM) 等速度,也可用于某些磁通计算,如额定磁通计算示例所示。 只能在 user.h 中使用电机数据表中的极对数,如下所示: #define USER_MOTOR_NUM_POLE_PAIRS (4) 6.8.1.2 定子电阻 (Rs) 上述电机数据表中显示的定子相间电阻为 0.72Ω。 我们需要采用 user.h 文件中的 Y 形连接电机的相电阻。 在这种情况下,由于已知电机采用 Y 形配置连接,只需将相间电阻除以 2 便可转换为相电阻。 Y 形连接电 机的线间电阻转换为线电阻需要执行以下运算: Russer.h = Rpshase to phase ´ 1Wphase 2 Wphase to phase to neutral = 0.72W ´ 0.5 = 0.36W (17) 所得的值随后按如下方式写入 user.h 中: #define USER_MOTOR_Rs (0.36) 在电机中,如果采用 Δ 形连接而非 Y 形连接,则需要将 Δ 形连接转换为 Y 形连接,以便设置电阻值。 例 如,如果已知 Δ 形连接的 Rs (Δ) 值为 3Ω,则 Rs (Y) = Rs (Δ) / 3 = 1Ω。 6.8.1.3 定子电感(Ls_d 和 Ls_q) 对于非凸极 PMSM 电机而言,Ls_d 和 Ls_q 相等。 本示例中显示的相间定子电感值为 0.40mH。 我们需要 将该值转换为 Y 形连接电机的相电感,具体步骤与之前一个参数采用的步骤相同,即只需除以 2(如下所 示): Luss_edr.h = Luss_eqr.h = Lpshase to phase ´ 1Hphase 2Hphase to phase to neutral = 0.40mH ´ 0.5 = 0.20mH (18) 294 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 所得的值随后按如下方式写入 user.h 中: #define USER_MOTOR_Ls_d (0.0002) #define USER_MOTOR_Ls_q (0.0002) 在 user.h 中设置 PMSM 电机参数 当 Ls_d 和 Ls_q 不同时,只需根据 user.h 中的正确定义设置相应值。 在电机中,如果采用 Δ 形连接而非 Y 形连接,则需要将 Δ 形连接转换为 Y 形连接,以便设置电阻值。 例如,如果已知 Δ 形连接的 Ls_d (Δ) 值为 0.3mH,则 Ls_d (Y) = Ls_d (Δ) / 3 = 0.1mH。 6.8.1.4 额定磁通 (ψ) 需要从电机数据表中获取的最后一个参数为额定磁通。 这一特定参数可通过所提供的参数反电动势常数 Ke 计算,该常数以 Vpeak/kRPM 形式提供。 若要在头文件中设置正确的值,需要进行以下单位转换: user.h ys Vpeak = K kRPM e 60 s ´ 1 min 1k Re v ´ 1000 Re v ´ 1 Re v ´ 1Vline to neutral PolePairsCycles 3 Vline toline user.h ys = 4.64 ´ 60 ´ 1 1000 ´ 1 ´ 4 1 3 = 0.0402 V / Hz (19) 所得的值随后按如下方式写入 user.h 中: #define USER_MOTOR_RATED_FLUX (0.0402) 电机制造商数据表不提供电机额定磁通的情况也很常见,此时,可选用一种测量额定磁通的方法:在待测电 机通过另一电机驱动旋转时测量相间电压。 换言之,就是使电机在发电机模式下运行并将示波器连接到电机 各相,以查看给定速度下产生的电压。 为了测量磁通,电机在发电机模式下的运行速度应足够高,以克服齿 槽转矩干扰。 例如,以同一电机为例,我们通过与其转轴相连的另一电机来运行该电机并绘制相间电压。 在本例中,电机运行速度大约为 1000RPM,但只要电机达到恒定速度时便可以任意速度运行。图 6-57 显示 了结果。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 295 电机识别故障排除 67.17 Hz 4.705 V www.ti.com.cn 图 6-57. 根据发电机模式下的电机相电压确定电机磁通 以 4 对电极为例,Ke 以 Vpeak/kRPM 形式表示,通过示波器测得的 Ke 为: Vpeak K kRPM e = 4.705 V 1 min 1000 Re v PolePairsCycles 67.17Hz ´ 60 s ´ 1k Re v ´ 1 Re v = 4.67 Vpeak / kRPM (20) 基于测量值计算 user.h 中的配置,如下所示: user.h ys = 1 4.67 ´ 60 ´ 1000 ´ 1 ´ 4 1 3 = 0.0404 V / H (21) 该值也可按如下方式通过示波器测量值直接计算: user.h 4.705 V ys = ´ 67.17Hz 1 = 0.0404 V / Hz 3 (22) #define USER_MOTOR_RATED_FLUX (0.0404) 6.9 电机识别故障排除 6.9.1 通用清单 [下一版用户指南中提供] 6.9.2 PMSM 电机识别故障排除 6.9.2.1 在负载无法断开时识别 PMSM 电机 InstaSPIN-FOC 需要获得一些电机参数来实现最佳运行性能。 在绝大多数时间,该过程仅执行一次并且要 求电机断开所有机械负载,以便能够自由旋转。 识别过程的一些步骤要求电机开环旋转。 电机在开环控制 下运行时容易停转,这就是我们要求电机不连接任何机械负载的原因。 如果电机可以断开机械负载,则 InstaSPIN-FOC 识别过程不会出现问题,结束识别时,观察窗口中会显示供未来使用的电机参数。 296 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 电机识别故障排除 另一方面,某些应用规定要连接机械负载。 这些应用的示例为压缩机、某些直驱式洗衣机和带密封外壳的齿 轮传动电机等。 对于这些应用而言,用户需要以不同方式来运行电机识别,以便在电机不旋转或旋转最少的 情况下获得电机参数。 6.9.2.2 电机能否在连接负载的情况下旋转? 第一步是确保电机没有带负载运行。 在某些情况下,开环测试实际允许电机在连接一定负载的条件下旋转。 如果电机在识别过程期间的任意时刻停转,则继续下一步骤。 6.9.2.3 运行电机识别的前三个步骤 在电机识别期间,有三个初始步骤不需要转轴旋转。 第一个步骤是计算硬件偏移。 第二个步骤是注入高频 电流正弦波,以识别称之为高频电阻 (Rhf) 和高频电感 (Lhf) 的参数。 第三个步骤是通过注入直流电流来识 别定子电阻 (Rs)。 在此步骤期间,请记录高频电感 (Lhf) 和定子电阻 (Rs)。 可通过库中的以下函数调用来 获得此步骤所需的两个变量: // get Lhf gLhf = CTRL_getLhf(ctrlHandle); // get the stator resistance gRs = EST_getRs_Ohm(obj->estHandle); 6.9.2.4 通过 user.h 中的电机参数运行 尽管可使用多种方法在不进行电机识别的情况下计算电机磁通(见节 6.8.1.4),但该过程介绍的是完全未知 的电机。 目前为止,我们有两个可以使用的参数:粗略估算的电感 (Lhf) 和精确的定子电阻 (Rs)。 还缺少 一个 PMSM 电机参数:电机磁通。 在识别过程的这一步骤中,我们将使用两个已知参数和一个任意的磁通 值。 请记住,一旦电机闭环运行,估算磁通将趋近于电机实际磁通,因此我们只需使第一次估算足够接近实 际值。 请注意 user.h 中的特定定义。 #define USER_MOTOR_NUM_POLE_PAIRS (3) 极数仅对于从库中获取正确的 RPM 读数非常重要,而库所关心的是电频率,该参数并不受极对数的影响。 尽量准确地估算该参数。 电机运行后可以更改为正确的极数,方法是设定 60RPM 的参考速度,确保电机每 秒旋转一圈。 #define USER_MOTOR_Rs (0.8) 该参数应在步骤 2 中从变量 gRs 中获得。 #define USER_MOTOR_Ls_d (0.01) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 297 电机识别故障排除 www.ti.com.cn #define USER_MOTOR_Ls_q (0.01) 对于电感而言,我们需要使用在步骤 2 中获得的高频电感。该电感是电机电感的粗略近似值。 若电感与实 际电感不同,则会限制高动态运行期间的性能。 例如,如果电机需要运行转矩阶跃或速度阶跃,电感不正确 会引发问题,但通过高频电感代替实际电感则可在低动态运行阶段实现满转矩运行。 因此对于该步骤,请复 制从 Ls_d 和 Ls_q 的 gLhf 中获得的值。 #define USER_MOTOR_RATED_FLUX (0.5) 磁通通过库进行估算,因此用户需要一个足够接近实际值的值,以便基于估算器输出值得出电机的实际磁 通。 使用任意数值可能会导致估算磁通出现一定的饱和,因为该值在内部受限。 通过用以下函数查看估算 磁通可轻松解决该问题: // get the flux gFlux_VpHz = EST_getFlux_VpHz(obj->estHandle); 如果将 gFlux_VpHz 钳位到小于 user.h 中设置的原始值的值,则将该值减半,如果钳位到大于原始值的 值,则将该值加倍。 一旦电机闭环运行且 gFlux_VpHz 值发生略微变化,请记录该值并将其返回 USER_MOTOR_RATED_FLUX。 6.9.2.5 RoverL 识别期间的电流控制器稳定性故障排除 [TBD] 6.9.2.6 斜升期间的电机转轴停转故障排除 电机转轴需要在斜升过程期间始终保持运动。 这意味着,在电机转轴带有一些负载以及电机具有高齿槽转矩 的情况下,用于斜升电机的电流必须增大,从而达到保持转轴运动的要求。 从电机额定电流的 10% 开始, 以额定电流的 10% 为增量不断增加,直至电机转轴在整个斜升过程期间持续运动。 #define USER_MOTOR_RES_EST_CURRENT (1.0) //increase in 10% steps as needed 6.9.2.7 平滑斜坡的电机转轴故障排除 如果延长了斜升所需的时间,用户还应考虑设置一个较小的斜升加速度来实现更平滑的斜坡。 例如,对于直 驱式洗衣机等高惯性负载,可通过延长斜升时间来实现更平滑的斜升过程,如图 6-58 所示。 298 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Freq b [ a [ a = estWaitTime[EST_State_RampUp] b = USER_MAX_ACCEL_EST_Hzps c = USER_MOTOR_FLUX_EST_FREQ_Hz c [> v[< b, for high inertia loads t 图 6-58. 不同加速度下的斜升时间 图 6-59 根据斜升开始期间的状态绘制,其中显示了加速度 (Hz/s) 的情况。 电机识别故障排除 10 s Acceleration = 20 Hz / 10 s = 2 Hz/s 100 x Zoom Frequency = 20 Hz 图 6-59. PMSM 斜升加速度 6.9.2.8 磁通测量故障排除 如果观察到以下任意情况,则所监测的磁通值将被视作不稳定: • 饱和且不变化 • 任何负值 • 估算器状态机移至下一状态 EST_State_Ls 时,变化幅度超过 10% 如果该值不稳定,建议增加 user.c 中的额定磁通精调时间 (pUserParams>FluxWaitTime[EST_Flux_State_Fine])。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 299 电机识别故障排除 www.ti.com.cn 如果电机在磁通识别期间的任意时刻停止旋转,则暂停识别过程,更改 user.h 中设置的以下值后以更高的频 率重试: // During Motor ID, maximum commanded speed in Hz #define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0) (40.0) 默认频率设置为 20Hz,该频率适用于大多数 PMSM 电机。 以 10Hz 的增量增大频率,直至电机在磁通识 别期间不会停止旋转。 6.9.2.9 Ls 识别故障排除 在整个电感识别过程中,确保电机转动非常重要。 如果电机在电感识别期间的任意时刻停止旋转,则增大磁 通和电感估算所使用的频率,例如,如果原来使用 20Hz,则尝试使用 40Hz。 同样,已知电机具有较低电 感时,必须增大磁通估算频率。 这种情况下,在使用几 µH 电机时会考虑低电感。 磁通识别和电感识别均 使用该频率。 // During Motor ID, maximum commanded speed in Hz #define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0) (40.0) 如果用户要求缩短识别时间,则可通过监视电感来获知电感识别何时稳定。 通常,当观察窗口中的值变化幅 度不超过 5% 时,即表示所识别电感处于稳定状态。 利用以下代码示例,用户可测量从 EST_State_Ls 状态 开始时到电感识别过程显示稳定数值所经过的时间: // get the stator inductance in the direct coordinate direction gMotorVars.gLsd_H = EST_getLs_d_H(obj->estHandle); // get the stator inductance in the quadrature coordinate direction gMotorVars.gLsq_H = EST_getLs_q_H(obj->estHandle); 已知 Ls 达到稳定所需的时间后,即将该时间输入到以下时间中,以便缩短整个电机识别过 程:pUserParams->LsWaitTime[EST_Ls_State_Fine]。 6.9.2.9.1 识别低电感 PMSM 电机 对于低电感 PMSM 电机而言,需要考虑多个注意事项。 一些注意事项涉及电机识别所使用的硬件,另一些 注意事项则涉及软件配置。 6.9.2.9.1.1 硬件注意事项 识别低电感 PMSM 电机时,建议使用分压器来尽可能降低反馈电压。 例如,如果电机运行电压为 24V,则 电阻分压器的电压应为 26V 左右。 这样在测量反馈电压时,ADC 转换器便可提供最大位数。 一旦硬件发生更改,请在 user.h 中更新 USER_ADC_FULL_SCALE_VOLTAGE_V 定义。 通常,低电感电机为高速电机,因此磁通很小。 用户需要更新 USER_IQ_FULL_SCALE_VOLTAGE_V 值,使识别过程能够识别电机磁通。 以下公式可用于确定 USER_IQ_FULL_SCALE_VOLTAGE_V 定义的 值: 300 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 电机识别故障排除 可以识别的最小磁通 (V/Hz) = USER_IQ_FULL_SCALE_VOLTAGE_V/ USER_EST_FREQ_Hz/0.7 (23) 6.9.2.9.1.2 软件注意事项 针对所涉及的软件配置,建议采用更高的频率来识别 R/L 常量。 对于经过测试的大多数低电感电机,300Hz 频率足以用于识别 R/L。 R/L 频率更新需要更新到以下定义中: #define USER_R_OVER_L_EST_FREQ_Hz (300) 第二个注意事项是采用更高的频率来识别电机电感。 电机电感属于电机参数。 以下示例用于识别电感为几 十 µH 的电机。 #define USER_MOTOR_FLUX_EST_FREQ_Hz (60.0) 第三个注意事项是调用函数来覆盖电流控制环路上的限值。 该函数需要在 ISR 外部调用。 该函数的名称 为:CTRL_recalcKpKi()。 第四个注意事项是调用函数来基于 R/L 信息计算特定电机的初始估算电感。 该函数也需要在 ISR 外部调 用,函数名称为:CTRL_calcMax_Ls_qFmt()。 第五个注意事项是调用函数来从 CTRL_calcMax_Ls_qFmt() 函数调用中获取计算得出的电感,并在执行电 感识别时初始化估算电感。 新的函数调用需要在 ISR 结束时进行,函数名称为:CTRL_resetLs_qFmt()。 6.9.2.9.2 识别凸极 PMSM 电机的电感 对于低电感 PMSM 电机而言,需要考虑多个注意事项。 一些注意事项涉及电机识别所使用的硬件,另一些 注意事项则涉及软件配置。 6.9.2.9.2.1 硬件注意事项 识别低电感 PMSM 电机时,建议使用分压器来尽可能降低反馈电压。 例如,如果电机运行电压为 24V,则 电阻分压器的电压应为 26V 左右。 这样在测量反馈电压时,ADC 转换器便可提供最大位数。 一旦硬件发生更改,请在 user.h 中更新 USER_ADC_FULL_SCALE_VOLTAGE_V 定义。 通常,低电感电机为高速电机,因此磁通很小。 用户需要更新 USER_IQ_FULL_SCALE_VOLTAGE_V 值,使识别过程能够识别电机磁通。 以下公式可用于确定 USER_IQ_FULL_SCALE_VOLTAGE_V 定义的 值: 可以识别的最小磁通 (V/Hz) = USER_IQ_FULL_SCALE_VOLTAGE_V/ USER_EST_FREQ_Hz/0.7 6.9.2.9.2.2 软件注意事项 针对所涉及的软件配置,建议采用更高的频率来识别 R/L 常量。 对于经过测试的大多数低电感电机,300Hz 频率足以用于识别 R/L。 R/L 频率更新需要更新到以下定义中: #define USER_R_OVER_L_EST_FREQ_Hz (300) 第二个注意事项是采用更高的频率来识别电机电感。 电机电感属于电机参数。 以下示例用于识别电感为几 十 µH 的电机。 #define USER_MOTOR_FLUX_EST_FREQ_Hz (60.0) 第三个注意事项是调用函数来覆盖电流控制环路上的限值。 该函数需要在 ISR 外部调用。 该函数的名称 为:CTRL_recalcKpKi()。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 电机识别和状态图 301 电机识别故障排除 www.ti.com.cn 第四个注意事项是调用函数来基于 R/L 信息计算特定电机的初始估算电感。 该函数也需要在 ISR 外部调 用,函数名称为:CTRL_calcMax_Ls_qFmt()。 第五个注意事项是调用函数来从 CTRL_calcMax_Ls_qFmt() 函数调用中获取计算得出的电感,并在执行电 感识别时初始化估算电感。 新的函数调用需要在 ISR 结束时进行,函数名称为:CTRL_resetLs_qFmt()。 6.9.2.9.3 识别凸极 PMSM 电机的电感 [TBD] 6.9.2.10 识别高速 PMSM 电机 调节高速电机产生的电流控制器增益。 [TBD] 6.9.2.11 识别高齿槽转矩 PMSM 电机 有关该主题的讨论,请参见节 6.9.2.6。 6.9.3 ACIM 电机识别故障排除 6.9.3.1 识别低压高电流 ACIM 电机 [TBD] 6.9.3.2 识别低电感 ACIM 电机 [TBD] 6.9.3.3 磁通测量故障排除 两种电机的磁通测量故障排除方法相同。 有关详细信息,请参见6.5.3 节。 默认频率设置为 20Hz,该频率 也适用于大多数 ACIM 电机。 对于 PMSM 电机,以 10Hz 的增量增大频率,直至电机在磁通识别期间不会 停止旋转。 6.9.3.4 锁定转子测试故障排除 务必要完全锁定转子,避免转轴运动。 这是确保内部变量在估算器状态机的后续状态产生精确电机参数的唯 一方法。 302 电机识别和状态图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Chapter 7 ZHCU083F – January 2013 – Revised July 2014 惯性识别 在经典力学中,惯性矩也称为质量惯性矩或转动惯量,是物体绕轴旋转加速的阻力。 通常,此值为电机力矩 与电机质量刚性耦合加速度之间的比值。 常见的误区是认为惯性等效于负载。 负载通常以负载惯性和负载转矩的形式表示,这里的负载惯性是指同电 机转子一同旋转的质量,而负载转矩则是施加到电机转子转轴上的外部转矩。 区分这两者的简单方法是考虑 当转子转轴改变旋转方向时,负载是否会与转子转轴一同旋转。 直接耦合器和负载转轴上安装的质量刚性皮 带轮即为负载惯性示例。 负载惯性和电机转子惯性组成系统惯性。 负载转矩示例包括:施加到电机转子转 轴一端的质量重力、洗衣机滚筒转动时分散的衣物以及水泵的流体粘度。 估算系统负载惯性时应尽量减少或 消除负载转矩。 图 7-1 显示了一个简单的运动系统示例。 在此系统中,旋转质量与电机刚性耦合。 这意味着旋转质量与电 机一同旋转,并且被视为惯性的一部分。 非旋转质量没有与电机刚性耦合,被视为负载的一部分。 在惯性 识别过程期间,非旋转质量不应连接到电机上。 Simple Motion System Load Identifying Inertia Rotation Rotation Motor Rotating Mass Motor Rotating Mass Disconnected Non-Rotating Mass Non-Rotating Mass 图 7-1. 简单运动系统中的惯性识别示例 Topic ........................................................................................................................... Page 7.1 InstaSPIN-MOTION 惯性识别............................................................................... 304 7.2 惯性识别过程概述............................................................................................... 305 7.3 SpinTAC 速度识别的软件配置 .............................................................................. 308 7.4 惯性识别故障排除............................................................................................... 310 7.5 不易识别惯性的应用............................................................................................ 311 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 惯性识别 303 InstaSPIN-MOTION 惯性识别 www.ti.com.cn 7.1 InstaSPIN-MOTION 惯性识别 惯性是精确控制机械系统时所需的一项重要信息。 InstaSPIN-MOTION 通过 SpinTAC 速度识别实现准确的 惯性估算,同时考虑无传感器应用中的摩擦力影响,从而提供稳健的惯性识别特性。 目前,SpinTAC 速度 识别并不主动考虑负载转矩。 为了得到正确的值,需要尽量减少或消除负载转矩,例如起重机应用重力或者 压缩机中的压缩液体。 SpinTAC 速度识别用单位 A/[krpm/s] 来估算惯性。 这不同于传统的惯性单位 Kg * m2。 单位 A/[krpm/s] 表 示加速系统所需的转矩量。 它与国际单位 Kg * m2 成比例。 具体关系取决于电机可生成的转矩量。 SpinTAC 控制器需要了解加速系统所需的转矩量并使用该非传统单位来表示惯性。 SpinTAC 速度识别产生了一个非常准确的惯性结果。图 7-2 为同一电机 100 次惯性识别过程测试结果图。 如图所示,惯性识别的重复性极高。 这些试验的最大值和最小值均在 100 次测试的平均值的 0.5% 范围 内。 SpinTAC 速度识别正确估算系统惯性后,会立即产生一个包含重复性近似等级的结果。 Histogram of Inertia Estimates for Anaheim BLY172S 16 15 Average: 14 0.020756 13 Standard Deviation: 12 3.094 x 10-5 11 10 9 8 7 6 5 4 3 2 1 0 Inertia Estimate [A/(krpm/s)] 图 7-2. 100 次惯性识别试验柱状图 估算的惯性作为 SpinTAC 速度和位置控制器的输入。 不过,SpinTAC 控制器相当稳健,可以承受大范围惯 性变动。 此特性对于系统惯性随时间变化的应用非常有用。 图 7-3 比较了 SpinTAC 速度控制器使用多种错误惯性设置时的性能。 这些数据是通过将转矩干扰施加到电 机系统而测得的。 提供给 SpinTAC 速度控制器的惯性值被设置为不同的值,以便突出控制器能够承受的惯 性误差范围。 从图中可以看出,该 SpinTAC 速度控制器能够承受的惯性不匹配误差高达八倍。 当惯性值与 应用匹配时可实现最佳性能,但如果系统惯性发生变化,SpinTAC 速度控制器将保持稳定。 304 惯性识别 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 惯性识别过程概述 Speed [RPM] Current [A] SpinTAC Inertia Tolerance 5000 4800 4600 4400 4200 4000 3800 3600 3400 3200 3000 2800 2600 2400 2200 2000 1800 1600 1400 1200 1000 800 600 400 200 0 0.25x Estimated Inertia 0.5x Estimated Inertia 1x Estimated Inertia 0 1 2 3 4 5 6 7 8 9 10 11 Time [sec] 2x Estimated Inertia 12 13 14 15 Speed Feedback Iq Reference 20 19 18 17 16 15 14 4x 13 Estimated Inertia 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 16 17 18 19 20 图 7-3. SpinTAC 速度控制器惯性容差 SpinTAC 速度识别提供了一种估算系统惯性的便捷方法。 该方法将连续转矩系统配置应用到电机并使用速 度反馈来计算电机惯性。 这是一个开环测试,设计作为开发过程的一部分来运行。 识别惯性后,可立即将 其设为默认值,并且在系统发生改变前不需要再次进行估算。 惯性识别期间,电机正向旋转,然后短暂地反向旋转。 如果系统中无法实现这一点,则需要考虑一些特殊注 意事项。 关于这些注意事项说明,请参见7.5 节。 7.2 惯性识别过程概述 SpinTAC 惯性识别过程非常快。 它需要通过加速和减速电机来估算系统惯性。 在惯性识别过程之前,需要 满足一些条件。 • 电机不应旋转,或者不应缓慢旋转。 如果在电机已经转动时开始执行转矩配置,惯性的估算结果会不准确。 • InstaSPIN-FOC PI 速度控制器必须禁用。 为测试惯性,SpinTAC 速度识别需要提供 Iq 参考值。 这只有在 InstaSPIN-FOC PI 速度控制器禁用时才 能实现。 • 正向速度基准值必须在 FAST 中设置。 FAST 估算器需要通过速度基准获得电机旋转方向,从而正确地估算速度。 该值可以是速度基准设置的 任意正值。 • 强制角必须启用。 ZHCU083F – January 2013 – Revised July 2014 惯性识别 305 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 惯性识别过程概述 强制角可实现从零速度成功启动,并产生更准确的惯性估算结果。 图 7-4 是启用 SpinTAC 速度识别之前所需步骤的流程图。 Start Identify Process Set Speed Reference to 0 www.ti.com.cn Is Motor Speed Y 0? N Disable InstaSPIN-FOC Speed Controller Set Positive Speed Reference Enable Force Angle Run SpinTAC Identify Inertia Identification Y Is Identify Done? N Provide Inertia & Friction to SpinTAC Speed Controller Enable SpinTAC Speed Controller N Is Identify in Y Error? Exit Identify Process 图 7-4. SpinTAC 速度识别过程流程图 图 7-5 为电机连续转矩曲线图。 SpinTAC 速度识别过程同时应用了正向转矩和反向转矩。 转矩最初施加到 电机的目的是使电机转子在惯性识别过程之前正确对准。 306 惯性识别 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 惯性识别过程概述 Torque [A] 0.6 0.5 0.4 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 0 Inertia Estimation Torque 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Time [sec] 图 7-5. SpinTAC 速度识别转矩基准 1.1 1.2 1.3 1.4 1.5 Speed [RPM] 电机转动的相关结果在图 14-35 中说明。 在惯性识别过程中,确保电机持续转动非常重要。 如果电机在惯 性识别测试过程中停止,应调整配置参数后重新进行惯性识别过程。 有关如何修改惯性识别过程中通用配置 错误的更多信息,请参见7.4 节。 Inertia Estimation Speed 4000 3800 3600 3400 3200 3000 2800 2600 2400 2200 2000 1800 1600 1400 1200 1000 800 600 400 200 0 -200 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 Time [sec] 图 7-6. SpinTAC 速度识别速度反馈 这表示典型情况。 有关如何为齿槽力或摩擦力较大的电机识别系统惯性的更多信息,请参见7.5 节。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 惯性识别 307 SpinTAC 速度识别的软件配置 www.ti.com.cn 7.3 SpinTAC 速度识别的软件配置 配置 SpinTAC 速度识别需要四个步骤。 实验 5c — InstaSPIN-MOTION 惯性识别 — 本示例项目执行了使 用 SpinTAC 速度识别来估算系统惯性所需的各个步骤。 利用包含在 MotorWare 中的头文件 spintac_velocity.h,您可以快速将 SpinTAC 组件包括在项目中。 7.3.1 包括头文件 这应该通过其余的模块头文件包含来完成。 在实验 5c 示例项目中,该文件包括在 spintac_velocity.h 头文 件中。 针对相应项目,可通过包括 spintac_velocity.h 完成此步骤。 #include "sw/modules/spintac/src/32b/spintac_vel_id.h" 7.3.2 声明全局变量 这应该通过主源文件中的全局变量声明来完成。 在实验 5c 项目中,此结构包括在已声明为 spintac_velocity.h 头文件一部分的 ST_Obj 结构内。 ST_Obj st_obj; // The SpinTAC Object ST_Handle stHandle; // The SpinTAC Handle 如果不希望使用已在 spintac_velocity.h 头文件中声明的 ST_Obj 结构,可使用以下示例。 ST_VelId_t stVelId; // The SpinTAC Velocity Identify object ST_VELID_Handle stVelIdHandle; // The SpinTAC Inertia Identify handle 7.3.3 初始化配置变量 这应该在死循环之前的项目主函数中完成。 这样会将所有的默认值加载到 SpinTAC 速度识别中。 该步骤可 通过运行已在 spintac_velocity.h 头文件中声明的函数 ST_init 和 ST_setupVelId 来完成。 如果不希望使用 这两个函数,可使用下方的代码示例配置 SpinTAC 速度识别组件。 SpinTAC 速度识别配置是典型配置的代 表,适用于大部分电机。 // Initialize the SpinTAC Velocity Identify Component stVelIdHandle = STVELID_init(&stVelId, sizeof(stVelId)); // Setup SpinTAC Velocity Identify Component // Sample time [s] STVELID_setSampleTime_sec(stVelIdHandle, _IQ(ST_SPEED_SAMPLE_TIME)); // System speed limit [pu/s], (0, 1] STVELID_setVelocityMax(stVelIdHandle, _IQ(1.0)); // System maximum (0,1] & minimum [-1,0) control signal [PU] STVELID_setOutputMaximums(stVelIdHandle, maxCurrent_PU, -maxCurrent_PU); // Goal Speed of the inertia identification process [pu/s], (0, 1] STVELID_setVelocityPositive(stVelIdHandle, _IQmpy(_IQ(0.4), _IQ(1.0))); // System control signal high (0, OutMax] & low [OutMin, 0) limit [PU] STVELID_setOutputLimits(stVelIdHandle, maxCurrent_PU, -maxCurrent_PU); // Low pass filter constant to smooth the speed feedback signal [tick], [1, 100] STVELID_setLowPassFilterTime_tick(stVelIdHandle, 1); // Configure the time out for inertia identification process [s], [100*T, 10.0] STVELID_setTimeOut_sec(stVelIdHandle, _IQ(10.0));// Rate at which torque is applied to the motor [s], [T, 25.0] 308 惯性识别 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn STVELID_setTorqueRampTime_sec(stVelIdHandle, _IQ(5.0)); // Initially ST_VelId is not in reset STVELID_setReset(stVelIdHandle, false); // Initially ST_VelId is not enabled STVELID_setEnable(stVelIdHandle, false); SpinTAC 速度识别的软件配置 7.3.4 调用 SpinTAC 速度识别 该步骤应在主 ISR 中完成。 该组件需要在适当的抽取率下调用此功能。 抽取率由 spintac_velocity.h 头文件 中声明的 ST_ISR_TICKS_PER_SPINTAC_TICK 确定;有关详细信息,请参见节 4.7.1.4。 调用 SpinTAC 速度识别函数之前,必须更新速度反馈。 另外需要注意,本示例按照图 7-4 的流程图执行步骤,确保系统已 准备好进行惯性识别。 CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // Get pointer to CTRL object _iq speedFeedback = EST_getFm_pu(obj->estHandle); // Get the mechanical speed in pu/s _iq iqReference = 0; if(gMotorVars.SpinTAC.VelIdRun != false) { // if beginning the SpinTAC Velocity Identify process // set the speed reference to zero gMotorVars.SpeedRef_krpm = 0; // wait until the actual speed is zero if((_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU)) && (STVELID_getEnable(stVelIdHandle) == false)) { gMotorVars.Flag_enableForceAngle = true; EST_setFlag_enableForceAngle(obj->estHandle, gMotorVars.Flag_enableForceAngle); // set the GoalSpeed STVELID_setVelocityPositive(stVelIdHandle, gMotorVars.VelIdGoalSpeed); // set the Torque Ramp Time STVELID_setTorqueRampTime_sec(stVelIdHandle, gMotorVars.VelIdTorqueRampTime); // Enable SpinTAC Velocity Identify STVELID_setEnable(stVelIdHandle, true); // Set a positive speed reference to FAST to provide direction information gMotorVars.SpeedRef_krpm = _IQ(0.001); CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm); } } // Run SpinTAC Velocity Identify STVELID_setVelocityFeedback(stVelIdHandle, speedFeedback); STVELID_run(stVelIdHandle); if(STVELID_getDone(stVelIdHandle) != false) { // If inertia identification is successful // update the inertia setting of SpinTAC Velocity Controller // EXAMPLE: // STVELCTL_setInertia(stVelCtlHandle, STVELID_getInertiaEstimate(stVelIdHandle)); gMotorVars.VelIdRun = false; // return the speed reference to zero gMotorVars.SpeedRef_krpm = _IQ(0.0); CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm); } else if((STVELID_getErrorID(stVelIdHandle) != false) && (STVELID_getErrorID(stVelIdHandle) != ST_ID_INCOMPLETE_ERROR)) { // if not done & in error, wait until speed is less than 1RPM to exit if(_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU)) { gMotorVars.VelIdRun = false; // return the speed reference to zero gMotorVars.SpeedRef_krpm = _IQ(0.0); CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm); } } ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 惯性识别 309 惯性识别故障排除 // Set the Iq reference that came out of SpinTAC Identify iqReference = STVELID_getTorqueReference(stVelIdHandle); CTRL_setIq_ref_pu(ctrlHandle, iqReference); www.ti.com.cn 7.4 惯性识别故障排除 SpinTAC 速度识别已在多种电机上进行测试。 非典型电机可能会在执行惯性识别过程时遇到困难,从而导 致错误。 此错误由 SpinTAC 速度识别全局结构的 ERR_ID 字段中的值表示。 下文将讨论常见错误及其纠 正方法。 7.4.1 ERR_ID ERR_ID 可向用户提供错误代码。 表 7-1 中列出了 SpinTAC 速度识别中定义的错误及相应解决方法。 ERR_ID 1 2 4 5 22 23 24 34 36 1010 1011 2003 2004 2005 2006 4001 4003 表 7-1. SpinTAC 速度识别错误代码 问题 采样时间值无效 系统最大速度值无效 速度环路控制信号最大值无效 速度环路控制信号最小值无效 速度值无效 速度环路控制信号正值无效 速度环路控制信号负值无效 加速度斜坡时间值无效 反馈类型值无效 速度反馈低通滤波时间常量无效 超时值无效 惯性估算值无效 惯性识别过程超时 通过设置 RES = 1 或 ENB = 0 丢弃识别过程 识别过程中电机停止 SpinTAC 许可证无效 ROM 版本无效 解决方法 将 cfg.T_sec 设置为 (0, 0.01] 范围内 将 cfg.VelMax 设置为 (0, 1] 范围内 将 cfg.OutMax 设置为 (0, 1] 范围内 将 cfg.OutMin 设置为 [-1, 0) 范围内 将 cfg.VelPos 设置为 (0, cfg.VelMax] 范围内 将 cfg.OutPos 设置为 (0, cfg.OutMax] 范围内 将 cfg.OutNeg 设置为 [cfg.OutMin, 0) 范围内 将 cfg.RampTime_sec 设置为 [cfg.T_sec, 25] 范围内 将 cfg.Sensorless 设置为 {false, true} 范围内 将 cfg.LptTime_tick 设置为 [1, 100] 范围内 将 cfg.TimeOut_sec 设置为 [1, 10] 范围内 调整配置参数并且重复 调整配置参数并且重复 无操作 调整配置参数并且重复 使用具有有效许可证的芯片 使用 ROM 版本有效的芯片或使用与当前 ROM 版本兼容的 SpinTAC 库。 7.4.2 2003 错误 此错误表示惯性估算值不正确。 这通常是由摩擦力或齿槽力较大的电机引起的。 要修正此错误,需减小全 局结构配置部分的 RampTime_sec 参数。 减小此参数会增大惯性识别过程中施加到电机的转矩率。 如果识别出的惯性是有效值,并且摩擦系数为很小的负值,则此错误的原因可能是摩擦系数非常小导致计算 精度不良。 在这种情况下,识别的惯性仍可能有效。 7.4.3 2004 错误 此错误表示惯性识别过程完成超时。 出现这种情况的原因有多种。 7.4.3.1 电机持续转动 如果电机持续转动并且惯性识别过程产生此错误,这表示识别过程的目标速度过高。 这通常是由额定速度较 低的电机引起的。 修正此错误的方法是减小全局结构配置部分的 VelPos 参数。 此参数表示识别过程的目标 速度。 如果 VelPos 值设置过低,则可能导致惯性识别不准确。 310 惯性识别 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 惯性识别故障排除 7.4.3.2 电机初始未转动 如果电机初始未转动且惯性识别过程产生此错误,这表示施加到电机上的转矩过低。 这通常是所需启动电流 很大的电机引起的。 修正此错误的方法是增大全局结构配置部分的 OutPos 参数。 此参数表示识别过程中 施加的最大转矩。 7.4.4 2006 错误 此错误表示电机在惯性识别过程中未能持续转动。 在惯性识别过程完成前,确保电机持续转动非常重要。 此错误通常是由于 RampTime_sec 参数设置过高引起的。 当电机在惯性识别过程中停止转动时,可能导致 估算惯性值高于实际惯性值。 减小 RampTime_sec 参数会增大惯性识别过程中施加到电机的转矩率。 7.5 不易识别惯性的应用 某些应用的特性使其很难识别系统惯性。 SpinTAC 速度识别的默认配置适用于使用典型电机的应用。 针对 包含以下任一条件的电机应用,需要在 SpinTAC 速度识别配置中进行一些修改。 • 齿槽力大 • 摩擦力大 • 额定速度低 • 反电势大 • 启动电流大 7.5.1 自动泵(齿槽力大/摩擦力大) 很多自动泵的齿槽力或摩擦力都很大。 对于这些应用,减小 RampTime_sec 参数非常重要。 此参数位于 SpinTAC 速度识别全局结构的配置结构中。 RampTime_sec 值表示 Iq 参考电流值从 0 斜升到 1.0 PU 所用 的时间(以秒为单位)。 减小此值意味着 Iq 参考电流在惯性识别期间会增大得更快。 这样可确保电机适当 地减速。 如果电机没有适当减速,惯性估算过程会产生不良结果。 图 7-7 为摩擦力较大的自动泵惯性识别过程中的速度反馈。 当 RampTime_sec 设置为 10.0 时,惯性识别 过程不会成功完成。 值得注意的是,较大的 RampTime_sec 会导致此过程延迟启动并且电机在测试中停 止。 这两种情况都会导致惯性识别失败,并且 ERR_ID 设为 2003。 当 RampTime_sec 设置为 3.0 时,惯 性识别不会延迟启动,并且电机也不会在测试中停止。 若要成功完成惯性识别,需要同时满足这两个条件。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 惯性识别 311 不易识别惯性的应用 www.ti.com.cn Inertia Estimation for an Automotive Pump 4000.00 3800.00 3600.00 3400.00 No Start Delay Speed Does Not Stop 3200.00 3000.00 2800.00 2600.00 Delayed Start 2400.00 Speed [RPM] 2200.00 2000.00 1800.00 1600.00 1400.00 1200.00 1000.00 800.00 600.00 400.00 200.00 0.00 -200.00 RampTime_sec (3.0) RampTime_sec (10.0) Speed Stops in Test 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 Time [sec] 图 7-7. 自动泵惯性识别的速度反馈 7.5.2 直接驱动型洗衣机(额定转速低且反电势大) 大多数直接驱动型洗衣机使用额定转速低的电机。 在这些应用中,减小 VelPos 参数非常重要。 此参数位于 SpinTAC 速度识别全局结构的配置结构中。 VelPos 值表示惯性识别过程中的目标速度,单位为 pu/s。 如 果目标速度大于电机额定速度的两倍,惯性识别将失败,因为电机无法达到足够的速度。 减小 VelPos 意味 着惯性识别过程的目标速度会降低,但该过程会成功完成。 不建议在惯性识别过程中使用场强减弱来增大电 机速度。 场强减弱会影响速度和转矩之间的关系。 图 7-8 是直接驱动型洗衣机惯性识别过程中的速度反馈。 注意,电机在约为 360rpm 的额定速度下转动时间 超过 5 秒钟。 这意味着电机永远无法达到 VelPos 配置参数指定的目标速度,并且 SpinTAC 速度识别超时 后会结束惯性识别过程。 312 惯性识别 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 不易识别惯性的应用 Inertia Estimation for a Direct Drive Washing Machine Goal Speed 200 RPM Goal Speed 800 RPM 400 375 Test Timed Out 350 325 Motor Slow Ramps to Zero 300 Motor Stays at Peak 275 Speed for Longer 250 than 5 Seconds 225 Speed [RPM] 200 175 150 Motor Does Not 125 Stay at Peak Speed 100 75 50 Motor Decelerates 25 0 -25 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Time [sec] 图 7-8. 直接驱动型洗衣机惯性识别的速度反馈 直接驱动型洗衣机同样具有较大的反电势,并且快速减速会导致直流总线过压。 降低目标速度会引起电机减 速度下降,导致在直流总线上生成的电压较低。 目标速度由 VelPos 参数设定。 图 7-9 为惯性识别过程中的直流总线电压图。 速度反馈供参考。 注意,当目标速度设置为 400RPM 时,惯 性识别过程中的直流总线电压升至 400 伏特。 为消除这种电压大幅升高,需减小 VelPos 配置参数。 当目 标速度设置为 200RPM 时,惯性识别过程中的直流总线电压低于 350 伏特。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 惯性识别 313 不易识别惯性的应用 www.ti.com.cn Speed [RPM] Voltage [V] Inertia Estimation for a Direct Drive Washing Machine 450.00 Speed Feedback DC Bus Speed Feedback DC Bus 450.00 425.00 400.00 375.00 DC Bus Stays Below 350V DC Bus 425.00 400.00 375.00 350.00 Reaches 400 V 350.00 325.00 325.00 300.00 300.00 275.00 275.00 250.00 250.00 225.00 225.00 200.00 200.00 175.00 175.00 150.00 125.00 100.00 75.00 Goal Speed 200 RPM Goal Speed 400 RPM 150.00 125.00 100.00 75.00 50.00 50.00 25.00 25.00 0.00 0.00 -25.00 -25.00 -50.00 -50.00 1 2 3 4 5 6 7 8 Time [sec] 图 7-9. 直接驱动型洗衣机惯性识别的直流总线电压 7.5.3 压缩机(启动电流大) 压缩机通常不能完全消除负载转矩。 这会导致电机需要很大的 Iq 参考电流才能开始转动。 对于这些应用, 增大 PosOut 参数非常重要。 此参数位于 SpinTAC 速度识别全局结构的配置结构中。 PosOut 值表示 Iq 参 考电流(单位为 PU),它将作为惯性识别过程的一部分。 增大此值会在识别过程中为电机提供更多电流。 减小 RampTime_sec 参数也非常重要。 这会增加 Iq 参考电流施加到系统的速率。 图 7-10 是压缩机惯性识别过程中的速度反馈。 注意,速度没有快速加速至目标速度。 增至目标速度耗费了 很长时间。 这说明电机要达到目标速度需要额外的转矩。 所需调整的配置参数为 PosOut。 增大此参数即 可在惯性识别过程中为电机提供更大的转矩。 惯性识别过程仅会使用达到目标速度所需的转矩。 PosOut 参 数最好大于所需的值。 314 惯性识别 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 不易识别惯性的应用 Inertia Estimation for a Compressor 4000.00 3800.00 3600.00 3400.00 3200.00 3000.00 2800.00 Motor Rapidly Ramps Up to Speed 2600.00 Speed [RPM] 2400.00 2200.00 2000.00 Motor Gradually Ramps Up to Speed 1800.00 1600.00 1400.00 1200.00 1000.00 800.00 600.00 400.00 200.00 0.00 -200.00 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 Time [sec] 图 7-10. 压缩机惯性识别的速度反馈 Max Torque 4A Max Torque 0.5A 5 5.5 6 很多压缩机无法反向运转。 惯性识别过程向系统施加反向 Iq 参考电流即可实现电机减速。 即使施加反向 Iq 参考电流,电机仍不会停止反向运转,因为惯性识别过程在电机开始反向运转前便会结束。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 惯性识别 315 Chapter 8 ZHCU083F – January 2013 – Revised July 2014 MCU 注意事项 本节将介绍实现成功执行 InstaSPIN-FOC 和 InstaSPIN-MOTION 所需注意的 MCU 相关事项: • 列出支持 InstaSPIN 的器件并说明其具体需求 • 内存映射注意事项 • 时钟速率 本节详细介绍 InstaSPIN 库所需的微控制器资源。 本文档中介绍了两种执行 InstaSPIN 的方法,具体取 决于从安全 ROM 运行多少功能,或者从用户内存(RAM 或 闪存)中运行哪些功能: – 从 ROM 中执行 InstaSPIN-FOC 的全部功能,又称完全执行。 – 仅从 ROM 中执行 FAST™ 功能,又称最小执行。 另外,必须根据在用户内存中放置和执行代码的具体位置加以区分。 分两类讨论: – 从 ROM 中执行库,从 RAM 中加载和执行用户代码 – 从 ROM 中执行库,从闪存中加载和执行用户代码 • 专门针对库执行以及此代码的加载与执行位置,在这份文档中讨论了以下资源类别: – CPU 利用率 – 内存分配 – 堆栈利用率 • 本节末尾的通用部分列出了数字和模拟引脚利用率,适用于 InstaSPIN 的各个运行模式。 Topic ........................................................................................................................... Page 8.1 支持 InstaSPIN 的器件........................................................................................ 317 8.2 ROM 和用户内存概述.......................................................................................... 318 8.3 关于 CPU 负载和内存占用量测量的详细信息 ........................................................... 322 8.4 内存占用量........................................................................................................ 325 8.5 CPU 负载 ......................................................................................................... 330 8.6 数字和模拟引脚.................................................................................................. 351 316 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 支持 InstaSPIN 的器件 8.1 支持 InstaSPIN 的器件 目前包含 ROM 中的 InstaSPIN-FOC 或 InstaSPIN-MOTION 的器件如表 8-1 所示。 器件 TMS320F28069M TMS320F28069F TMS320F28068M TMS320F28068F TMS320F28062F TMS320F28054M TMS320F28054F TMS320F28052M TMS320F28052F TMS320F28027F TMS320F28026F 表 8-1. 支持 InstaSPIN 的器件 ROM 中的 InstaSPIN-FOC V1.6 V1.6 V1.6 V1.6 V1.6 V1.7 V1.7 V1.7 V1.7 V1.7 V1.7 ROM 中的 InstaSPINMOTION V2.1.8 不包含 V2.1.8 不包含 不包含 V2.1.8 不包含 V2.1.8 不包含 不包含 不包含 InstaSPIN TRM SPRUHJ0 SPRUHI9 SPRUHJ0 SPRUHI9 SPRUHI9 SPRUHW1 SPRUHW0 SPRUHW1 SPRUHW0 SPRUHP4 SPRUHP4 器件数据表 SPRS698 SPRS698 SPRS698 SPRS698 SPRS698 SPRS797 SPRS797 SPRS797 SPRS797 SPRS523 SPRS523 器件 TRM SPRUH18 SPRUH18 SPRUH18 SPRUH18 SPRUH18 SPRUHE5 SPRUHE5 SPRUHE5 SPRUHE5 SPRUFN3 SPRUFN3 除了 InstaSPIN 技术已添加到 ROM 的指定区域外,器件保持不变。 有关所使用器件的全部详情,请参见器 件专用数据表和勘误表。 8.1.1 softwareUpdate1p6() - 用户代码中所需的函数 函数 softwareUpdate1p6() 是针对 InstaSPIN-FOC v1.6 中的漏洞的应急措施,当使用 user.h 中的电感时, 可用于校正电感从亨利转化为标么值的操作。 当使用 InstaSPIN-FOC v1.6 时,每当从 user.h 加载电机参 数时,都需要调用此函数。 此补丁中包含以下修复措施: • 已添加电感最大值。 因此,我们希望根据此最大值标定电感标么值。 这也会影响电感值的 Q 格式。 • 根据这些新的电感标么值设置电流控制器增益值(Id/Iq 电流控制器)。 下面是该补丁的源代码,在每个 InstaSPIN-FOC v1.6 和 InstaSPIN-MOTION 实验示例中均有使用。 void softwareUpdate1p6(CTRL_Handle handle) { CTRL_Obj *obj = (CTRL_Obj *)handle; float_t fullScaleInductance = EST_getFullScaleInductance(obj->estHandle); float_t Ls_coarse_max = _IQ30toF(EST_getLs_coarse_max_pu(obj->estHandle)); int_least8_t lShift = ceil(log(obj>motorParams.Ls_d/(Ls_coarse_max*fullScaleInductance))/log(2.0)); uint_least8_t Ls_qFmt = 30 - lShift; float_t L_max = fullScaleInductance * pow(2.0,lShift); _iq Ls_d_pu = _IQ30(obj->motorParams.Ls_d / L_max); _iq Ls_q_pu = _IQ30(obj->motorParams.Ls_q / L_max); float_t RoverL = obj->motorParams.Rs/obj->motorParams.Ls_d; float_t fullScaleCurrent = EST_getFullScaleCurrent(obj->estHandle); float_t fullScaleVoltage = EST_getFullScaleVoltage(obj->estHandle); float_t ctrlPeriod_sec = CTRL_getCtrlPeriod_sec(ctrlHandle); _iq Kp = _IQ((0.25*obj->motorParams.Ls_d*fullScaleCurrent)/(ctrlPeriod_sec*fullScaleVoltage)); _iq Ki = _IQ(RoverL*ctrlPeriod_sec); _iq Kd = _IQ(0.0); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 317 ROM 和用户内存概述 // store the results EST_setLs_d_pu(obj->estHandle,Ls_d_pu); EST_setLs_q_pu(obj->estHandle,Ls_q_pu); EST_setLs_qFmt(obj->estHandle,Ls_qFmt); // set the Id controller gains PID_setKi(obj->pidHandle_Id,Ki); CTRL_setGains(ctrlHandle,CTRL_Type_PID_Id,Kp,Ki,Kd); // set the Iq controller gains PID_setKi(obj->pidHandle_Iq,Ki); CTRL_setGains(ctrlHandle,CTRL_Type_PID_Iq,Kp,Ki,Kd); return; } // end of softwareUpdate1p6() function www.ti.com.cn 8.2 ROM 和用户内存概述 8.2.1 ROM 中的 InstaSPIN-FOC 完全执行 当应用要求允许从 ROM 中运行所有磁场定向控制 (FOC) 块,并且没有其它功能需求时(比如,专门的电流 控制算法或者克拉克变换等),建议使用完全执行。 这种执行方式会使用 ROM 中的所有库内容,并且执行 全套函数和函数块,称为 InstaSPIN-FOC。 完全执行不仅包括 FAST 算法,还包括其余 FOC 块。 下列框 图说明了采用完全执行时包含的几个块如何实现从 ROM 中运行全部 FOC 代码、释放更多内存资源以及利 用 ROM 中的 0 等待状态执行。 ROM 也是只执行 ROM,由于不能够写入或读取,仅能执行,因此可提供 更高的安全等级。 对于 F2802xF 器件,由于 ROM 容量减小,某些功能块会加载到用户内存中。 318 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ROM 和用户内存概述 Torque Mode User_SpdRef User_IqRef User_IdRef Traj Ramp Zref Za Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out Id Iq PARK CTRL_run CTRL_setup Ta SVM Tb Tc HAL_run PWM Driver FLASH/RAM \a Flux a T Angle Za Speed aW Torque a a T EST_run T a IH_in Irated \a IJ_in Za &^d¡ Software Encoder VH_in aW Rotor Flux Observer Motor Parameters ID VJ_in Ia CLARKE Ib Ic Va CLARKE Vb Vc Vbus ROM ROM a Rs Rar a Lsd aLsq \a rated a Irated Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 8-1. ROM 中的 InstaSPIN-FOC 完全执行 HAL_acqAdcInt HAL_readAdcData ADC Driver FLASH/RAM 8.2.1.1 从 ROM 和 RAM 中执行 即使整个 InstaSPIN 库从 ROM 中执行,仍然有一些函数需要从用户内存中加载和运行。 这些函数是库连接 硬件外设的接口,如图 8-1 所示。 与驱动器对象 (HAL_Obj) 相关的所有函数均连接到硬件并且需要放置在 用户内存中。 性能数据将取决于执行这些用户函数的位置。 本节说明了所有用户函数在 RAM 外放置和运 行时的性能数据。 从 CPU 性能角度来看,由于 RAM 不需要等待状态,因此从 RAM 加载和执行用户函数有显著优势。 另一 方面,将用户函数加载到 RAM 中会消耗易失性存储空间,所以用户必须考虑变量可用的 RAM 总量。 堆栈 利用率和库所使用的引脚与用户代码驻留的位置(RAM 或闪存)无关。 8.2.1.2 从 ROM 和闪存中执行 尽管变量和堆栈仍需要使用部分可用的 RAM,但是将用户函数加载至闪存可减少 RAM 的消耗。 由于闪存 需要等待状态,当从闪存加载用户代码时的另一点考量是 CPU 执行时间。 由于 F2802xF 器件的 ROM 容量减小,因此不可能从 ROM 中完全执行 InstaSPIN-FOC。 关于运行 InstaSPIN-FOC 最小执行的详细信息,请参见8.2.2 节。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 319 ROM 和用户内存概述 www.ti.com.cn 堆栈使用量以及使用的引脚与加载用户代码至 RAM 时所用的相同。 不过,此处仍列出了这些参数,以便为 特殊执行提供完整的资源使用量列表。 8.2.2 ROM 中的 InstaSPIN-FOC 最小执行 一些应用需要对磁场定向控制功能进行更多控制。 有此需求的应用可以使用 InstaSPIN 的最小执行,仅从 ROM 中运行 FAST 估算器并将其它软件块移至用户内存中。 由于估算器的源代码为 TI 专有,因此它必须 保留在 ROM 中。 图 8-2 用不同颜色突出显示了从 ROM 和用户内存中执行的功能。 Torque Mode User_SpdRef User_IqRef User_IdRef Traj Ramp Zref Za Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out CTRL_run CTRL_setup Ta SVM Tb Tc HAL_run PWM Driver FLASH/RAM Id Iq PARK \a Flux a T Angle Za Speed aW Torque a Irated \a a a T EST_run T IH_in IJ_in Za &^d¡š]uš}Œ VH_in Flux, Angle, Speed, Torque aW Motor Parameters ID VJ_in FLASH/RAM Ia CLARKE Ib Ic Va CLARKE Vb Vc Vbus ROM a Rs a Rr a Lsd aLsq \a rated a Irated Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 8-2. ROM 中的 InstaSPIN-FOC 最小执行 HAL_acqAdcInt HAL_readAdcData ADC Driver FLASH/RAM 请注意,只有运行估算器的函数 (Est_run) 从 ROM 中执行。 其余函数均从用户内存(RAM 或闪存)中执 行。 在以下小节中,描述了使用最小执行时的 InstaSPIN 性能。 8.2.2.1 从 ROM 和 RAM 中执行 当从 RAM 中加载和执行用户函数时,代码执行速度比闪存快,但此时代码需要占用一部分可用 RAM。 如 果某个特殊应用需要最大执行速度,且可用 RAM 满足非易失性存储器要求,这是最佳选择。 320 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ROM 和用户内存概述 8.2.2.2 从 ROM 和闪存中执行 如之前章节所述,将用户函数加载至闪存可以减少 RAM 的消耗。 不过,闪存执行的速度较慢,因为闪存需 要等待状态才能正确操作;因而影响了执行速度。 8.2.3 ROM 中的 InstaSPIN-MOTION InstaSPIN-MOTION 采用模块化设计,当前在 F2806xM 器件上可用。 消费者可以在部署系统时决定闪存中 包含哪些函数。 InstaSPIN-MOTION 控制、识别和移动组件在 ROM 中可用,InstaSPIN-MOTION 规划和公共库在 RAM 中 可用。 User_SpdRef User_SpdRef Torque Mode InstaSPIN-DKd/KE¡ Velocity Mode Motion Sequence STVELPLAN_run STVELMOVE_run ^‰]vd¡ Velocity Plan ZZ.Z.. llSiimmP ^‰]vd¡ Velocity Z. ref Zref Move STVELCTL_run ^‰]vd¡ Velocity Control FLASH/RAM ROM ROM Za ^‰]vd¡D}š]}v Control Suite STVELID_run ^‰]vd¡ Velocity Identify ROM User_IdRef \a Flux a T Angle Za Speed aW Torque Zref Traj Ramp Za User_IqRef Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out Id Iq PARK a a T EST_run T a IH_in Irated \a IJ_in Za &^d¡ Software Encoder VH_in aW Rotor Flux Observer Motor Parameters ID VJ_in Vbus CTRL_run CTRL_setup Ta SVM Tb Tc FLASH/RAM Ia CLARKE Ib Ic Va CLARKE Vb Vc HAL_run PWM Driver FLASH/RAM HAL_acqAdcInt HAL_readAdcData ADC Driver a Rs Rar a Lsd aLsq \a rated a Irated ROM Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type FLASH/RAM 图 8-3. ROM 中的 InstaSPIN-MOTION 8.2.3.1 在主中断内执行 InstaSPIN-MOTION 各个 InstaSPIN-MOTION 组件可在主中断服务程序中单独执行。 应以固定的抽取率从主 ISR 中调用每个 InstaSPIN-MOTION 组件。 建议调用 InstaSPIN-MOTION 组件的速率至少慢于 PWM 中断 ISR 或者主 ISR 的 10 倍。 包括控制、识别和移动在内的 InstaSPIN-MOTION 核心功能仅可从 ROM 中执行。 包含用户的库和规划可 从 RAM 或者闪存中执行。 8.2.3.2 从 RAM 中执行库 从 RAM 中加载和执行公共库体现了 CPU 方面的性能优势,因为 RAM 不需要等待状态。 不过,对于需要 大量 RAM 的应用,从闪存中执行库可能是更好的选择。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 321 关于 CPU 负载和内存占用量测量的详细信息 www.ti.com.cn 8.2.3.3 从闪存中执行库 尽管某些 RAM 会用于变量和堆栈,但是从闪存中加载和执行公共库可以减少 RAM 的消耗。 此时的一个重 要考量是闪存等待状态。 8.3 关于 CPU 负载和内存占用量测量的详细信息 8.3.1 CPU 利用率测量详情 为了尽可能精确地测量 CPU 周期,需使用三个可用 CPU 定时器中的一个。 定时器计时应尽可能快,这样 才能为每次执行提供最大数量的计数。 所以,将计时器的输入时钟设置为与 CPU 相同的时钟,并且不使用 分频器。 以下代码示例说明了在执行目标函数后如何重新加载并读取计时器计数。 // reload the CPU timer HAL_reloadTimer0(halHandle); // run the controller CTRL_run(ctrlHandle,halHandle,&gAdcData,&gPwmData); // get the CPU timer count timercount = HAL_getCountTimer0(halHandle); 即使重新加载并读取计时器计数的函数非常高效,当使用后续章节中提供的数据时,需要考虑大约 5 个 CPU 周期的溢出。 CPU 利用率表包含一个通过运行成千上万个中断计算得出的最小值列 (Min),将每个中断周期的时间与最小 值相比较,如果小于最小值,则更新最小值。 用同样的方法可计算出周期的最大值,或者最大值列。 通过 计算累计周期数,用累计中断数量计数除以该值即可得出平均值列。 平均值列类似于最小值和最大值列,根 据成千上万个中断计算得出一个稳定的平均值。 CPU 利用率表列出了几种可选配置,主要更改三个参数: • 中断与 控制器 (ISR vs CTRL) 抽取率或节拍率 • 控制器与 估算器 (CTRL vs EST) 抽取率或节拍率 • Rs 在线重校准特性 对于关于抽取率的前两项,图 8-4 显示了 InstaSPIN 的完整软件执行时钟树。 此图表说明了从 CPU 时钟到 估算器的全部分频过程。 这里仅可改变突出显示的节拍率,因为这两部分是影响 CPU 使用率的主要因素。 更改速度控制器、电流控制器或者跟踪生成节拍率后,CPU 使用率不会显著变化,因此在 CPU 利用率测量 期间这些参数始终保持不变。 322 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 关于 CPU 负载和内存占用量测量的详细信息 Clock TBCLK PWMFREQ EPWMxSOCA ISR CTRL SYSCLKOUT TBPRD /ETPS ADC /ISRvsCTRL /CTRLvsEST EST Prescale Hardware Decimation /CTRLvsCURRENT CURRENT /CTRLvsSPEED SPEED /CTRLvsTRAJ TRAJ Software Decimation 图 8-4. InstaSPIN 软件执行时钟树 关于 InstaSPIN 软件执行时钟树的更多信息,请参见9.1 节。 第三个参数为 Rs 在线重校准特性,可针对 CPU 利用率测量启用和禁用。 由于此参数会显著影响 CPU 利用率,所以同样需要考虑。 关于 Rs 在线重校准的更多信息,请参 见Chapter 15。 8.3.2 内存分配测量详情 内存分配取决于几个因素。 以下给出影响内存分配的一些因素以及各自的配置: • 编译器版本:6.1.0 • 优化设置:4 级 • 其它用户代码:无。 使用最小代码连接 InstaSPIN 库。 此处为显示编译器选项的完整命令行: -v28 -ml -mt -O4 -g 要使用最小变量集连接 InstaSPIN 库,代码中必须含有下列全局变量: CTRL_Handle ctrlHandle; HAL_Handle halHandle; USER_Params gUserParams; HAL_PwmData_t gPwmData; ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 323 关于 CPU 负载和内存占用量测量的详细信息 HAL_AdcData_t gAdcData; www.ti.com.cn 关于这些变量及数据类型的完整说明,请参见各个实验。 某些其它变量在控制软件流程时非常有用,比如用 于启用或禁用系统的标志,以及用于显示电机参数的其它全局变量。 由于库功能不需要使用这些变量,因此 它们不会包含在用于测量内存分配的项目中。 内存分配表中包含五个不同部分: • 库接口 (.ebss)。 表格的此部分指示用于连接 InstaSPIN 库的各个变量(在未初始化的内存区域或 .ebss 中),这些库位于用户内存或 ROM 中。 • 库 (.ebss)。 这部分是指用于 InstaSPIN 库本身的变量,并且此区域的内存消耗不会改变。 • 代码 (.text)。 这部分是指在用户内存中执行的实际代码。 此代码区域会根据代码的加载位置(RAM 或 闪存)进行更改。 如果编译器优化设置改变,它也会发生更改。 另外,如果用户执行的代码大部分来自 ROM,则此代码部分会被最小化。 • IQmath (.text)。 为 IQmath 相关代码分配的内存取决于 InstaSPIN 库的位置。 采用 InstaSPIN 完全执行 时,大部分代码位于 ROM 中,IQmath 代码会被最小化,因为 ROM 代码本身包含数学代码,不需要占 用用户内存来执行 IQmath 操作。 采用 InstaSPIN 最小执行时需要在用户内存中执行运算量更大的代 码,因此,用户内存中需要使用某些额外的 IQmath 函数增加分配给 IQmath 代码的内存,从而完成 InstaSPIN 最小执行。 • 使用的最大堆栈 (.ebss)。 此内存区域将在本文档的后续章节中进行说明。 8.3.3 在 ROM 中构建 IQmath ROM 中的库由 IQmath 库版本 1.5c 构建。 ROM 中的所有可执行代码使用 ROM 自身执行的函数,所以 ROM 代码不需要依赖外部添加的 IQmath 功能。 不过,使用 IQmath 操作从用户内存中执行的代码需要添加 IQmath 库。 这个外部添加的 IQmath 库可以是 任何已发布的库版本,不一定是 1.5c。 用户可以结合自己的 IQmath 库版本,并且仍然从使用 IQmath 库版 本 1.5c 的 ROM 中执行代码。 所有代码示例都包括 CCStudio 项目中的完整 IQmath 库。 8.3.4 堆栈利用率测量详情 堆栈利用率可通过以下步骤测得: • 器件复位。 • 连接器放置堆栈的整个内存区域始化为已知 值(0x5555AAAA、0x12345678、0x0BADF00D、0xCAFEBABE、0xFEEDFACE 等)。 • 运行几分钟代码,直到运行完所有分支程序。 • 在初始值出现前,分析堆栈所在的内存区域并查找最后一个更改的值。 • 计算修改后的内存区域。 尽管堆栈利用率方法不能保证所需的绝对堆栈字数,但它针对所需堆栈区域给出了一个良好建议。 不过,建 议堆栈部分大于最低空间要求,从而使整个项目更加稳健。 关于此主题的更多详细信息,请参见 《TMS320C28x DSP 在线堆栈溢出检测》应用报告(文献编号 SPRA820)。 后续章节表格中列出的数字表示使用的最大堆栈值,而不是构建选项所保留的堆栈区域。 如本节所述,建议 保留略大一些的堆栈区域以避免可能出现的堆栈溢出情况,尤其是在添加更多代码,其它中断或者更多变量 时。 324 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 8.3.5 InstaSPIN 主中断 关于 CPU 负载和内存占用量测量的详细信息 InstaSPIN 库以固定的频率从单个中断服务程序中执行。 该主 ISR 默认由 ADC 转换结束中断触发。 此转换 首先由 PWM 模块以固定速率启动。 一旦在 ISR 中(本例中为 mainISR())执行,则需要一系列函数调用 从 ADC 中获取数据并调用 ROM 中的函数。 以下代码为相关示例: interrupt void mainISR(void) { // acknowledge the ADC interrupt HAL_acqAdcInt(halHandle,ADC_IntNumber_1); // convert the ADC data HAL_readAdcData(halHandle,&gAdcData); // run the controller CTRL_run(ctrlHandle,halHandle,&gAdcData,&gPwmData); // run the driver -- set the pwm compare values HAL_writePwmData(halHandle,&gPwmData); // setup the controller CTRL_setup(ctrlHandle); return; } // end of mainISR() function 为了说明 InstaSPIN 的性能,我们会首先考虑顶层方法,包括主 ISR 中的五个函数调用(请参见图 8-5)。 mainISR HAL_acqAdcInt CTRL_run CTRL_setup HAL_readAdcData EST_run HAL_writePwmData End of Conversion Interrupt Period 图 8-5. 主 ISR 中的函数调用 8.3.6 时钟速率 InstaSPIN-FOC 和 InstaSPIN-MOTION 为实时控制系统,因此它们的性能与所用处理器的 CPU 时钟速率直 接相关。 可以通过降低 CPU 时钟速率来测试 InstaSPIN-FOC 和 InstaSPIN-MOTION 的性能是否满足应用 要求。 CPU 负载方面的内容将在8.5 节 中介绍,InstSPIN-FOC 和 InstaSPIN-MOTION 的软件时钟树将 在Chapter 9 中介绍。 8.4 内存占用量 InstaSPIN-FOC 存储在器件 ROM 中,ROM 为只执行 (EXE-only) 内存,不可被软件或者 IDE 读取。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 325 内存占用量 表 8-2. 为 InstaSPIN-FOC 库分配的内存 特性 FAST SpinTAC 可被控制的最多电机数量 可重定位控制器结构 FAST 版本 需要向项目添加公用库 ROM 库起始位置 [地址、十六进制] 库需要的 RAM [大小、十六进制、字] 库起始 RAM [地址、十六进制] 2806xF 是 否 2 否 1.6 否 3F 8000 800 01 3800 2806xM 是 是 2 否 1.6 否 3F 8000 800 01 3800 2805xF 是 否 2 是 1.7 否 3F 8808 800 00 8000 www.ti.com.cn 2805xM 是 是 2 是 1.7 否 3F 8808 800 00 8000 2802xF 是 否 1 是 1.7 是 3F C000 200 00 0600 8.4.1 器件内存映射 8.4.1.1 F2806xF 和 F2806xM 器件 对于 F2806xF 和 F2806xM 器件,InstaSPIN-FOC v1.6 和 SpinTAC v2.1.8 存储在 0x3F8000 至 0x3BFFF 地址范围内,并且 L8-RAM 的最后部分保留用于 InstaSPIN 变量,地址范围在 0x013800 至 0x013FFF 之 间。 请注意,InstaSPIN-FOC 和 InstaSPIN-MOTION 的变量范围是固定的,不可使用。 L8-RAM 的其余部 分可供用户使用 (0x012000 至 0x0137FF);请参见图 8-6。 0x000000 See Datasheet 0x013800 0x014000 FAST and SpinTAC Variables Last Part of L8 RAM See Datasheet 0x3F8000 0x3FC000 FAST and SpinTAC Libraries Execute Only ROM See Datasheet 0x3FFFFF 图 8-6. 为 InstaSPIN-FOC 和 SpinTAC 库分配的 F2806x 和 F2806xM 内存 除了存储在 ROM 中的 InstaSPIN-FOC v1.6 和 SpinTAC v2.1.8 外,ROM 中的几个表格已移动到新地址。 如果要移植引用 ROM 中的 IQmath 表的现有代码,连接器命令文件将需要更新的地址,如表 8-3 所示。 ROM 中的起始地址 FPUTABLES IQTABLES IQTABLES2 IQTABLES3 表 8-3. ROM 表地址 F2806x 0x03fd860 0x03fdf00 0x03fea50 0x03feadc F2806xF 和 F2806xM 0x03fd590 0x03fdc30 0x03fe780 0x03fe8b6 326 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 内存占用量 8.4.1.2 F2805xF 和 F2805xM 器件 对于 2805xF 和 2805xM 器件,InstaSPIN-FOC v1.7 和 SpinTAC v2.1.8 存储在 0x3F8808 至 0x3FC52F 地址范围内,并且 L0-RAM 保留用于 InstaSPIN 变量,地址范围在 0x008000 至 0x0087FF 之间,请参见 图 8-7。 0x000000 See Datasheet 0x008000 0x008800 FAST + SPIN Variables L0 RAM See Datasheet 0x3F8808 0x3FC52F FAST + SPIN Libraries Execute Only ROM See Datasheet 0x3FFFFF 图 8-7. 为 InstaSPIN-FOC 和 SpinTAC 库分配的 F2805x 和 F2805xM 内存 8.4.1.3 F2802xF 器件 对于 2802xF 器件,InstaSPIN-FOC v1.7 存储在 0x3FC000 至 0x3FDFFF 地址范围内,并且 M1-RAM 的 最后部分保留用于 InstaSPIN 变量,地址范围在 0x000600 至 0x0007FF 之间。 请注意,InstaSPIN-FOC 的变量范围是固定的,不可使用。 M1-RAM 的其余部分可供用户使用(0x000400 至 0x0005FF);请参见 图 8-8。 0x000000 See Datasheet 0x000600 0x000800 FAST Variables Last Part of M1 RAM See Datasheet 0x3FC000 0x3FE000 FAST Libraries Execute Only ROM See Datasheet 0x3FFFFF 图 8-8. 为 InstaSPIN-FOC 库分配的 F2802xF 内存 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 327 内存占用量 8.4.2 InstaSPIN 内存占用量 www.ti.com.cn 8.4.2.1 F2806xF 和 F2805xF 器件 表 8-4 汇总了本文档中介绍的四种配置所用的内存。 请注意,当所使用 ROM 中的函数减少时,代码尺寸将 增加。 表 8-4. InstaSPIN-FOC 占用的 F2806xF 和 F2805xF 器件内存总量 ROM 代码 完全执行 完全执行 最小执行 最小执行 代码配置 用户代码 RAM 闪存 RAM 闪存 RAM 0x1870 0x001E 0x1F31 0x001E 内存大小(16 位字) 闪存 0x0000 0x186C 0x0000 0x1F2D 总计 0x1870 0x188A 0x1F31 0x1F4B 使用的最大堆栈 (16 位字) 0x0120 0x0120 0x0120 0x0120 8.4.2.2 F2802xF 器件 表 8-5 汇总了仅可用于 F2802xF 器件配置的内存。 表 8-5. InstaSPIN-FOC 占用的 F2802xF 器件内存总量 ROM 代码 最小执行 代码配置 用户代码 闪存 RAM 0x06B2 内存大小(16 位字) 闪存 0x2DD8 总计 0x348A 使用的最大堆栈 (16 位字) 0x0120 8.4.2.3 F2806xM and F2805xM 器件 要计算 InstaSPIN-MOTION 的内存用量,将 InstaSPIN-FOC 内存用量与表 8-6 中的 SpinTAC 内存用量相 加。 SpinTAC 速度规划和 SpinTAC 位置规划的不同内存要求表示项目中所使用的配置函数数量。 RAM 大 小可从连接器“.ebss”区域获取,闪存大小则从“.text”获取。 表 8-6. 针对 SpinTAC 组成部分的代码尺寸和 RAM 用量 组成部分 速度控制 速度移动 速度规划(最小值) 速度规划(最大值) 速度识别 位置转换器 位置控制 位置移动 位置规划(最小值) 位置规划(最大值) 代码 (.text)(16 位字) 0X2E6 0x488 0x666 0x14BA 0x392 0x21C 0x416 0x13A4 0x7AE 0x16F4 RAM (.ebss)(16 位字) 0x4C 0x5C 0x4E 0x4E 0x3C 0x4C 0x62 0xCC 0x60 0x60 节 14.1.1.5 在 SpinTAC 组成部分单个运行时,分解了 SpinTAC 组成部分的最大堆栈利用率。 包括了 InstaSPIN-FOC 的堆栈使用量。 328 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 表 8-7. SpinTAC 组成部分 + InstaSPIN-FOC 的堆栈利用 率 配置 (InstaSPIN-FOC 所有运行情况) 速度控制 速度移动 速度规划 + 移动 + 控制 速度识别 位置转换器 位置控制 位置移动 位置规划 + 移动 + 控制 使用的最大堆栈 (16 位字) 0x0120 0x0120 0x0120 0x0120 0x0120 0x0120 0x0120 0x0120 内存占用量 8.4.3 内存等待状态 关于其它等待状态选项,请参见所用器件的器件专用数据表。 8.4.3.1 F2806xF/M 器件 当 F2806xF/M 器件以 90MHz 速率在闪存中执行代码时,为 CPU 执行时间测量设置的等待状态如表 8-8 所 示。 表 8-8. CPU 执行时间等待状态(F2806xF 和 F2806xM 器件) 页等待状态 3 随机等待状态 3 OTP 等待状态 5 8.4.3.2 F2805xF/M 器件 当 F2805xF/M 器件以 60MHz 速率在闪存中执行代码时,为 CPU 执行时间测量设置的等待状态如表 8-9 所 示。 表 8-9. CPU 执行时间等待状态(F2805xF 和 F2805xM 器件) 页等待状态 2 随机等待状态 2 OTP 等待状态 3 8.4.3.3 F2802xF 器件 当 F2802xF 器件以 60MHz 速率在闪存中执行代码时,为 CPU 执行时间测量设置的等待状态如表 8-10 所 示。 表 8-10. CPU 执行时间等待状态(F2802xF 器件) 页等待状态 2 随机等待状态 2 OTP 等待状态 3 8.4.4 用于仅 RAM 执行的所需闪存配置 InstaSPIN-FOC 和 InstaSPIN-MOTION 从 ROM 中执行,但也要访问 F2806xF 和 F2806xM 上的 OTP,OTP 是一项基于闪存的技术,要求配置闪存。 因此,运行本指南中的实验时,您会注意到文件 Flash.c 包含在项目中。 实验中的函数 FLASH_init() 从 HAL_init() 中调用,HAL_init() 从 main() 中调用。 MotorWare 为器件上包括闪存在内的所有外设提供驱动器。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 329 内存占用量 8.4.5 只执行内存的调试 (IDE) www.ti.com.cn 尽管 nstaSPIN-FOC 和 InstaSPIN-MOTION 存储在只执行 ROM 中,除了无法看到内存内容外,调试过程 非常类似。 如果使用内存浏览器从 CCStudio 中查看内存,只执行内存的内容全为 0。 如果在反汇编窗口打开时通过只执行内存单步执行,它将显示读取所有 0 内容的操作码 (ITRAP0)。 以下是 相关示例,单步执行 Lab02A 中的 函数 CTRL_initCtrl()。 8.5 CPU 负载 8.5.1 F2806xF 器件 8.5.1.1 CPU 周期数 下列表格汇总了每个函数的所有性能数据,其中的用户代码均以 InstaSPIN 库的最小执行方式从闪存中加载 并执行。 请注意,采用不同执行方式时周期数不会发生显著变化,因为这些配置中的 FAST 估算器块均保 留在 ROM 中。 此估算器模块占用所有 InstaSPIN-FOC 块的大部分周期。 关于管理 ISR 中的执行时间的详 细信息,请参见9.1 节。 8.5.1.1.1 RAM 中的用户代码 8.5.1.1.1.1 完全执行 330 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 区域 库接口 (.ebss) 库 (.ebss) 代码 (.text) IQmath (.text) 表 8-11. 在 RAM 中进行完全执行的内存用量 内存用量(16 位字) RAM 闪存 0x018C × 0x0800 × 0x1870 × 0x0014 × CPU 负载 表 8-12 汇总了每个函数的所有性能数据,其中的用户代码均以 InstaSPIN 库的完全执行方式从 RAM 中加 载并执行。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 331 CPU 负载 表 8-12. 在 RAM 中进行完全执行 函数名称 HAL_acqAdcInt HAL_readAdcData Ctrl_run Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 HAL_writePwmData CTRL_setup 最小值 23 106 2345 1154 1154 58 58 58 58 58 58 2807 1154 1154 58 58 58 58 58 58 62 37 CPU 周期数 平均值 23 106 2355 1760 1562 1207 909 810 824 626 560 2821 1993 1717 1439 1025 887 979 702 610 62 51 最大值 23 106 2425 2425 2425 2425 2425 2425 2425 2425 2425 2894 2894 2894 2894 2894 2894 2894 2894 2894 62 178 www.ti.com.cn ROM × × 执行位置 RAM ✓ ✓ 闪存 × × ✓ × × × ✓ × ✓ × × 8.5.1.1.1.2 最小执行 区域 库接口 (.ebss) 库 (.ebss) 代码 (.text) IQmath (.text) 表 8-13. 在 RAM 中进行最小执行的内存用量 内存用量(16 位字) RAM 闪存 0x018C × 0x0800 × 0x1F31 × 0x0064 × 表 8-14 汇总了每个函数的所有性能数据,其中的用户代码均以 InstaSPIN 库的最小执行方式从 RAM 中加 载并执行。 请注意,CTRL_run 从 ROM 和 RAM 中均可执行。 这是因为 CTRL_run 的某些函数调用需要 调用估算器。 例如,EST_run 函数调用从 CTRL_run 中执行,因此将从 ROM 中执行。 同 样,CTRL_setup 的某些代码会调用某些 InstaSPIN 状态机代码,由于其中包含与 FAST 估算器的一些交 互,因此需要从 ROM 中执行。 与 RAM 中的完全执行相比二者间的代码差异在于,最小执行的代码中添加 了额外的偏移对象并内联了全部 FOC 代码。 函数名称 HAL_acqAdcInt 表 8-14. 在 RAM 中进行最小执行 最小值 23 CPU 周期数 平均值 23 最大值 23 ROM × 执行位置 RAM ✓ 闪存 × 332 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 表 8-14. 在 RAM 中进行最小执行 (continued) 函数名称 HAL_readAdcData Ctrl_run Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 HAL_writePwmData CTRL_setup 最小值 106 2361 1171 1171 59 59 59 59 59 59 2825 1171 1171 59 59 59 59 59 59 62 36 CPU 周期数 平均值 106 2372 1777 1579 1215 918 819 830 631 565 2840 2012 1736 1450 1035 897 986 710 618 62 50 最大值 106 2454 2454 2454 2454 2454 2454 2454 2454 2454 2925 2925 2925 2925 2925 2925 2925 2925 2925 62 178 CPU 负载 ROM × 执行位置 RAM ✓ 闪存 × ✓ × × × ✓ × ✓ ✓ × 8.5.1.1.2 闪存中的用户代码 8.5.1.1.2.1 完全执行 区域 库接口 (.ebss) 库 (.ebss) 代码 (.text) IQmath (.text) 表 8-15. 在闪存中进行完全执行的内存用量 内存用量(16 位字) RAM 闪存 0x018C × 0x0800 × 0x001E 0x186C × 0x0014 表 8-16 显示了采用 InstaSPIN 完全执行且用户代码加载到闪存中时的资源利用率。 代码区域现添加了几个 用于初始化闪存的函数,它们需要从 RAM 中运行(从 RAM 中加载)。 因此,新代码会从 RAM 中执行, 而不是全部从闪存中执行。 代码从闪存中执行时,其中添加了一个 memCopy 函数,这也会增加代码区 域。 函数名称 HAL_acqAdcInt HAL_readAdcData 表 8-16. 在闪存中进行完全执行 最小值 25 108 CPU 周期数 平均值 25 108 最大值 25 108 ROM × × 执行位置 RAM × × 闪存 ✓ ✓ ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 333 CPU 负载 表 8-16. 在闪存中进行完全执行 (continued) 函数名称 Ctrl_run Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 HAL_writePwmData CTRL_setup 最小值 2345 1154 1154 58 58 58 58 58 58 2807 1154 1154 58 58 58 58 58 58 64 37 CPU 周期数 平均值 2355 1760 1562 1207 909 810 824 626 560 2821 1993 1717 1439 1025 887 979 702 610 64 51 最大值 2425 2425 2425 2425 2425 2425 2425 2425 2425 2894 2894 2894 2894 2894 2894 2894 2894 2894 64 178 www.ti.com.cn 执行位置 ROM RAM 闪存 ✓ × × × × ✓ ✓ × × 8.5.1.1.2.2 最小执行 区域 库接口 (.ebss) 库 (.ebss) 代码 (.text) IQmath (.text) 表 8-17. 在闪存中进行最小执行的内存用量 RAM 0x018C 0x0800 0x001E × 内存用量(16 位字) 闪存 × × 0x1F2D 0x0064 表 8-18 显示了采用 InstaSPIN 最小执行且用户代码加载到闪存中时的资源利用率。 函数名称 HAL_acqAdcInt HAL_readAdcData 表 8-18. 在闪存中进行最小执行 最小值 25 108 CPU 周期数 平均值 25 108 最大值 25 108 ROM × × 执行位置 RAM × × 闪存 ✓ ✓ 334 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 表 8-18. 在闪存中进行最小执行 (continued) 函数名称 Ctrl_run Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 HAL_writePwmData CTRL_setup 最小值 2447 1257 1257 71 71 71 71 71 71 2911 1258 1258 71 71 71 71 71 71 64 46 CPU 周期数 平均值 2459 1864 1665 1265 967 868 867 668 602 2927 2098 1822 1499 1084 946 1022 746 654 64 60 最大值 2544 2544 2544 2544 2544 2544 2544 2544 2544 3015 3015 3015 3015 3015 3015 3015 3015 3015 64 188 CPU 负载 执行位置 ROM RAM 闪存 ✓ × ✓ × × ✓ ✓ × ✓ 8.5.1.2 PWM = 10kHz 时的 CPU 负载 表 8-19. 在 ROM 和闪存中进行完全执行 F2806xF CPU = 90MHz 可用 MIPs = 90MIPs PWM = 10kHz CPU 利用率 [%] Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 28.86 CTRL vs EST = 2 22.24 CTRL vs EST = 3 20.04 ISR vs CTRL = 2,CTRL vs EST = 1 16.1 CTRL vs EST = 2 12.79 CTRL vs EST = 3 11.69 ISR vs CTRL = 3,CTRL vs EST = 1 11.84 CTRL vs EST = 2 9.64 CTRL vs EST = 3 8.91 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 34.03 CTRL vs EST = 2 24.83 CTRL vs EST = 3 21.77 ISR vs CTRL = 2,CTRL vs EST = 1 18.68 CTRL vs EST = 2 14.08 CTRL vs EST = 3 12.54 ISR vs CTRL = 3,CTRL vs EST = 1 13.57 CTRL vs EST = 2 10.49 CTRL vs EST = 3 9.47 使用的 MIPS [MIPS] 25.97 20.02 18.04 14.49 11.51 10.52 10.66 8.68 8.02 30.63 22.35 19.59 16.81 12.67 11.29 12.21 9.44 8.52 可用的 MIPS [MIPS] 64.03 69.98 71.96 75.51 78.49 79.48 79.34 81.32 81.98 59.37 67.65 70.41 73.19 77.33 78.71 77.79 80.56 81.48 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 335 CPU 负载 表 8-20. 在 ROM 和闪存中进行最小执行 F2806xF CPU = 90MHz 可用 MIPs = 90MIPs PWM = 10kHz CPU 利用率 [%] Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 30.01 CTRL vs EST = 2 23.4 CTRL vs EST = 3 21.19 ISR vs CTRL = 2,CTRL vs EST = 1 16.74 CTRL vs EST = 2 13.43 CTRL vs EST = 3 12.33 ISR vs CTRL = 3,CTRL vs EST = 1 12.32 CTRL vs EST = 2 10.11 CTRL vs EST = 3 9.38 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 35.21 CTRL vs EST = 2 26 CTRL vs EST = 3 22.93 ISR vs CTRL = 2,CTRL vs EST = 1 19.34 CTRL vs EST = 2 14.73 CTRL vs EST = 3 13.2 ISR vs CTRL = 3,CTRL vs EST = 1 14.04 CTRL vs EST = 2 10.98 CTRL vs EST = 3 9.96 使用的 MIPS [MIPS] 27.01 21.06 19.07 15.07 12.09 11.1 11.09 9.1 8.44 31.69 23.4 20.64 17.41 13.26 11.88 12.64 9.88 8.96 www.ti.com.cn 可用的 MIPS [MIPS] 62.99 68.94 70.93 74.93 77.91 78.9 78.91 80.9 81.56 58.31 66.6 69.36 72.59 76.74 78.12 77.36 80.12 81.04 8.5.1.3 PWM = 20kHz 时的 CPU 负载 表 8-21. 在 ROM 和闪存中进行完全执行 F2806xF CPU = 90MHz 可用 MIPs = 90MIPs PWM = 20kHz CPU 利用率 [%] Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 57.71 CTRL vs EST = 2 44.49 CTRL vs EST = 3 40.09 ISR vs CTRL = 2,CTRL vs EST = 1 32.2 CTRL vs EST = 2 25.58 CTRL vs EST = 3 23.38 ISR vs CTRL = 3,CTRL vs EST = 1 23.69 CTRL vs EST = 2 19.29 CTRL vs EST = 3 17.82 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 68.07 CTRL vs EST = 2 49.67 CTRL vs EST = 3 43.53 ISR vs CTRL = 2,CTRL vs EST = 1 37.36 CTRL vs EST = 2 28.16 CTRL vs EST = 3 25.09 ISR vs CTRL = 3,CTRL vs EST = 1 27.13 CTRL vs EST = 2 20.98 CTRL vs EST = 3 18.93 使用的 MIPS [MIPS] 51.94 40.04 36.08 28.98 23.02 21.04 21.32 17.36 16.04 61.26 44.7 39.18 33.62 25.34 22.58 24.42 18.88 17.04 可用的 MIPS [MIPS] 38.06 49.96 53.92 61.02 66.98 68.96 68.68 72.64 73.96 28.74 45.3 50.82 56.38 64.66 67.42 65.58 71.12 72.96 336 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 表 8-22. 在 ROM 和闪存中进行最小执行 F2806xF CPU = 90MHz 可用 MIPs = 90MIPs PWM = 20kHz CPU 利用率 [%] Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 60.02 CTRL vs EST = 2 46.8 CTRL vs EST = 3 42.38 ISR vs CTRL = 2,CTRL vs EST = 1 33.49 CTRL vs EST = 2 26.87 CTRL vs EST = 3 24.67 ISR vs CTRL = 3,CTRL vs EST = 1 24.64 CTRL vs EST = 2 20.22 CTRL vs EST = 3 18.76 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 70.42 CTRL vs EST = 2 52 CTRL vs EST = 3 45.87 ISR vs CTRL = 2,CTRL vs EST = 1 38.69 CTRL vs EST = 2 29.47 CTRL vs EST = 3 26.4 ISR vs CTRL = 3,CTRL vs EST = 1 28.09 CTRL vs EST = 2 21.96 CTRL vs EST = 3 19.91 使用的 MIPS [MIPS] 54.02 42.12 38.14 30.14 24.18 22.2 22.18 18.2 16.88 63.38 46.8 41.28 34.82 26.52 23.76 25.28 19.76 17.92 CPU 负载 可用的 MIPS [MIPS] 35.98 47.88 51.86 59.86 65.82 67.8 67.82 71.8 73.12 26.62 43.2 48.72 55.18 63.48 66.24 64.72 70.24 72.08 8.5.1.4 CPU 负载示例 从上述章节介绍的表格可以看出,通过累加周期数并计算使用百分比可以得出 CPU 使用率。 8.5.1.4.1 示例 1 考虑以下情况: • CPU 时钟 = 90MHz • 可用 MIPS = 90MIPS • PWM 频率 = 10kHz • InstaSPIN 执行: – 完全执行,ROM 中的库和 RAM 中的用户代码 (8.2.1 节) – Rs 在线禁用 – ISR vs CTRL = 1 – CTRL vs EST = 1 计算中断所用 CPU 的百分比,其中: 最大周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup InstaSPIN 所用 CPU 的最大百分比 = 100% * ((最大周期数) / 90MHz) * PWM 频率 = 100% * ((23 + 106 + 2425 + 62 + 178) / 90MHz) * 10kHz = 31.04% InstaSPIN 所用 CPU 的平均百分比 = 100% * ((平均周期数) / 90MHz) * PWM 频率 = ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 337 CPU 负载 100% * ((23 + 106 + 2355 + 62 + 51) / 90MHz) * 10kHz = 28.86% 另一个实用的计算是应用程序所用的 MIPS 数。 该值的过程计算如下: InstaSPIN 所用的平均 MIPS = (InstaSPIN 所用 CPU 的平均百分比/100%) * 可用 MIPS = (28.86% / 100%) * 90MIPS = 25.97MIPS 随后,可以计算出其它任务的平均可用 MIPS: 用户平均可用 MIPS = 可用的总 MIPS - InstaSPIN 所用的平均 MIPS = 90MIPS – 25.97MIPS = 64.03MIPS 可用于其它任务 www.ti.com.cn 8.5.1.4.2 示例 2 通常需要启用 Rs 在线同时增大 PWM 频率。 要释放 CPU 带宽,ISR vs CTRL 设置为 2。 考虑以下情况: • CPU 时钟 = 90MHz • 可用 MIPS = 90MIPS • PWM 频率 = 20kHz • InstaSPIN 执行: – 最小执行,ROM 中的库和 RAM 中的用户代码 (8.2.2 节) – Rs 在线启用 – ISR vs CTRL = 2 – CTRL vs EST = 1 首先,需要计算 InstaSPIN 在给定条件下所用 CPU 的平均百分比: InstaSPIN 所用 CPU 的平均百分比 = 100% * ((平均周期数) / 90MHz) * PWM 频率 = 100% * ((23 + 106 + 1450 + 62 + 50) / 90MHz) * 20kHz = 37.58% 其次,计算 InstaSPIN 在给定条件下使用的平均 MIPS 数: InstaSPIN 所用的平均 MIPS = (InstaSPIN 所用 CPU 的平均百分比/100%) * 可用 MIPS = (37.58% / 100 %) * 90MIPS = 33.82MIPS 随后,可以计算出其它任务的平均可用 MIPS: 用户平均可用 MIPS = 可用的总 MIPS - InstaSPIN 所用的平均 MIPS = 90MIPS – 33.82MIPS = 56.18MIPS 可用于其它任务 338 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 8.5.2 F2806xM 器件 CPU 负载 8.5.2.1 CPU 周期数 InstaSPIN-MOTION 将 InstaSPIN-FOC 与 LineStream Technologies 开发的 SpinTAC 运动控制套件的功能 结合在一起。 通过 InstaSPIN-FOC 周期数加上后续章节提供的 SpinTAC 周期数并计算使用百分比可以得 出 CPU 使用率。 后续章节将提供具体示例。 8.5.2.1.1 RAM 执行 - SpinTAC 库和用户代码 表 8-23 汇总了每个函数的所有性能数据,其中的 SpinTAC 库从 RAM 中加载并执行。 请注意,各个函数均 可调用 ROM 存储器来运行核心 SpinTAC 函数。 各个组件的典型情况用粗体突出显示。 表 8-23. F2806xM 器件在 RAM 中执行库时 SpinTAC 的 CPU 周期利用率 函数名称 STVELCTL_run(速度控制) RES = 0, ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 改变惯性参数 RES = 1,ENB = 1 STVELMOVE_run(速度移动) RES = 0,ENB = 0 stcurve RES = 0,ENB = 1 scurve RES = 0,ENB = 1 trap RES = 0,ENB = 1 RES = 1,ENB = 1 STVELPLAN_run(速度规划) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后首次调用 STAY FSM 状态 条件 FSM 状态 必须对每个状态完成计算 转换 FSM 状态 必须对每个状态完成计算 STVELPLAN_runTick(速度规划) STVELID_run(速度识别) RES = 0,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 STPOSCONV_run(位置转换器) RES = 0,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 最小值 CPU 周期数 平均值 最大值 158 573 1010 786 786 289 158 573 1010 786 786 289 158 573 1010 786 786 289 202 202 202 675 704 1346 638 669 1312 509 576 1039 421 421 421 159 159 159 169 169 169 285 285 285 194 194 194 374(固定)+ 274 * 转换数 + 334 * EXIT(退出)操作数 229(固定)+ 378 * ENTER(进入)操作数 58 78 78 142 332 1063 249 142 341 1063 249 142 658 1063 249 110 322 1060 118 110 341 1060 118 110 343 1060 118 执行位置 ROM RAM 闪存 ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 339 CPU 负载 www.ti.com.cn 表 8-23. F2806xM 器件在 RAM 中执行库时 SpinTAC 的 CPU 周期利用率 (continued) 函数名称 STPOSCTL_run(位置控制) RES = 0,ENB =0 RES = 0,ENB = 1 ENB = 1 后的首次调用 改变带宽参数 改变惯性参数 RES = 1,ENB = 1 STPOSMOVE_run(位置移动) RES = 0,ENB = 0 stcurve RES = 0,ENB = 1 ENB = 1 后的首次调用 scurve RES = 0,ENB = 1 ENB = 1 后的首次调用 trap RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 STPOSPLAN_run(位置规划) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后首次调用 STAY FSM 状态 条件 FSM 状态 必须对每个状态完成计算 转换 FSM 状态 必须对每个状态完成计算 STPOSPLAN_runTick(位置规划) 最小值 CPU 周期数 平均值 最大值 166 1120 1903 1611 1611 385 166 1125 1903 1611 1611 385 166 1140 1903 1611 1611 385 406 616 1270 616 1219 616 1319 877 406 1383 1377 1333 1337 1253 1608 877 406 2733 2368 2561 2324 2501 2049 877 166 166 166 201 201 201 325 325 325 209 209 209 436(固定)+ 276 * 转换数 + 334 * EXIT(退出)操作数 245(固定)+ 378 * ENTER(进入)操作数 58 78 78 执行位置 ROM RAM 闪存 ✓ ✓ × ✓ ✓ × ✓ ✓ × 8.5.2.1.2 闪存执行 - SpinTAC 库和用户代码 表 8-24 汇总了每个函数的所有性能数据,其中的 SpinTAC 库从闪存中加载并执行。 InstaSPIN-FOC 处于 完全执行模式。 表 8-24. F2806xM 器件在闪存中执行库时 SpinTAC 的 CPU 周期利用率 函数名称 STVELCTL_run(速度控制) RES = ,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 改变带宽 改变惯性参数 RES = 1,ENB = 1 最小值 216 672 1183 925 925 396 CPU 周期数 平均值 216 672 1183 925 925 396 最大值 216 672 1183 925 925 396 执行位置 ROM RAM 闪存 ✓ × ✓ 340 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn CPU 负载 表 8-24. F2806xM 器件在闪存中执行库时 SpinTAC 的 CPU 周期利用率 (continued) 函数名称 STVELMOVE_run(速度移动) RES = 0,ENB = 0 stcurve RES = 0,ENB = 1 scurve RES = 0,ENB = 1 trap RES = 0,ENB = 1 RES = 1,ENB = 1 STVELPLAN_run(速度规划) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 STAY FSM 状态 转换 FSM 状态 必须对每个状态完成计算 条件 FSM 状态 必须对每个状态完成计算 STVELPLAN_runTick(速度规划) STVELID_run(速度识别) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 STPOSCONV_run(位置转换器) RES = 0,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 STPOSCTL_run(位置控制) RES = 0,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 改变带宽参数 改变惯性参数 RES = 1,ENB = 1 STPOSMOVE_run(位置移动) RES = 0,ENB = 0 stcurve RES = 0,ENB = 1 ENB = 1 后的首次调用 scurve RES = 0,ENB = 1 ENB = 1 后的首次调用 trap RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 最小值 CPU 周期数 平均值 最大值 258 258 258 780 816 1625 743 781 1589 616 700 1309 554 554 554 219 219 219 266 266 266 393 393 393 280 280 280 488(固定)+ 368 * 转换数 + 440 * EXIT(退出)操作数 337(固定)+ 503 * ENTER(进入)操作数 91 119 119 198 311 1366 338 198 332 1366 338 198 822 1366 338 145 443 1372 170 145 448 1372 170 145 450 1372 170 246 1311 2236 1909 1909 509 246 1316 2236 1909 1909 509 246 1326 2236 1909 1909 509 520 790 1467 790 1415 790 1540 1100 520 1611 1588 1564 1551 1501 1903 1100 520 3630 2778 3205 2734 3130 2438 1100 执行位置 ROM RAM 闪存 ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 341 CPU 负载 www.ti.com.cn 表 8-24. F2806xM 器件在闪存中执行库时 SpinTAC 的 CPU 周期利用率 (continued) 函数名称 STPOSPLAN_run(位置规划) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 STAY FSM 状态 条件 FSM 状态 必须对每个状态完成计算 转换 FSM 状态 必须对每个状态完成计算 STPOSPLAN_runTick(位置规划) 最小值 CPU 周期数 平均值 最大值 229 229 229 297 297 297 450 450 450 297 297 297 548(固定) + 363 * 转换数 + 450 * EXIT(退出)操作数 345(固定)+ 508 * ENTER(进入)操作数 86 115 115 执行位置 ROM RAM 闪存 ✓ × ✓ ✓ × ✓ 8.5.2.2 CPU 负载示例 8.5.2.2.1 示例 1 考虑以下情况: • CPU 时钟 = 90MHz • 可用 MIPS = 90MIPS • PWM 频率 = 10kHz • InstaSPIN 执行: – InstaSPIN-FOC:完全执行,ROM 中的库和 RAM 中的用户代码 (8.2.1 节) – SpinTAC 库:速度控制。 ROM 中的库和 RAM 中的用户库代码。 – Rs 在线禁用 – ISR vs CTRL = 1 – CTRL vs SPEED = 10 计算中断所用 CPU 的百分比,其中: 最小周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup 最大周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup + STVELCTL_run 最小周期数 = 23 + 106 + 2355 + 62 + 51 = 2597 个周期 最大周期数 = 23 + 106 + 2355 + 62 + 51 + 573 = 3170 个周期 在每一毫秒内,最小周期数出现 9 次,最大周期数出现一次。 1 毫秒内的周期数 = 2597 * 9 + 3170 * 1 = 26543 个周期 当前 CPU 使用率为 100% * (26543 / 90MHz) * (10kHz / 10) = 29.49% 另一个实用的计算是 InstaSPIN 所用的 MIPS 数。 该值的过程计算如下: InstaSPIN 所用的平均 MIPS = (InstaSPIN 所用 CPU 的平均百分比/100%) * 可用 MIPS = (29.49 % / 100 %) * 90MIPS = 26.54MIPS 随后,可以计算出其它任务的平均可用 MIPS: 用户平均可用 MIPS = 342 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 可用的总 MIPS - InstaSPIN(FOC + MOTION) 所用的平均 MIPS = 90MIPS – 26.54MIPS = 63.46MIPS 可用于其它任务 CPU 负载 8.5.2.2.2 示例 2 例如,考虑以下情况: • CPU 时钟 = 90MHz • 可用 MIPS = 90MIPS • PWM 频率 = 10kHz • InstaSPIN 执行: – InstaSPIN-FOC:完全执行,ROM 中的库和 RAM 中的用户代码 (8.2.1 节) – SpinTAC 库:速度控制 + 速度移动 (stcurve)。 ROM 中的库和 RAM 中的用户库代码。 – Rs 在线禁用 – ISR vs CTRL = 1 – CTRL vs SPEED = 10 计算中断所用 CPU 的百分比,其中: 最小周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup 最大周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup + STVELCTL_run 最小周期数 = 23 + 106 + 2355 + 62 + 51 = 2597 个周期 最大周期数 = 23 + 106 + 2355 + 62 + 51 + 573 + 704 = 3874 个周期 在每一毫秒内,最小周期数出现 9 次,最大周期数出现一次。 1 毫秒内的周期数 = 2597 * 9 + 3874 * 1 = 27247 个周期 当前 CPU 使用率为 100% * (27247 / 90MHz) * (10kHz / 10) = 30.27% 另一个实用的计算是应用程序所用的 MIPS 数。 该值的过程计算如下: InstaSPIN 所用的平均 MIPS = (InstaSPIN 所用 CPU 的平均百分比/100%) * 可用 MIPS = (30.27 % / 100 %) * 90MIPS = 27.24MIPS 随后,可以计算出其它任务的平均可用 MIPS: 用户平均可用 MIPS = 可用的总 MIPS - InstaSPIN(FOC + MOTION) 所用的平均 MIPS = 90MIPS – 27.24MIPS = 62.76MIPS 可用于其它任务 8.5.2.2.3 示例 3 例如,考虑以下情况: • CPU 时钟 = 90MHz • 可用 MIPS = 90MIPS • PWM 频率 = 10kHz • InstaSPIN 执行: – InstaSPIN-FOC:完全执行,ROM 中的库和 RAM 中的用户代码 (8.2.1 节) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 343 CPU 负载 www.ti.com.cn – SpinTAC 库:速度控制 + 速度移动 (stcurve) + 速度规划。 ROM 中的库和 RAM 中的用户库代码。 – Rs 在线禁用 – ISR vs CTRL = 1 – CTRL vs SPEED = 10 SpinTAC 速度规划可用于生成一个含 4 种状态的机械运动序列(请参见图 8-9)。 请注意,此示例中的规 划函数 STVELPLAN_run 和 STVELPLAN_runTick 均从 ISR 运行。 在最后的执行中,STVELPLAN_run 可 以从较慢的 ISR 或者后台循环中运行。 State Transition Condition Action State 0 Action 0 Action 1 Condition 0 || Condition 1 Condition 2 || Condition 3 Condition 4 || Condition 5 Action 5 Action 6 Action 7 State 3 Action 2 State 1 Action 3 Action 4 State 2 图 8-9. SpinTAC 速度规划示例 STVELPLAN_run 的最大周期数可能受条件 FSM 状态或转换 FSM 状态影响,但不可能同时受两者影响。 1. 条件 FSM 状态中的最大周期数取决于: • 从给定状态开始的转换数。 • 针对转换检查的条件数量(最差情况为两个条件) • 这些条件会对比一个变量和一个值或者对比一个变量和另一个变量(最差情况) • 为此状态配置的 EXIT(退出)操作数。 如果代码在 RAM 中运行,则最大周期数 = 374(条件 FSM 状态的固定周期数)+(转换数 * 274)+(EXIT(退出)操作数 * 334)。 图 8-9 中的示例规划配置了从状态 0 开始的三次转换。所有转换均会检查对比变量的各个条件(最差情 况),同时为此状态配置了 2 个 EXIT(退出)操作。 因此,当执行最后一次转换时,最大周期数 = 374 + (3 * 274) + (2 * 334) = 1864。 2. 转换 FSM 状态中的最大周期数取决于为此状态配置的 ENTER(进入)操作数。 如果代码在 RAM 中执行,则最大周期数 = 229(转换 FSM 状态的固定周期数) + ENTER(进入)操 作数 * 378。 344 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn CPU 负载 以上示例显示状态 3 具有 3 个 ENTER(进入)操作。 因此,转换 FSM 状态的最大周期数 = 229 + (3 * 378) = 1368。 对比这两种可以产生 STVELPLAN_run 最大周期数的情况。 在此示例中,由条件 FSM 状态所决定的最 大周期数为 1330。 当计算中断所用 CPU 的百分比时,使用此值作为最差情况。 计算中断所用 CPU 的百分比,其中: 最小周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup 最大周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup + STVELCTL_run + STVELPLAN_runTick + STVELPLAN_run 最小周期数 = 23 + 106 + 2355 + 62 + 51 = 2597 个周期 最大周期数 = 23 + 106 + 2355 + 62 + 51 + 573 + 704 + 78 + 1864 = 5738 个周期 在每一毫秒内,最小周期数出现 9 次,最大周期数出现一次。 1 毫秒内的周期数 = 2597 * 9 + 5738 * 1 = 29111 个周期 当前 CPU 使用率为 100% * (29111 / 90MHz) * (10kHz / 10) = 32.35% 在以上计算中,SpinTAC 速度规划的主要组件在 ISR 运行。 当从后台调用 SpinTAC 速度规划时,中断 所用 CPU 的百分比计算方法如下: 最小周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup + STVELCTL_run + STVELMOVE_run + STVELPLAN_runTick 最大周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup + STVELCTL_run + STVELPLAN_runTick + STVELPLAN_run 最小周期数 = 23 + 106 + 2355 + 62 + 51 = 2597 个周期 最大周期数 = 23 + 106 + 2355 + 62 + 51 + 573 + 704 + 78 = 3952 个周期 在每一毫秒内,最小周期数出现 9 次,最大周期数出现一次。 1 毫秒内的周期数 = 2597 * 9 + 5738 * 1 = 27325 个周期 当前 CPU 使用率为 100% * (27325 / 90MHz) * (10kHz / 10) = 30.36% 8.5.2.2.4 示例 4(SpinTAC 位置) 例如,考虑以下情况: • CPU 时钟 = 90MHz • 可用 MIPS = 90MIPS • PWM 频率 = 10kHz • InstaSPIN 执行: – InstaSPIN-FOC:完全执行,ROM 中的库和 RAM 中的用户代码 (8.2.1 节) – SpinTAC 库:位置转换器 + 位置控制 + 位置移动 (stcurve)。 ROM 中的库和 RAM 中的用户库代 码。 – Rs 在线禁用 – ISR vs CTRL = 1 – CTRL vs SPEED = 10 计算中断所用 CPU 的百分比,其中: 最小周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup 最大周期数 = HAL_acqAdcInt + HAL_readAdcData + Ctrl_run + HAL_writePwmData + Ctrl_setup + STPOSCONV_run + STPOSCTL_run + STPOSMOVE_run 最小周期数 = 23 + 106 + 2355 + 62 + 51 = 2597 个周期 最大周期数 = 23 + 106 + 2355 + 62 + 51 + 341 + 1125 + 1383 = 5446 个周期 在每一毫秒内,最小周期数出现 9 次,最大周期数出现一次。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 345 CPU 负载 1 毫秒内的周期数 = 2597 * 9 + 5446 * 1 = 28819 个周期 当前 CPU 使用率为 100% * (28819 / 90MHz) * (10kHz / 10) = 32.02% 另一个实用的计算是应用程序所用的 MIPS 数。 该值的过程计算如下: InstaSPIN 所用的平均 MIPS = (InstaSPIN 所用 CPU 的平均百分比/100%) * 可用 MIPS = (32.02% / 100%) * 90MIPS = 28.82MIPS 随后,可以计算出其它任务的平均可用 MIPS: 用户平均可用 MIPS = 可用的总 MIPS - InstaSPIN(FOC + MOTION) 所用的平均 MIPS = 90MIPS – 28.82MIPS = 61.18MIPS 可用于其它任务 www.ti.com.cn 8.5.3 F805xF 器件 8.5.3.1 CPU 周期数 F2805xF 周期数与 F2806xF 周期数基本相同。 8.5.3.2 PWM = 10kHz 时的 CPU 负载 表 8-25. 在 ROM 和闪存中进行完全执行 F2805xF CPU = 60MHz 可用 MIPs = 60MIPs PWM = 10kHz Rs 在线被禁用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 CPU 利用率 [%] 43.28 33.37 30.07 24.15 19.18 17.53 17.77 14.47 13.37 51.05 37.25 32.65 28.02 21.12 18.82 20.35 15.73 14.20 使用的 MIPS [MIPS] 可用的 MIPS [MIPS] 25.97 34.03 20.02 39.98 18.04 41.96 14.49 45.51 11.51 48.49 10.52 49.48 10.66 49.34 8.68 51.32 8.02 51.98 30.63 29.37 22.35 37.65 19.59 40.41 16.81 43.19 12.67 47.33 11.29 48.71 12.21 47.79 9.44 50.56 8.52 51.48 8.5.3.3 PWM = 20kHz 时的 CPU 负载 346 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 表 8-26. 在 ROM 和闪存中进行完全执行 CPU 负载 F2805xF CPU = 60MHz 可用 MIPs = 60MIPs PWM = 20kHz Rs 在线被禁用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 Rs 在线启用,ISR vs CTRL = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 CPU 利用率 [%] 86.57 66.73 60.13 48.3 38.37 35.07 35.53 28.93 26.73 74.5 65.3 56.03 42.23 37.63 40.7 31.47 28.4 使用的 MIPS [MIPS] 可用的 MIPS [MIPS] 51.94 8.06 40.04 19.96 36.08 23.92 28.98 31.02 23.02 36.98 21.04 38.96 21.32 38.68 17.36 42.64 16.04 43.96 44.7 39.18 33.62 25.34 22.58 24.42 18.88 17.04 15.3 20.82 26.38 34.66 37.42 35.58 41.12 42.96 8.5.4 F2805xM 器件 8.5.4.1 CPU 周期数 8.5.4.1.1 闪存执行 - SpinTAC 库和用户代码 表 8-27. F2805xM 器件在闪存中执行库时 SpinTAC 的 CPU 周期利用率 函数名称 STVELCTL_run(速度控制) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 改变带宽 改变惯性参数 RES = 1,ENB = 1 STVELMOVE_run(速度移动) RES = 1,ENB = 0 stcurve RES = 0,ENB = 1 scurve RES = 0,ENB = 1 trap RES = 0,ENB = 1 RES = 1,ENB = 1 最小值 189 614 1077 842 842 347 220 724 687 561 494 CPU 周期数 平均值 189 614 1077 842 842 347 220 759 724 636 494 最大值 189 614 1077 842 842 347 220 1468 1435 1167 494 执行位置 ROM RAM 闪存 ✓ × ✓ ✓ × ✓ ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 347 CPU 负载 www.ti.com.cn 表 8-27. F2805xM 器件在闪存中执行库时 SpinTAC 的 CPU 周期利用率 (continued) 函数名称 STVELPLAN_run(速度规划) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 STAY FSM 状态 转换 FSM 状态 必须对每个状态完成计算 条件 FSM 状态 必须对每个状态完成计算 STVELPLAN_runTick(ISR 函数) STVELID_run(速度识别) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 STPOSCOV_run(位置转换器) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 RES = 1,ENB = 1 STPOSCTL_run(位置控制) RES = 0,ENB =0 RES = 0,ENB = 1 ENB = 1 后的首次调用 改变带宽参数 改变惯性参数 RES = 1,ENB = 1 STPOSMOVE_run(位置移动) RES = 0,ENB = 0 stcurve RES = 0,ENB = 1 速度受控系统配置 scurve RES = 0,ENB = 1 速度受控系统配置 trap RES = 0,ENB = 1 速度受控系统配置 RES = 1,ENB = 1 STPOSPLAN_run(位置规划) RES = 1,ENB = 0 RES = 0,ENB = 1 ENB = 1 后的首次调用 STAY FSM 状态 条件 FSM 状态 必须对每个状态完成计算 转换 FSM 状态 必须对每个状态完成计算 STPOSPLAN_runTick(ISR 函数) 最小值 CPU 周期数 平均值 最大值 183 183 183 238 238 238 333 333 333 238 238 238 436(固定)+ 320 * 转换数 + 388 * EXIT(退出)操作数 283(固定)+ 438 * ENTER(进入)操作数 76 100 100 198 256 1196 292 198 278 1196 292 198 723 1196 292 127 391 1209 140 127 398 1209 140 127 400 1209 140 201 1207 2043 1729 1729 449 201 1212 2043 1729 1729 449 201 1225 2043 1729 1729 449 520 790 1467 790 1415 790 1540 996 520 1611 1588 1564 1551 1501 1903 996 520 3630 2778 3205 2734 3130 2438 996 202 202 20 255 255 255 373 373 373 255 255 255 501(固定)+ 323 * 转换数 + 382 * EXIT(退出)操作数 301(固定)+ 432 * ENTER(进入)操作数 86 115 115 执行位置 ROM RAM 闪存 ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ ✓ × ✓ 348 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 注意:CPU 周期数存在差异的原因是 F2805xM 器件比 F2806xM 器件的闪存等待状态更低。 CPU 负载 8.5.5 F2802xF 器件 8.5.5.1 CPU 周期数 区域 库接口 (.ebss) 库 (.ebss) 代码 (.text) .cinit 常数 (.econst) IQmath (.text) 表 8-28. 在闪存中进行最小执行的内存用量 RAM 0x0326 0x0200 6x06B0 × × × 内存用量(16 位字) 闪存 × × 0x2ED7 0x007A 0x0080 0x00C9 节 12.3.5.3 汇总了每个函数的所有性能数据,其中的用户代码均以 InstaSPIN 库的最小执行方式从闪存中加 载并执行。 请注意,采用不同执行方式时周期数不会发生显著变化,因为这些配置中的 FAST 估算器块均 保留在 ROM 中。 此估算器模块占用所有 InstaSPIN-FOC 块的大部分周期。 关于管理 ISR 中的执行时间的 详细信息,请参见9.1 节。 表 8-29. 在闪存中进行最小执行 函数名称 HAL_acqAdcInt HAL_readAdcData Ctrl_run Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 2,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 ISR vs CTRL = 3,CTRL vs EST = 1 CTRL vs EST = 2 CTRL vs EST = 3 HAL_writePwmData CTRL_setup 最小值 17 94 2320 1131 1131 51 51 51 51 51 51 2766 1129 1129 51 51 51 51 51 51 110 26 CPU 周期数 平均值 17 94 2331 1735 1536 1191 893 793 811 612 544 2781 1969 1692 1424 1010 871 966 689 596 110 36 最大值 17 94 2413 2413 2413 2413 2413 2413 2413 2413 2413 2882 2882 2882 2882 2882 2882 2882 2882 2882 110 188 ROM × × 执行位置 RAM ✓ ✓ 闪存 × × ✓ ✓ ✓ × ✓ × × ✓ ✓ ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 349 CPU 负载 8.5.5.2 PWM = 10kHz 时的 CPU 负载 表 8-30. 在 ROM、RAM 和闪存中进行最小执行 F2802xF CPU = 60MHz 可用的 MIPs = 60MIPs PWM = 10kHz CPU 利用率 [%] Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 43.13 CTRL vs EST = 2 33.2 CTRL vs EST = 3 29.88 ISR vs CTRL = 2,CTRL vs EST = 1 24.13 CTRL vs EST = 2 19.17 CTRL vs EST = 3 17.5 ISR vs CTRL = 3,CTRL vs EST = 1 17.8 CTRL vs EST = 2 14.48 CTRL vs EST = 3 13.35 Rs 在线启用,ISR vs CTRL = 1,CTRL vs EST = 1 50.63 CTRL vs EST = 2 37.1 CTRL vs EST = 3 32.48 ISR vs CTRL = 2,CTRL vs EST = 1 28.02 CTRL vs EST = 2 21.12 CTRL vs EST = 3 18.8 ISR vs CTRL = 3,CTRL vs EST = 1 20.38 CTRL vs EST = 2 15.77 CTRL vs EST = 3 14.22 使用的 MIPS [MIPS] 25.88 19.92 17.93 14.48 11.5 10.5 10.68 8.69 8.01 30.38 22.26 19.49 16.81 12.67 11.28 12.23 9.46 8.53 www.ti.com.cn 可用的 MIPS [MIPS] 34.12 40.08 42.07 45.52 48.5 49.5 49.32 51.31 51.99 29.62 37.74 40.51 43.19 47.33 48.72 47.77 50.54 51.47 8.5.5.3 PWM = 20kHz 时的 CPU 负载 表 8-31. 在 ROM、RAM 和闪存中进行最小执行 F2802xF CPU = 60MHz 可用的 MIPs = 60MIPs PWM = 20kHz CPU 利用率 [%] Rs 在线禁用,ISR vs CTRL = 1,CTRL vs EST = 1 86.27 CTRL vs EST = 2 66.4 CTRL vs EST = 3 59.77 ISR vs CTRL = 2,CTRL vs EST = 1 48.27 CTRL vs EST = 2 38.33 CTRL vs EST = 3 35 ISR vs CTRL = 3,CTRL vs EST = 1 35.6 CTRL vs EST = 2 28.97 CTRL vs EST = 3 26.7 Rs 在线启用,ISR vs CTRL = 1, CTRL vs EST = 2 74.2 CTRL vs EST = 3 64.97 ISR vs CTRL = 2,CTRL vs EST = 1 56.03 CTRL vs EST = 2 42.23 CTRL vs EST = 3 37.6 ISR vs CTRL = 3,CTRL vs EST = 1 40.77 CTRL vs EST = 2 31.53 CTRL vs EST = 3 28.43 使用的 MIPS [MIPS] 51.76 39.84 35.86 28.96 23 21 21.36 17.38 16.02 44.52 38.98 33.62 25.34 22.56 24.46 18.92 17.06 可用的 MIPS [MIPS] 8.24 20.16 24.14 31.04 37 39 38.64 42.62 43.98 15.48 21.02 26.38 34.66 37.44 35.54 41.08 42.94 350 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 8.6 数字和模拟引脚 数字和模拟引脚 8.6.1 引脚利用率 表 8-32 列出了 InstaSPIN 所使用的引脚。 引脚类型 数字 模拟 表 8-32. 每个电机的引脚利用率 引脚名 PWM1A PWM1B(可选) PWM2A PWM2B(可选) PWM3A PWM3B(可选) TZ1(可选) IA IB IC(可选) VA VB VC VBUS(可选) 每个电机的引脚用量 最小值 3 (需要具有死区时间的外部故障 和外部互补模式) 最大值 7 5 7 (只有两个电流,且无 VBUS 纹波补偿) 8.6.2 F2805x 模拟前端 (AFE) 8.6.2.1 AFE 模块注意事项 在 InstaSPIN 应用中,相关算法需要电机线电流和相电压。 在模拟电路处理完所有信号之后,处理器才能 对这些模拟信号采样。 外部模拟电路会增加组件成本并增大电路板尺寸。 2805x 系列处理器可通过添加内 部模拟调节组件(称为模拟前端 (AFE))用于电机反馈信号来解决此类问题。 有关 2805x 器件的更多详细信息,请参见《TMS320x2805x Piccolo 技术参考手册》(文献编号 SPRUHE5)。 8.6.2.2 电流信号传输 在解决有关实施以及使用可编程增益放大器 (PGA) 和比较器的问题前,建议考虑如何将电流反馈信号从分流 器传送到 PGA 的输入端。 使用分流电阻器测量线路电流时,电流值必须很小,以降低分流器中的功耗量。 由于电流值很小,因此分流器上会出现压降。 这样便会有大量电流通过分流电阻器。 从电源器件连接分流 器到接地端的铜走线成为与分流器并联的电阻器。 使用分流电阻器测量电机线路电流时,必须考虑铜走线上 形成的寄生电阻。 AFE 最多可具有三个不同接地端。 2805x 器件可具有多组放大器模块。 每组放大器具有不同的接地端。 在 本文档中,M1 接地用于三个 PGA 构成的组,它们将分别反馈三相电机电流。 对于具有功率因数校正的系 统,存在另一个接地端为 PFC 接地的单一 PGA。 固定增益放大器块使用 M2 接地端作为参考,在本文档中 用于电机三相电压反馈。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 351 数字和模拟引脚 www.ti.com.cn 此处介绍了两个用于为 AFE 的 M1 PGA 块反馈电机分流信号的选项。 第一个选项仅将内部运算放大器用于 电流反馈,如 图 8-10 所示。 三个运算放大器针对反向输入共用同一接地端,因此不会产生分流差分信号。 对于单端信号,将分流器接地时必须谨慎布线,以减小分流器间不同的走线电阻。 建议将分流器接地端尽可 能靠近在一起。 走线必须从分流器的汇集点连接到集成电路的 M1gnd 引脚。 由于放大器中可能加入共模噪 声,因此 M1gnd 引脚和 PGA 输入必须尽可能短。 三相电流的走线必须与 M1gnd 走线尽可能靠近,以便减 小 Faraday 环路的大小。 Faraday 环路在相电流走线周围形成,相电流走线从分流器顶部连接到 IC,然后 背靠 M1gnd 走线连接到分流器底部,通过分流器后返回到分流器顶部。 Phase U Phase V Phase W VDCBUS + - Tie the negative terminal of the shunts as close to each other as possible Route the phase current feedback lines close to the M1GND line Ib VREFOUT Ia Ic Ia Ib Keep This Distance Small Ic The filter is either a capacitor, ferrite bead combination or a long trace that filter separates analog grounds from noisy digital and power stage grounds. 图 8-10. 电流信号通过单端连接直接传输到 PGA A1PGA B1PGA A3PGA M1GND VSSA Analog GND 2805x 第二个选项是在差分放大器配置中使用外部运算放大器,这种方法的抗扰能力最强。 有效的 Kelvin 连接可 直接反馈到差分放大器,然后将差分放大器的输出传送到 PGA 输入端。图 8-11 显示了使用外部差分运算放 大器时的典型布线。 由于 Kelvin 连接具有低阻抗特性并可产生真正的差分信号,因此具备极佳的抗扰度。 外部运算放大器电路可将差分电路转换为单端输出。 单端输出更容易受噪声干扰,因此最好将运算放大器的 输出端靠近处理器的 AFE 输入端。 352 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 数字和模拟引脚 Feedback op-amps must be physically close to the 2805x chip and ground paths must be as short as possible to VSSA and M1GND. VDCBUS + - Phase U Iau Ial Phase V Phase W Keep Kelvin differential pair traces close together. Vrefout Ial + Iau - Ibu Icu A1PGA 2805x Ibl + Ibu - B1PGA Ibl Icl The filter is either a capacitor, ferrite bead combination or a long trace that separates analog grounds from noisy digital and power stage grounds. 图 8-11. 使用外部差分放大器反馈相电流 Icl Icu + - A3PGA M1GND filter VSSA Analog GND 为什么在使用外部放大器的同时使用 PGA? 如果多个额定电流不同的电机通过同一个逆变器供电,则符合 此情况。 可对电流信号放大率进行调整,以便最适合受控电机的规模。 PGA 块的输出即为比较器窗口的输 入。 仍需要连接 PGA 后才能使用故障检测电路。 8.6.2.3 基准电压连接 电流可以正向或反向流经分流器,相应生成的正向电压和反向电压可反馈回分流放大器电路。 最经济高效的 电机逆变器不会同时配备可处理这种双极信号的正向和反向电源。 双极电流信号引入仅对从零到正电源电压 有效的放大器。 为了能够利用单极运算放大器电路测量双极信号,需将基准电压加入电流反馈运算放大器的 同向侧。 为此,2805x 器件的 AFE 包含一个具有电压跟随器的 6 位 DAC,可提供输出基准电压。 图 8-12 中显示的电路配置可使用基准电压测量双极电流信号。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated MCU 注意事项 353 数字和模拟引脚 VREFHI AFE www.ti.com.cn VBIPOLAR + VREF - Analog GND 2R 1R + VPGA - Refout DAC6VAL VSSA PGA G=3,6,11 VADCIN Analog GND VSSA 图 8-12. 使用 AFE 的内置基准电压测量双极信号 公式 24 显示了如何在 VPGA 条件下计算电压。 例如,设置 PGA 增益 = 3。VADCIN = 2VBIPOLAR + VREF。 假设 系统的 VREFHI = 3.3V。为实现双向最大电压摆幅,将 VREF 设为 1.65V。此时,测得最大峰值 VBIPOLAR 电压为 ±0.825V。 VPGA= 5Â:VBIPOLAR-VREF :1R+2R; ; +VREF = 2 3 VBIPOLAR+ 1 3 VREF (24) 假设使用相同的硬件并且需要更高的分辨率。 PGA 增益 = 6。VADCIN = 4VBIPOLAR + 2VREF。 VREF 必须调整为 0.825V。可测得最大峰值 VBIPOLAR 电压为 ±0.4125V。 基准电压输出由 6 位 DAC 调节。 VREFOUTCTL 电阻按照下面的公式 25 控制 DAC 的电压输出。 VREF= VREFHIÂ:VREFOUTCTLDACVAL+1; 64 (25) 8.6.2.4 电压信号传输 与电流信号相比,正弦电机控制驱动器中的电压信号会缓慢变化。 因此,可将更大的硬件滤波器应用于电压 反馈信号,这有助于增强抗噪能力。 电压信号为单极信号,因此不需要使用特殊电路和基准电压。 电压较 低的电机(400 VDCBUS 以下)通常只需要带电容式低通滤波器的电阻分压器。 对于无刷直流电机控制,电压 需要尽可能少地出现相移,因此,低通滤波性能取决于电机达到的最大速度。 电压反馈信号布线的唯一关键 在于:低通滤波器必须尽可能靠近 AFE 或 A/D 输入引脚。 354 MCU 注意事项 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Chapter 9 ZHCU083F – January 2013 – Revised July 2014 实时结构 Topic ........................................................................................................................... Page 9.1 InstaSPIN 软件执行时钟树................................................................................... 356 9.2 用于实时调度的软件抽取...................................................................................... 359 9.3 硬件抽取........................................................................................................... 373 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 355 InstaSPIN 软件执行时钟树 www.ti.com.cn 9.1 InstaSPIN 软件执行时钟树 使用 InstaSPIN 时,会发生几次时钟抽取。 第一个需要考虑的时钟为中断时钟,它由使用 CPU 时钟计时的 外设产生。 通常,中断服务程序 (ISR) 由 ADC 转换结束 (EOC) 触发。 此转换由 PWM 模块触发。 首先,让我们来回顾如何根据 user.h 文件中的用户参数配置 PWM 频率。 从 CPU 时钟开始,用户定义的 CPU 时钟速率(单位为 MHz)为: //! \brief Defines the system clock frequency, MHz (6xF and 6xM devices) //! #define USER_SYSTEM_FREQ_MHz (90) //! \brief Defines the system clock frequency, MHz (2xF devices) //! #define USER_SYSTEM_FREQ_MHz (60) 然后定义 PWM 频率(单位为 MHz),据此可得出中断频率。 //! \brief Defines the Pulse Width Modulation (PWM) frequency, kHz //! #define USER_PWM_FREQ_kHz (15.0) //! \brief Defines the Pulse Width Modulation (PWM) period, usec //! #define USER_PWM_PERIOD_usec (1000.0/USER_PWM_FREQ_kHz) //! \brief Defines the Interrupt Service Routine (ISR) frequency, Hz //! #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) //! \brief Defines the Interrupt Service Routine (ISR) period, usec //! #define USER_ISR_PERIOD_usec USER_PWM_PERIOD_usec 目前为止,CPU 时钟设置了 PWM 频率,同时也设置了 ISR 的频率。 此时 ISR 实际并非由 PWM 定时器本 身触发,而是由 ADC 转换结束指令触发,而 ADC 则是由 PWM 定时器启动。 图 9-1 是从 CPU 到生成 ISR 的全过程时钟时序图。 356 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN 软件执行时钟树 图 9-1. 时钟时序 - 从 CPU 到生成 ISR 这个时序图表示德州仪器 (TI) InstaSPIN 软件包交付时的中断触发情况,因为这是在取中断时确保转换就绪 的最安全方法。 用户可能还会考虑其它情况,例如 ADC 提前中断、PWM 中断或者 CPU 定时器中断。 唯 一要求是那些中断可定期生成。 注意,执行时间可通过多种不同方法测量。 以下示例介绍如何测量执行时间: • GPIO 切换。 这是一种简单但不够准确的执行时间测量方法,即,在测量代码开始执行时设置一个 GPIO,然后在代码执行后立刻清除此 GPIO。 这种方法极具图形化,可以呈现在一定的图形范围内,而 中断是周期性发生,这为测量执行时间的范围提供了良好的触发机制。 如有必要,可将时间转换为 CPU 周期。 使用这种方法时需要考虑特定架构设置和清除 GPIO 所耗费的时间以及中断获取和返回时间。 • CPU 定时器捕捉。 更加精确的执行时间测量方法是使用 CPU 定时器。 具体过程是在 CPU 时钟开始计 时时运行 CPU 定时器,不使用预分频器或后分频器,然后在代码执行后读取定时器。 这样可得出执行 相关代码的 CPU 周期数。 在 InstaSPIN 执行时序中有几个抽取值,也称为节拍率,该速率允许 InstaSPIN 中控制代码的不同部分采用 不同的执行时钟速率。 以下节拍率可用于 InstaSPIN: //! \brief Defines the number of pwm clock ticks per isr clock tick //! Note: Valid values are 1, 2 or 3 only #define USER_NUM_PWM_TICKS_PER_ISR_TICK (1) //! \brief Defines the number of isr ticks per controller clock tick //! #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) //! \brief Defines the number of controller clock ticks per current controller clock tick //! #define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK (1) //! \brief Defines the number of controller clock ticks per estimator clock tick //! #define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 357 InstaSPIN 软件执行时钟树 www.ti.com.cn //! \brief Defines the number of controller clock ticks per speed controller clock tick //! #define USER_NUM_CTRL_TICKS_PER_SPEED_TICK (10) //! \brief Defines the number of controller clock ticks per trajectory clock tick //! #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (10) 为了显示所有这些节拍率,请参见图 9-2。 定义的以下缩写便于在软件执行时钟树图中引用: USER_NUM_PWM_TICKS_PER_ISR_TICK -> /ETPS USER_NUM_ISR_TICKS_PER_CTRL_TICK -> /ISRvsCTRL USER_NUM_CTRL_TICKS_PER_CURRENT_TICK -> /CTRLvsCURRENT USER_NUM_CTRL_TICKS_PER_EST_TICK -> /CTRLvsEST USER_NUM_CTRL_TICKS_PER_SPEED_TICK -> /CTRLvsSPEED USER_NUM_CTRL_TICKS_PER_TRAJ_TICK -> /CTRLvsTRAJ 对于 F2806x 器件,软件执行时钟树从 90MHz 的 SYSCLKOUT 开始,而所有其它值都从此时钟抽取。 对 于 F2805x 和 F2802x 器件,最大频率为 60MHz,而不是 90MHz。 在默认设置为 1 的时钟预分频器后,为得到 PWM 发生器的最佳分辨率,我们使用了 TBPRD 寄存器(请参 见图 9-2)。 此寄存器含有一个周期值,这样输出端便能生成 PWM 频率。 Clock TBCLK PWMFREQ EPWMxSOCA ISR CTRL SYSCLKOUT TBPRD /ETPS ADC /ISRvsCTRL /CTRLvsEST EST Prescale Hardware Decimation /CTRLvsCURRENT CURRENT /CTRLvsSPEED SPEED /CTRLvsTRAJ TRAJ Software Decimation 图 9-2. 软件执行时钟树 软件执行时钟树的第一次抽取发生在硬件中。 根据 ETPS 寄存器(事件触发预分频寄存器)的值,PWM 频 率可实现 1 分频、2 分频或 3 分频。 当 ADC 开始转换信号需要在每个 PWM 周期、每 2 个或每 3 个 PWM 周期触发一次时,这一特性非常实用。 这种硬件抽取过程由 user.h 文件中的 USER_NUM_PWM_TICKS_PER_ISR_TICK 定义控制。 第二次抽取在软件中完成,下文将对此进行详细介绍。 358 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 用于实时调度的软件抽取 9.2 用于实时调度的软件抽取 在图 9-3 中突出显示的软件节拍率用于抽取软件中 InstaSPIN 的执行,也称为实时调度节拍率。 Clock TBCLK PWMFREQ EPWMxSOCA ISR CTRL SYSCLKOUT TBPRD /ETPS ADC /ISRvsCTRL /CTRLvsEST EST Prescale /CTRLvsCURRENT CURRENT /CTRLvsSPEED SPEED /CTRLvsTRAJ TRAJ 图 9-3. 实时调度节拍率 Software Decimation 9.2.1 USER_NUM_ISR_TICKS_PER_CTRL_TICK 第一个节拍率定义 InstaSPIN 作为一个整体在 ISR 转换结束后开始执行的速率。 如果此节拍率大于 1,每 次执行 InstaSPIN 时都会检查内部计数器,如果该计数器未达到节拍率值,则将从 InstaSPIN 执行过程中返 回。 除了检查此计数器,InstaSPIN 库中不会执行任何代码。图 9-4 显示如何在 ISR 中检查节拍计数器。 Start of Tick Counter Check Tick Counter++ Tick Counter >= Count Max YES Reset Tick Counter Execute Scheduled Process NO End of Tick Counter Check 图 9-4. 节拍计数器流程图 图 9-5 显示节拍率为 2 时的 InstaSPIN 执行过程。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 359 用于实时调度的软件抽取 www.ti.com.cn 图 9-5. InstaSPIN 时序 图 9-6 也可表示为如下所示的软件执行时钟树。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =2 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-6. InstaSPIN 时序软件执行时钟树 /CTRLvsTRAJ = 10 TRAJ 请注意当突出显示的块值为 2 时,如何在软件执行时钟树中实现 2 分频。 从中断到控制器的节拍率大于 1 的原因主要为以下两点: • 第一个原因是减少 CPU 的使用率。 • 第二个原因是允许更高的 PWM 频率并减小节拍率,以便 InstaSPIN 在更高的频率下仍可执行。 例如,如果 PWM 频率为 50kHz 并且没有使用硬件抽取(本文档稍后将讨论相关主题),则 ISR 转换结束 时将为相同速率,50kHz。 所有功能需要在 1/50kHz = 20µs 内完成执行。 如果 ISR 内的功能需要 30µs, 则: 执行时间 > ISR 周期 → 30µs > 20µs 这将产生中断溢出,导致 ADC 采样样本被覆写,并且控制时序也将受到影响。 当中断小于执行时间时,如果考虑以下准则,使用不同的 ISR vs CTRL 节拍率可确保安全。 确认中断期间有足够的时间来执行 InstaSPIN。 这是因为在中断服务程序中执行 InstaSPIN 时必须有足够的时间,这样才能避免转换溢出。 例如,如果一 个 ISR 程序尚未执行完便进入第二个程序,则第一个程序将完全丢失,并且时序将会受到影响。 图 9-7 显 示了一个良好的示例,当 ISR 拥有充足的时间时,InstaSPIN 完成执行且没有发生 ISR 溢出。 360 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 用于实时调度的软件抽取 图 9-7. InstaSPIN 完成执行且没有发生 ISR 溢出 图 9-8 显示了此时序图的软件执行时钟树表示。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =3 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-8. InstaSPIN 时序软件执行时钟树 - 无 ISR 溢出 /CTRLvsTRAJ = 10 TRAJ 以下是另一个示例,本例中使用的抽取率具有较高的 PWM 频率,导致 ISR 时间较短,不过,即使某个 ISR 没有立即执行,它最终也会完成执行并且不会发生 ISR 溢出 (图 9-9)。 这种方式也可以正常操作,并不会影 响性能。 图 9-9. 较高 PWM 频率时的 InstaSPIN 时序 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 361 用于实时调度的软件抽取 www.ti.com.cn 另一方面,如果 PWM 频率设置过高,转换结束中断可能被另一个中断溢出。 由于溢出会导致整组 ADC 采 样样本丢失,因此需避免这种情况。 除此之外,中断溢出会导致丢失一个完整中断,因而造成 InstaSPIN 状态机时序错误,而状态机时序正是取决于中断的周期性。 InstaSPIN 库中的时序调度不当会引起诸多问 题,例如,角度估算不准确、速度估算关闭、速度和电流控制器未正常运转等等。 以下示例显示中断溢出情 况。 注意,InstaSPIN 的执行过程不变,改变的是 PWM 频率(进而改变了转换结束中断频率)和抽取次 数。 中断溢出的第一个示例没有执行抽取,因此全部 InstaSPIN 在每个中断中均执行 (图 9-10)。 图 9-10. 未执行抽取时的中断溢出时序 图 9-11 显示了此时序图的软件执行时钟数值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =1 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-11. 未执行抽取时的中断溢出软件执行时钟树 /CTRLvsTRAJ TRAJ = 10 请注意在几个中断后有一个完整中断是如何溢出的。 这种方法的问题在于存在时序偏移,所以 InstaSPIN 状态机和控制器内部时序比实际慢。 另一个示例是使用抽取率。 图 9-12 中使用的抽取率值为 2,如图所示,即使在使用抽取率时仍有中断溢出 限制。 362 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 用于实时调度的软件抽取 图 9-12. 执行抽取时的中断溢出时序 图 9-13 显示了此时序图的软件执行时钟树值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =2 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-13. 执行抽取时的中断溢出软件执行时钟树 /CTRLvsTRAJ TRAJ = 10 将 InstaSPIN 运行速率至少设为电机电频率的 10 倍。 需要考虑的第二个方面是当设置 PWM 频率且 ISR vs. CTRL 节拍率为 InstaSPIN 频率对电机电频率的倍 数。 这是因为在闭环系统中运行时,磁场定向控制取决于电角度,每个电周期应该有充分的估算角度更新来 保证磁场正确定向。 与此要求类似的是当交流信号需要进行数字采样时。 此过程与奈奎斯特频率有关,当 此频率刚好大于采样频率时便足以避免出现混叠。 在磁场定向控制系统中,奈奎斯特频率不足以提供有效的 电机控制。 建议 InstaSPIN 运行速率至少是电机电频率的 10 倍。 要了解电机(即永磁同步电机 (PMSM)) 的电频率,我们需要知道电机转速和电极数量。 例如: 极对数:4 转速:7500RPM 电频率:以 RPM 为单位的转速 * 电极对数 / 60 = 7500 * 4 / 60 = 500Hz 推荐的最小 InstaSPIN 运行速率 = 10 * 电频率 = 5000Hz 在此示例中,选择的 ISR vs. CTRL 节拍率为 3,得出 ISR 频率为 5000 * 3 = 15000Hz。 图 9-14 显示了此示例中生成的波形。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 363 用于实时调度的软件抽取 www.ti.com.cn 图 9-14. ISR 频率波形 图 9-15 显示了此示例中软件执行时钟树的数值。 SYSCLKOUT 90 MHz Clock TBCLK TBPRD Prescale 90 MHz PWMFREQ 15 kHz /ETPS =1 EPWMxSOCA 15 kHz ISR /ISRvsCTRL CTRL ADC =3 15 kHz 5 kHz /CTRLvsEST =1 EST 5 kHz /CTRLvsCURRENT =1 CURRENT 5 kHz /CTRLvsSPEED = 10 SPEED 500 Hz 图 9-15. ISR 波形的软件执行时钟树 /CTRLvsTRAJ = 10 TRAJ 500 Hz 364 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 9.2.2 USER_NUM_CTRL_TICKS_PER_CURRENT_TICK 用于实时调度的软件抽取 下面要介绍的第二个节拍率是 CTRL vs CURRENT 节拍率。 此节拍率用于减缓电流控制器相对于 InstaSPIN 执行速率的速度。 由于只有两个 PI 控制器,此节拍率仅可减缓电流控制器的执行速度,对于减 轻 CPU 负载并没有实际帮助。 但它确实降低了电流控制性能,所以建议保持节拍率为 1,这意味着电流控 制器的执行速度将与 InstaSPIN 执行速率相同。 关于如何使用此节拍率的示例,请参见图 9-16。 在本示例 中,同样选择 ISR vs CTRL 节拍率为 3,以显示 CTRL vs CURRENT 节拍是如何从第一个节拍率开始级联 的。 图 9-16. 节拍率时序 图 9-17 在突出显示框中显示此示例的相应值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =3 =1 /CTRLvsCURRENT =2 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-17. 节拍率软件执行时钟树 /CTRLvsTRAJ = 10 TRAJ 9.2.3 USER_NUM_CTRL_TICKS_PER_EST_TICK 第三个抽取率是执行 InstaSPIN 内部的估算器,也称为 FAST™ 算法。 这是 InstaSPIN 中最常用的节拍率 之一,因为它可抽取 InstaSPIN 的最耗时部分,也就是 FAST 估算器。 如之前抽取电流控制器的节拍率所 示,此节拍率抽取估算器执行过程。 关于如何从 InstaSPIN 执行时钟级联此估算器的示例,请参见图 918。 此图同时显示值为 1 的 ISR vs CTRL 节拍率、值为 2 的 CTRL vs CURRENT 节拍率和值为 2 的 CTRL vs EST 节拍率。 此示例说明了如何结合几个节拍率实现所需的 CPU 带宽,同时也显示了 InstaSPIN 中其它时钟的相关性。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 365 用于实时调度的软件抽取 www.ti.com.cn 图 9-18. FAST 估算器节拍率时序 图 9-19 在突出显示框中显示此时序图的相应值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =1 =2 /CTRLvsCURRENT =2 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-19. FAST 估算器节拍率软件执行时钟树 /CTRLvsTRAJ TRAJ = 10 9.2.4 实例 示例如下,此例中 CPU 负载受应用程序限制并且 PWM 频率要求固定。 例如,在案例研究中考虑以下参 数: 仅检查节拍率计数器的 InstaSPIN 执行时间:2.7µs FAST 估算器执行时间:12.9µs 不使用 FAST 估算器的 InstaSPIN 执行时间:14.2µs 使用 FAST 的 InstaSPIN 总执行时间:27.1µs = 12.9µs + 14.2µs PWM 频率要求:50kHz (TISR = 20µs) 需要如此高 PWM 频率的典型情况就是当电机电感很低时。 低 PWM 频率会因低电感生成不必要的电流波 纹。 这些应用的解决方案是采用更高的 PWM 频率。 在此例中,需要 50kHz PWM 频率。 366 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 用于实时调度的软件抽取 首先尝试的第一组配置是将 ISR vs CTRL、CTRL vs CURRENT 和 CTRL vs EST 全部设置为 1,这样可获 得最佳性能。 如果尝试将这些节拍率设置为 1,可得到图 9-20。 图 9-20. 节拍率时序 如时序图所示,中断时间比所需的执行时间短,这将导致中断溢出,需要避免这种情况发生。 TISR < TInstaSPIN → 20µs < 27.1µs → 这导致 ISR 溢出,造成 InstaSPIN 出现意外结果。 图 9-21 在突出显示框中显示此时序图的相应值。 SYSCLKOUT Clock TBCLK Prescale TBPRD PWMFREQ /ETPS =1 EPWMxSOCA ADC ISR /ISRvsCTRL =1 50 kHz CTRL /CTRLvsEST =1 EST Target = 50 kHz Actual ~= 36 kHz /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-21. 节拍率软件执行时钟树 /CTRLvsTRAJ = 10 TRAJ 请注意中断时间过短如何导致无法在同一节拍率下执行 InstaSPIN,并且永远跟不上执行速度。 事实上,在 几个中断后就会丢失中断,这将导致意外结果。 解决此问题的方法是使用节拍率,以便 FAST 估算器以相 对低于 InstaSPIN 其余部分的速率运行。 在图 9-22 中,看看是否能使用值为 2 的 CTRL vs. EST 节拍率来 解决溢出问题。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 367 用于实时调度的软件抽取 www.ti.com.cn 图 9-22. CTRL vs. EST 时序 - 节拍率 = 2 在这种情况下,由于估算器节拍率值为 2,因此测量时序时必须考虑两个中断,如图所示,2 个中断的运行 时间短于不使用 FAST 加使用 FAST 时的执行时间,这将导致中断溢出,因而出现异常行为。 2 * TISR < (T不使用 FAST 的 InstaSPIN + T使用 FAST 的 ) InstaSPIN → 40µs < 41.3µs → 意外的 InstaSPIN 结果 图 9-23 在突出显示框中显示此时序图的相应值。 Clock TBCLK SYSCLKOUT TBPRD Prescale PWMFREQ /ETPS =1 EPWMxSOCA ISR /ISRvsCTRL ADC =1 50 kHz CTRL /CTRLvsEST =2 EST < 25 kHz /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-23. CTRL vs. EST 软件执行时钟树 - 节拍率 = 2 /CTRLvsTRAJ TRAJ = 10 如图所示,每次执行使用 FAST 的 InstaSPIN 时,都会增加延迟。 在这三个周期内,可以看到此延迟如何 从 0µs 增加到 1.3µs 再增加到 2.6µs。 由于执行时间跟不上中断速率,我们可以预测,几个周期后将出现中 断溢出。 这种情况的解决方法是将 CTRL vs. EST 节拍率增至 3,以便每个 InstaSPIN 周期的延迟降为 0,如图图 924 所示。 368 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 用于实时调度的软件抽取 图 9-24. CTRL vs. EST 时序 - 节拍率 = 3 在这种情况下,由于估算器节拍率值为 3,因此测量时序时必须考虑三个中断,如图所示,3 个中断的运行 时间长于不使用 FAST 加使用 FAST 时的执行时间,这样即可避免中断溢出。 3 * TISR <(2 * T不使用 FAST 的 InstaSPIN + T使用 FAST 的 )→ InstaSPIN 60µs > 55.5µs → 预期的 InstaSPIN 结果 除 ISR 之外,其它任务或者其它较低优先级中断的可用 CPU 计算如下: 3 * TISR - (2 * T不使用 FAST 的 InstaSPIN + T使用 FAST 的 ) InstaSPIN = 4.5µs CPU % 剩余 = 100% * 4.5µs / 60µs = 7.5% 2806x MIPS 剩余 = CPU % 剩余 * 最大 MIPS = 7.5% * 90MIPS = 6.75MIPS 图 9-25 在突出显示框中显示此时序图的相应值。 Clock TBCLK SYSCLKOUT TBPRD Prescale PWMFREQ /ETPS =1 EPWMxSOCA ISR /ISRvsCTRL ADC =1 50 kHz CTRL /CTRLvsEST =3 EST 16.67 kHz /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-25. CTRL vs. EST 软件执行时钟树 - 节拍率 = 3 /CTRLvsTRAJ TRAJ = 10 此问题的另一个解决方法是将 ISR vs. CTRL 节拍率改为 2。当只检查节拍计算器时,考虑 2.7µs 的 InstaSPIN 运行时间,我们 Changed 已更改18.2.3 节“设置数字 IO 以连接 QEP 外设”中的段落。 如图所示,选择值为 2 的 ISR vs. CTRL 节拍率足以避免任何转换溢出。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 369 用于实时调度的软件抽取 www.ti.com.cn 图 9-26. ISR vs. CTRL 时序 - 节拍率 = 2 在这种情况下,由于控制器 (CTRL) 节拍率值为 2,因此测量时序时必须考虑两个中断,如图所示,两个中 断的运行时间长于不使用控制器加使用控制器时的执行时间,这样即可避免中断溢出。 2 * TISR < (T不使用 CTRL 的 InstaSPIN + T使用 CTRL 的 ) InstaSPIN → 40µs > 29.8µs → 预期的 InstaSPIN 结果 除 ISR 之外,其它任务或者其它较低优先级中断的可用 CPU 计算如下: 2 * TISR - (T不使用 CTRL 的 InstaSPIN + T使用 CTRL 的 ) InstaSPIN = 10.2µs CPU % 剩余 = 100% * 10.2µs / 40µs = 25.5% 2806x MIPS 剩余 = CPU % 剩余 * 最大 MIPS = 25.5 % * 90MIPS = 22.95MIPS 图 9-27 在突出显示框中显示此时序图的相应值。 Clock TBCLK SYSCLKOUT TBPRD Prescale PWMFREQ /ETPS =1 EPWMxSOCA ISR /ISRvsCTRL ADC =2 50 kHz CTRL /CTRLvsEST =1 EST 25 kHz 25 kHz /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-27. ISR vs. CTRL 软件执行时钟树 - 节拍率 = 2 /CTRLvsTRAJ TRAJ = 10 9.2.5 USER_NUM_CTRL_TICKS_PER_SPEED_TICK 此抽取率为相对于控制器 (CTRL) 执行 InstaSPIN 内部速度控制器的速率。 速度控制器节拍率的典型值在 5 到 10 之间。 这样电流控制器便可稳定在一个比速度控制器更快的速率。 速度控制器的时间常量由耦合到电 机转轴的机械负载设定,该值远小于电机电感所设定的时间常量。 以下示例显示典型值为 10 的速度控制器 节拍率,时序图中显示了该值是如何由控制器 (CTRL) 抽取的。 370 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 用于实时调度的软件抽取 使用典型值 10 时,电流控制器执行速度为速度控制器的 10 倍。 这种情况很常见,因为速度控制器通常设 定电流控制器的基准值,并且电流控制器需要一段时间才能控制到特定设置点。 图 9-28 显示了如何使用节拍率为 10 的速度控制器。 图 9-28. 速度控制器时序 - 节拍率 = 10 图 9-29 在突出显示框中显示此时序图的相应值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =1 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-29. 速度控制器软件执行时钟树 - 节拍率 = 10 /CTRLvsTRAJ TRAJ = 10 9.2.6 USER_NUM_CTRL_TICKS_PER_TRAJ_TICK 软件中的最后一个抽取率与 InstaSPIN 内的轨迹生成相关。 库中使用轨迹模块提供时序。 在库内使用轨迹 的一个示例是生成速度基准的斜坡。 使用轨迹的另一个示例是电机在识别过程中加速时。 所有这些时序均 由 InstaSPIN 内的轨迹完成。 所有这些时间均基于 CTRL vs. TRAJ 节拍率。 此节拍率选用不同的抽取率值 对 CPU 负载没有太大帮助,因此建议匹配此节拍率的速度控制器速率(默认值为 10)。 为便于说明, 图 9-30 显示了 CTRL vs TRAJ 节拍率。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 371 用于实时调度的软件抽取 www.ti.com.cn 图 9-30. CTRL vs TRAJ 节拍率时序 图 9-31 在突出显示框中显示此时序图的相应值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =1 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-31. CTRL vs TRAJ 节拍率软件执行时钟树 /CTRLvsTRAJ TRAJ = 10 所有这些节拍率及其关联性均汇总显示在图 9-32 中,并且图中引用了以下时间。 SYSCLKOUT = 90MHz FOC(不使用 FAST 的 InstaSPIN) = 14.2µs FAST = 12.9µs 电流控制 = 1.0µs 速度控制 = 0.5µs 轨迹运行 = 0.4µs 372 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 硬件抽取 图 9-32. 所有节拍率和相关性时序 图 9-33 在突出显示框中显示此时序图的相应值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =1 =1 =2 /CTRLvsCURRENT =3 CURRENT /CTRLvsSPEED =8 SPEED 图 9-33. 所有节拍率和相关性软件执行时钟树 9.3 硬件抽取 图 9-34 中突出显示的节拍率用于抽取硬件中 InstaSPIN 的执行。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated /CTRLvsTRAJ TRAJ = 10 实时结构 373 硬件抽取 www.ti.com.cn Clock TBCLK PWMFREQ EPWMxSOCA ISR CTRL SYSCLKOUT TBPRD /ETPS ADC /ISRvsCTRL /CTRLvsEST EST Prescale Hardware Decimation /CTRLvsCURRENT CURRENT /CTRLvsSPEED SPEED /CTRLvsTRAJ TRAJ 图 9-34. 硬件抽取软件执行时钟树 硬件抽取仅可能发生在以不同速率触发 ADC 转换时,而不是每个 PWM 周期均发生。 以下配置在 文件中: //! \brief Defines the number of pwm clock ticks per isr clock tick //! Note: Valid values are 1, 2 or 3 only #define USER_NUM_PWM_TICKS_PER_ISR_TICK (1) 在上述示例中,转换开始 (SOC) 事件在每个 PWM 周期均会触发,从而得出图 9-35。 374 实时结构 图 9-35. SOC 事件时序 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 图 11-3 在突出显示框中显示此时序图的相应值。 Clock TBCLK SYSCLKOUT TBPRD Prescale PWMFREQ /ETPS =1 EPWMxSOCA ISR /ISRvsCTRL CTRL ADC =1 /CTRLvsEST =1 硬件抽取 EST /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED 图 9-36. SOC 事件软件执行时钟树 /CTRLvsTRAJ TRAJ = 10 如果应用程序要求更高的 PWM 频率,在硬件中实现此目的的一种方法是每两个或每三个 PWM 周期触发转 换。 以下示例显示如何配置 PWM,从而实现每两个 PWM 周期触发转换。 //! \brief Defines the number of pwm clock ticks per isr clock tick //! Note: Valid values are 1, 2 or 3 only #define USER_NUM_PWM_TICKS_PER_ISR_TICK (2) 图 9-37 显示了相应的时序图。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 375 硬件抽取 www.ti.com.cn 图 9-37. 每两个 PWM 周期触发 PWM 转换的时序 图 9-38 在突出显示框中显示此时序图的相应值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =2 =1 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED /CTRLvsTRAJ TRAJ = 10 图 9-38. 每两个 PWM 周期触发 PWM 转换的软件执行时钟树 如果要求更高的频率,PWM 模块也可以每三个 PWM 周期触发转换,具体配置如下: //! \brief Defines the number of pwm clock ticks per isr clock tick //! Note: Valid values are 1, 2 or 3 only #define USER_NUM_PWM_TICKS_PER_ISR_TICK (3) 376 实时结构 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 节 18.3.1.2 显示了相应的时序图。 硬件抽取 图 9-39. 每三个 PWM 周期触发 PWM 转换的时序 图 9-40 在突出显示框中显示此时序图的相应值。 Clock TBCLK PWMFREQ /ETPS EPWMxSOCA ISR /ISRvsCTRL CTRL /CTRLvsEST SYSCLKOUT TBPRD ADC EST Prescale =3 =1 =1 /CTRLvsCURRENT =1 CURRENT /CTRLvsSPEED = 10 SPEED /CTRLvsTRAJ = 10 TRAJ 图 9-40. 每三个 PWM 周期触发 PWM 转换的软件执行时钟树 请注意中断周期是如何相对 PWM 周期发生变化的。 这样可实现更高的 PWM 频率,保持较高的中断周期。 较高的中断周期可确保 InstaSPIN 及时执行,即使 PWM 频率更高。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 实时结构 377 Chapter 10 ZHCU083F – January 2013 – Revised July 2014 管理启动时间 完全识别电机或从 user.h 文件中加载电机参数后,根据启用的重校准功能,可能会存在四种启动时间。 这 些重校准功能包括: • 偏移重校准 • 定子电阻 (Rs) 重校准 这两种功能可以单独启用或禁用。 用户对不同启动方法进行实验的主要动机是为了满足相关应用的启动要 求。 有关启用或禁用这些重校准功能以及配置各重校准功能的时间和电流的详细信息,请参见6.7 节。 Topic ........................................................................................................................... Page 10.1 同时启用偏移和 Rs 重校准功能的启动 .................................................................... 379 10.2 仅启用偏移重校准时的启动................................................................................... 380 10.3 启用 Rs 重校准时的启动 ...................................................................................... 381 10.4 不启用任何重校准时的启动................................................................................... 383 10.5 忽略惯性估算..................................................................................................... 384 378 管理启动时间 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 同时启用偏移和 Rs 重校准功能的启动 10.1 同时启用偏移和 Rs 重校准功能的启动 这种启动耗时最长但最准确。 在电机旋转达到指令转矩或速度基准之前,该启动包括三个阶段。图 10-1 显 示了在同时启用偏移和 Rs 重校准的启动条件下的控制器和估算器状态机。 CTRL State Machine EST State Machine Idle CTRL_State_Idle Idle Idle EST_State_Idle Offline CTRL_State_OffLine Offsets Recalibration Online CTRL_State_OnLine Rs EST_State_Rs Online EST_State_OnLine Rs Recalibration Motor Running Closed-loop 图 10-1. 同时启用偏移和 Rs 重校准功能的启动 图 10-2 显示了每个状态的电流和输出电压。 第一个状态是偏移重校准状态,第二个状态是 Rs 重校准状 态。 第三个状态是在线状态,此时电机指令速度或转矩在闭环运行中跟随。 PWM Phase A Fixed 50% Duty Cycle Current Phase A Variable Duty Cycle Offsets Recalibration Rs Recalibration Idle Closed Loop 图 10-2. 各个状态的电流和输出电压 与各个状态相关的时序以及用于 Rs 重校准的电流在Chapter 6中有详细介绍。 为了同时启用偏移和 Rs 重校 准,必须在启用控制器之前调用以下两个函数: ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理启动时间 379 仅启用偏移重校准时的启动 // Enable Offset Recalibration CTRL_setFlag_enableOffset(handle, TRUE); // Enable Rs Recalibration EST_setFlag_enableRsRecalc(obj->estHandle, TRUE); www.ti.com.cn 通过调用以下函数启用控制器: // enable the controller CTRL_setFlag_enableCtrl(ctrlHandle, TRUE); 10.2 仅启用偏移重校准时的启动 此启动方法禁用了 Rs 重校准,通常在偏移可能已发生更改但电机未更改的情况下使用。 使用此方法的典型 情况是不同开发板上运行同一个电机。 使用此方法的另一种情况是长时间运行同一个开发板,电压和电流反 馈的硬件组件值可能由于环境条件或组件耐受性而发生变化。 在第二种情况下,建议根据特定开发板中使用 的硬件组件的质量来运行偏移重校准。 图 10-3 显示了进入闭环运行前仅运行偏移重校准时的状态。 CTRL State Machine EST State Machine Idle CTRL_State_Idle Idle Idle EST_State_Idle Offline CTRL_State_OffLine Offsets Recalibration Online CTRL_State_OnLine Online EST_State_OnLine Motor Running Closed-loop 图 10-3. 仅启用偏移重校准时的启动 图 10-4 显示了与偏移状态相关的电流和输出电压波形。 在闭环运行电机前,按固定的 50% 占空比重新校 准偏移。 之后,电机将进入闭环运行,此时的电压和电流取决于指令速度和机械负载。 380 管理启动时间 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Idle www.ti.com.cn PWM Phase A Fixed 50% Duty Cycle Current Phase A Offsets Recalibration Variable Duty Cycle Closed Loop 启用 Rs 重校准时的启动 图 10-4. 偏移状态电流和输出电压 与偏移状态相关的时序在Chapter 6中有详细介绍。 为了启用偏移重校准同时禁用 Rs 重校准,必须在启用 控制器之前调用以下两个函数: // Enable Offset Recalibration CTRL_setFlag_enableOffset(handle, TRUE); // Disable Rs Recalibration EST_setFlag_enableRsRecalc(obj->estHandle, FALSE); 通过调用以下函数启用控制器: // enable the controller CTRL_setFlag_enableCtrl(ctrlHandle, TRUE); 10.3 启用 Rs 重校准时的启动 此启动方法禁用了偏移重校准,通常在电阻已发生更改但偏移未更改的情况下使用。 这种情况的一个示例是 环境温度发生变化导致定子电阻变化。 另一种情况是系统已在磁场中运行很长时间,建议定期更新定子电阻 以确保软件在电机闭环运行前对电机型号进行准确表示。图 10-5 显示了当仅重新校准定子电阻 (Rs) 时进入 闭环前的状态。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理启动时间 381 启用 Rs 重校准时的启动 CTRL State Machine Idle CTRL_State_Idle EST State Machine Idle EST_State_Idle www.ti.com.cn Idle Online CTRL_State_OnLine Rs EST_State_Rs Online EST_State_OnLine 图 10-5. 启用 Rs 重校准时的启动 图 10-6 显示了进入闭环运行前仅重新校准 Rs 时的电流和输出电压波形。 PWM Phase A Current Phase A Variable Duty Cycle Idle Rs Recalibration Closed Loop Rs Recalibration Motor Running Closed-loop 图 10-6. Rs 重校准电流和输出电压 与 Rs 重校准状态相关的时序以及用于 Rs 重校准的电流在Chapter 6中有详细介绍。 为了禁用偏移重校准同 时启用 Rs 重校准,必须在启用控制器之前调用以下两个函数: // Disable Offset Recalibration CTRL_setFlag_enableOffset(handle, FALSE); // Enable Rs Recalibration EST_setFlag_enableRsRecalc(obj->estHandle, TRUE); 382 管理启动时间 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 通过调用以下函数启用控制器: // enable the controller CTRL_setFlag_enableCtrl(ctrlHandle, TRUE); 不启用任何重校准时的启动 10.4 不启用任何重校准时的启动 此启动方法是实现电机闭环运行的最快方法。 此方法不会重校准偏移或电阻。 启用控制器后,电机立即开 始闭环运行。 此方法仅应在偏移和定子电阻均已知的情况下使用。 有关在启动时如何处理满载条件的详细 信息,请参见Chapter 14。图 10-7 显示了在未进行任何重校准的情况下电机如何在空闲状态后立即开始闭 环运行。 CTRL State Machine EST State Machine Idle CTRL_State_Idle Idle Idle EST_State_Idle Online CTRL_State_OnLine Online EST_State_OnLine 图 10-7. 不启用任何重校准时的启动 图 10-8 显示了不考虑偏移和 Rs 重校准时的电流和输出电压波形。 Motor Running Closed-loop ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理启动时间 383 忽略惯性估算 PWM Phase A Current Phase A Variable Duty Cycle Idle Closed Loop www.ti.com.cn 图 10-8. 不考虑 Rs 重校准时的电流和输出电压 为了同时禁用偏移和 Rs 重校准,必须在启用控制器之前调用以下两个函数: // Disable Offset Recalibration CTRL_setFlag_enableOffset(handle, FALSE); // Disable Rs Recalibration EST_setFlag_enableRsRecalc(obj->estHandle, FALSE); 通过调用以下函数启用控制器: // enable the controller CTRL_setFlag_enableCtrl(ctrlHandle, TRUE); 10.5 忽略惯性估算 如果之前已估算电机惯性或电机惯性已知,则可通过忽略惯性估算过程来缩短系统启动时间。 惯性估算过程 应在开发过程中完成,所得出的代表惯性与电机转轴关联。 由于电机惯性是在开发过程中配置,因此 SpinTAC 速度识别不需要包含在最终产品中。 SpinTAC 速度控制器需要使用电机惯性。 在 MotorWare 实验中,将电机惯性配置为 ST_MOTOR_INERTIA_A_PER_KRPM(位于 spintac.h 文件中)的默认值。 有关此定义的详细介绍,请参 见节 4.7.1.1。 有关 SpinTAC 速度识别的详细信息,请参见Chapter 7。 如果项目中不使用 MotorWare,则可在初始化过程中使用 SpinTAC 速度控制器全局结构中的惯性参数在 SpinTAC 速度控制器中设置电机惯性。 惯性单位为 PU/(pu/s2)。 其中,PU 是用户电流单位 [A],而 pu/s2 是用户加速度单位 [krpm/s]。 通常,惯性单位为 Kg*m2 或 N*m*s2。 用户必须将实际惯性单位转换为 SpinTAC 速度控制器使用的标度单位。 公式 26 可用于在 Kg*m2 惯性单位和 SpinTAC 速度控制器所需的标度单位之间进行转换。 应将此公式的结 果作为惯性输入 SpinTAC 速度控制器。 384 管理启动时间 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 忽略惯性估算 éù ê Inertia ê êë PU pu s2 ú ú úû = wNORM ´ 2p jEMF ´ ANORM ´ PP ´ Inertia éëKg ´ m2 ùû (26) 在此公式中,使用以下符号: • ωNORM 定义为以 Hz 表示的频率和以 pu 表示的频率之间的比值。 该值在 user.h 中定义为 USER_IQ_FULL_SCALE_FREQ_Hz。 有关详细信息,请参见4.1.1 节。 • φEMF 定义为电机反电势,单位为韦伯。 该值在 user.h 中定义为 USER_MOTOR_RATED_FLUX。 有关 详细信息,请参见4.6.7 节。 • ANORM 定义为以安培表示的电流和以 PU 表示的电流之间的比值。 该值在 user.h 中定义为 USER_IQ_FULL_SCALE_CURRENT_A。 有关详细信息,请参见4.1.5 节。 • PP 定义为电机极对数。 该值在 user.h 中定义为 USER_MOTOR_NUM_POLE_PAIRS。 有关详细信 息,请参见4.6.2 节。 尽管可以使用此公式计算系统惯性,但最好还是使用 SpinTAC 速度识别来估算系统惯性。 后者会考虑难以 计算其惯性的对象,从而提供最准确的系统惯性值。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 管理启动时间 385 Chapter 11 ZHCU083F – January 2013 – Revised July 2014 调整稳压器 Topic ........................................................................................................................... Page 11.1 PI 控制器简介.................................................................................................... 387 11.2 电流控制器的 PI 设计 .......................................................................................... 389 11.3 速度控制器的 PI 设计 .......................................................................................... 392 11.4 根据稳定性和带宽计算 PI 增益 .............................................................................. 394 11.5 根据阻尼因子计算速度和电流 PI 增益 ..................................................................... 397 11.6 向速度环路添加极点时的考量................................................................................ 401 11.7 速度 PI 控制器需要考虑的参数:电流限制、钳位和惯性 ............................................. 403 11.8 为 FOC 系统设计 PI 控制器时的注意事项................................................................ 406 11.9 采样和数字系统考量............................................................................................ 410 386 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn PI 控制器简介 11.1 PI 控制器简介 回顾二十世纪二十年代 PI 控制器诞生的历史。 二十年代早期,工程师 Nicolas Minorsky 通过观察舵手如何 在不同情况下操控船舶来为美国海军设计自动转向系统。 维基百科中的资料显示,他注意到舵手的操作在静 风条件下近似于对误差信号进行简单放大,但是该模型还不足以描述舵手在稳定干扰情况下(如强风)所做 出的响应。 于是增加了积分项以更正连续的稳定状态误差。 之后还添加了微分项来进一步提升可控性。 维基百科还指出,他在新墨西哥号战舰上对基于 PI 控制器的自动转向系统进行了各种测试。 调整后能够将 角度误差控制在两度以内, 增加微分 (D) 项后,可将误差进一步控制在六分之一度以内,这一结果优于大部 分舵手手动控制所能达到的程度。 Minorsky 发表了其研究结果(也是在二十世纪二十年代早期)。 现在我 们知道,他的这项发现开创了控制系统设计领域的新纪元。 图 11-1. 当时使用比例积分微分 (PID) 控制系统改装后的新墨西哥号战舰 我们经常会在研讨会中被问道:“如何调整 PI 控制器?” 通常,我们会通过波特图或一些模拟数据来证明调 整过程在某种程度上依赖于经验,并且对所需响应有非常主观的影响。 《InstaSPIN 用户指南》可集中帮助客户以更加明确的方式设计和调整 PI 控制环路(不受环路是速度环路还 是电流环路影响)。 当然,用户仍有很大选择空间,具体取决于用户所需的响应以及对基本 PI 结构本身进 行的各种微小变动。 但只要遵守一些基本规则(本文档中稍后将介绍),用户应能够调整 PI 环路。 该分析仅适用于只具有实极点的负载。 如果电机和负载之间的扭转谐振过大导致所研究负载具有显著的复极 点,则控制器必须比简单 PI 结构更为复杂才能抵消谐振效应。 但在大多数情况下,刚性联轴器会将扭转谐 振调整到可使用标准 PI 控制结构的范围内。 并且,假设负载无粘滞阻尼。 在大部分设计中这些假设均有 效。 但是,如果本节中所介绍的调整过程对给定设计无效,则可能是因为负载中存在复极点或粘滞阻尼从而 影响了结果。 图 11-2 显示了 PI 控制器的并联拓扑结构。 误差信号拆分进入两个独立的路径:一个直接进行放大,另一 个先放大然后求积分。 所包含的积分器将系统的稳定状态误差变为零,因为任何非零的稳定状态误差都会导 致积分器输出无界限。 随后,这两个信号路径在输出端通过简单的加法运算重新合并。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 387 PI 控制器简介 www.ti.com.cn 图 11-2. 并联拓扑结构 但是如何设置 Kp 和 Ki 的值呢? 这一命题一直以来就备受争议,并且我们无法直观了解各项对电机控制系 统所产生的影响。 Kp 项用于设定控制环路的高频增益,如上图所示。 Ki 项用于设定低频增益,理论上 DC 增益无限制。 界定高频与低频的频率被称为控制器“零点”,它对应于频率图的拐点。 尽管积分器在 PI 控制器运行过程中起重要作用,但它同时也带来了一系列挑战。 例如,假定控制环路中误 差为零,这意味着受控信号等于所需信号。 现在向受控信号添加一个较小的偏移,然后观察结果。 由于误 差信号不再为零,因此积分器输出将开始增大并尝试使误差信号重新为零。 现在移除偏移然后观察结果。 受控信号最终会重新变为所需值,但不是立即完成。 积分器输出仍然非常 大,这会导致清除积分器输出时受控信号强烈过冲所需值。 此时,“受控”信号的系统配置将不再受控,若不 加以限制甚至可能会对系统造成损害。 就好像压紧至饱和的弹簧突然得到释放一样。 这就是 PI 控制器的这 一效应称为“饱和”效应的原因。 有多种方法能够减轻“饱和”效应,但大部分技术都会不同程度地限制积分器 的输出。 本节中稍后将更加详细地讨论这一点。 PI 控制器的另一种常见形式是“串联”拓扑(我们将使用这种形式进行分析),如图 11-3 所示。 388 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 电流控制器的 PI 设计 图 11-3. 串联拓扑结构 由上图可知: Kpseries = Kp Kiseries = Ki Kp (27) 但在该结构中,Kpseries 用于设定所有频率的增益,而 Kiseries 直接定义控制器拐点(零点),单位为 rad/s。 从软件复杂程度来看,两种形式相同。 不过相对于并联拓扑,许多工程师更倾向于使用串联拓扑,原因是 Kpseries 和 Kiseries 直接与具体的系统参数相关联。 由于 Kpseries 只是开环传输函数的增益项,因此非常容易理 解其对控制器性能所产生的影响。 但零点和拐点在系统中有什么重要意义呢? 这部分内容将在后面进行讨 论。 11.2 电流控制器的 PI 设计 上一节中我们简单回顾了 PI 控制器的历史,还介绍了现在常用的两种拓扑形式。 无论使用哪种形式,频率 响应都相同,如图 11-4 所示。 从图中可以看出,PI 控制器的增益对系统稳定性有显著的影响。 但这也说 明图中的拐点(“零点”频率)对系统性能起重要作用,只不过这种作用可能比较难以理解。 要弄清楚这一 点,我们必须借助数学手段导出 PI 控制器的传输函数,然后了解控制器的“零点”在整个系统响应中如何发挥 作用。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 389 电流控制器的 PI 设计 www.ti.com.cn 图 11-4. 频率响应 使用串联形式的 PI 控制器,我们可将从误差信号到控制器输出的“s 域”传输函数定义为: ( ) PI s = Kpseries ´ Kiseries s + Kpseries = Kpseries ´ Kiseries æ ççè1+ s Kiseries s ö ÷÷ø (28) 根据该表达式,我们可以清楚地看到 s = 0 时为极点,s = Kiseries rad / sec 时为零点。 那么,该零点值为什 么如此重要? 要回答这个问题,让我们将 PI 控制器放入用于调节电机电流的电流控制器,如图 11-5 所 示。 图 11-5. 电流控制器中的 PI 控制器 我们将电机绕组近似看作简单一阶串联电路,该电路中包含电阻器、电感器和反电势电压源。 假设现在反电 势电压为常数(因为通常相对于电流来说反电势电压变化缓慢),我们可将从电机电压到电机电流的小信号 传输函数定义为: ( ) I(s) V (s) = 1 R 1 + L R s (29) 390 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 电流控制器的 PI 设计 如果我们还假设 Kpseries 项中包括总线电压和 PWM 增益比例,则可将“环路增益”定义为 PI 控制器传输函数 和 V 至 I 传输函数的结果: ( ) Gloop(s) = PI(s)´ I(s) V (s) = æ ç ç ç ç ç Kpseries ´ Kiseries s æ ççè1+ s Kiseries ö ÷÷ø ö ÷ ÷ ÷ ÷ ÷ æ ç ççè 1 R 1+ L R s ö ÷ ÷÷ø è ø (30) 为了确定系统总响应(闭环增益),我们必须使用以下表达式,这些表达式您在大学控制系统课程中见到 过: G(s) = Gloop (s) 1+ Gloop (s) (Assumin g the feedback term H(s) = 1) (31) 将公式 30 代入公式 31 得到: ( ) æ ç ç ç ç ç Kpseries ´ Kiseries s æ ççè1+ s Kiseries ö ÷÷ø ö ÷ ÷ ÷ ÷ ÷ æ ç çè 1 R 1+ L R s ö ÷ ÷ø ( ) ( ) G s =è ø 1+ æ ç ç Kpseries ç ç ç ´ Kiseries s æ ççè1+ s Kiseries ö ÷÷ø ö ÷ ÷ ÷ ÷ ÷ æ ç çè 1 R 1+ L R s ö ÷ ÷ø è ø (32) 请注意,表达式越来越复杂,但通过一些代数变换可将表达式简化为下式: ( ) G s = æ ççè1+ s Kiseries ö ÷÷ø æ ç çè Kpseries L ´ Kiseries ö ÷ ÷ø s2 + æ ç çè Kpseries R ´ Kiseries + 1 Kiseries ö ÷ ÷ø s + 1 (33) 分母是“s”的二阶表达式,表示传输函数中存在两个极点。 如果我们不谨慎选择 Kpseries 和 Kiseries,则容易在 最后得出复极点。 根据复极点与 jω 轴的靠近程度,系统可能会出现一些谐振峰。 因此我们立即假设选择 Kpseries 和 Kiseries 时要避免存在复极点。 也就是说,我们可以将分母表示为以下表达式,其中 C 和 D 为实 数: ( )( ) æ ç çè Kpseries L ´ Kiseries ö ÷ ÷ø s2 + æ ç çè R Kpseries ´ Kiseries + 1 Kiseries ö ÷ ÷ø s +1= 1+ Cs 1+ Ds (34) 如果将方程右侧的表达式乘开,将结果与方程左侧的表达式进行比较,可以看到要想得到实极点,必须满足 以下条件: L Kpseries ´ Kiseries = C´D (35) 和: R Kpseries ´ Kiseries 1 + Kiseries = C´D (36) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 391 速度控制器的 PI 设计 www.ti.com.cn 作为解公式 35 和公式 36 的第一步,只需要使公式 36 两侧的各项相等。 即: R Kpseries ´ Kiseries =C and 1 Kiseries =D (37) 我们马上就会了解进行上述替换的原因。 如果用公式 34 中所示的等效表达式替换公式 33 的分母,然后再 进行公式 37 中建议的替换,则得到: ( ) G s = æ ççè1+ s Kiseries ö ÷÷ø æ çèç1+ Kpseries R ´ Kiseries s ö ÷ ÷ø æ ççè1+ s Kiseries ö ÷÷ø (38) 请注意,替换“D”可导致在闭环增益表达式中得到极点而不会产生零点。 通过正确选择 C 和 D,我们不但最 终会得到实极点,而且生成的闭环系统响应只有一个实极点而无零点。 无尖峰频率响应或谐振情况,只是简 单的单极点低通响应。 此外,通过将公式 37 中建议的 C 和 D 表达式替换回公式 35,可得到下列等式: Kiseries = R L ü (39) 请记住,Kiseries 是出现控制器零点时的频率。 因此,为了得到公式 38 所描述的响应,我们需要做的是将 Kiseries(控制器零点频率)设置为设备极点。 现在我们已经知道如何设置 Kiseries。 但如何设置 Kpseries 呢? 下面重写闭环系统响应 G(s) 的表达式,进行 上述所有替换,将得到以下表达式: G(s) = 1 L Kpseries Þ Kpseries s+1 = L ´ Bandwidth ü (40) 总体来说,有一些简单的规则可以帮助您设计电流环路的 PI 控制器: Kiseries 可设定 PI 控制器的零点。 当控制自身传输函数中只有一个实极点的设备参数时(如电机中的电 流),应将 Kiseries 设为该实极点的值。 这样可消除极点/零点并生成同样只有单个实极点的闭环响应。 即非 常稳定、不含谐振峰的响应。 Kpseries 可设定闭环系统响应的带宽。 如公式 40 所示,Kpseries 越大,电流环路带宽越大。 我们将在后面的章 节中讨论如何选择合适的带宽。 无论选择的带宽频率是多少,都可能会出现 Kpseries 等于感抗的情况。 在下一节中,我们将讨论如何设计将 PI 电流控制器作为内部环路的级联 PI 速度环路。 11.3 速度控制器的 PI 设计 在上一节中,我们介绍了如何计算电机电流环路控制器的 P 和 I 系数(实际上是串联结构中的 Kpseries 和 Kiseries 系数)。 我们发现 Kiseries 可用于消除闭环系统响应中的零点,从而使系统中仅有一个实极点(即, 表现良好且稳定)。Kpseries 可设定闭环系统响应的带宽。 在本节中我们先来看一下包含其它 PI 控制器的速度控制环路。 速度环路的设计是否也能如此简单? 系数值 是否需要执行上一节电流控制器所使用的那些系统函数? 392 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 速度控制器的 PI 设计 实际上,关闭速度环路比关闭电流环路更为复杂一些。 另外,要正确设计速度环路,还需要在电流环路的基 础上了解更多的系统参数。 图 11-6 显示了构成级联速度控制环路的全部组件。 所谓“级联”是指控制系统由 具有一个或者更多内部环路的外部环路组成。 需要重点强调的是,我们只考虑具有单一集中总惯性的负载与 电机轴紧密连接且无粘滞阻尼的情况。 图 11-6. 级联速度控制环路 我们继续讨论上一节中的电流控制环路。 假设按照上一节讨论过的电流环路进行设计,则闭环传输函数为: ( ) Gcurrent s 1 = L Kpseries s+1 (41) 其中,Kpseries 是电流稳压器的 PI 结构中的误差相乘项。 Kiseries 对函数外部不可见,因为设置该参数是为了消除电流控制器传输函数中的极点/零点。 为避免将速度 控制器的系数与电流控制器的系数相混淆,我们将速度控制器的系数称为 spdKpseries 和 spdKiseries,如 图 11-6 所示。 如果是串联形式的 PI 控制器,则 spdKpseries 是误差相乘项 (spdKpseries),spdKiseries 是积分 相乘项 (spdKiseries)。 可使用与上一节相同的方程来定义速度 PI 控制器的传输函数: ( ) PIspeed s = spdKpseries ´ spdKiseries s + spdKpseries = æ spdKpseries ´ spdKiseries ççè1+ s s spdKiseries ö ÷÷ø (42) 从电机电流到电机转矩的传输函数不尽相同,具体取决于所使用的电机类型。 对于磁场定向控制 (FOC) 下 的永磁同步电机,q 轴电流与电机转矩之间的传输函数为: Mtr (s) = 3 2 P3 2 lr = 4 Plr (43) 其中: P = 转子极数 λr = 转子磁通(该值还等于反电势常数 (Ke),采用国际单位) 对于 AC 感应电机,q 轴电流与电机转矩之间的传输函数为: Mtr (s) = 3 4 P Lm2 Lr Id (44) 其中: P = 定子极数 ZHCU083F – January 2013 – Revised July 2014 调整稳压器 393 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 根据稳定性和带宽计算 PI 增益 www.ti.com.cn Lm = 磁化电感 Lr = 转子电感 Id = 对应于转子磁通的电流分量 现在,假设所使用的是永磁同步电机。 则最终得到的从电机转矩到负载速度的负载传输函数为: Load(s) = 1 1 Js (45) 其中: J = 电机与负载的惯性 将上述各项相乘可得到复合开环传输函数: GH(s) = æ ç ç ç ç ç è spdKpseries ´ spdKiseries s æ èçç1+ s spdKiseries ö ø÷÷ ö ÷ ÷ ÷ ÷ ÷ ø æ ç ç ç ç è 1 L Kiseries s ö + 1 ÷ ÷ ÷ ÷ æ çè ø 3 4 Plr öæ ÷ø çè 1 J 1ö s ÷ø (46) 然后将该方程后方的所有电机和负载参数整合为单个常量 K: K = 3Plr 4J (47) 简化后得到: GH(s) = K ´ æ spsKpseries ´ spdKiseries ççè1+ s2 æ ççè1+ L Kpseries ö s ÷ ÷ø s spdKiseries ö ÷÷ø (48) 通过查看公式 48 可确定速度控制器开环传输函数的以下特征: • 两个极点位于 s = 0 处,因此低频衰减率为每十倍频 40dB。 • 另一个极点位于 s = Kpseries L 处(电流控制器的极点) • 一个零点位于 s = spdKiseries 处 s 为了保持稳定运行, = Kpseries L 处极点的频率必须高于 s = spdKiseries 处零点的频率。 除此之外,还可以使 用 spdKpseries 与 spdKiseries 的无数种组合得到不同的系统响应,具体取决于是要更高的带宽还是要更高的稳 定性。 可以定义与系统稳定性成正比、与带宽成反比的单个参数,可使用该参数自动设置 spdKpseries 和 spdKiseries,从而产生所选带宽下的最大相位裕度。 我们将在下一节中对此过程进行详细介绍。 11.4 根据稳定性和带宽计算 PI 增益 在上一节结束时,我们讨论了使用单个参数帮助调整电机控制系统中的速度 PI 环路的可能性。 要深入研究 此参数,让我们回顾整个速度环路的开环传输函数: 394 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn GH(s) = K ´ æ spsKpseries ´ spdKiseries ççè1+ s2 æ ççè1+ L Kpseries ö s ÷ ÷ø s spdKiseries ö ÷÷ø 根据稳定性和带宽计算 PI 增益 (49) 其中: • K 是包含多个电机和负载相关项的系数 • spdKpseries 和 spdKiseries 是速度环路的 PI 系数 • L 是电机电感 • Kpseries 是电流环路的 PI 系数之一 • s 是拉普拉斯频率变量 s= 假设 Kpseries L 处极点的频率高于 s = spdKiseries 处零点的频率,并且单位增益频率介于上述两个频率之 间,则得到的波特图应与图 11-7 类似。 图 11-7. 波特图 曲线形状之所以重要的原因是 0dB 频率处的相移决定着系统稳定性。 在极点频率与零点频率之间分离已确 定的情况下,为使相位裕度最大化(相移:180°),0dB 频率的位置应恰好在对数刻度上极点频率与零点频 率之间的中点位置。 即, w0 dB = d ´ wzero (50) 和 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 395 根据稳定性和带宽计算 PI 增益 www.ti.com.cn wpole = d ´ w0 dB (51) 将 节 12.3.5.6 与 公式 51 合并可得到: wpole = d2 ´ wzero (52) 通过公式 49,能够发现已在 PI 系数项中对 ω极点和 ω零点进行了定义。 因此, spdKiseries = Kpseries d2 L ü (53) 其中,“δ”将定义为阻尼因子。 δ 值越大,零点角频率与电流环路极点频率之间的分离程度越大。 分离程度 越大,两个频率之间所能够达到的相位裕度峰值越大。 这种稳定性的提升建立在牺牲速度环路带宽的基础 上。 δ = 1 时,零点角频率与电流环路极点频率相等,这样能够消除极点/零点并且系统将变得不稳定。 由 于相位裕度 > 0,因此理论上只要 δ > 1 时,系统都是稳定的。但是,δ 的值接近 1 会导致性能上表现出严 重的欠阻尼。 稍后会对 δ 进行详细介绍,我们现在将注意力转向最后一个系数的确定:spdKpseries。 通过节 12.3.5.6,我 们发现速度环路的开环传输函数(公式 49)在频率等于零点拐点频率与 δ 的乘积时为单位增益 (0dB)。 即, K ´ spdKpseries ´ spdKiseries æ ççè1+ s spdKiseries s2 æ ççè1+ d2 ´ s spdKiseries ö ÷÷ø ö ÷÷ø s= j´d´spdKiseries =1 (54) 对公式 54 中的“s”进行指定替换和整理后,得到: d ´ K ´ spdKpseries d2 æ ç Kpseries ö ÷ =1 çè d2 ´ L ÷ø (55) 最终可解出 spdKpseries: spdKpseries = Kpseries L´d´K = d ´ spdKiseries K ü (56) 现在我们来回顾一下整个过程。 我们刚刚为含有两个独立 PI 控制器的电机(一个用于内部电流环路,另一 个用于外部速度环路)设计了级联速度控制器。 为了在电流环路中消除极点/零点,将 Kiseries 选择为: Kiseries = R L (57) Kpseries 可设定电流控制器的带宽: Bandwidth = Kpseries L (58) 定义了内部环路电流控制器参数后,接下来选择阻尼因子 (δ) 的值,该值能够精确量化速度环路稳定性和带 宽之间的权衡。 然后只需要对 spdKpseries 和 spdKiseries 进行计算: spdKiseries = Kpseries d2 ´ L (59) spdKpseries = d ´ spdKiseries K (60) 396 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 根据阻尼因子计算速度和电流 PI 增益 这种方法不用根据经验调整四个看似与系统性能相关性很小的 PI 系数,而是只需要定义两个有意义的系统 参数:电流控制器带宽和速度环路阻尼系数。 完成上述选择后,将自动计算四个 PI 系数。 电流控制器带宽必须是有意义的系统参数,但在速度控制系统中我们通常先指定速度控制器的带宽,然后根 据所指定的带宽值设置电流控制器带宽。 在下一节中,我们进一步讨论阻尼因子并找到根据所需速度环路带 宽设置电流环路带宽的方法。 11.5 根据阻尼因子计算速度和电流 PI 增益 到目前为止,我们在这几节中讨论了如何简化级联速度控制器设计,即从四个 PI 系数简化为两个“系统”参 数。 其中一个参数是电流控制器带宽。 另一个是阻尼因子 (δ)。 阻尼因子是代表系统稳定性与系统带宽之 间权衡的一个数字。 请记住,我们只考虑仅含转矩和惯性组件(即,无扭转谐振或粘滞阻尼)的负载。 接 下来我们进一步讨论时域和频域中的阻尼因子。 图 11-8 显示了电流控制器带宽随意设置为 100Hz 时系统的开环幅度和相位响应。 由于电流带宽值的作用只 是为频率轴提供参考点,因此其数值并不重要。 但无论电流带宽是多少,曲线形状都不会改变。 阻尼因子 在 1.5 至 70 范围内扫描,分为 8 个离散段,以显示如何对系统响应产生影响。 值为 1.0 时所对应的条件 是:开环增益截距为 0dB 且刚好在电流控制器带宽的频率处。 这会导致在该频率处极点/零点消除且相位裕 度为零。 很明显,相位裕度为零对系统来说并不是件好事情。 图 11-8. 速度控制器开环幅度和相位响应是 δ 的函数 阻尼因子方程的一个目标是在给定带宽条件下获得最大稳定性。 对于上图中的某个频率,当开环相位曲线中 的相位裕度峰值达到自身最大值时,开环增益曲线恰好通过 0db。 随着稳定性因子增加,最终会在信号相移 接近 -90 度时达到下降点。 但是,增益裕度会继续增加,其结果是大幅降低系统响应速度。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 397 根据阻尼因子计算速度和电流 PI 增益 www.ti.com.cn 图 11-9 显示了速度环路的闭环幅度响应,仍假设电流控制器带宽为 100Hz。 与开环响应一样,实际电流控 制器带宽与曲线形状不相关,其作用只是为曲线提供特定的频率参考点。 图 11-9. 速度控制器闭环带宽为 δ 的函数 速度闭环响应的 -3dB 截止点与电流控制器极点之间所需的频率分离程度可在显示各个阻尼因子值的图底部 清楚地看到。 随着阻尼因子趋于一致,速度环路中的复极点将接近所需频率阶跃响应阻尼振铃。 这一点可 能在图 11-10 中能更好地体现出来,图中显示了系统对各个阻尼因子值的标准化阶跃响应。 由于过冲数量 过大,因此通常不接受 2 以下的值。 对于范围的上限,通常不接受远大于 30 的值,同样是因为过冲数量过 大。 不能接受 30 以上的值还有一个原因是上升时间和稳定时间过长,如阶跃响应曲线所示。 通常将 2 至 30 的值设定为目标值。 398 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 根据阻尼因子计算速度和电流 PI 增益 图 11-10. 速度控制器阶跃响应为 δ 的函数 如果选取的是可以接受的最小阻尼因子值,但对系统响应时间仍不满意,那么应采取哪些方法? 最好的方法 就是增加电流环路带宽。 但是这样会遇到一个问题,由于需要先确定电流环路带宽,然后才能确定给定阻尼 因子条件下的速度环路带宽,因此需要反复尝试。 但是我们可以利用这样一个事实,即可将此处显示的频率 曲线标准化为与电流环路带宽有关而与频率无关。 即,如果您的电机控制系统与本节中所讨论的系统类似, 则无论实际参数值为何,您都能够得到类似的频率曲线(以及瞬态阶跃曲线),而不同之处仅在于频率范 围(和时间范围)。 因此,我们可以利用这一事实制定一种方法,将设计过程中所需的重复次数减到最少, 同时将将电流环路带宽设置为速度环路带宽的函数: • 选择所需的速度环路频率响应(-3dB 截止频率)(BWs)。 • 通过图 11-10 中曲线的形状确定能够产生令人满意的速度环路响应时间的阻尼因子最小值。 我们发现可 以选择稍微过冲所需值的阻尼因子,这是因为最后积分器钳位会将过冲部分消除。 这时,频率范围与时 间轴无关。 • 使用以下公式(通过曲线拟合分析获得)计算支持设计要求所需的电流环路带宽: BWc = Kpseries L = BWs æ ç è d + 2.16 ´ e - d 2.8 - 1.86 ö ÷ (rad / sec) ø (61) 其中: • BWc 是电流控制器带宽 • Kpseries = 电流环路 PI 系数之一 • L = 电机电感 • BWs 是速度控制器带宽 • δ 是阻尼因子。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 399 根据阻尼因子计算速度和电流 PI 增益 www.ti.com.cn 继续按照本节之前讨论的方法计算四个 PI 系数。 示例 Anaheim Automation 24V 永磁同步电机具有以下特性: • Rs = 0.4Ω • Ls = 0.6mH • 反电势 = 0.0054V-s/rad(相对于中性点的峰值电压相位,在 SI 系统中也等于以韦伯为单位的磁通) • 惯性 = 2E-4 kg-m2 • 转子极数 = 8 所需速度带宽 = 800rad/s,阻尼因子 (δ) 为 4。确定支持速度环路带宽所需的电流环路带宽,然后计算四个 PI 系数。 解决方案 所需电流带宽可直接通过公式 61 确定: BWc = Kpseries 0.6E - 3 = 800 æ ç 4 + 2.16 ´ - e 4 2.8 è - 1.86 ö ÷ ø = 2126rad / sec (62) 根据公式 62,我们可得出 Kpseries = 1.28 (63) 可以得到 Kiseries = R L = 667 (64) 也可以得到 spdKiseries = Kpseries d2 ´ L = 133 (65) 最后可以得到 K = 3Plr = 162 4J (66) 和 spdKpseries = Kpseries L´d´K = 3.29 (67) 本例中模拟得到的速度瞬态阶跃响应结果如图 11-11 所示,其中时间轴已根据此设计示例进行了适当地缩 放。 400 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 向速度环路添加极点时的考量 图 11-11. 以上示例中的速度控制器设计模拟阶跃响应 到目前为止,我们的分析假设速度环路中仅有三个极点,两个位于 s = 0 处,一个与电流控制器相关。 但如 果存在其它极点怎么办? 例如,在许多系统中速度反馈信号通常由低通滤波器控制。 那么它是如何影响调 整过程的呢? 这将在下一节中进行介绍。 11.6 向速度环路添加极点时的考量 在上一节结束的时候,我们提出了一个之前未讨论到的问题。 在所有 PI 调整部分中一直在讨论的是在理论 系统中确定 PI 系数值的方法,其中速度环路的两个极点位于“s”等于零处,第三个极点来自电流控制器中。 通常,传输函数中存在一个或者多个额外的极点。 例如,与上述理想条件的最常见偏差是速度反馈信号需要 进行滤波,如图 11-12 所示。 图 11-12. 含经过滤波的速度反馈的速度控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 401 向速度环路添加极点时的考量 www.ti.com.cn 生成高质量高带宽的速度信号,并且要求设计耗时不得过多同时无需大幅增加系统成本,这确实是一项挑 战。 现在已开发出能够收集编码器边沿转换信息的技术,同时使用观测器技术。 但速度信号通常还是需要 进行滤波处理。 这会将速度环路的开环传输函数变为图 12-9 中所示的形式。 GH(s) = K ´ spdKpseries ´ spdKiseries æ ççè1+ s spdKiseries s2 æ ççè1+ L Kpseries öæ s ÷ ÷ø ´ ççè1+ s Kspd _ filter ö ÷÷ø ö ÷÷ø (68) 其中: • K 是包含多个电机和负载相关项的系数 • spdKpseries 和 spdKiseries 是速度环路的 PI 系数 • L 是电机电感 • Kpseries 是电流环路的 PI 系数之一 • Kspd_filter 是速度反馈滤波器的极点 • s 是拉普拉斯频率变量。 那么这会对调整过程产生什么影响呢? 可从多个角度看待这个问题,相应地也有多种可能的解决方案。 选 定的阻尼因子和极点相对位置都有助于应对上述挑战。 那么让我们来逐个应对这些挑战。 上一节中概述的方法假设根据应用要求选择合适的速度带宽和阻尼因子,然后利用步骤 3 中列出的方程计算 出能够满足设计要求的所需电流控制器带宽。 但事实证明,步骤 3 中计算得出的极点可定义单位增益频率 以上所有极点的最小频率。 掌握这一信息后我们就可以为 spdKiseries 定义更加通用的表达式: spdKiseries = p d2 (69) 其中: p = 速度开环频率响应中 0dB 频率以上的极点最小值。 p 的值可通过电流控制器、速度滤波器或其它设备进行设置。 由于 spdKpseries 参考 spdKiseries,因此其值也 可能会受到影响: spdKpseries = d ´ spdKiseries K (70) 如果对于给定 δ,无法满足所需闭环速度带宽与 p 之间所需的频率分离程度,则需要有所取舍。 就像水球一 样,握紧水球的一部分,水球上的另一部分就会凸起。 这种情况下,可以选择牺牲阻尼因子保证带宽,反之 亦然。 如果电流控制器极点和速度滤波器极点的频率分离不超过半个十倍频且 δ 小于 3,则问题会更加严重。两个 极点都过于接近 0dB 频率并且同时降低相位裕度,此时会出现比预期更加严重的欠阻尼响应。 例如, 图 11-13 显示了系统阶跃响应,其中用于按上一节所述计算 PI 系数的阻尼因子为 2.5。 绿色曲线是假设不 对速度信号进行滤波得到的曲线。 红色曲线显示的是增加速度反馈滤波器后的曲线,其中滤波器极点值等于 电流控制器极点值。 系统仍然稳定,但是阻尼值 δ 远小于预期的 2.5。 此时我们有两种选择,增加阻尼因 子(结果是降低速度环路频率响应速度),或将其中一个极点移至较高频率处。 蓝绿色曲线表示采用第一种 402 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 速度 PI 控制器需要考虑的参数:电流限制、钳位和惯性 选择,将阻尼因子从 2.5 增加到 3.8 以将过冲降至原始预期值。 遗憾的是,这会导致带宽降低,由瞬态时间 变长指示。 黄色曲线表示采用第二种选择,将其中一个极点值增加 3 倍(大约半个十倍频)。 这种情况 下,瞬态时间几乎不会受到影响,但是阻尼效果仍然不如绿色波形。 可以继续增加极点值,在大约一个十倍 频的分离时可再次获得非常接近绿色波形的响应。 但在许多情况下,移动其中一个极点会对系统造成其它负 面影响。 图 11-13. 含可变阻尼和极点配置的系统阶跃响应 到目前为止,仅处理过“小信号”条件(即,无饱和效应的线性操作)。 但实际上,阶跃瞬态响应几乎始终包 含系统电压或电流级别饱和,这会延长响应时间。 当出现这种情况时,可以提高所需 PI 增益,但这无法缩 短响应时间。 事实上,这通常只会加大过冲,因为积分器作用于最终会被清除的增益误差信号。 那么此问 题该如何解决呢? 是否只能使用较小的积分器增益? 事实证明,有一种解决方法不需要更改积分器增益, 我们将在下一节中介绍该方法。 11.7 速度 PI 控制器需要考虑的参数:电流限制、钳位和惯性 到目前为止,我们仅讨论了线性系统中的调整问题。 这是因为在稳定状态条件下,系统稳定后,就会发现系 统在线性区域中运行且 AC 信号成分非常少。 因此,通过执行小信号(线性)分析,您可以了解未在饱和状 态下运行时的稳定程度。 但通常实际情况是系统会因电压和/或电流限制而达到饱和,尤其是在高瞬态条件 下。 该饱和效应将在 PI 控制器中发挥重要作用;尤其是积分器。 由于电机所能产生的最大转矩受限于电流 限制,因此系统的加速度也同样受限制。 但是积分器无法感知这一点,而是认为可以通过增加输出来使电机 提速。 由于系统已经饱和,因此增加的这部分积分器输出对饱和情况毫无帮助。 积分器所做的只是在系统 退出饱和区后产生可导致系统过冲的极大输出。 为此,大多数 PI 积分器输出会被钳位,以防止其在系统已 经饱和的情况下继续产生不必要的增量。 简单的静态钳位方案如图 11-14 所示。 最常见的情况是将钳位值设置为与 PI 输出限值相等。 例如,用于调 节速度的 PI 控制器输出限值通常就是您所设置的电流限值,这是因为速度 PI 输出是电流 PI 控制器的基准 输入信号。 但并不是说积分器限值必须等于 PI 输出限值,有许多设计会根据特定应用采用不同的钳位值。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 403 速度 PI 控制器需要考虑的参数:电流限制、钳位和惯性 www.ti.com.cn 图 11-14. 采用静态积分器钳位的 PI 控制器 图 11-15 显示了性能比静态机制更为出色的动态钳位方案。 该方案的设计理念基于这样一种原理:如果系 统已因 P 增益达到输出饱和,为什么还要继续进行积分? 只有在积分器输出发生变化会导致 PI 控制器输出 变化时,积分器才可以继续不受约束地对误差进行积分。 图 11-15. 采用动态积分器钳位的 PI 控制器 积分器钳位的效率如图 11-16 中的模拟曲线所示。 下面将采用所需速度阶跃从零到目标速度 (1500RPM) 模 拟Chapter 5中介绍的系统。 下图所示为无钳位、静态钳位(积分器钳位值等于输出钳位值)和动态钳位条 件下的系统过冲效果。 可以看到,无积分器钳位的结果完全不能接受,因为这种条件下过冲极其严重,会触 发进一步系统饱和与震荡。 静态积分器钳位极大地改善了这一情况。 但动态钳位能够进一步提升系统性 能,其过冲峰值仅为本例中静态钳位过冲峰值的六分之一。 404 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 速度 PI 控制器需要考虑的参数:电流限制、钳位和惯性 图 11-16. 积分器钳位技术示例比较 现在来回顾并讨论一下整个讨论中极为重要的一部分。 如果不知道系统中的关键要素 - 惯性,则这七节中所 讨论的所有内容都没有意义。 不了解惯性就无法稳定速度环路。 通常,可通过旋转负载的外形尺寸和质量 分布来计算惯性。 如果电机轴上有减速机且齿轮速比足够大,那么由于传输惯性与匝数比的平方成反比,因 此负载惯性通常可忽略,只需要处理大多数数据表中所列出的电机惯性。 如果上述选项均无效,还可使用几 种技术(通常涉及某种类型的控制加速度、减速度或二者)来测量惯性。 但是,将电机轴上的静态转矩负载 纳入考虑的技术并不常见(文中的“静态”负载是指不随时间变化的负载,如摩擦力或升降机负载)。 建议使 用以下技术(但截至撰稿时未经测试),该技术的惯性估算效果应优于上述技术: 1. 使用 PI 调整部分中讨论的技术设计电流控制器。 2. 将速度环路的 PI 系数设定为保守值,仅允许电机进行加速(即,此时不关注动态响应迟缓的问题)。 3. 将电机加速至低速状态并使其能够保持稳定(以使惯性转矩为零)。 然后读取平均电机转矩(图 11- 17)。 4. 在速度较大时重复步骤 3 并生成平均转矩读数(为速度的函数)图(图 1)。 记录最高速度设置所需的 平均电流。 然后关闭电机,使电机停止工作。 5. 禁用速度环路,仅使用电流模式,向电机施加步骤 4 中电流的 1.2 倍至 1.5 倍的电流。 当速度达到步骤 4 中所记录转矩值所对应的速度时,重新记录转矩(图 2)并获取时间戳。 6. 从图 2 中减去图 1(得到的仅为加速转矩)(图 3)。 7. 对于图 3 中的各个点,计算目标点前后的点的增量速度和增量时间。 用增量速度除以增量时间得到该点 的局部加速度值。 8. 针对图 3 中的各个转矩值,将其除以步骤 7 中对应点的局部加速度以生成惯性 (J) 曲线图(速度的函 数)。 9. 计算出不同速度下的平均惯性值以获得系统惯性的单一估算量。 可预先在测功机试验台上完成该过程,如果可通过控制算法测量转矩(如 InstaSPIN-FOC 的转矩输出), 也可将该过程作为目标应用电机调试过程的一部分来执行。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 405 为 FOC 系统设计 PI 控制器时的注意事项 www.ti.com.cn 到目前为止,我们仅讨论了 PI 调整中独立于控制拓扑的一般情况。 下一节将介绍设计用于磁场定向控制 (FOC) 系统的 PI 控制器时需要注意的一些细节。 图 11-17. 平均电机转矩读数 11.8 为 FOC 系统设计 PI 控制器时的注意事项 下面看一下到目前为止我们针对磁场定向控制 (FOC) 系统所讨论过的关于 PI 调整的各个主题。图 11-18 显 示了采用三个 PI 控制器的典型磁场定向系统:两个用于控制电流的正交分量,一个用于控制速度。 图 11-18. PMSM 的典型 FOC 速度控制 与其它控制算法相比,磁场定向系统中的速度控制器的设计变化不大。 只需确保在计算速度控制器的系数时 使用 q 轴电流控制器值。 但是仍存在会对电流控制器设计方法产生影响的细微差异,这部分内容将在之后 介绍。 406 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 11.8.1 电机类型间的 FOC 差异 为 FOC 系统设计 PI 控制器时的注意事项 从控制器(可决定 PI 系数)的角度看,电机的等效 RL 电路会有所不同,具体取决于电机类型。 对于 BLDC 和永磁同步电机 (PMSM),R 仅表示定子电阻,L 为定子电感。 但如果使用交流感应电机 (ACIM), 则情况有所不同。 两个轴都需要使用的等效电感值不是定子电感值,而是“串联”电感(有时也称“漏”电 感),定义如下: L = Ls æ ççè1- Lm2 LsLr ö ÷÷ø = Ls ´s (71) 其中: • L = 等效串联电感 • Ls = 定子电感 • Lm = 磁化电感 • Lr = 转子电感 • σ = 感应电机的“漏磁因数” 同样,对于 ACIM 的电流控制器,d 轴和 q 轴之间的电阻值也会有所不同。 对于 d 轴控制器,等效电阻即 为定子电阻 Rs。 但对于 q 轴,等效电阻是定子电阻与转子电阻的总和 (Rs + Rr)。 如果计算 Kpseries 和 Kiseries 时没有考虑这些细节,则最后得到的 PI 控制器将无法与电机兼容,从而导致无法达到最佳控制水 平。 11.8.2 Q 轴与 D 轴间的耦合 事实证明 d 轴电流控制与 q 轴电流控制之间并不是相互独立的。 在电机内部,q 轴电流会对 d 轴电流产生 影响,反之亦然。 对于 PMSM,可通过以下微分方程说明这一点。 id (R + DLs ) = Vd + wLsiq (72) iq (R + DLs ) = Vq - w(Lsid + Ke ) (73) 其中: • R = 定子电阻 • Ls = 定子电感 • D = 微分运算符 • ω = 电频率 • Ke = 反电势常数 从公式 72 可以看出 d 轴电流不仅受 d 轴电流稳压器的输出电压 (Vd) 影响,而且受以 iq 为函数的另一个电 压的影响。 根据公式 73,Vq 同样要与电压“ω(Ls id + Ke)”竞争,二者共同控制 iq 电流。 对于上述两种稳压 器,这种交叉耦合效应表现为意外的干扰,在高速瞬态情况下最为显著。 要修正这一情况,应将前馈去耦合 控制用于各个轴以准确消除上述竞争电压项。 此修正会使各个稳压器等效为简单 RL 电路,就好像使用的是 DC 电机。 结果即为稳压器拓扑,如图 11-19 所示。 为判断该技术是否有效,请考虑图 11-20 的模拟结 果,其中显示了在采用以及不采用去耦合补偿的条件下 Q 轴电流的阶跃响应及其如何对 d 轴电流产生影 响。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 407 为 FOC 系统设计 PI 控制器时的注意事项 www.ti.com.cn 图 11-19. PMSM 的去耦合 PI 控制器 408 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 为 FOC 系统设计 PI 控制器时的注意事项 图 11-20. 模拟电流稳压器去耦合有效性 对于 AC 感应电机,修正会更加复杂一些。 用于定义 AC 感应电机运行的微分方程如下所示: id (Rs + DLss) = Vd + wLs s iq - Lm Lr Dlrd (74) iq (Rs + DLss) = Vq - wLs s id - w Lm Lr lrd (75) 其中: • Rs = 定子电阻 • Ls = 定子电感 • σ = 公式 71 中定义的漏磁因数 • D 为微分运算符 • ω = 电频率 • Lm = 磁化电感 • Lr = 转子电感 • λrd = d 轴转子磁通 与 PMSM 电机的情况类似,除 Vd 和 Vq 分别竞争对 id 和 iq 的控制外还存在其它电压。 因此,可向 Vd 和 Vq 增加补偿电压以消除其它电压项的影响。 此会使各个轴等效为简单 RL 电路,就好像使用的是 DC 电 机。 但如果使用的是 ACIM,请记住,用于计算 Kpseries 和 Kiseries 的电感值等于定子电感乘以漏磁因数 σ, 如公式 71 所示。 用于向 Id 和 Iq 稳压器输出提供修正电压的补偿模块如图 11-21 所示。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 409 采样和数字系统考量 ω Rr Lm Lr id +Σ - iq Lm / Lr ∫ r / LrR +Σ - Ls − Lm2 Lr Lm / Lr +Σ + Ls − Lm2 Lr www.ti.com.cn Vd compensation Vq compensation 图 11-21. ACIM 轴去耦合所使用的补偿模块 11.9 采样和数字系统考量 在整个 PI 调整部分中,我们讨论了一种实用有效的级联速度环路 PI 控制器调整方法,该方法仅需指定速度 环路所需的带宽和系统所需的阻尼因子。 利用上述两个参数以及一些基本的电机和负载参数,即可计算出速 度环路和内部电流环路的 PI 系数。 但我们并没有讨论过对系统施加的限值,尤其是在使用数字系统时。 显 然,为提高响应速度,需要更大的增益,即需要更高的带宽。 但上限是多少呢? 要回答这一问题,请参考图 11-22,其中显示了基于数字 FOC 的变频器 (VFD) 的高级视图。 为简化讨论, 将假设整个控制环路都由普通采样信号提供时钟(尽管实际应用中未实施该限制条件)。 许多情况下,速度 环路的时钟频率会比电流环路低很多,因为速度环路相关的频率通常要低得多。 410 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 采样和数字系统考量 图 11-22. 适用于 PMSM 的数字磁场定向控制系统 在模拟系统中,电机反馈信号的任何变化都会立即对输出控制电压产生影响。 但在图 11-22 所示的数字控 制系统中,系统在 PWM 周期开始时通过 ADC 对电机信号进行采样并执行相应的控制计算,然后将得到的 控制电压存入双缓冲 PWM 寄存器。 上述值在 PWM 模块中保持未使用状态,直到下一个 PWM 周期开始 时才会将其作为 PWM 输出的时钟信号。 从系统建模的角度看,这就相当于采样频率等于 PWM 更新频率时 的采样和保持功能。 采样和保持功能的固定时间延迟表现为滞后相位角,频率越高时滞后情况越严重。 图 11-23 显示了采样和保持功能的标准化频率曲线图,假设采样频率为 1。相位曲线是最重要的图形,因为 它显示了采样和保持功能的相位延迟频率能够达到远低于采样频率的水平。 例如,即使在采样频率的十分之 一处,采样和保持 (S&H) 功能仍然会产生 -18 度的相移。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 411 采样和数字系统考量 www.ti.com.cn 图 11-23. 采样和保持的幅度和相位曲线 与速度环路相比,电流控制器处理带宽更高的信号,因此电流环路通常承受 PWM 模块的大部分 S&H 影 响。 由于 S&H 与电流环路的信号路径串联,因此其幅度和相位影响都将直接添加到电流控制器的开环响应 中。 如果重写电流控制器的开环响应方程(假设进行了 PI 调整部分中建议的替换),则最终得到公式 76。 Gloop (s) = PI(s)´ I(s) V (s) = æ çè BWc s ö ÷ø (76) 其中: BWc 为选定的电流控制器闭环带宽。 很明显,0dB 频率出现在 s = BWc 时。 s = 0 处的单极点意味着 0dB 频率有 90 度的相位裕度。 尽管不存 在完美比率,但通常倾向于使用经验法则,即采样频率应至少为电流控制器带宽 (BWc) 的 10 倍。 这样可确 保 S&H 相位延迟的影响仅从电流控制器的相位裕度中减去 18 度,从而得到非常稳定的 72 度相位裕度。 当 然,如有需要还可设置更高的采样频率,但这通常需要使用具有更高 MIPS 的更加昂贵的处理器。 最后,看一下频率范围的上限。 在低频率下,粘滞阻尼可通过改变 0dB 频率下的相位裕度对速度环路响应 时间产生影响。 根据11.3 节,已建立电机转矩和负载速度间的以下传输函数: w(s) 1 1 T (s) = J s (77) 但如果存在粘滞阻尼,则需要使用部分电机转矩克服阻尼以便流畅移动。 由于粘滞转矩直接与负载速度成正 比,因此可将公式 77 改写为: 412 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn w(s) T (s) = 1 Js + kv = 1 kv æ ç è J kv s + ö 1÷ ø 采样和数字系统考量 (78) 其中: kv 是粘滞阻尼因子。 根据公式 78,添加粘滞阻尼项后使原本位于 s = 0 的极点移至 s = kv/J 处。图 11-24 显示了增加粘滞阻尼 后负载波特图发生的变化。 图 11-24. 粘滞阻尼 (kv) 对负载波特图的影响 如图 11-24 所示,随着粘滞阻尼从零开始增加,低频增益在值为 1/kv 处达到稳定。 在较低频率时,相位曲 线的净效应将增加更多的相位裕度,因为具有粘滞阻尼的负载的相位滞后始终少于仅具有惯性的负载。 因 此,当 kv 为非零值时稳定性得到实际提升。 但响应时间可能会受到影响,具体取决于图 11-24 中所示极点 频率对应的速度开环 0dB 频率位置。 因此,如果系统响应迟缓且电机输出似乎未达到额定转矩,则可能是 系统中粘滞阻尼过大。 在 PI 调整部分系列内容结束前,还有一个主题要讨论。 许多情况下,工程师正确计算了 PI 系数。 在代码 中使用这些系数后,出现电机旋转失控或静止不动的情况。 为什么会发生这种情况? 很有可能是以下情况 之一出现故障: 11.9.1 积分增益中的采样周期考量 没有考虑采样频率对 I 增益项的影响。图 11-25 显示了如何实现 PI 控制器的典型积分器。 为按比例输出以 便匹配模拟积分器所提供的值,必须将信号乘以采样周期“T”。 为了避免进行两次单独的乘法运算,大部分 代码示例直接将 T 和 I 增益项放在一起。 如果不考虑 T,则积分器增益将远大于预期值。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 调整稳压器 413 采样和数字系统考量 www.ti.com.cn 图 11-25. 典型数字积分器实现 11.9.2 数字格式考量 到目前为止,我们假设数字格式本身没有任何限制。 如果使用的是浮点处理器,则无需担心 PI 项的小数部 分。 但出于成本考虑,大多数电机控制应用都将在定点计算机上实现。 好消息是 TI 已开发出链接库可以解 决这一问题,该库位于大多数 C2000 处理器的只读存储器 (ROM) 中。 该链接库名为“IQ Math”库,代表“整 数商”。 借助该库,用户可以轻松地在定点计算机上处理浮点值,而不会像使用全浮点支持器件那样受到性 能影响。 IQ math 可在代码中创建新的变量类型,通过“IQ”后跟数字来指定。 例如,如果使用 32 位变量, 其变量类型为“IQ24”。 这表示所有此类型的变量小数部分均为 24 位,整数部分均为 8 位。 但偶尔会发生这 样的情况:有人将 TI 代码复制到其设计中,但没有意识到系数是以 IQ 格式表示的。 例如,如果 I 增益的计 算结果为 10,000(IQ0 格式为 0x00002710),但未意识到代码已假设变量为 IQ24 格式,则最终得到的积 分器增益为 0.596E-3 而不是 10,000。 很明显这两个值不同。 如果所有 PI 系数都发生了同样的错误,则电 机很可能静止不动,因为所有增益均过低。 因此,建议确保系数使用的数字格式已知。 11.9.3 PI 系数换算考量 最后,PI 调整部分系列内容中的 PI 系数换算已完成(假设要表示整个信号链的实际系统值)。 例如,速度 PI 控制器的输出等于电流控制器的实际输入基准电流(单位为安培)。 电流控制器输出等于对电机绕阻施 加的实际电压。 但在许多设计中,PI 控制器输出将标准化为标么值换算,其中值 1 代表可能的最大值,值 1 代表可能的最小值。 例如,电流稳压器输出可按以下方式换算:1 对应 100% PWM,-1 对应 0% PWM。 上述情况下,需要了解 PI 输出与所控制的实际系统参数之间的确切换算系数,以便对 PI 系数做出相应调 整。 414 调整稳压器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Chapter 12 ZHCU083F – January 2013 – Revised July 2014 InstaSPIN-MOTION 控制器 对于大多数运动系统,均需要对系统的速度和/或位置进行调节。 如Chapter 11所述,行业标准速度控制器 是 PI 控制器。 PI 控制器存在很多固有的缺陷。 • 为了调整特定速度和负载运行点的控制,需要调整多个参数。 这些参数将生成多维解决方案集,而增益 通常需要通过实验确定,这会使调整十分困难。 • 适用于该特定调整的速度和负载的范围非常小。 如果是高度动态系统且有许多不同的速度和负载运行 点,则需要针对每个运行点调整 PI 控制器。 SpinTAC 控制器可以解决这些问题。 SpinTAC 可提供高级速度和位置控制,并具有主动抗扰控制 (ADRC),可通过单个调整参数确定所有增益。 ADRC 适用于具有高度不确定性的模型,这意味着它在系统 变动时能够稳定运行。 干扰定义为系统中的任何不良行为。 非模型化的动态过程和干扰所导致的误差将由 SpinTAC 控制器进行估 算和补偿。 该控制器的独特之处在于将系统中的所有不良行为视为可估算和抑制的干扰进行处理。 这使得 SpinTAC 控制器可通过单个调整参数对多个位置、速度和负载进行控制。 该单个调整参数称为带宽,用于确定系统的抗扰性以及指示系统抑制干扰的积极程度。 通过使用此单个参 数,可以轻松调整 SpinTAC 速度控制器。 调整动态系统控制器时要考虑的两个主要因素是稳定性和性能。 Topic ........................................................................................................................... Page 12.1 稳定性.............................................................................................................. 416 12.2 SpinTAC 速度控制的软件配置 .............................................................................. 422 12.3 速度控制中的最优性能......................................................................................... 425 12.4 SpinTAC 位置控制的软件配置 .............................................................................. 434 12.5 位置控制中的最优性能......................................................................................... 437 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 415 稳定性 www.ti.com.cn 12.1 稳定性 控制系统的稳定性是工程系统中的安全问题。 系统稳定性有多种定义:李雅普诺夫稳定性、有界输入有界输 出稳定性和输入-状态稳定性。 为简单起见,本文档中使用李雅普诺夫渐近稳定性作为稳定性标准,这意味 着系统本身能够逐渐收敛于平衡点。 在速度控制中,平衡点是指阶跃响应的目标速度,或跟踪变化的参考速度时的速度轨迹。 在位置控制中,平 衡点是指阶跃响应的结束位置或转换期间变化的位置参考。 评估系统稳定性的一种简单方法是看阶跃响应最终是否收敛于设定点。 稳定系统和不稳定系统的典型阶跃响 应如图 12-1 所示。 setpoint 2 case 3:unstable 2 1 1 0 0 5 10 15 20 case 1: stable 2 1 0 0 5 10 15 20 case 4: unstable 2 1 0 0 5 10 15 20 case 2: stable 2 0 0 5 10 15 20 case 5: unstable 2 1 1 0 0 5 10 15 20 0 0 5 10 15 20 图 12-1. 稳定系统和不稳定系统的典型阶跃响应 上图显示了应用单位阶跃输入时的系统响应。 左上角是设定点输入信号。 情况 1 和 2 为稳定系统;情况 3、4 和 5 为不稳定系统。 在某些实例中会将情况 3 定义为临界稳定,因为其响应为有界振荡。 12.1.1 稳定性量化分析 经典控制设计可以对系统进行建模、生成运行点的近似线性表达式,以及使用波特图分析通过增益裕度和相 位裕度来评估稳定性。 增益裕度是指相位曲线到达 -180° 时频率的幅度曲线值,为负数。 相位裕度是指幅 度曲线的增益为 0dB 时频率的相位曲线值与 -180° 的差值。 为使系统能够耐受一定程度的非线性和模型不匹配,通常需要使用 6 至 12dB 的增益裕量和 30 至 45度的相 位裕量。 12.1.1.1 SpinTAC 速度控制稳定性 假如电机的速度环路动态特性不考虑谐振模式、采样时间和输出饱和等不确定因素,SpinTAC 所控制的速度 环路的开环波特图将始终保持稳定,如图 12-2 所示的开环波特图。 相位曲线未达到 -180°,这意味着对增 益裕度没有限制。 相位裕度始终为正。 416 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 150 100 50 0 -50 -90 Magnitude (dB) 稳定性 Phase (deg) -120 -150 -180 -2 -1 0 1 2 3 4 10 10 10 10 10 10 10 Frequency (rad/s) 图 12-2. 典型的 SpinTAC 速度控制开环波特图 但是,大部分机械系统具有谐振模式(通常在高频时),这将导致相位曲线出现 180° 的变化,而幅度曲线 中会出现尖峰。 为保持系统稳定,输出饱和与采样时间也会限制控制器增益的可调范围。 12.1.1.2 SpinTAC 位置控制稳定性 SpinTAC 位置控制可以同时控制位置环路和速度环路。 位置控制比速度控制更为复杂。 相位曲线在 -180° 处有一个交叉,可在该处测量增益裕度。 SpinTAC 位置 控制可提供良好的负增益裕度以耐受系统的变化。 通常,此负增益裕度代表惯性测量不正确时已配置的惯性 值可以比实际系统惯性值大多少(请参见图 12-3)。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 417 稳定性 150 SpinTAC POS CTL Open-loop Bode www.ti.com.cn 100 Magnitude (dB) 50 0 -50 -90 -135 Phase (deg) -180 -225 -270 -1 0 1 2 3 4 10 10 10 10 10 10 Frequency (rad/s) 图 12-3. 典型的 SpinTAC 位置控制开环波特图 与速度控制类似,位置控制也会受高频谐振模式和噪声的影响,为保持系统稳定,控制器增益的可调范围也 将受到限制。 这是所有类型控制器的常规控制设计注意事项。 12.1.2 性能 通常可以按两种标准来评估控制器的性能: 参考跟踪性能和抗扰性能。 参考跟踪性能用于显示系统跟随所需轨迹的接近程度。 当设定点发生变化时,此性能可显示系统在合理过冲 下达到新设定点的速度。 抗扰性能用于显示向系统施加干扰后系统出现的偏离程度以及对偏离进行补偿的速度。 可在时域和频域对控制器的性能进行评估。 12.1.2.1 频域分析 如果能够获得系统的近似线性模型,则可在频域评估系统性能。 本部分的目的是以工程语言(波特图分析) 直观描述 SpinTAC 速度控制和 SpinTAC 位置控制性能,而非要求用户对给定系统进行分析。 SpinTAC 速度控制设计为可同时优化抗扰性能和跟踪性能轨迹并通过单个参数(即带宽)来调整控制。 典 型参考跟踪性能波特图和抗扰性能波特图如图 12-4 所示。 418 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Magnitude (dB) -20 -40 -60 -80 -100 90 45 0 -45 -90 -1 0 10 10 Phase (deg) SpinTAC CTL E(s)/R(s)Bode Magnitude (dB) SpinTAC CTL Input Disturbance Sensitivity Bode 0 -10 -20 -30 -40 -50 -60 90 45 Phase (deg) 0 -45 -90 1 2 3 4 -1 0 1 2 3 10 10 10 10 10 10 10 10 10 Frequency (rad/s) Frequency (rad/s) 图 12-4. 典型的 SpinTAC 速度控制性能波特图 稳定性 4 10 Magnitude (dB) 如图 12-4 所示,误差/参考波特图和输入干扰灵敏度波特图的幅度为负值,单位为 dB。 幅度曲线上的负值 越多,系统性能越好。 SpinTAC 位置控制的性能分析与 SpinTAC 速度控制类似。 典型性能波特图如图 12-5 所示。 -20 -40 -60 -80 -100 -120 -140 540 SpinTAC POS CTL E(s)/R(s)Bode Magnitude (dB) -40 -60 -80 -100 -120 -140 90 SpinTAC POS CTL Input Disturbance Sensitivity Bode Phase (deg) 450 0 360 -90 270 180 -180 -1 0 1 2 3 4 -1 0 1 2 3 4 10 10 10 10 10 10 10 10 10 10 10 10 Frequency (rad/s) Frequency (rad/s) 图 12-5. 典型的 SpinTAC 位置控制性能波特图 Phase (deg) 12.1.2.2 时域分析 可在时域中轻松评估性能。 表 12-1 中列出了时域常见标准。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 419 稳定性 性能标准 过冲 稳定时间 最大绝对误差 (MAE) 积分绝对误差 (IAE) 表 12-1. 时域常见标准 www.ti.com.cn 说明 首次经过设定点后偏离设定点的最大值 从启动到最终进入阶跃设定点附近定义的百分比(通常为 2% ~ 5%)范围内所需要 的时间 偏离设定点的最大绝对值,用于指示最坏情况下的值 偏离设定点的积分绝对值,用于指示随着时间推移产生的偏离 12.1.3 稳定性和性能之间的权衡 通常,系统稳定性和性能之间存在一种权衡关系。 实际系统中始终具有噪声和不确定因素(高阶未知动态特 性,如谐振模式), 因此积极调整的控制器会表现出更好的性能, 但是当控制器调整到某种程度后,系统 已接近不稳定条件或允许进入系统的噪声过高,此时会降低系统性能。 12.1.4 调整 SpinTAC 控制器 通过使用单个系数调整,SpinTAC 使您可以快速地对速度和位置控制进行测试和调整,提高响应速度。 这 种单一增益(带宽)适用于一个应用的整个速度和负载变化范围,降低了系统复杂度,减少了系统调整时 间。 基于多变量 PID 的系统经常需要十多个或更多速度和负载的已调整系数集,才能处理所有可能的动态 情况。 12.1.4.1 注意事项 在调整闭环控制器时需要考虑噪声、谐振模式和采样时间。 SpinTAC 通过一个调整参数简化了调整过程。 通过调整带宽,可在保持稳定性裕度的前提下轻松达到所需的性能。 当施加的干扰负载大小相同时,随着带 宽的增加,距离设定点的偏离将减小。 但随着带宽的增加,控制器用于确定输出的噪声也会增加。 确定正 确的调整通常就是在抗扰与生成的合成噪声之间达到平衡。 SpinTAC 控制器将自动考虑采样时间。 它使用系统的采样时间作为对可用带宽的一种限制。 此限制可避免 系统具有很高的带宽和很小的采样时间(可导致系统不稳定),从而避免系统进入不稳定状态。 12.1.4.2 调整 InstaSPIN-MOTION 控制器 通过单个参数调整 SpinTAC 控制器。 此参数称为带宽。 SpinTAC 控制器的带宽通过配置参数带宽范围进 行调整。 应使用此值调整控制器的带宽值以满足应用的控制要求。 对于位置控制应用,可使用单个带宽设 置位置增益和速度增益。 图 12-6 显示了随着带宽增加 SpinTAC 速度控制对转矩干扰的响应。 随着带宽增加,对转矩干扰的响应变 得更快,过冲变得更小。 当带宽增加过大后,如果从系统中移除转矩干扰,响应将在目标速度附近振荡。 这表明带宽设置过高。 在本示例中,理想带宽为 40rad/s。 这是因为在这种情况下移除转矩后,响应在目标 速度附近振荡最小。 420 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 稳定性 Speed [RPM] Torque [A] SpinTAC Velocity Control Bandwidth Comparison 5500 10 20 30 40 50 60 25 5250 rad /s 5000 rad/s rad/s rad/s rad/s rad /s 24 23 22 4750 21 4500 20 4250 19 4000 3750 18 17 16 3500 15 3250 14 3000 13 2750 12 11 2500 10 2250 9 2000 8 1750 1500 7 6 5 1250 4 1000 3 750 500 2 1 0 250 -1 0 -2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Time [sec] 图 12-6. SpinTAC 速度控制的带宽比较 图 12-7 显示了 SpinTAC 位置控制对转矩干扰的响应。 随着带宽增加,对转矩干扰的响应变得更快,过冲 变得更小。 当带宽增加过大后,电机将开始发出噪声并进行振荡。 这表明 SpinTAC 位置控制的输出已开始 振荡。 在本示例中,理想带宽为 50rad/s。 因为此时对干扰有良好的响应且输出振荡最小。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 421 SpinTAC 速度控制的软件配置 www.ti.com.cn Position Error [MRev] Torque [A] SpinTAC Position Control Bandwidth Comparison 0.5 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 -0.05 -0.1 0 -0.15 -0.2 -0.25 -0.3 -0.35 -0.4 -0.45 -0.5 -0.55 -0.6 -0.65 -0.7 -0.75 -0.8 -0.85 -0.9 -0.95 -1 20 rad/s 12 30 rad/s 34 40 rad/s 50 rad/s 5678 Time [sec] 60 rad/s 70 25 24 rad/s 23 22 21 20 19 18 17 16 9 10 11 12 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 图 12-7. SpinTAC 位置控制的带宽比较 要调整 SpinTAC 控制器,第一步是将速度参考设置为零。 电机速度达到零后,用手旋转电机轴感受电机保 持零速度的牢固程度,这可用于指示调整电机的积极程度。 按步长增量 1 增加带宽范 围“gMotorVars.SpinTAC.VelCtlBwScale”或“gMotorVars.SpinTAC.PosCtlBwScale”,继续感受电机保持零速 度的牢固程度。 对于无法接触到转轴的电机,为电机设定一个参考步长。 更改参考并监控控制器试图达到 新设定点的积极程度。 一旦 SpinTAC 控制器能够牢固保持零速度,针对保持零速度的带宽范围调整操作就 已完毕。 此时需要运行电机以确保此带宽适用于应用的整个工作范围 12.2 SpinTAC 速度控制的软件配置 配置 SpinTAC 速度控制需要四个步骤。 实验 5d“InstaSPIN-MOTION 速度控制器”是一个示例项目,在其中 执行了使用 SpinTAC 速度控制所需的步骤。 利用包含在 MotorWare 中的头文件 spintac_velocity.h,您可 以快速将 SpinTAC 组件包括在项目中。 12.2.1 包括头文件 这应该通过其余的模块头文件包含来完成。 在实验 5d 示例项目中,该文件包括在 spintac_velocity.h 头文 件中。 针对相应项目,可通过包括 spintac_velocity.h 完成此步骤 #include "sw/modules/spintac/src/32b/spintac_vel_ctl.h" 422 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 12.2.2 声明全局结构 SpinTAC 速度控制的软件配置 这应该通过主源文件中的全局变量声明来完成。 在实验 5d 项目中,此结构包括在已声明为 spintac_velocity.h 头文件一部分的 ST_Obj 结构内。 ST_Obj st_obj; // The SpinTAC Object ST_Handle stHandle; // The SpinTAC Handle 此示例为不希望使用已在 spintac_velocity.h 头文件中声明的 ST_Obj 结构的情况。 ST_VelCtl_t stVelCtl; // The SpinTAC Speed Controller object ST_VELCTL_Handle stVelCtlHandle; // The SpinTAC Speed Controller Handle 12.2.3 初始化配置变量 这应该在死循环之前的项目主函数中完成。 这样会将所有的默认值加载到 SpinTAC 速度控制中。 该步骤可 通过运行已在 spintac_velocity.h 头文件中声明的函数 ST_init 和 ST_setupVelCtl 来完成。 如果不希望使用 这两个函数,可使用下方的代码示例配置 SpinTAC 速度控制组件。 SpinTAC 速度控制配置是典型配置的代 表,适用于大部分电机。 // Initialize the SpinTAC Speed Controller Component stVelCtlHandle = STVELCTL_init(&stVelCtl, sizeof(stVelCtl)); // Setup the maximum current in PU _iq maxCurrent_PU = _IQ(USER_MOTOR_MAX_CURRENT / USER_IQ_FULL_SCALE_CURRENT_A); // Instance of the velocity controller STVELCTL_setAxis(stVelCtlHandle, ST_AXIS0); // Sample time [s], (0, 1) STVELCTL_setSampleTime_sec(stVelCtlHandle, _IQ(ST_SPEED_SAMPLE_TIME)); // System inertia upper (0, 127.9999] and lower (0, SgiMax] limits [PU/(pu/s^2)] STVELCTL_setInertiaMaximums(stVelCtlHandle, _IQ(10.0), _IQ(0.001)); // System control signal high (0, OutMax] & low [OutMin, 0) limits [PU] STVELCTL_setOutputMaximums(stVelCtlHandle, maxCurrent_PU, -maxCurrent_PU); // System maximum (0, 1.0] and minimum [-1.0, 0) velocity [pu/s] STVELCTL_setVelocityMaximums(stVelCtlHandle, _IQ(1.0), _IQ(-1.0)); // System upper (0, 0.2/(T*20)] and lower [0, BwScaleMax] limits for bandwidth scale STVELCTL_setBandwidthScaleMaximums(stVelCtlHandle, _IQ24((0.2) / (ST_SPEED_SAMPLE_TIME * 20.0)), _IQ24(0.01)); // System inertia [PU/(pu/s^2)], [SgiMin, SgiMax] STVELCTL_setInertia(stVelCtlHandle, _IQ(USER_SYSTEM_INERTIA)); // Controller bandwidth scale [BwMin, BwMax] STVELCTL_setBandwidthScale(stVelCtlHandle, _IQ24(USER_SYSTEM_BANDWIDTH_SCALE)); // Initially ST_VelCtl is not enabled STVELCTL_setEnable(stVelCtlHandle, false); // Initially ST_VelCtl is not in reset STVELCTL_setReset(stVelCtlHandle, false); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 423 SpinTAC 速度控制的软件配置 12.2.4 调用 SpinTAC 速度控制 www.ti.com.cn 该步骤应在主 ISR 中完成。 该组件需要在适当的抽取率下调用此函数。 抽取率由 ISR_TICKS_PER_SPINTAC_TICK 确定;有关详细信息,请参见节 4.7.1.4。 在调用 SpinTAC 速度控制函 数之前,必须更新速度参考、加速度参考和速度反馈。 本示例使用 SpinTAC 速度移动为 SpinTAC 速度控 制提供参考。 有关 SpinTAC 速度移动的详细信息,请参见Chapter 13。 CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // Get pointer to CTRL object // Get the mechanical speed in pu/s _iq speedFeedback = EST_getFm_pu(obj->estHandle); // Get the mechanical speed in pu/s // Update the Velocity Reference STVELCTL_setVelocityReference(stVelCtlHandle, STVELMOVE_getVelocityReference(stVelMoveHandle)); //Update the Acceleration Reference STVELCTL_setAccelerationReference(stVelCtlHandle, STVELMOVE_getAccelerationReference(stVelMoveHandle)); //Update the Velocity Feedback STVELCTL_setVelocityFeedback(stVelCtlHandle, speedFeedback); // Run the SpinTAC Speed Controller STVELCTL_run(stVelCtlHandle); // Get the Torque Reference from the SpinTAC Speed Controller iqReference = STVELCTL_getTorqueReference(stVelCtlHandle); // Set the Iq reference that came out of SpinTAC Velocity Control CTRL_setIq_ref_pu(ctrlHandle, iqReference); 12.2.5 SpinTAC 速度控制故障排除 12.2.5.1 ERR_ID ERR_ID 可向用户提供错误代码。 表 12-2 中列出了为 SpinTAC 速度控制定义的错误及相应解决方法。 ERR_ID 1 2 3 4 5 16 17 18 19 32 1012 1014 1016 4001 4003 表 12-2. SpinTAC 速度控制 ERR_ID 代码 问题 采样时间值无效 最大参考值无效 最小参考值无效 最大控制信号值无效 最小控制信号值无效 最大惯性值无效 最小惯性值无效 最大带宽值无效 最小带宽值无效 轴 ID 无效 惯性值无效 带宽 × 惯性大于 2000 摩擦超出限值 SpinTAC 许可证无效 ROM 版本无效 解决方法 将 cfg.T_sec 设置为 (0, 1] 范围内 将 cfg.VelMax 设置为 (0, 1] 范围内 将 cfg.VelMin 设置为 (0, 1] 范围内 将 cfg.OutMax 设置为 (0, 1] 范围内 将 cfg.OutMin 设置为 [-1, 0) 范围内 将 cfg.InertiaMax 设置为正 _iq24 值 将 cfg.InertiaMin 设置为 (0, cfg.InertiaMax] 范围内 将 cfg.BwMax 设置为 [0, min(2000, 0.2/cfg.T)] 范围内 将 cfg.BwMin 设置为 [0, cfg.BwMax] 范围内 将 cfg.Axis 设置为 {ST_AXIS0, ST_AXIS1} 范围内 没有动作。 惯性饱和至界限 [cfg.InertiaMin, cfg.InertiaMax] 没有动作。 实际带宽饱和至值 2000/惯性 没有动作。 摩擦饱和至调整摩擦范围 [0, 5] 使用具有有效许可证的芯片 使用 ROM 版本有效的芯片或使用与当前 ROM 版本兼容的 SpinTAC 库。 424 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 12.3 速度控制中的最优性能 速度控制中的最优性能 12.3.1 简介 从您的机械运动系统中获得最佳性能是十分重要的。 未经良好调节的稳压器会导致能源浪费、材料浪费,或 者使系统不稳定。 为了确定控制器在您的应用中工作状态如何,有必要在很多不同的速度和负载运行点上评 估速度控制器的性能。 12.3.2 比较速度控制器 可根据很多不同的因素对速度控制器进行比较。 然而,两个衡量标准——抗扰和系统配置跟踪——可被用来 测试性能,并且确定您的控制器对于您的应用被调整的如何。 12.3.3 抗扰 抗扰用于测试控制器对影响电机速度的外部干扰的抵抗能力。 使用最大速度误差和稳定时间来测量抗扰。 最大速度误差显示从目标速度的偏离,并且表示出对您的控制器进行调整的积极程度。 积极调整将产生一个 低最大误差。 稳定时间是指从干扰发生的时间点到速度返回至一个目标速度附近的固定范围内所需要的时间。 这也表示出 您的控制环路调整的积极程度。 如果控制器的调整过于积极,控制器的稳定时间将会比较长,这是因为控制 器将在稳定前在目标速度附近振荡。 图 12-8 和图 12-9 显示了同一控制器不良调整与最优调整的差异。 可以看出,通过对速度控制器进行调 整,在向电机系统施加转矩或从电机系统中移除转矩时,最优调整的控制器可以显著减小最大误差和稳定时 间。 本示例有所夸大,但它是为了强调对系统进行良好调整的重要性。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 425 速度控制中的最优性能 www.ti.com.cn Applied Torque Disturbance (75% Rated Speed and 50% Rated Load) 3100 3000 2900 2800 2700 Settling Time: 0.536 sec 2600 2500 2400 Maximum Error: 192 RPM 2300 Speed [RPM] 2200 2100 2000 1900 1800 1700 1600 1500 1400 1300 1200 1100 Maximum Error: 1858 RPM 1000 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 Time [sec] 图 12-8. 施加转矩干扰的速度调整比较 Poor Tuning Optimal Tuning Setting Time: 1.17 sec 1.2 1.3 1.4 1.5 426 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 速度控制中的最优性能 Removed Torque Disturbance (75% Rated Speed and 50% Rated Load) 5500 Maximum Error: 5300 2255 RPM 5100 Poor Tuning Optimal Tuning 4900 4700 4500 4300 Speed [RPM] 4100 3900 3700 3500 3300 Maximum Error: 656 RPM Settling Time: 0.204 sec Setting Time: 1.241 sec 3100 2900 2700 2500 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Time [sec] 图 12-9. 移除转矩干扰的速度调整比较 1.1 1.2 1.3 1.4 1.5 当进行抗扰测试时,在多个速度和负载组合下进行测试很重要。 当被置于不同的饱和状态时,速度控制器具 有不同的性能特点。 为了完全地评估您速度控制器的效率,应该在整个应用范围内完成测试。 这些测试结 果将表示此控制器是否符合应用技术规格的要求,或者是否需要针对不同的运行点进行多次调整。 能够创建可重复的干扰也很重要。 这一要求可通过使用一个测力计或扰动电机来实现。 在评估多个控制器 时,创建可重复干扰是一个重要因素。 如果测试条件不能被复制,那么就很难充分地比较两个控制器的响 应。 12.3.4 系统配置跟踪 系统配置跟踪用于测试控制器跟随变化的目标速度的程度。 这个测试中评估的两个衡量标准是最大误差和绝 对平均误差。 最大速度误差显示速度变化时,控制器过冲的大小。 这个值表示您控制器调整的积极程度。 如果控制器的调整不够积极主动,速度将超过目标值,并且将需要花费较长的时间恢复。 如果控制器的调整 过于积极主动,它将过冲,然后在稳定至目标速度时发生振荡。 如果控制器被正确调整,它将过冲,然后平 稳返回至目标速度。 绝对平均误差是整个系统配置范围内瞬时速度误差绝对平均值。 这个测量结果显示整个系统配置上的偏离 量。 它将电机运行时的全部小值误差考虑在内。 如果控制器的调整过于积极,它将导致较大的绝对平均误 差,这是由控制器将在整个系统配置内振荡所造成的。 如果控制器的调整不够积极,它将导致较大的绝对平 均误差,这是因为它始终落后于系统配置对电机的指令操作。 图 12-10 显示了同一控制器默认调整与最优调整的差异。 可以看出,通过调整速度控制器,可以使运动系 统更加紧密地跟踪参考。 通过调整控制器,可以显著降低最大误差、绝对平均误差和最大过冲。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 427 速度控制中的最优性能 www.ti.com.cn Speed [RPM] Speed Error [RPM] Profile Tracking Tuning Comparison 2500 2400 2300 2200 2100 2000 Speed Reference Acceleration: 2.4 kRPM/s Jerk: 120 kRPM/s2 Maximum Overshoot: 3 RPM Maximum Overshoot: 60 RPM Speed Reference Poor Tuning Optimal Tuning Poor Tuning Error Optimal Tuning Error 250 Average Error: 240 46 RPM 230 Average Error: 220 14 RPM 210 200 1900 190 1800 180 1700 170 1600 160 1500 150 1400 1300 1200 1100 140 Maximum Error: Maximum Error: 130 31 RPM 72 RPM 120 110 1000 100 900 90 800 80 700 70 600 60 500 50 400 40 300 30 200 20 100 10 0 0 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 Time [sec] 图 12-10. 系统配置跟踪的速度调整比较 在您的系统配置中测试多个速度和加速度以及多个不同负载同样重要。 当被置于不同情况下,速度控制器具 有不同的性能特点。 为了完全评估您的速度控制器的效率,应该在整个应用范围内执行测试。 这包括您何 时为测试设计系统配置。 设计时应该注意,以确保在系统配置中建立应用速度和加速度。 这些测试结果将 告诉您控制器是否满足应用技术规格,或者您的控制器是否需要针对不同的运行点进行多次调整。 创建可重复系统配置和负载也很重要。 可使用 SpinTAC 速度移动和 SpinTAC 速度规划创建可重复系统配 置;有关详细信息,请参见Chapter 13。 需要使用可重复系统配置,这样便可使用顺序一致的同一基准,在 相同的时间长度内测试全部控制器。 这样确保了测试条件尽可能一样。 在系统配置跟踪测试期间施加负载 时,创建可重复干扰很重要。 这一要求可通过使用一个测力计或扰动电机来实现。 在评估控制器时,创建 可重复干扰是一个重要因素。 如果测试条件不能被复制,那么就很难充分地比较两个控制器的响应。 12.3.5 InstaSPIN-MOTION 速度控制优势 12.3.5.1 单个参数调整 InstaSPIN-MOTION 在实现应用的最优性能方面具有多种优势。 SpinTAC 速度控制在宽工作范围内提供单 个参数调整,从而帮助您实现最优性能。 通过使用单个调整参数,可以根据应用的正确调整设置快速进行调 整。 基于 SpinTAC 速度控制的核心功能,即主动抗扰控制 (ADRC),单个调整参数适用于很宽的工作范 围。 在大多数情况下,单个调整设置适用于应用的整个工作范围。 相比之下,PI 控制器至少需要两个调整 参数,而且需要为应用中多个不同的运行点调整这两个参数, 因此调整应用所花费的时间要远远大于通过 SpinTAC 速度控制进行调整的时间。 428 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 速度控制中的最优性能 为了比较 SpinTAC 速度控制和传统 PI 速度控制器之间的差异,我们连接了 Anaheim Automation BLY172S 电机(随附 DRV8312 修订版 D 评估套件)和 Magtrol HD-400 测力计。 使用11.5 节中的示例中的 PI 调整 参数。 以下特性用于计算速度 PI 增益: • Rs = 0.4Ω • Ls = 0.6mH • 反电势 = 0.0054V-s/rad • 惯性 = 335E-4 kg-m2(包括电机和测力计的惯性) • 转子极数 = 8 • 速度带宽 = 800rad/s • 阻尼因子 = 4 这会导致以下速度 PI 增益: • spdKpseries = 5.495 • spdKiseries = 132.88 使用12.1.4 节中概括的方法通过实验调整 SpinTAC 速度控制。 该调整产生了以下增益: • 带宽 = 45rad/s 以上 PI 速度控制器和 SpinTAC 速度控制的增益已用于以下测试。 12.3.5.2 抗扰测试 SpinTAC 速度控制中的 ADRC 技术具有出色的抗扰性能。 它可以主动地实时评估干扰并对这些干扰进行补 偿(请参见图 12-11 和图 12-12)。 SpinTAC 速度控制检测到系统中的干扰后,将实施更正以便快速平滑 地将电机速度调整为目标速度。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 429 速度控制中的最优性能 www.ti.com.cn Applied Torque Disturbance (75% Rated Speed and 50% Rated Torque) 3100 3075 3050 Settling Time: 0.536 sec Settling Time: 0.831 sec 3025 3000 2975 2950 Speed [RPM] 2925 2900 2875 2850 2825 2800 Maximum Error: 196 RPM 2775 2750 2725 Maximum Error: 293 RPM 2700 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 Time [sec] 图 12-11. 施加转矩干扰时的 PI 和 SpinTAC 速度控制比较 PI Controller SpinTAC Controller 1.3 1.4 1.5 430 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 速度控制中的最优性能 Removed Torque Disturbance (75% Rated Speed and 50% Rated Torque) 3700 3650 Maximum Error: 656 RPM 3600 3550 Maximum Error: 652 RPM 3500 3450 3400 Speed [RPM] 3350 3300 3250 3200 3150 3100 Settling Time: 0.204 sec Settling Time: 0.642 sec 3050 3000 2950 2900 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 Time [sec] 图 12-12. 移除转矩干扰时的 PI 和 SpinTAC 速度控制比较 PI Controller SpinTAC Controller 1.3 1.4 1.5 与传统 PI 控制器相比,SpinTAC 速度控制具有更短的恢复时间和更小的最大误差。 这样便可在应用时减少 速度波动。 减少速度波动使应用能够在更稳定的速度下运行,同时能够减少应用的功耗。 12.3.5.3 前馈 SpinTAC 速度控制还具有前馈功能, 因而可实现出色的系统配置(请参见图 12-13)。 前馈用于通知 SpinTAC 速度控制所需的加速或减速的加速度, 因此,与 PI 控制器相比,SpinTAC 速度控制可以更快地 响应系统配置变化, 从而减小最大误差和绝对平均误差。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 431 速度控制中的最优性能 www.ti.com.cn Speed [RPM] Speed [RPM] Feedforward Impact on Profile Tracking Speed Reference SpinTAC Controller PI Controller PI Controller Error SpinTAC Controller Error 2500 2250 Speed Reference Acceleration: 2.4 kRPM/s Jerk: 120 kRPM/s2 Maximum Overshoot: 62 RPM 500 Average Error: 82 RPM 475 Average Error: 450 2000 Maximum Overshoot: 3 RPM 14 RPM 425 400 375 1750 350 325 1500 300 1250 275 Maximum Error: Maximum Error: 31 RPM 148 RPM 250 225 1000 200 175 750 150 125 500 100 75 250 50 25 0 0 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 Time [sec] 图 12-13. PI 和 SpinTAC 中前馈对速度系统配置跟踪的影响比较 SpinTAC 速度控制具有较小的最大误差和绝对平均误差, 因此,与传统 PI 控制器相比显著提高了跟踪性 能, 从而可以在控制器跟踪变化的参考时减少不必要的运动和能源浪费。 该功能与节 12.3.5.2中所述的抗 扰能力结合使用时更能凸显其重要性。 如果系统在跟踪变化的速度参考时出现干扰,则可能会导致大量过冲 以及能源或材料浪费。 12.3.5.4 无积分器饱和 积分器饱和问题是指标准 PI 控制器的积分器组件积累大幅度误差。 当积分器进入饱和状态且速度中存在稳 定状态误差时会发生该问题。 此稳定状态误差将继续增大积分器中的值,将导致饱和的条件移除后,该误差 将导致速度大幅过冲速度参考。 SpinTAC 速度控制不存在该问题。 ADRC 技术可实时评估系统误差,无需 依赖任何可能造成积分器饱和问题的积分器。 图 12-14 显示了传统 PI 控制器遇到积分器饱和问题的情况。 这种情况下,电机无法克服转矩干扰,只能以 低于设定点的速度运行。 这会将控制器置于饱和状态,使 PI 控制器的积分器项随时间增大。 移除该转矩干 扰后,PI 的积分器项将导致产生极大的过冲,这会大大增加返回速度设定点所花费的时间。 SpinTAC 控制 器不会带来任何此类负面影响,因为它不包含可导致积分器饱和问题的积分器项。 比较图 12-14 和图 12-12 也很有趣。 可以看到,对于 50% 和 80% 的额定转矩干扰,SpinTAC 对于移除转矩干扰的响应十分类似。 432 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 速度控制中的最优性能 Speed [RPM] Current [A] Disturbance Rejection with Integrator Windup Speed Feedback PI Speed Feedback SpinTAC (75% Rated Speed and 80% Rated Torque) Iq Reference PI Iq Reference SpinTAC 7000 40 6500 6000 Maximum Overshoot: Large Overshoot due to Integrator Windup 37.5 2308 RPM 35 5500 5000 4500 4000 Maximum Overshoot: 629 RPM 32.5 Settling Time: 30 1.05 sec 27.5 25 3500 22.5 3000 20 2500 2000 Settling Time: 17.5 0.286 sec 15 1500 1000 500 12.5 Wasted Power due to 10 Integrator Windup 7.5 0 5 -500 0 0.25 0.5 0.75 1 1.25 1.5 1.75 2 2.25 2.5 2.75 3 3.25 3.5 2.5 -1000 0 -1500 -2.5 -2000 -5 Time [sec] 图 12-14. 抗扰期间 PI 和 SpinTAC 速度控制的积分器饱和比较 12.3.5.5 最小启动过冲 InstaSPIN-MOTION 具有在启动期间产生最小过冲的控制器, 因此可减少应用在启动电机时消耗的能源以 及缩短恢复和运行在目标速度所需的时间。 对于循环开关的压缩机来说,这可以显著节省能源。 图 12-15 比较了 SpinTAC 速度控制和传统 PI 速度控制器的阶跃响应。 从图中可以看出,传统 PI 速度控制 器的过冲和稳定时间要远远大于 SpinTAC 速度控制。 PI 速度控制器产生的较大过冲会导致能源浪费和不必 要的运动, 因此不是理想系统响应。 SpinTAC 速度控制具有更佳的响应,可以减小过冲和缩短稳定时间。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 433 SpinTAC 位置控制的软件配置 www.ti.com.cn Step Response (75% Rated Speed) 4500 4250 4000 Maximum Overshoot: 1104 RPM 3750 3500 Maximum Overshoot: 339 RPM Speed Reference Speed Feedback PI Settling Time: 0.37 sec Speed Feedback SpinTAC 3250 3000 2750 Speed [RPM] 2500 2250 2000 Settling Time: 0.273 sec 1750 1500 1250 1000 750 500 250 0 -250 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 -500 Time [sec] 图 12-15. PI 和 SpinTAC 速度控制的阶跃响应比较 12.3.5.6 结论 InstaSPIN-MOTION 中包括的 SpinTAC 速度控制可直接替代传统 PI 速度控制器。 它可在应用的整个工作 范围内获得更佳的性能。 由于使用单个调整参数,因此与 PI 控制器相比,调整操作更为简单。 这样便可在 开发时减小调整速度控制器方面的工作量,使您能够重点关注应用的其它部分。 SpinTAC 速度控制可减少 过冲和缩短稳定时间, 还具有更佳的系统配置跟踪功能。 所有这些功能结合起来,可以降低应用中不必要 运动所造成的能源消耗。 12.4 SpinTAC 位置控制的软件配置 配置 SpinTAC 位置控制需要四个步骤。 实验 13a“调整 InstaSPIN-MOTION 位置控制器”是一个示例项目, 在其中执行了使用 SpinTAC 位置控制所需的步骤。 利用包含在 MotorWare 中的头文件 spintac.h,您可以 快速将 SpinTAC 组件包括在项目中。 12.4.1 包括头文件 这应该通过其余的模块头文件包含来完成。 在实验 13a 示例项目中,该文件包含在 spintac_position.h 头文 件中。 针对相应项目,可通过包括 spintac_position.h 完成此步骤。 #include "sw/modules/spintac/src/32b/spintac_pos_ctl.h" 434 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 12.4.2 声明全局结构 SpinTAC 位置控制的软件配置 这应该通过主源文件中的全局变量声明来完成。 在实验 13a 项目中,此结构包括在已声明为 spintac_position.h 头文件一部分的 ST_Obj 结构内。 ST_Obj st_obj; // The SpinTAC Object ST_Handle stHandle; // The SpinTAC Handle 此示例为不希望使用已在 spintac_position.h 头文件中声明的 ST_Obj 结构的情况。 ST_PosCtl_t stPosCtl; // The SpinTAC Position Controller object ST_POSCTL_Handle stPosCtlHandle; // The SpinTAC Position Controller Handle 12.4.3 初始化配置变量 这应该在死循环之前的项目主函数中完成。 这样会将所有的默认值加载到 SpinTAC 位置控制中。 该步骤可 通过运行已在 spintac_position.h 头文件中声明的函数 ST_init 和 ST_setupPosCtl 来完成。 如果不希望使 用这两个函数,可使用下方的代码示例配置 SpinTAC 位置控制组件。 SpinTAC 位置控制配置是典型配置的 代表,适用于大部分电机。 // Initialize SpinTAC Position Control stPosCtlHandle = STPOSCTL_init(&stPosCtl, sizeof(stPosCtl)); // Setup the maximum current in PU _iq maxCurrent_PU = _IQ(USER_MOTOR_MAX_CURRENT / USER_IQ_FULL_SCALE_CURRENT_A); // Instance of the position controller STPOSCTL_setAxis(stPosCtlHandle, ST_AXIS0); // Sample time [s], (0, 1) STPOSCTL_setSampleTime_sec(stPosCtlHandle, _IQ(ST_SAMPLE_TIME)); // System inertia upper (0, 127.9999] and lower (0, InertiaMax] limits [PU/(pu/s^2)] STPOSCTL_setInertiaMaximums(stPosCtlHandle, _IQ(10.0), _IQ(0.001)); // System velocity limit (0, 1.0] [pu/s] STPOSCTL_setVelocityMaximum(obj->;posCtlHandle, _IQ24(1.0)); // System control signal high (0, 1] & low [-1, 0) limits [PU] STPOSCTL_setOutputMaximums(stPosCtlHandle, maxCurrent_PU, -maxCurrent_PU); // System maximum (0, 1.0] and minimum [-1.0, 0) velocity [pu/s] STPOSCTL_setVelocityMaximums(stPosCtlHandle, _IQ(1.0), _IQ(-1.0)); // System maximum value for mechanical revolutions [MRev] STPOSCTL_setPositionRolloverMaximum_mrev(stPosCtlHandle, _IQ24(ST_MREV_ROLLOVER)); // Sets the values used for converting between pu and MRev STPOSCTL_setUnitConversion(stPosCtlHandle, USER_IQ_FULL_SCALE_FREQ_Hz, USER_MOTOR_NUM_POLE_PAIRS); // System maximum allowable error [MRev] STPOSCTL_setPositionErrorMaximum_mrev(stPosCtlHandle, _IQ24(ST_POS_ERROR_MAXIMUM_MREV)); // Disturbance type {true: Ramp; false: Square} STPOSCTL_setRampDisturbanceFlag(stPosCtlHandle, false); // System upper (0, 0.1/(cfg.T_sec*20)] and lower [0, BwScaleMax] limits for BWScale STPOSCTL_setBandwidthScaleMaximums(stPosCtlHandle, _IQ24((0.1) / (ST_SAMPLE_TIME * 20.0)), _IQ24(0.01)); // Enables the feedback filter STPOSCTL_setFilterEnableFlag(stPosCtlHandle, true); // System inertia [PU/(pu/s^2)], [InertiaMin, InertiaMax] STPOSCTL_setInertia(stPosCtlHandle, _IQ(USER_MOTOR_INERTIA)); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 435 SpinTAC 位置控制的软件配置 // Controller bandwidth scale [BwScaleMin, BwScaleMax] STPOSCTL_setBandwidthScale(stPosCtlHandle, _IQ24(USER_SYSTEM_BANDWIDTH_SCALE)); // Initially ST_PosCtl is not enabled STPOSCTL_setEnable(stPosCtlHandle, false); // Initially ST_PosCtl is not in reset STPOSCTL_setReset(stPosCtlHandle, false); www.ti.com.cn 12.4.4 调用 SpinTAC 位置控制 该步骤应在主 ISR 中完成。 该组件需要在适当的抽取率下调用此函数。 抽取率由 ISR_TICKS_PER_SPINTAC_TICK 确定;有关详细信息,请参见节 4.7.1.4。 在调用 SpinTAC 位置控制函 数之前,必须更新位置参考、速度参考、加速度参考和位置反馈。 本示例使用 SpinTAC 位置移动为 SpinTAC 位置控制提供参考。 有关 SpinTAC 位置移动的详细信息,请参见Chapter 13。 CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // Get pointer to CTRL object // Get the mechanical speed in pu/s _iq speedFeedback = EST_getFm_pu(obj->estHandle); STPOSCTL_setPositionReference_mrev(stPosCtlHandle, STPOSMOVE_getPositionReference_mrev(stPosMoveHandle)); // Update the Velocity Reference STPOSCTL_setVelocityReference(stPosCtlHandle, STPOSMOVE_getVelocityReference(stPosMoveHandle)); // Update the Acceleration Reference STPOSCTL_setAccelerationReference(stPosCtlHandle, STPOSMOVE_getAccelerationReference(stPosMoveHandle)); // Update the Position Feedback STPOSCTL_setPositionFeedback_mrev(stObj->posCtlHandle, STPOSCONV_getPosition_mrev(stPosConvHandle)); // Run SpinTAC Position Control STPOSCTL_run(stPosCtlHandle); // Get the Torque Reference from SpinTAC Position Control iqReference = STPOSCTL_getTorqueReference(stPosCtlHandle); // Set the Iq reference that came out of SpinTAC Position Control CTRL_setIq_ref_pu(ctrlHandle, iqReference); 12.4.5 SpinTAC 位置控制故障排除 12.4.5.1 ERR_ID ERR_ID 可向用户提供错误代码。 表 12-3 中列出了为 SpinTAC 位置控制定义的错误及相应解决方法。 ERR_ID 1 2 4 5 13 14 15 16 表 12-3. SpinTAC 位置控制 ERR_ID 代码 问题 采样时间值无效 最大速度参考值无效 最大控制信号值无效 最小控制信号值无效 位置翻转界限值无效 机械旋转 [MRev] 至 [pu] 的比率值无效 最大位置误差值无效 最大惯性值无效 解决方法 将 cfg.T_sec 设置为 (0, 1] 范围内 将 cfg.VelMax 设置为 (0, 1] 范围内 将 cfg.OutMax 设置为 (0, 1] 范围内 将 cfg.OutMin 设置为 [-1, 0) 范围内 将 cfg.ROMax_mrev 设置为 [2, 100] 范围内 将 cfg.mrev_TO_pu 设置为 [0.002, 1] 范围内 将 cfg.PosErrMax_mrev 设置为 [0, cfg.ROMax_mrev/2] 范围 内 将 cfg.InertiaMax 设置为正 _iq24 值 436 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ERR_ID 17 18 19 20 32 35 1012 1014 1016 2002 4001 4003 位置控制中的最优性能 表 12-3. SpinTAC 位置控制 ERR_ID 代码 (continued) 问题 最小惯性值无效 最大带宽值无效 最小带宽值无效 指定的干扰值无效 轴 ID 无效 滤波器启用值无效 惯性值无效 带宽 × 惯性大于 2000 摩擦超出限值 位置误差超出最大值 SpinTAC 许可证无效 ROM 版本无效 解决方法 将 cfg.InertiaMin 设置为 (0, cfg.InertiaMax] 范围内 将 cfg.BwMax 设置为 [0, min(2000, 0.2/cfg.T)] 范围内 将 cfg.BwMin 设置为 [0, cfg.BwMax] 范围内 将 cfg.RampDist 设置为 {false, true} 范围内 将 cfg.Axis 设置为 {ST_AXIS0, ST_AXIS1} 范围内 将 cfg.FiltEN 设置为 {false, true} 的范围内 没有动作。 惯性饱和至界限 [cfg.InertiaMin, cfg.InertiaMax] 没有动作。 实际带宽饱和至值 2000/惯性 没有动作。 摩擦饱和至调整摩擦范围 [0, 5] 增加带宽以减小位置误差或降低系统配置速度、加速度和急动 使用具有有效许可证的芯片 使用 ROM 版本有效的芯片或使用与当前 ROM 版本兼容的 SpinTAC 库。 12.5 位置控制中的最优性能 12.5.1 简介 从您的机械运动系统中获得最佳性能是十分重要的。 未经良好调节的稳压器会导致能源浪费、材料浪费,或 者使系统不稳定。 为了确定位置控制器在您的应用中工作状态如何,有必要在很多不同的运行点上评估位置 控制器的性能。 12.5.2 比较位置控制器 可根据很多不同的因素对位置控制器进行比较。 然而,两个衡量标准——抗扰和系统配置跟踪——可被用来 测试性能,并且确定您的控制器对于您的应用被调整的如何。 12.5.3 抗扰 抗扰用于测试控制器对影响电机速度和位置的外部干扰的抵抗能力。 使用最大误差和稳定时间来测量抗扰。 最大误差显示从目标位置的偏离,并且表示出对您的控制器进行调整的积极程度。 积极调整将产生一个低最 大误差。 稳定时间是指从干扰发生的时间点到位置返回至一个目标位置附近的固定范围内所需要的时间。 这也表示出 您的控制环路调整的积极程度。 如果控制器的调整过于积极,控制器的稳定时间将会比较长,这是因为控制 器将在稳定前在目标位置附近振荡。 图 12-16 和图 12-17 显示了同一控制器不良调整与最优调整的差异。 可以看出,通过对位置控制器进行调 整,在向电机系统施加转矩或从电机系统中移除转矩时,最优调整的控制器可以显著减小最大误差和稳定时 间。 本示例有所夸大,但它是为了强调对系统进行良好调整的重要性。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 437 位置控制中的最优性能 Applied Torque Disturbance 0.45 0.425 Maximum Error: 0.448 MRev 0.4 0.375 0.35 0.325 0.3 Position Error [MRev] 0.275 0.25 0.225 0.2 0.175 0.15 0.125 0.1 0.075 0.05 0.025 Maximum Error: 0.047 MRev Settling Time: 0.304 sec 0 -0.025 0 -0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 Time [sec] 图 12-16. 施加转矩干扰的位置调整比较 www.ti.com.cn Poor Tuning Optimal Tuning Settling Time: 0.593 sec 0.8 0.9 1 438 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 位置控制中的最优性能 Removed Torque Disturbance 0.1 Settling Time: 0.05 0.134 sec 0 0 -0.05 0.1 0.2 0.3 0.4 0.5 -0.1 -0.15 Maximum Error: -0.2 -0.096 MRev -0.25 0.6 0.7 0.8 Settling Time: 0.376 sec Position Error [MRev] -0.3 -0.35 -0.4 -0.45 -0.5 -0.55 -0.6 -0.65 Maximum Error: -0.614 MRev Time [sec] 图 12-17. 移除转矩干扰的位置调整比较 Poor Tuning Optimal Tuning 0.9 1 当进行抗扰测试时,在多个速度和负载组合下进行测试很重要。 当被置于不同情况下,位置控制器具有不同 的性能特点。 为了正确地评估位置控制器的效率,应该在整个应用范围内完成测试。 这些测试结果将表示 此控制器是否符合应用技术规格的要求,或者是否需要针对不同的运行点进行多次调整。 能够创建可重复的干扰也很重要。 这一要求可通过使用一个测力计或扰动电机来实现。 在评估多个控制器 时,创建可重复干扰是一个重要因素。 如果测试条件不能被复制,那么就很难充分地比较两个控制器的响 应。 12.5.4 系统配置跟踪 系统配置跟踪用于测试控制器跟随变化的目标位置的程度。 这个测试中评估的衡量标准是最大误差和绝对平 均误差。 最大误差显示位置变化时控制器过冲的大小。 这个值表示控制器调整的积极程度。 如果控制器的 调整不够积极主动,位置将超过目标值,并且将需要花费较长的时间恢复。 如果控制器的调整过于积极主 动,它将过冲,然后在稳定至目标位置时发生振荡。 如果控制器被正确调整,它将过冲,然后平稳返回至目 标位置。 绝对平均误差是整个系统配置范围内瞬时误差绝对平均值。 这个测量结果显示整个系统配置上的偏离量。 它将电机运行时的全部小值误差考虑在内。 如果控制器的调整过于积极,它将导致较大的绝对平均误差,这 是由控制器将在整个系统配置内振荡所造成的。 如果控制器的调整不够积极,它将导致较大的绝对平均误 差,这是因为它始终落后于系统配置对电机的指令操作。 图 12-18 显示了同一控制器默认调整与最优调整的差异。 可以看出,通过调整位置控制器,可以使运动系 统更加紧密地跟踪参考。 通过调整控制器,可以显著降低最大误差、绝对平均误差和最大过冲。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 439 位置控制中的最优性能 www.ti.com.cn Position [MRev] Position Error [MRev] Profile Tracking Tuning Comparison 1.1 Position Reference: Velocity: 4.0 kRPM 1 Acceleration / Deceleration: 25 kRPM/s Jerk: 100 kRPM/s2 0.9 Maximum Overshoot: 0.8 0 MRev Maximum Overshoot: 0.7 0 MRev 0.6 0.5 Maximum Error: 0.4 0.011 MRev 0.3 0.2 0.1 0 0 -0.1 0.05 0.1 0.15 0.2 0.25 -0.2 Reference Poor Tuning Optimal Tuning Poor Tuning Error Optimal Tuning Error 0.42 Average Error: 0.032 MRev 0.39 Average Error: 0.002 MRev 0.36 0.33 0.3 0.27 0.24 0.21 0.18 Maximum Error: 0.15 0.075 MRev 0.12 0.3 0.35 0.4 0.45 0.09 0.06 -0.3 0.03 -0.4 0 Time [sec] 图 12-18. 系统配置跟踪的位置调整比较 在您的系统配置中测试多个速度和加速度以及多个不同负载同样重要。 当被置于不同情况下,位置控制器具 有不同的性能特点。 为了正确地评估位置控制器的效率,应该在整个应用范围内完成测试。 这包括您何时 为测试设计系统配置。 设计时应该注意,以确保在系统配置中建立应用速度和加速度。 这些测试结果将告 诉您控制器是否满足应用技术规格,或者您的控制器是否需要针对不同的运行点进行多次调整。 创建可重复系统配置和负载也很重要。 可使用 SpinTAC 位置移动和 SpinTAC 位置规划创建可重复系统配 置;有关详细信息,请参见Chapter 13。 需要使用可重复系统配置,这样便可使用顺序一致的同一基准,在 相同的时间长度内测试全部控制器。 这样确保了测试条件尽可能一样。 在系统配置跟踪测试期间施加负载 时,创建可重复干扰很重要。 这一要求可通过使用一个测力计或扰动电机来实现。 在评估控制器时,创建 可重复干扰是一个重要因素。 如果测试条件不能被复制,那么就很难充分地比较两个控制器的响应。 12.5.5 InstaSPIN-MOTION 位置控制优势 12.5.5.1 单个参数调整 InstaSPIN-MOTION 在实现应用的最优性能方面具有多种优势。 传统 PI 位置控制器需要三个级联控制环 路,分别用于电流、速度和位置,而 SpinTAC 位置控制仅需要两个环路,一个用于电流,另一个用于组合 的位置-速度环路(请参见表 12-4)。 由于具有这些级联控制环路,PI 控制器至少需要四个用于速度和位置 的调整参数,在应用中的每个运行点都需要对所有这些参数进行调整。 440 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 控制环路 电流 速度 位置 位置控制中的最优性能 表 12-4. InstaSPIN-MOTION 位置控制优势 传统 PI 控制 参数识别期间自动确定 提供建议的起始值,但需要通过调整和测 试进行验证。 相关计算在11.5 节中提供。 不提供起始值。 不提供计算。 SpinTAC 位置控制 参数识别期间自动确定 单个参数调整在整个工作范围内均有效。 可通过单个参数调整位置和速度,在整个 工作范围内有效。 SpinTAC 位置控制通过提供位置和速度的单个参数调整帮助您实现最优性能。 通过使用单个调整参数,可 以根据应用的正确调整设置快速进行调整。 基于 SpinTAC 位置控制的核心功能,即主动抗扰控制 (ADRC),单个调整参数适用于很宽的工作范围。 SpinTAC 位置控制可减少优化应用所需的时间和复杂度。 为了比较 SpinTAC 位置控制和传统 PI 控制系统的差异,需要将 Teknic M2310PLN04K 电机(可从 TI 网上 商店购买)与 Magtrol HD-400 测力计结合使用。 将通过11.5 节中调整示例确定的 PI 调整参数用作起始 点。 为了调整位置 PI 稳压器,必须重新调整速度 PI 稳压器。 这是一个迭代过程。 每次修改速度增益,都 会评估其对位置增益的影响。 使用12.4 节中概括的方法通过实验调整 SpinTAC 位置控制。 在调整 SpinTAC 位置控制之前,通过实验 05c 中概括的步骤识别系统惯性。 12.5.5.2 抗扰 SpinTAC 位置控制中的 ADRC 技术具有出色的抗扰性能。 它可以主动地实时评估干扰并对这些干扰进行补 偿(请参见图 12-19 和图 12-20)。 SpinTAC 位置控制检测到系统中的干扰后,将实施更正以便快速平滑 地将电机位置调整为目标位置。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 441 位置控制中的最优性能 www.ti.com.cn Position Error [Mechanical Revolutions] 0.1 0.095 0.09 0.085 0.08 0.075 0.07 0.065 0.06 0.055 0.05 0.045 0.04 0.035 0.03 0.025 0.02 0.015 0.01 0.005 0 -0.005 0 -0.01 Maximum Error: 0.095 Revolutions PI Controller SpinTAC Controller Maximum Error: 0.006 Revolutions Settling Time: Settling Time: 0.11 sec 0.17 sec 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Time [sec] 图 12-19. 施加转矩干扰时的 PI 和 SpinTAC 位置控制比较 442 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 位置控制中的最优性能 Position Error [Mechnical Revolutions] 0.01 0.005 Settling Time: 0.11 sec PI Controller SpinTAC Controller 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 -0.005 Maximum Error: Settling Time: -0.01 -0.002 Revolutions 0.22 sec -0.015 -0.02 -0.025 -0.03 -0.035 -0.04 -0.045 -0.05 -0.055 -0.06 Maximum Error: -0.054 Revolutions Time [sec] 图 12-20. 移除转矩干扰时的 PI 和 SpinTAC 位置控制比较 与传统 PI 控制器相比,SpinTAC 位置控制具有更短的恢复时间和更小的最大误差, 因此可以减少位置振 荡,实现更稳定的性能并降低功耗。 12.5.5.3 前馈 SpinTAC 位置控制还具有前馈功能, 因而可实现出色的系统配置(请参见图 12-21)。 前馈用于通知 SpinTAC 位置控制到达位置目标所需的加速或减速的加速度, 因此,与 PI 控制器相比,SpinTAC 位置控 制可以更快地响应系统配置变化, 从而减小最大误差和绝对平均误差。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 443 位置控制中的最优性能 www.ti.com.cn Position [MRev] Position Error [MRev] 1.05 1 0.95 0.9 Position Reference: Velocity: 4.0 kRPM Acceleration / Deceleration 25 kRPM/s Jerk: 100 kRPM/s2 0.85 Maximum Overshoot: 0.8 0.75 0.009 MRev 0.7 Maximum Overshoot: 0.65 0 MRev 0.6 0.55 0.5 0.45 Maximum 0.4 Error: 0.35 0.052 MRev 0.3 Maximum 0.25 Error: 0.2 0.009 MRev 0.15 0.1 0.05 0 -0.05 0 0.05 0.1 0.15 0.2 -0.1 -0.15 -0.2 -0.25 Position Reference PI Position Feedback PI Position Error 0.25 0.3 0.35 0.4 0.45 Time [sec] SpinATC Position Feedback SpinTAC Position Error 0.26 Average Error: 0.25 0.013 MRev 0.24 Average Error: 0.23 0.002 MRev 0.22 0.21 0.2 0.19 0.18 0.17 0.16 0.15 0.14 0.13 0.12 0.11 0.1 0.09 0.08 0.07 0.06 0.05 0.5 0.55 0.6 0.04 0.03 0.02 0.01 0 图 12-21. PI 和 SpinTAC 中前馈对位置系统配置跟踪的影响比较 SpinTAC 位置控制具有较小的最大误差和绝对平均误差, 因此,与传统 PI 控制器相比显著提高了跟踪性 能, 从而可以在参考变化时减少不必要的运动和能源浪费。 12.5.5.4 低速运行和平滑启动 高端安保和会议室摄像机等应用以极低速运转(例如,0.1rpm),并且需要准确且平滑的位置控制来转动、 倾斜和缩放。 很难在低速时对驱动这些摄像机的电机进行调整,这些电机通常需要使用至少四个调整集来控 制位置和速度。 低速运行时很难克服系统惯性,这将导致启动时发生跳动,造成抖动或未聚焦画面。图 12-22 是超低速时微 小位置移动的示例。 与 PI 控制器相比,SpinTAC 可以更加准确地跟踪可导致平滑运动的参考位置。 SpinTAC 位置控制在低速运行和高速运行时都能够有效克服系统惯性,从而实现非常平滑的低速运动。 444 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 位置控制中的最优性能 Position [MRev] Position Error [MRev] 0.1 Position Reference: 0.0975 Velocity: 1 RPM Acceleration / Deceleration: 25 kRPM/s 0.095 Jerk: 100 kRPM/s2 0.0925 Position Reference Position Feedback PI Position Error PI Position Feedback SpinTAC Position Error SpinTAC 0.012 Average Error: 0.0011 MRev 0.01125 Average Error: 0.0105 0.0001 MRev 0.00975 0.09 0.009 0.0875 0.00825 0.085 0.0075 0.0825 0.00675 0.08 0.006 0.0775 0.075 0.0725 Maximum Error: Maximum Error: 0.0007 MRev 0.0026 MRev 0.00525 0.0045 0.00375 0.07 0.003 0.0675 0.00225 0.065 0.0015 0.0625 0.00075 0.06 0 0 0.25 0.5 0.75 1 1.25 1.5 1.75 2 2.25 2.5 2.75 3 3.25 3.5 3.75 4 4.25 4.5 4.75 5 Time [sec] 图 12-22. PI 和 SpinTAC 低速位置系统配置跟踪的比较 12.5.5.5 最小阶跃响应稳定时间 SpinTAC 位置控制具有更短的阶跃响应稳定时间, 使系统能够更积极地响应控制变化。 系统可以更快到达 目标位置,减少延迟。 两种控制器均经过零过冲调整,但在发生动态特性变化后,与 PI 控制器相 比,SpinTAC 响应更快且仍具有最小的过冲。 图 12-23 比较了 SpinTAC 位置控制和传统 PI 位置控制系统的阶跃响应。 从图中可以看出,传统 PI 位置控 制系统的稳定时间要远远大于 SpinTAC 位置控制。 较长的稳定时间意味着应用需要花费更长时间到达目标 位置。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated InstaSPIN-MOTION 控制器 445 位置控制中的最优性能 www.ti.com.cn Position Reference Position Feedback SpinTAC Position Feedback PI 2.75 2.5 2.25 Settling Time: Settling Time: 2 0.088 sec 0.154 sec 1.75 Position [Mechanical Revolution] 1.5 1.25 1 0.75 0.5 0.25 0 0 -0.25 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 Time [sec] 图 12-23. PI 和 SpinTAC 位置控制的阶跃响应比较 12.5.5.6 结论 InstaSPIN-MOTION 中包括的 SpinTAC 位置控制可替代用于速度和位置控制的传统 PI 控制器。 它可在应 用的整个工作范围内获得更佳的性能。 由于使用单个调整参数,因此与 PI 控制器相比,调整操作更为简 单。 这样便可在开发时减小调整位置控制器方面的工作量,使您能够重点关注应用的其它部分。 SpinTAC 速度控制可减少过冲和缩短稳定时间, 还具有更佳的系统配置跟踪功能。 所有这些功能结合起来,可以降 低应用中不必要运动所造成的能源消耗。 446 InstaSPIN-MOTION 控制器 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Chapter 13 ZHCU083F – January 2013 – Revised July 2014 轨迹规划 建立运动系统的第一步是控制电机的速度或位置。 下一步是建立转换不同速度和位置的方法,然后为电机运 动排序,从而完成应用任务。 利用 InstaSPIN-MOTION,您能够快速构建复杂的运动序列,根据逻辑进行 状态转换。 Topic ........................................................................................................................... Page 13.1 生成 InstaSPIN-MOTION 系统配置........................................................................ 448 13.2 SpinTAC 速度移动的软件配置 .............................................................................. 449 13.3 SpinTAC 位置移动的软件配置 .............................................................................. 452 13.4 InstaSPIN-MOTION 序列规划............................................................................... 455 13.5 SpinTAC 速度规划的软件配置 .............................................................................. 461 13.6 SpinTAC 速度规划故障排除 ................................................................................. 465 13.7 SpinTAC 位置规划的软件配置 .............................................................................. 467 13.8 SpinTAC 位置规划故障排除 ................................................................................. 472 13.9 结论................................................................................................................. 474 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 447 生成 InstaSPIN-MOTION 系统配置 www.ti.com.cn 13.1 生成 InstaSPIN-MOTION 系统配置 SpinTAC Move 是基于约束的时间最优系统配置生成器。 此系统配置生成器在运行期间计算运动系统配置时 不会使用闪存查找表。 因此,内存占用量较少。 用户提供约束条件(速度限制 [仅位置]、加速度/减速度限 制和急动限制)后,SpinTAC Move 会计算出当前设定点和目标设定点之间的最优配置。 这样,您就可以更 加灵活地设计应用运动系统配置。 除了符合工业标准的梯形和 s 曲线系统配置,SpinTAC Move 还提供了 Linestream 专有 st 曲线。 这种曲线 的运动变化比梯形或 s 曲线系统配置更为平滑。 st 曲线的主要特点是连续急动。 图 13-1 对比了 SpinTAC 位置移动中提供的各种不同曲线类型。 S 曲线和 st 曲线之间最明显的区别在于最 下方的急动曲线,在其中可以看出,st 曲线会对急动进行连续调整,从而提供比 s 曲线更平滑的运动。 对 于速度转换,仅需要考虑图 13-1 中下方的三幅图 图 13-1. 对比 SpinTAC 位置移动所提供的曲线 SpinTAC Move 根据采样时间生成系统配置。 它会参照速度采样时间来校准运动系统配置,并确保完成系统 配置的时间始终是采样时间的整数倍。 这种确定方式可确保满足给定的一系列约束条件,SpinTAC Move 将 始终生成完全相同的系统配置。 13.1.1 急动对系统性能的影响 急动代表加速度变化率。 因此,更大的加速度变化率表示将以更快的速率增大加速度。 某些应用中含有的 易碎物体对加速度变化的承受能力有限,对此,应着重考虑急动。 而某些应用中切削刀具的加速度迅速变化 会导致刀具过早磨损或导致切口不平,对此,急动也是重要考虑因素。 对于需要考虑系统急动的应用而言, 使用提供 st 曲线的 SpinTAC Move 很有必要。 急动还会影响电机速度变化时的耗电量。 急动越小,电机速 度变化时的耗电量越低。 这是因为更小的急动会降低加速度的增长速率。 对于不需要直接考虑急动的应 用,急动也会对系统性能造成影响。 448 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn SpinTAC 速度移动的软件配置 图 13-2 对比了三种轨迹曲线。 这三条曲线的初速度、末速度和加速度均相同。 各曲线的急动已经过修改。 急动度越大,曲线达到目标速度就越快。 这种更快运动的结果是,电机在执行该轨迹曲线时消耗更多电流。 最大电流如图所示。 该测试在系统空载条件下执行。 如果系统中加入负载,则增大急动度对最大电流的影 响会更为明显。 Speed [RPM] Current [A] Jerk Impact on Iq Reference 2100 Speed Reference Iq Reference Speed Reference Iq Reference Speed Reference Iq Reference 1.05 2000 1 1900 0.95 1800 0.9 1700 Acc: 6000 RPM/s^2 0.85 1600 Jerk: 7200 RPM/s^3 0.8 1500 Jerk: 36000 RPM/s^3 0.75 1400 Jerk: 180000 RPM/s^3 0.7 1300 0.65 1200 0.6 1100 0.55 1000 0.5 900 0.45 800 Max Current: 0.284 A Max Current: 0.220 A Max Current: 0.169 A 0.4 700 0.35 600 0.3 500 0.25 400 0.2 300 0.15 200 0.1 100 0.05 0 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Time [sec] 图 13-2. 急动对 Iq 参考电流的影响 13.2 SpinTAC 速度移动的软件配置 配置 SpinTAC 速度移动需要四个步骤。 实验 6a“使用 SpinTAC Move 进行平滑系统运动”是一个示例项目, 其中执行了使用 SpinTAC 速度移动生成轨迹变化所需的步骤。 利用包含在 MotorWare 中的头文件 spintac.h,您可以快速将 SpinTAC 组件包括在项目中。 13.2.1 包括头文件 这应该通过其余的模块头文件包含来完成。 实验 6a 示例项目中,该文件包括在 spintac_velocity.h 头文件 中。 针对相应项目,可通过包括 spintac_velocity.h 完成此步骤。 #include "sw/modules/spintac/src/32b/spintac_vel_move.h" ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 449 SpinTAC 速度移动的软件配置 13.2.2 声明全局结构 这应该通过主源文件中的全局变量声明来完成。 在实验 8a 项目中,此结构包括在已声明为 spintac_velocity.h 头文件一部分的 ST_Obj 结构内。 www.ti.com.cn ST_Obj st_obj; // The SpinTAC Object ST_Handle stHandle; // The SpinTAC Handle 此示例为不希望使用已在 spintac_velocity.h 头文件中声明的 ST_Obj 结构的情况。 ST_VelMove_t stVelMove; // The SpinTAC Velocity Move object ST_VELMOVE_Handle stVelMoveHandle; // The SpinTAC Velocity Move Handle 13.2.3 初始化配置变量 这应该在死循环之前的项目主函数中完成。 这样会将所有的默认值加载到 SpinTAC 速度移动中。 该步骤可 通过运行已在 spintac_velocity.h 头文件中声明的函数 ST_init 和 ST_setupVelMove 来完成。 如果不希望使 用这两个函数,可使用下方的代码示例配置 SpinTAC 速度移动组件。 SpinTAC 速度移动配置是典型配置的 代表,适用于大部分电机。 // Initialize the SpinTAC Velocity Move Component stVelMoveHandle = STVELMOVE_init(&stVelMove, sizeof(ST_VelMove_t)); // Instance of SpinTAC Velocity Move STVELMOVE_setAxis(stVelMoveHandle, ST_AXIS0); // Sample time [s], (0, 1] STVELMOVE_setSampleTime_sec(stVelMoveHandle, _IQ24(ST_SAMPLE_TIME)); // System maximum limit for: // speed [pu/s] [IQ24(0.001), _IQ24(1)], // acceleration [pu/s^2] [IQ24(0.002), _IQ24(120)], // jerk references [pu/s^3] [_IQ20(0.0005), IQ20(2000)] STVELMOVE_setProfileMaximums(stVelMoveHandle, _IQ24(1.0), _IQ24(10.0), _IQ20(62.5)); // Acceleration limit for the profile [pu/s^2] [IQ24(0.001), _IQ24(120)] STVELMOVE_setAccelerationLimit(stVelMoveHandle, _IQ24(0.4)); // Jerk limit for the profile [pu/s^3] [_IQ20(0.0005), _IQ20(2000)] STVELMOVE_setJerkLimit(stVelMoveHandle, _IQ20(1.0)); // Set profile curve type { ST_MOVE_CUR_TRAP, ST_MOVE_CUR_SCRV, ST_MOVE_CUR_STCRV } STVELMOVE_setCurveType(stVelMoveHandle, ST_MOVE_CUR_STCRV); // ST_VelMove is not in test mode STVELMOVE_setTest(stVelMoveHandle, FALSE); // Initially ST_VelMove is not enabled STVELMOVE_setEnable(stVelMoveHandle, FALSE); // Initially ST_VelMove is not in reset STVELMOVE_setReset(stVelMoveHandle, FALSE); 13.2.4 调用 SpinTAC 速度移动 该步骤应在主 ISR 中完成。 该组件需要在适当的抽取率下调用此函数。 抽取率由 ST_ISR_TICKS_PER_SPINTAC_TICK 确定;有关详细信息,请参见节 4.7.1.4。 在调用 SpinTAC 速度移 动函数之前,必须更新目标速度、加速度限制、急动限制和曲线类型。 // If we are not in reset, and the SpeedRef_krpm has been modified if((STVELMOVE_getReset(stVelMoveHandle) == FALSE) && (_IQmpy(gMotorVars.SpeedRef_krpm, _IQ24(ST_SPEED_PU_PER_KRPM)) 450 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn SpinTAC 速度移动的软件配置 != STVELMOVE_getVelocityEnd(stVelMoveHandle))) { // Get the configuration for SpinTAC Velocity Move STVELMOVE_setCurveType(stVelMoveHandle, gMotorVars.SpinTAC.VelMoveCurveType); STVELMOVE_setVelocityEnd(stVelMoveHandle, _IQmpy(gMotorVars.SpeedRef_krpm, _IQ24(ST_SPEED_PU_PER_KRPM))); STVELMOVE_setAccelerationLimit(stVelMoveHandle, _IQmpy(gMotorVars.MaxAccel_krpmps, _IQ24(ST_SPEED_PU_PER_KRPM))); STVELMOVE_setJerkLimit(stVelMoveHandle, _IQ20mpy(gMotorVars.MaxJrk_krpmps2, _IQ20(ST_SPEED_PU_PER_KRPM))); // Enable SpinTAC Move STVELMOVE_setEnable(stVelMoveHandle, TRUE); //If starting from zero speed, enable ForceAngle, otherwise disable ForceAngle if(_IQabs(STVELMOVE_getVelocityStart(stVelMoveHandle)) < _IQ24(ST_MIN_ID_SPEED_PU)) { EST_setFlag_enableForceAngle(ctrlObj->estHandle, TRUE); gMotorVars.Flag_enableForceAngle = TRUE; } else { EST_setFlag_enableForceAngle(ctrlObj->estHandle, FALSE); gMotorVars.Flag_enableForceAngle = FALSE; } } // Run SpinTAC Move STVELMOVE_run(stVelMoveHandle); 13.2.5 SpinTAC 速度移动故障排除 13.2.5.1 ERR_ID ERR_ID 可向用户提供错误代码。 表 13-1 中列出了 SpinTAC 速度移动中定义的错误及相应解决方案。 ERR_ID 1 2 10 12 32 1002 1004 1005 1006 1007 4001 4003 表 13-1. SpinTAC 速度移动 ERR_ID 代码 问题 采样时间值无效 系统最大速度值无效 系统最大加速度值无效 系统最大急动值无效 轴 ID 无效 加速度限制值无效 急动限制值无效 曲线类型无效 速度起始值无效 速度结束值无效 SpinTAC 许可证无效 ROM 版本无效 解决方案 将 cfg.T_sec 设置为 (0, 0.01] 范围内 将 cfg.VelMax 设置为 (0, 1] 范围内 将 cfg.AccMax 设置为 [0.001, 120] 范围内 将 cfg.JrkMax 设置为 [0.0005, 1000] 范围内 将 cfg.Axis 设置为 {ST_AXIS0, ST_AXIS1} 范围内 将 AccLim 设置为 [0.002, cfg.AccMax] 范围内 将 JrkLim 设置为 [0.001, cfg.JrkMax] 范围内 将 cfg.CUR_MOD 设置为 {ST_PRO_TRAP, ST_PRO_SCRV, ST_PRO_STCRV} 范围内 将 cfg.VelStart 设置为 [-cfg.VelMax, cfg.VelMax] 范围内 将 VelEnd 设置为 [-cfg.VelMax, cfg.VelMax] 范围内 使用具有有效许可证的芯片 使用 ROM 版本有效的芯片或使用与当前 ROM 版本兼容的 SpinTAC 库。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 451 SpinTAC 位置移动的软件配置 www.ti.com.cn 13.3 SpinTAC 位置移动的软件配置 配置 SpinTAC 位置移动需要四个步骤。 实验 13b“使用 SpinTAC Move 进行位置转换”是一个示例项目,其 中执行了使用 SpinTAC 位置移动生成轨迹变化所需的步骤。 利用包含在 MotorWare 中的头文件 spintac_position.h,您可以快速将 SpinTAC 组件包括在项目中。 13.3.1 包括头文件 这应该通过其余的模块头文件包含来完成。 实验 6a 示例项目中,该文件包括在 spintac_position.h 头文件 中。 针对相应项目,可通过包括 spintac_position.h 完成此步骤。 #include "sw/modules/spintac/src/32b/spintac_pos_move.h" 13.3.2 声明全局结构 这应该通过主源文件中的全局变量声明来完成。 在实验 13b 项目中,此结构包括在已声明为 spintac_position.h 头文件一部分的 ST_Obj 结构内。 ST_Obj st_obj; // The SpinTAC Object ST_Handle stHandle; // The SpinTAC Handle 此示例为不希望使用已在 spintac_position.h 头文件中声明的 ST_Obj 结构的情况。 ST_PosMove_t stPosMove; // The SpinTAC Position Move object ST_POSMOVE_Handle stPosMoveHandle; // The SpinTAC Position Move Handle 13.3.3 初始化配置变量 这应该在死循环之前的项目主函数中完成。 这样会将所有的默认值加载到 SpinTAC 位置移动中。 该步骤可 通过运行已在 spintac_position.h 头文件中声明的函数 ST_init 和 ST_setupPosMove 来完成。 如果不希望 使用这两个函数,可使用下方的代码示例配置 SpinTAC 位置移动组件。 SpinTAC 位置移动配置是典型配置 的代表,适用于大部分电机。 // Initialize the SpinTAC Speed Controller Component stPosMoveHandle = STPOSMOVE_init(&stPosMove, sizeof(stPosMove)); // Instance of SpinTAC Move STPOSMOVE_setAxis(stPosMoveHandle, ST_AXIS0); // Sample time [s], (0, 1] STPOSMOVE_setSampleTime_sec(stPosMoveHandle, _IQ24(ST_SAMPLE_TIME)); // Set the type of profile to generate {ST_POS_MOVE_VEL_TYPE , ST_POS_MOVE_POS_TYPE} STPOSMOVE_setProfileType(stPosMoveHandle, ST_POS_MOVE_POS_TYPE); // Set the maximum value for mechanical revolutions before rollover [MRev] STPOSMOVE_setMRevMaximum_mrev(stPosMoveHandle, _IQ24(10.0)); // Set the unit conversion values, this will convert between Mrev and pu STPOSMOVE_setUnitConversion(stPosMoveHandle, USER_IQ_FULL_SCALE_FREQ_Hz, USER_MOTOR_NUM_POLE_PAIRS); // System maximum limit for: // speed [pu/s] [IQ24(0.002), _IQ24(1)] // acceleration [pu/s^2] [IQ24(0.001), _IQ24(120)] // deceleration [pu/s^2] [IQ24(0.001), _IQ24(120)] 452 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn SpinTAC 位置移动的软件配置 // jerk references [pu/s^3] [_IQ20(0.0005), _IQ20(2000)] STPOSMOVE_setProfileMaximums(obj->posMoveHandle, _IQ24(USER_MOTOR_MAX_SPEED_KRPM * ST_SPEED_PU_PER_KRPM), _IQ24(10), _IQ24(10), _IQ20(62.5)); // Velocity limit for the profile [pu/s] [IQ24(0.002), _IQ24(1)] STPOSMOVE_setVelocityLimit(obj->posMoveHandle, _IQ24(USER_MOTOR_MAX_SPEED_KRPM * ST_SPEED_PU_PER_KRPM)); // Acceleration limit for the profile [pu/s^2] [IQ24(0.001), _IQ24(120)] STPOSMOVE_setAccelerationLimit(stPosMoveHandle, _IQ24(0.4)); // Deceleration limit for the profile [pu/s^2] [IQ24(0.001), _IQ24(120)] STPOSMOVE_setDecelerationLimit(obj->posMoveHandle, _IQ24(0.4)); // Jerk limit for the profile [pu/s^3] [_IQ20(0.0005), _IQ20(2000)] STPOSMOVE_setJerkLimit(stPosMoveHandle, _IQ20(1.0)); // Set profile curve type { ST_MOVE_CUR_TRAP, ST_MOVE_CUR_SCRV, ST_MOVE_CUR_STCRV } STPOSMOVE_setCurveType(stPosMoveHandle, ST_MOVE_CUR_STCRV); // ST_PosMove is not in test mode STPOSMOVE_setTest(stPosMoveHandle, false); // Initially ST_PosMove is not enabled STPOSMOVE_setEnable(stPosMoveHandle, false); // Initially ST_PosMove is not in reset STPOSMOVE_setReset(stPosMoveHandle, false); 13.3.4 调用 SpinTAC 位置移动 该步骤应在主 ISR 中完成。 该组件需要在适当的抽取率下调用此函数。 抽取率由 ST_ISR_TICKS_PER_SPINTAC_TICK 确定;有关详细信息,请参见节 4.7.1.4。 在调用 SpinTAC 位置移 动函数之前,必须更新目标速度、加速度限制、急动限制和曲线类型。 // If we are not running a profile, and the PosStep_MRev has been modified if((STPOSMOVE_getStatus(stObj->posMoveHandle) == ST_MOVE_IDLE) && (gMotorVars.PosStepInt_MRev != 0 || gMotorVars.PosStepFrac_MRev != 0)) { // Get the configuration for SpinTAC Position Move STPOSMOVE_setCurveType(stObj->posMoveHandle, gMotorVars.SpinTAC.PosMoveCurveType); STPOSMOVE_setPositionStep_mrev(stObj->posMoveHandle, gMotorVars.PosStepInt_MRev, gMotorVars.PosStepFrac_MRev); STPOSMOVE_setVelocityLimit(stObj->posMoveHandle, _IQmpy(gMotorVars.MaxVel_krpm, _IQ24(ST_SPEED_PU_PER_KRPM))); STPOSMOVE_setAccelerationLimit(stObj->posMoveHandle, _IQmpy(gMotorVars.MaxAccel_krpmps, _IQ24(ST_SPEED_PU_PER_KRPM))); STPOSMOVE_setDecelerationLimit(stObj->posMoveHandle, _IQmpy(gMotorVars.MaxDecel_krpmps, _IQ24(ST_SPEED_PU_PER_KRPM))); STPOSMOVE_setJerkLimit(stObj->posMoveHandle, _IQ20mpy(gMotorVars.MaxJrk_krpmps2, _IQ20(ST_SPEED_PU_PER_KRPM))); // Enable the SpinTAC Position Profile Generator STPOSMOVE_setEnable(stObj->posMoveHandle, true); // clear the position step command gMotorVars.PosStepInt_MRev = 0; gMotorVars.PosStepFrac_MRev = 0; } STPOSMOVE_run(stObj->posMoveHandle); 13.3.5 SpinTAC 位置移动故障排除 13.3.5.1 位置系统配置限制 某些限制组合无法产生有效系统配置。 这种情况只会在为 SpinTAC 位置移动提供的限制非常小时发生。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 453 SpinTAC 位置移动的软件配置 www.ti.com.cn • 如果速度限制设置为低于 0.001 pu/s,则无法保证系统配置有效。 此时,电机可能会由于达到最小速度限制或存在错误条件而无法运动。 还有可能因发生计算溢出而导致 电机向预定方向的反方向运动。 在某些情况下,将速度限制设置为低于 0.001 pu/s 时生成的系统配置可 能有效,而且速度限制不小于 0.001 pu/s 的系统配置都将有效。 13.3.5.2 ERR_ID ERR_ID 可向用户提供错误代码。 表 13-2 中列出了 SpinTAC 位置移动中定义的错误及相应解决方法。 ERR_ID 1 2 10 11 12 13 14 32 1001 1002 1003 1004 1005 1006 1007 1008 1009 1101 1102 1103 1104 1105 2001 4001 4003 表 13-2. SpinTAC 位置移动 ERR_ID 代码 问题 采样时间值无效 系统最大速度值无效 系统最大加速度值无效 系统最大减速度值无效 系统最大急动值无效 位置翻转界限值无效 机械旋转 [MRev] 至 [pu] 的比率值无效 轴 ID 无效 速度限制值无效 加速度限制值无效 减速度限制值无效 急动限制值无效 曲线类型无效 速度起始值无效 速度结束值无效 位置起始值无效 位置阶跃值无效 计算溢出,VelLim 超出范围 计算溢出,AccLim 超出范围 计算溢出,DecLim 超出范围 计算溢出,JrkLim 超出范围 系统配置模式值无效 从 ST_POS_MOVE_VEL_TYPE 至 ST_POS_MOVE_POS_TYPE 的模式切换无 效 SpinTAC 许可证无效 ROM 版本无效 解决方案 将 cfg.T_sec 设置为 (0, 0.01) 范围内 将 cfg.VelMax 设置为 [0.002, 1] 范围内 将 cfg.AccMax 设置为 [0.002, 120] 范围内 将 cfg.DecMax 设置为 [0.002, 120] 范围内,并将 cfg.DecMax/cfg.AccMax 设置为 [1, 10] 范围内 将 cfg.JrkMax 设置为 [0.001, 2000] 范围内 将 cfg.ROMax_mrev 设置为 [2, 100] 范围内 将 cfg.mrev_TO_pu 设置为 [0.008, 1] 范围内 将 cfg.Axis 设置为 {ST_AXIS0, ST_AXIS1} 范围内 将 VelLim 设置为 (0, cfg.VelMax] 范围内 将 AccLim 设置为 [0.001, cfg.AccMax] 范围内 将 DecLim 设置为 [0.001, cfg.DecMax] 范围内,并将 DecLim/AccLim 设置为 [1, 10] 范围内 将 JrkLim 设置为 [0.0005, cfg.JrkMax] 范围内 将 cfg.CurveType 设置为 {ST_MOVE_CUR_TRAP, ST_MOVE_CUR_SCRV, ST_MOVE_CUR_STCRV} 范围内 将 cfg.VelStart 设置为 [-cfg.VelMax, cfg.VelMax] 范围内 将 VelEnd 设置为 [-cfg.VelMax, cfg.VelMax] 范围内 将 cfg.PosStart_mrev 设置为 [-cfg.ROMax, cfg.ROMax] 范围 内 将 PosStepInt_mrev 设置为 [-2147483647, 2147483647] 范围 内,并将 PosStepFrac_mrev 设置为 (-1, 1) 范围内 定点计算溢出时会发生此错误。 典型情况为:VelLim 或 PosStep 过小。 解决方法是将值增大。 将 cfg.ProfileType 设置为 {ST_POS_MOVE_VEL_TYPE, ST_POS_MOVE_POS_TYPE} 范围内 设置系统配置达到零速,然后通过设置 cfg.ProfileType = ST_POS_MOVE_POS_TYPE 切换至位置控制系统配置 使用具有 SpinTAC 有效许可证的芯片 使用 ROM 版本有效的芯片或使用与当前 ROM 版本兼容的 SpinTAC 库。 454 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 序列规划 13.4 InstaSPIN-MOTION 序列规划 SpinTAC 速度规划是一个运动序列规划器。 您可以利用该规划器构建应用的运动序列,而无须建立有限状 态机。 SpinTAC 速度规划中包含多种高级特性,可实现复杂的有限状态机。 它可以进行条件转换,使电机 转换为多种可能状态之一。 该组件还具备各种变量,可用于与外部组件(例如传感器或传动器)进行交互或 用作内部计数器(以便跟踪特定状态下的事件数量)。 SpinTAC 速度规划可在运行时进行配置,而且可以 在多种状态机之间进行切换。 SpinTAC Plan 既适用于位置解决方案,也适用于速度解决方案。 SpinTAC Plan 的特性和功能是相同的。 唯一的区别在于,在配置过程中,SpinTAC 位置规划需要配置一些附加字段。 13.4.1 SpinTAC 速度规划元素 SpinTAC 速度规划具备一些可搭配使用,从而生成运动序列的元素。 这些不同的元素为:状态、转换、条 件、变量和操作。 每种元素都配置为通过单独的 API 调用。 有关 API 的详细信息,请参见3.5 节 13.4.1.1 状态 状态描述了系统配置的稳定运行情况。 用户可指定末速度(SpinTAC 速度规划)或位置阶跃(SpinTAC 位 置规划),以及 SpinTAC 速度规划在转换为另一状态前保持原状态的最短时间。 在洗衣机示例中,状态定 义为:空闲、注水、顺时针搅动、逆时针搅动、排水和甩干。 13.4.1.2 转换 转换定义了可行的状态间变化。 它们可在各状态间建立连接。 如果满足特定条件,转换可令状态发生变 化。 用户可指定初始状态和目标状态、系统配置限制,以及在转换前要评估的条件。 13.4.1.3 条件 条件可用于在转换或操作中进行逻辑检查。 一个转换或动作最多可以具备两个条件。 电机必须在满足条件 后才能从一个状态转换为下一个状态或者执行相应操作。 为确定是否满足条件,可使用一个变量与特定值或 值范围进行比较。 这样就可以根据条件返回 true 或 false 值。 13.4.1.4 变量 变量允许 SpinTAC 速度规划与项目的其余部分进行交互。 SpinTAC 速度规划中有三种变量:输入、输出和 输入-输出。 输入变量用于接收来自 SpinTAC 速度规划外部的值,并对条件进行评估。 输出变量用于与系 统的其余部分进行交互。 输出变量可通过 SpinTAC 速度规划进行修改,但 SpinTAC 速度规划不能使用输 出变量来检查条件。 注意:用户必须写入用于执行输出变量相关事件(例如打开阀门)的代码。 输入-输出 变量通常充当计数器或定时器,由操作或条件使用。 13.4.1.5 操作 操作会改变变量值。 操作可以将变量设置为等于某值,或者向变量添加某值。 操作可能在特定状态下发 生,也可能在 SpinTAC 速度规划进入或退出某状态时发生。 各个操作具有相关条件。 这样,只有在满足条 件时才会执行操作。 如果某个操作配置为 ENTER(进入),SpinTAC Plan 将在进入状态时开始评估该操 作的条件。 只有在满足条件后才会执行一次该操作。 类似地,如果某个动作配置为 EXIT(退 出),SpinTAC Plan 将在退出状态时开始评估该操作的条件。 满足相应条件后会执行一次操作。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 455 InstaSPIN-MOTION 序列规划 13.4.2 SpinTAC 速度规划元素限制 www.ti.com.cn SpinTAC 速度规划可配置任意数量的元素。 唯一的限制条件在于要为 SpinTAC 速度规划的配置分配的内存 量。 确定内存分配量时,一方面应考虑效率问题,使得 SpinTAC 速度规划能够高效地使用系统内存,另一 方面也要考虑灵活性,确保能够定制元素配置。 SpinTAC 速度规划每种元素的内存占用量都不相同。 相关 信息汇总在表 13-3 中。 规划元素 操作 条件 变量 转换 状态 表 13-3. SpinTAC 速度规划元素的内存要求 SpinTAC 速度规划(双字) 5 3 2 5 4 SpinTAC 位置规划(双字) 5 3 2 7 7 要实现这种额外的灵活性,则需要声明一个需要将其地址送入 SpinTAC 速度规划的配置数组。 该配置数组 的大小需要根据规划中的元素数量来确定。表 13-3 给出了每种元素的内存要求。 最好对要使用的规划元素 数量进行声明。 这样能够简化配置数组所需内存量的计算过程。 13.4.2.1 确定 SpinTAC 速度规划配置数组大小的示例 我们的示例状态机具备以下元素: • 4 个操作 • 3 个条件 • 3 个变量 • 6 个转换 • 3 种状态 共需要 83 位双字配置空间。 该值根据上述元素数量和表 13-3 中包含的内存用量计算得出。 4 Actions * 5 Double Words = 20 Double Words 3 Conditions * 3 Double Words = 9 Double Words 3 Variables * 2 Double Words = 6 Double Words 6 Transitions * 5 Double Words = 30 Double Words 3 States * 4 Double Words = 12 Double Words Adding this together 20 + 9 + 6 + 30 + 12 = 83 Double Words The declaration of the SpinTAC Velocity Plan configuration array should be as follows uint32_t stVelPlanCfgArray[83]; 实验项目 6c 中介绍了另一示例“运动序列实例:洗衣机”。 该示例详细说明了如何使用枚举来轻松地确定 SpinTAC 速度规划配置数组的大小。 要确定 SpinTAC 位置规划配置数组的大小,需要遵循上文所述步骤,但要使用 SpinTAC 位置规划的内存用 量值。 456 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 13.4.3 SpinTAC 速度规划示例:洗衣机搅动 InstaSPIN-MOTION 序列规划 洗衣机搅动阶段是介绍 SpinTAC 速度规划基本元素的另一示例。 搅动周期为基本运动系统配置。 在本示例 中,SpinTAC 速度规划不会与任何外部传感器或阀门进行交互,也不会进行条件转换。 该运动序列可在 SpinTAC 速度规划中轻松实现。图 13-3 展示了洗衣机搅动过程的状态转换图。 Idle Stage Idle State Start Button pushed Start Button not pushed Agitation State 1 State Transition Condition Agitation State 2 Wash Stage 图 13-3. 洗衣机搅动示例的状态转换图 洗衣机搅动过程分为两个阶段:空闲和洗涤。 在按下启动按钮前,洗衣机会一直保持空闲状态。 按下启动 按钮后,洗衣机就会立即进入洗涤阶段,开始以正向和反向速度交替搅动,直至洗衣机搅动状态机收到停止 命令。 图 13-6 描述了整个洗衣机运动序列中的电机速度,但它还可以用于描述洗衣机搅动运动序列中的电机速 度。 请参考图 13-6 的洗涤阶段部分,其中包含了正反向交替的电机速度。 这代表洗衣机的搅动阶段。 13.4.4 SpinTAC 速度规划示例:车库门 车库门系统是介绍 SpinTAC Plan 基本元素的一个示例。 车库门属于基本运动系统配置,其中包括条件转 换、变量和操作。 它引入了 SpinTAC 速度规划示例中的所有不同组件。 该运动序列可在 SpinTAC 速度规 划中轻松实现。 图 13-4 展示了车库门示例的状态转换图。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 457 InstaSPIN-MOTION 序列规划 Idle Stage www.ti.com.cn Idle State Button == 1 && Up Sensor == 1 Down Sensor == 1 Up Sensor == 1 Button == 1 && Down Sensor == 1 Up Sensor = 0 Button = 0 Down State State A Variable Down Sensor = 0 Button = 0 Button == 1 Down Stage Transition Up State Button == 1 Condition Action Up Stage 图 13-4. 车库门示例的状态转换图 车库门共有三个阶段:空闲、上升和下降。 在按下按钮前,车库门会一直保持空闲状态。 按下按钮后,车 库门就会立即根据当前位置转换至上升或下降状态。 如果在车库门转换为上升或下降时按下按钮,它就会改 变运行方向。 13.4.5 SpinTAC 速度规划示例:洗衣机 洗衣机是使用 SpinTAC 速度规划的绝佳示例。 洗衣机拥有复杂的运动序列。 在本示例中,SpinTAC 速度 规划会与传感器和阀门进行交互,还会进行有条件的状态转换。 整个运动序列可在 SpinTAC 速度规划中轻 松实现。图 13-5 展示了洗衣机的状态转换图。 458 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 序列规划 Dry Stage Idle Stage Fill Stage Fill_Flag == 0 Dry State Idle Set Agitation State Counter Start Button pushed Fill_Valve Fill Open State Fill_Valve Closed Start Button not pushed Fill_Flag == 1 Drain_Flag == 0 Drain Stage Agitation Counter decreases by 1 State A Variable Agitation Counter > 0 Agitation State 1 Transition Condition Drain_Valve Closed Drain State Drain_Valve Open Agitation Counter <= 0 Agitation State 2 Action Drain_Flag == 1 Wash Stage 图 13-5. 洗衣机示例的状态转换图 洗衣机分为五个阶段:空闲、注水、洗涤、排水和甩干。 在按下启动按钮前,洗衣机会一直保持空闲状态。 按下启动按钮后,洗衣机会立即进入注水阶段,此时搅动 计数器会被设为配置值,表示要执行的搅动周期数。 进入注水阶段后,注水阀会打开。 水位传感器会指示洗衣机桶内水已注满。 注水后,注水阀关闭,转而进 入洗涤阶段。 在洗涤阶段中,电机会正反方向交替搅动,直至搅动计数器归零。然后洗衣机进入排水阶段。 进入此阶段后,排水阀打开。 排水传感器会指示水已排空。 排水完毕之后,排水阀关闭,洗衣机进入甩干 阶段。 在甩干阶段,电机会在配置的时间内以一定速度旋转。 到达配置时间后,洗衣机进入空闲阶段。 此时整个 运转过程结束。 图 13-6 描述了洗衣机运动序列中的电机速度曲线。 电机以 0RPM 等待注水阶段完成。 此时,电机以 250RPM 和 -250RPM 的速度来回搅动 20 个周期。 20 个搅动周期后,电机速度会回到 0RPM,直至洗衣 机排水结束。 在甩干阶段,电机会以高达 2000RPM 的速度旋转,甩干衣物。 甩干阶段结束后,电机速度 会回到 0RPM 并进入空闲状态。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 459 InstaSPIN-MOTION 序列规划 .4 www.ti.com.cn Vel [RPM] .3 Fill Stage .2 Wash Stage Agitating 20 times .1 AccLim = 12 KRPM/s JrkLim = 24 KRPM/s2 Drain Stage Dry Stage End Stage AccLim = 1.2 KRPM/s JrkLim = 12 KRPM/s2 AccLim = 1.2 KRPM/s JrkLim = 12 KRPM/s2 00 VelSP VelRef .1 Idle State: VelSP = 0 Timer = 2000 Fill State: VelSP = 0 Timer = 2000 CW Agitation State: VelSP = 250 Timer = 0 CCW Agitation State: VelSP= -250 Timer = 0 Drain State: VelSP = 0 Timer = 2000 Dry State: VelSP = 2000 Timer = 2000 .2 0 2 4 6 8 10 12 14 16 18 20 Time [s] 图 13-6. 洗衣机示例中的速度曲线 13.4.6 SpinTAC 位置规划示例:自动售货机 自动售货机是 SpinTAC 位置规划的一个使用示例。 在该示例中,自动售货机的售货过程是一个循环过程, 一次仅出售一件商品。 图 13-7 中展示了该示例的状态转换图。 460 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn SpinTAC 速度规划的软件配置 Item 1 Init State TotalInv == 0 Item 2 FwdButton == 1 || Item1Inv == 0 Item 2 FwdButton = 0 State FwdButton == 1 || Item1Inv == 0 Item 1 State FwdButton == 1 || Item2Inv == 0 FwdButton = 0 Item 3 State A Variable FwdButton == 1 || Item4Inv == 0 Transition Condition Action Item 4 State FwdButton = 0 Item 4 FwdButton == 1 || Item3Inv == 0 图 13-7. 自动售货机示例的状态转换图 FwdButton = 0 Item 3 State 在该示例中,自动售货机将展示一件商品,直至用户按下前进按钮 (FwdButton)。 检测到该按钮已按下后, 自动售货机将立即向前推送出一件商品,然后展示下一件可售卖的商品。 用户将商品从自动售货机中取出时,应用程序会更新商品存货记录。 当存货量减至零时,自动售货机会跳过 该商品的售卖状态。 如果所有商品的存货量均减至零,自动售货机将返回初始状态,而 SpinTAC 位置规划 将停止运行。 这表明自动售货机需要补货。 实验项目 13d 中执行了 SpinTAC 位置规划的该示例“运动序列实例:自动售货机”。 13.5 SpinTAC 速度规划的软件配置 配置 SpinTAC 速度规划需要七个步骤。 实验 6c“运动序列实例:洗衣机”是一个示例项目,其中执行了使用 SpinTAC 速度规划所需的步骤。 利用包含在 MotorWare 中的头文件 spintac_velocity.h,您可以快速将 SpinTAC 组件包括在项目中。 13.5.1 包括头文件 这应该通过其余的模块头文件包含来完成。 在实验 6c 示例项目中,该文件包括在 spintac_velocity.h 头文 件中。 针对相应项目,可通过包括 spintac_velocity.h 完成此步骤。 #include "sw/modules/spintac/src/32b/spintac_vel_plan.h" ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 461 SpinTAC 速度规划的软件配置 www.ti.com.cn 13.5.2 定义配置数组的大小 该步骤应通过其余的宏定义来完成。 在实验 6c 示例项目中,该步骤将在主源文件最顶部完成。 通常,最好 在规划中使用枚举来定义并标注状态。 这样可以轻松确定配置数组的大小,以便满足应用需求。 在实验 6c 示例项目中,该操作已完成。 13.4.2 节 中介绍了有关确定运动序列配置数组大小的内容。 #define ST_VELPLAN_CFG_ARRAY_DWORDS ((ST_VEL_PLAN_ACT_DWORDS * 6) + \ (ST_VEL_PLAN_COND_DWORDS * 4) + \ (ST_VEL_PLAN_VAR_DWORDS * 5) + \ (ST_VEL_PLAN_TRAN_DWORDS * 7) + \ (ST_VEL_PLAN_STATE_DWORDS * 6)) 13.5.3 声明全局结构 这应该通过主源文件中的全局变量声明来完成。 在实验 6c 项目中,此结构包括在已声明为 spintac_velocity.h 头文件一部分的 ST_Obj 结构内。 ST_Obj st_obj; // The SpinTAC Object ST_Handle stHandle; // The SpinTAC Handle unsigned long gWaterLevel = 0; // Stores the water level in the washer _iq gVelPanVar[ST_PLAN_MAX_VAR_NUM]; // Stores the values of SpinTAC Plan variables // Configuration array for SpinTAC Plan uint32_t stVelPlanCfgArray[ST_VELPLAN_CFG_ARRAY_DWORDS]; 此示例为不希望使用已在 spintac_velocity.h 头文件中声明的 ST_Obj 结构的情况。 ST_VelPlan_t stVelPlan; //The SpinTAC Plan Object ST_VELPLAN_Handle stVelPlanHandle; // The SpinTAC Plan Handle uint32_t gWaterLevel = 0; // Stores the water level in the washer _iq gVelPanVar[ST_PLAN_MAX_VAR_NUM]; // Stores the values of SpinTAC Plan variables // Configuration array for SpinTAC Plan uint32_t stVelPlanCfgArray[ST_VELPLAN_CFG_ARRAY_DWORDS]; 13.5.4 初始化配置变量 这应该在死循环之前的项目主函数中完成。 这样会将所有默认值都加载到 SpinTAC 速度规划中。 该步骤可 通过运行函数 ST_init(已在 spintac_velocity.h 头文件中声明)和函数 ST_setupVelPlan(已在 main.c 中 声明)来完成。 如果不希望使用上述两个函数,可使用下方的代码示例配置 SpinTAC 速度规划组件。 本示 例加载的是13.4.5 节 中介绍的洗衣机系统配置。 有关 SpinTAC Plan API 的详细信息,请参见节 3.5.3.1。 // init the ST VelPlan object stVelPlanHandle = STVELPLAN_init(&stVelPlan, sizeof(ST_VelPlan_t)); // Pass the configuration array pointer into SpinTAC Velocity Plan // Parameters: handle, pointer to array, size of array, number of actions, number of conditions, number of variables, number of transitions, number of states STVELPLAN_setCfgArray(stVelPlanHandle, &stVelPlanCfgArray[0], sizeof(stVelPlanCfgArray), 6, 4, 5, 7, 6); // Establish the Velocity, Acceleration, and Jerk Maximums _iq velMax = STVELMOVE_getVelocityMaximum(stVelMoveHandle); 462 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn _iq accMax = STVELMOVE_getAccelerationMaximum(stVelMoveHandle); _iq jrkMax = STVELMOVE_getJerkMaximum(stVelMoveHandle); SpinTAC 速度规划的软件配置 // Configure SpinTAC Velocity Plan: Sample Time, VelMax, AccMax, DecMax, JrkMax, LoopENB STVELPLAN_setCfg(stVelPlanHandle, _IQ24(ST_SPEED_SAMPLE_TIME), velMax, accMax, jrkMax, FALSE); // Configure halt state: VelEnd, AccMax, JrkMax, Timer STVELPLAN_setCfgHaltState(stVelPlanHandle, 0, accMax, jrkMax, 1000L); //Example: STVELPLAN_addCfgState(handle, VelSetpoint[pups], StateTimer[ticks]); //StateIdx0: Idle STVELPLAN_addCfgState(stVelPlanHandle, 0, 2000L); // StateIdx1: Fill STVELPLAN_addCfgState(stVelPlanHandle, 0, 2000L); // StateIdx2: AgiCW STVELPLAN_addCfgState(stVelPlanHandle, _IQ24(0.25 * ST_SPEED_PU_PER_KRPM), 200L); // StateIdx3: AgiCCW STVELPLAN_addCfgState(stVelPlanHandle, _IQ24(-0.25 * ST_SPEED_PU_PER_KRPM), 200L); // StateIdx4: Drain STVELPLAN_addCfgState(stVelPlanHandle, 0, 2000L); // StateIdx5: Dry STVELPLAN_addCfgState(stVelPlanHandle, _IQ24(2 * ST_SPEED_PU_PER_KRPM), 2000L); //Example: STVELPLAN_addCfgVar(handle, VarType, InitialValue); // VarIdx0: FillSensor {0: not filled; 1: filled} STVELPLAN_addCfgVar(stVelPlanHandle, ST_VAR_IN, 0); // VarIdx1: DrainSensor {0: not drained; 1: drained} STVELPLAN_addCfgVar(stVelPlanHandle, ST_VAR_IN, 0); // VarIdx2: CycleCounter STVELPLAN_addCfgVar(stVelPlanHandle, ST_VAR_INOUT, 0); // VarIdx3: FillValve {0: valve closed; 1: valve open} STVELPLAN_addCfgVar(stVelPlanHandle, ST_VAR_OUT, 0); // VarIdx4: DrainValve {0: valve closed; 1: valve open} STVELPLAN_addCfgVar(stVelPlanHandle, ST_VAR_OUT, 0); //Example: STVELPLAN_addCfgCond(handle, VarIdx, Comparison, Value1, Value2) // CondIdx0: WaterFull Water is filled STVELPLAN_addCfgCond(stVelPlanHandle, 0, ST_COMP_EQ, 1, 0); // CondIdx0: AgiNotDone SgitCycleCounter is greater than 0 (not done) STVELPLAN_addCfgCond(stVelPlanHandle, 2, ST_COMP_GT, 0, 0); // CondIdx1: AgiDone SgitCycleCounter is equal or less than 0 (done) STVELPLAN_addCfgCond(stVelPlanHandle, 2, ST_COMP_ELW, 0, 0); // CondIdx0: WaterEmpty Water is drained STVELPLAN_addCfgCond(stVelPlanHandle, 1, ST_COMP_EQ, 1, 0); // Note: Set Value2 to 0 if Comparison is for only one value. //Example: STVELPLAN_addCfgTran(handle, FromState, ToState, CondOption, CondIdx1, CondiIdx2, AccLim[pups2], JrkLim[pups3]); // From IdleState to FillState STVELPLAN_addCfgTran(stVelPlanHandle, 0, 1, ST_COND_NC, 0, 0, _IQ24(0.1), _IQ20(1)); // From FillState to AgiState1 STVELPLAN_addCfgTran(stVelPlanHandle, 1, 2, ST_COND_FC, 0, 0, _IQ24(0.1), _IQ20(1)); // From AgiState1 to AgiState2 STVELPLAN_addCfgTran(stVelPlanHandle, 2, 3, ST_COND_NC, 0, 0, _IQ24(1), _IQ20(1)); // From AgiState2 to AgiState1 STVELPLAN_addCfgTran(stVelPlanHandle, 3, 2, ST_COND_FC, 1, 0, _IQ24(1), _IQ20(1)); // From AgiState2 to DrainState STVELPLAN_addCfgTran(stVelPlanHandle, 3, 4, ST_COND_FC, 2, 0, _IQ24(0.1), _IQ20(1)); // From DrainState to DryState STVELPLAN_addCfgTran(stVelPlanHandle, 4, 5, ST_COND_FC, 3, 0, _IQ24(0.2), _IQ20(1)); // From DryState to IdleState STVELPLAN_addCfgTran(stVelPlanHandle, 5, 0, ST_COND_NC, 0, 0, _IQ24(0.1), _IQ20(1)); // Note: set CondIdx1 to 0 if CondOption is ST_COND_NC; set CondIdx2 to 0 if CondOption is ST_COND_NC or ST_COND_FC //Example: STVELPLAN_addCfgAct(handle, StateIdx, VarIdx, Operation, Value, ActionTriger); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 463 SpinTAC 速度规划的软件配置 www.ti.com.cn // In IdleState, preset AgiCycleCounter to 20 STVELPLAN_addCfgAct(stVelPlanHandle, 0, ST_COND_NC, 0, 0, 2, ST_ACT_EQ, 20, ST_ACT_EXIT); // Decrease AgiCycleCounter by 1 every time enters AgiState1 STVELPLAN_addCfgAct(stVelPlanHandle, 2, ST_COND_NC, 0, 0, 2, ST_ACT_ADD, -1, ST_ACT_ENTR); // In FillState, set VarIdx3 to 1 to open FillValve STVELPLAN_addCfgAct(stVelPlanHandle, 1, ST_COND_NC, 0, 0, 3, ST_ACT_EQ, 1, ST_ACT_ENTR); // In FillState, set VarIdx3 to 0 to close FillValve when FillSensor = 1 STVELPLAN_addCfgAct(stVelPlanHandle, 1, ST_COND_NC, 0, 0, 3, ST_ACT_EQ, 0, ST_ACT_EXIT); // In DrainState, set VarIdx4 to 1 to open DrainValve STVELPLAN_addCfgAct(stVelPlanHandle, 4, ST_COND_NC, 0, 0, 4, ST_ACT_EQ, 1, ST_ACT_ENTR); // In DrainState, set VarIdx4 to 0 to close DrainValve when DrainSensor = 1 STVELPLAN_addCfgAct(stVelPlanHandle, 4, ST_COND_NC, 0, 0, 4, ST_ACT_EQ, 0, ST_ACT_EXIT); // If there was an error during the configuration, force Plan into the Halt State if(STVELPLAN_getErrorID(stVelPlanHandle) != FALSE) { // Configure FSM: Ts, VelMax, AccMax, DecMax, JrkMax, LoopENB STVELPLAN_setCfg(stVelPlanHandle, _IQ24(ST_SPEED_SAMPLE_TIME), velMax, accMax, jrkMax, FALSE); // Configure halt state: VelEnd, AccMax, JrkMax, Timer STVELPLAN_setCfgHaltState(stVelPlanHandle, 0, accMax, jrkMax, 1000L);} 13.5.5 调用 SpinTAC 速度规划 该操作可在主循环中完成。 本代码示例中包括与注排水阀及传感器进行交互所需的代码。 作为洗衣机仿真 的一部分,它还会更新水位信息。 if(gMotorVars.VelPlanRun == TRUE) { STVELPLAN_setEnable(stVelPlanHandle, TRUE); } // Run SpinTAC Velocity Plan STVELPLAN_run(stVelPlanHandle); // Update sensor values for SpinTAC Plan // Get values for washer valve components STVELPLAN _getVar(stVelPlanHandle, 3, &gVelPanVar[3]); // Get value of FillVale STVELPLAN _getVar(stVelPlanHandle, 3, &gVelPanVar[4]); // Get value of DrainValve if(gVelPanVar[3] == TRUE) { // if FillValve is open, increase water level gWaterLevel += 1; } else if(gVelPanVar[4] == TRUE) { // if DrainValve is open, decrease water level gWaterLevel -= 1; } if(gWaterLevel >= WASHER_MAX_WATER_LEVEL) { // if water level is greater than maximum, set fill sensor to true gWaterLevel = WASHER_MAX_WATER_LEVEL; gVelPanVar[0] = TRUE; } else { // if water level is less than maximum, set FillSensor to false gVelPanVar[0] = FALSE; } if(gWaterLevel <= WASHER_MIN_WATER_LEVEL) { // if water level is at the minimum & set DrainSensor to true gWaterLevel = WASHER_MIN_WATER_LEVEL; gVelPanVar[1] = TRUE; } else { // if water level is greater than minimum, set DrainSensor to false gVelPanVar[1] = FALSE; } // Set values for washer sensor components 464 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn SpinTAC 速度规划的软件配置 STVELPLAN _getVar(stVelPlanHandle, 0, gVelPanVar[0]); // Set value for FillSensor STVELPLAN _getVar(stVelPlanHandle, 1, gVelPanVar[1]); // Set value for DrainSensor if(STVELPLAN_getStatus(stVelPlanHandle) != ST_PLAN_IDLE) { // Send the profile configuration to SpinTAC Move gMotorVars.SpeedRef_krpm = _IQmpy(STVELPLAN_getVelocitySetpoint(stVelPlanHandle), _IQ24(ST_SPEED_KRPM_PER_PU)); gMotorVars.MaxAccel_krpmps = _IQmpy(STVELPLAN_getAccelerationLimit(stVelPlanHandle), _IQ24(ST_SPEED_KRPM_PER_PU)); gMotorVars.MaxJrk_krpmps2 = _IQ20mpy(STVELPLAN_getJerkLimit(stVelPlanHandle), _IQ20(ST_SPEED_KRPM_PER_PU)); } else { STVELPLAN_setEnable(stVelPlanHandle, FALSE); } 13.5.6 调用 SpinTAC 速度规划节拍 该步骤应在主 ISR 中完成。 该组件需要在适当的抽取率下调用此函数。 抽取率由 ST_ISR_TICKS_PER_SPINTAC_TICK 确定;有关详细信息,请参见节 4.7.1.4。 // Run SpinTAC Velocity Plan Tick STVELPLAN_runTick(stVelPlanHandle); 13.5.7 根据 SpinTAC 速度移动状态更新 SpinTAC 速度规划 该步骤应在主 ISR 中完成。 SpinTAC 速度移动在完成系统配置时需要调用该函数。 这是为了警告 SpinTAC 速度规划,提示已达到其向 SpinTAC 速度移动提供的目标速度。 此函数应置于 SpinTAC 速度移 动的函数调用之后。 // Update Plan when the profile is completed if(STVELMOVE_getDone(stVelMoveHandle) != FALSE) { STVELPLAN_setUnitProfDone(stVelPlanHandle, TRUE); } else { STVELPLAN_setUnitProfDone(stVelPlanHandle, FALSE); } 13.6 SpinTAC 速度规划故障排除 13.6.1 ERR_ID ERR_ID 为用户提供错误代码,用于识别引发错误的特定 SpinTAC 速度规划函数。 表 13-4 列出了在 SpinTAC 速度规划中定义的 ERR_ID。 ERR_ID 3000 3001 3002 3003 3004 3005 表 13-4. SpinTAC 速度规划 ERR_ID 规划函数 STVELPLAN_addCfgCond STVELPLAN_delCfgCond STVELPLAN_setCfgCond STVELPLAN_getCfgCond STVELPLAN_addCfgTran STVELPLAN_delCfgTran ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 465 SpinTAC 速度规划故障排除 www.ti.com.cn ERR_ID 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 4001 4003 表 13-4. SpinTAC 速度规划 ERR_ID (continued) 规划函数 STVELPLAN_setCfgTran STVELPLAN_getCfgTran STVELPLAN_addCfgAct STVELPLAN_delCfgAct STVELPLAN_setCfgAct STVELPLAN_getCfgAct STVELPLAN_addCfgVar STVELPLAN_delCfgVar STVELPLAN_setCfgVar STVELPLAN_getCfgVar STVELPLAN_addCfgState STVELPLAN_delCfgState STVELPLAN_setCfgState STVELPLAN_setVar STVELPLAN_getVar STVELPLAN_setCfg STVELPLAN_setCfgHaltState STVELPLAN_setCfgArray STVELPLAN_addCfgVarCond STVELPLAN_delCfgVarCond STVELPLAN_setCfgVarCond STVELPLAN_getCfgVarCond STVELPLAN_run(SpinTAC 许可证无效。 使用具有 SpinTAC 有效许可证的芯 片。) STVELPLAN_run(ROM 版本无效。 使用 ROM 版本有效的芯片或使用与当前 ROM 版本兼容的 SpinTAC 库。) 13.6.2 配置错误 配置错误通过 SpinTAC 速度规划主结构中包含的 CfgError 结构上报。 该结构中包含了用于存储错误附加信 息的元素。 这些元素将在下文介绍: • CfgError.ERR_idx:识别出现错误的已配置元素实例。 • CfgError.ERR_code:识别引发错误的特定错误条件。 特定条件的 ERR_code 对于所有规划函数来说都是相同的。 表 13-5 中列出了在 SpinTAC 速度规划中定义 的 ERR_code 和条件。 ERR_code 1 2 3 4 5 6 7 8 表 13-5. SpinTAC 速度规划 ERR_code 说明 SpinTAC Plan 正在运行 超过最大状态数量 超过最大条件数量 超过最大转换数量 超过最大操作数量 超过最大变量数量 采样时间值无效 VelMax 值无效 解决方案 运行配置前让 SpinTAC Plan 进入空闲状态。 已配置最大状态数量。 已配置最大条件数量。 已配置最大转换数量。 已配置最大操作数量。 已配置最大变量数量。 将采样时间 cfg.T_sec 设置为 (0, 0.01] 范围内。 在 (0, 1] 范围内选择 VelMax 值。 466 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ERR_code 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 37 38 39 40 41 42 43 SpinTAC 位置规划的软件配置 表 13-5. SpinTAC 速度规划 ERR_code (continued) 说明 AccMax 值无效 JrkMax 值无效 LoopENB 值无效 VelEnd 值无效 AccLim 值无效 JrkLim 值无效 Timer_tick 值无效 状态索引无效 条件索引无效 转换索引无效 操作索引无效 变量索引无效 变量类型无效 对比值无效 操作无效 AndOr 值无效 变量类型错误 对比值错误 状态索引错误 转换时条件索引错误 EnterExit 值错误 删除变量时 AndOr 错误 变量附有操作,无法删除 规划元素声明的规划配置数组过小 状态附有转换,无法删除 状态附有操作,无法删除 变量对比值错误 变量不能与自身进行比较 无法通过基于值的条件索引获得基于变量的条 件 条件附有转换,无法删除 解决方案 在 [0.001, 120] 范围内选择 AccMax 值。 在 [0.0005, 2000] 范围内选择 JrkMax 值。 在 {false, true} 范围内选择 LoopENB 值。 在 (0, VelMax] 范围内选择 VelEnd 值。 在 [0.001, AccMax] 范围内选择 AccLim 值。 在 [0.0005, JrkMax] 范围内选择 JrkLim 值。 选择正整数值。 该索引应为已配置的状态索引。 该索引应为已配置的条件索引。 该索引应为已配置的转换索引。 该索引应为已配置的操作索引。 该索引应为已配置的变量索引。 从 ST_PlanVar_e 的值中选择变量类型。 从 ST_PlanComp_e 的值中选择对比值。 从 ST_PlanActOptn_e 的值中选择操作。 从 ST_PlanCond_e 的值中选择 AndOr 值。 ST_VAR_OUT 变量的值无法设置。 ST_VAR_OUT 变量无法在条件中使用。 ST_VAR_IN 变量无法在操作中使用。 Value1 不应大于 Value2。 在转换时,FromState 与 ToState 不能相同,但这些状态必须 与已配置的某个状态相同。 在转换时:CondIdx1 与 CondIdx2 不能相同,但这些条件必须 与已配置的某个条件相同 从 ST_PlanActTrgr_e 的值中选择 EnterExit 值 AndOr 值与 VarIdx 值冲突。 删除变量时,会在转换中引起配 置错误。 在删除变量之前从操作配置中移除变量。 从配置中移除元素或者声明更大的配置数组。 在删除状态之前从转换配置中移除状态。 在删除状态之前从操作配置中移除状态。 变量对比条件的对比枚举值不能超过 ST_COMP_ELW。 确保送往函数的变量索引不同且有效。 发送已知包含基于变量的条件的索引。 在删除条件之前从转换配置中移除条件。 13.7 SpinTAC 位置规划的软件配置 配置 SpinTAC 位置规划需要七个步骤。 实验 13d“运动序列实例:自动售货机”是一个示例项目,其中执行 了使用 SpinTAC 位置规划所需的步骤。 利用包含在 MotorWare 中的头文件 spintac_position.h,您可以快 速将 SpinTAC 组件包括在项目中。 13.7.1 包括头文件 这应该通过其余的模块头文件包含来完成。 在实验 13d 示例项目中,该文件包括在 spintac_position.h 头文 件中。 针对相应项目,可通过包括 spintac_position.h 完成此步骤。 #include "sw/modules/spintac/src/32b/spintac_pos_plan.h" ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 467 SpinTAC 位置规划的软件配置 13.7.2 定义配置数组的大小 www.ti.com.cn 该步骤应通过其余的宏定义来完成。 在实验 13d 示例项目中,该步骤将在主源文件最顶部完成。 通常,最 好在规划中使用枚举来定义并标注状态。 这样可以轻松确定配置数组的大小,以便满足应用需求。 在实验 13d 示例项目中,该操作已完成。 13.4.2 节 中介绍了有关确定运动序列配置数组大小的内容。 #define ST_POSPLAN_CFG_ARRAY_DWORDS ((ST_POS_PLAN_ACT_DWORDS (ST_POS_PLAN_COND_DWORDS (ST_POS_PLAN_VAR_DWORDS (ST_POS_PLAN_TRAN_DWORDS (ST_POS_PLAN_STATE_DWORDS * 4) + \ * 6) + \ * 6) + \ * 6) + \ * 5)) 13.7.3 声明全局结构 这应该通过主源文件中的全局变量声明来完成。 在实验 13d 项目中,此结构包括在已声明为 spintac_position.h 头文件一部分的 ST_Obj 结构内。 ST_Obj st_obj; // The SpinTAC Object ST_Handle stHandle; // The SpinTAC Handle _iq gVendFwdButton = 0; // Button to advance the displayed item _iq gVendSelectButton = 0; // Button to vend the displayed item uint16_t gVendInventory[4] = {VEND_INITIAL_INVENTORY, VEND_INITIAL_INVENTORY, VEND_INITIAL_INVENTORY, VEND_INITIAL_INVENTORY}; VEND_State_e gVendAvailableItem = VEND_ITEM0; // Current item available to vend // Configuration array for SpinTAC Position Plan uint32_t stPosPlanCfgArray[ST_POSPLAN_CFG_ARRAY_DWORDS]; 此示例为不希望使用已在 spintac_position.h 头文件中声明的 ST_Obj 结构的情况。 ST_PosPlan_t stPosPlan; //The SpinTAC Position Plan Object ST_POSPLAN_Handle stPosPlanHandle; //The SpinTAC Position Plan Handle _iq gVendFwdButton = 0; // Button to advance the displayed item _iq gVendSelectButton = 0; // Button to vend the displayed item uint16_t gVendInventory[4] = {VEND_INITIAL_INVENTORY, VEND_INITIAL_INVENTORY, VEND_INITIAL_INVENTORY, VEND_INITIAL_INVENTORY}; VEND_State_e gVendAvailableItem = VEND_ITEM0; // Current item available to vend // Configuration array for SpinTAC Position Plan uint32_t stPosPlanCfgArray[ST_POSPLAN_CFG_ARRAY_DWORDS]; 13.7.4 初始化配置变量 这应该在死循环之前的项目主函数中完成。 这样会将所有的默认值加载到 SpinTAC 位置移动规划中。 该步 骤可通过运行函数 ST_init(已在 spintac_position.h 头文件中声明)和函数 ST_setupPosPlan(已在 main.c 中声明)来完成。 如果不希望使用该函数,可使用下方的代码示例配置 SpinTAC 位置规划组件。 本示例加载的是13.4.6 节 中介绍的自动售货机系统配置。 有关 SpinTAC Plan API 的详细信息,请参见 图 3-19。 // Pass the configuration array pointer into SpinTAC Velocity Plan STPOSPLAN_setCfgArray(stPosPlanHandle, &stPosPlanCfgArray[0], sizeof(stPosPlanCfgArray), 4, 6, 6, 6, 5); // Establish the Velocity, Acceleration, Deceleration, and Jerk Maximums velMax = STPOSMOVE_getVelocityMaximum(stPosMoveHandle); accMax = STPOSMOVE_getAccelerationMaximum(stPosMoveHandle); 468 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn decMax = STPOSMOVE_getDecelerationMaximum(stPosMoveHandle); jrkMax = STPOSMOVE_getJerkMaximum(stPosMoveHandle); SpinTAC 位置规划的软件配置 // Establish the Velocity, Acceleration, Deceleration, and Jerk Limits velLim = _IQ24(0.1 * ST_SPEED_PU_PER_KRPM); accLim = _IQ24(0.5 * ST_SPEED_PU_PER_KRPM); decLim = _IQ24(0.5 * ST_SPEED_PU_PER_KRPM); jrkLim = _IQ24(1.0 * ST_SPEED_PU_PER_KRPM); // Configure SpinTAC Velocity Plan: Sample Time, VelMax, AccMax, DecMax, JrkMax, LoopENB STPOSPLAN_setCfg(stPosPlanHandle, _IQ24(ST_SAMPLE_TIME), velMax, accMax, decMax, jrkMax, false); // Configure halt state: PosStepInt, PosStepFrac, VelMax, AccMax, JrkMax, Timer STPOSPLAN_setCfgHaltState(stPosPlanHandle, 0, 0, velMax, accMax, jrkMax, 1000L); //Example: STPOSPLAN_addCfgState(handle, PosStepInt[MRev], PosStepFrac[MRev], StateTimer[ticks]); STPOSPLAN_addCfgState(stPosPlanHandle, 0, 0, 200L); // StateIdx0: Init STPOSPLAN_addCfgState(stPosPlanHandle, 0, _IQ24(0.25), 200L); // StateIdx1: Item0 STPOSPLAN_addCfgState(stPosPlanHandle, 0, _IQ24(0.25), 200L); // StateIdx2: Item1 STPOSPLAN_addCfgState(stPosPlanHandle, 0, _IQ24(0.25), 200L); // StateIdx2: Item2 STPOSPLAN_addCfgState(stPosPlanHandle, 0, _IQ24(0.25), 200L); // StateIdx2: Item3 //Example: STPOSPLAN_addCfgVar(handle, VarType, InitialValue); STPOSPLAN_addCfgVar(stPosPlanHandle, ST_VAR_INOUT, 0); // VarIdx0: FwdButton STPOSPLAN_addCfgVar(stPosPlanHandle, ST_VAR_IN, 10); // VarIdx1: Item0Inv STPOSPLAN_addCfgVar(stPosPlanHandle, ST_VAR_IN, 10); // VarIdx2: Item1Inv STPOSPLAN_addCfgVar(stPosPlanHandle, ST_VAR_IN, 10); // VarIdx3: Item2Inv STPOSPLAN_addCfgVar(stPosPlanHandle, ST_VAR_IN, 10); // VarIdx4: Item3Inv STPOSPLAN_addCfgVar(stPosPlanHandle, ST_VAR_IN, 40); // VarIdx5: TotalInv //Example: STPOSPLAN_addCfgCond(handle, VarIdx, Comparison, // CondIdx0: Fwd Button Pressed STPOSPLAN_addCfgCond(stPosPlanHandle, 0, ST_COMP_EQ, // CondIdx1: Item0 Empty STPOSPLAN_addCfgCond(stPosPlanHandle, 1, ST_COMP_ELW, // CondIdx2: Item1 Empty STPOSPLAN_addCfgCond(stPosPlanHandle, 2, ST_COMP_ELW, // CondIdx3: Item2 Empty STPOSPLAN_addCfgCond(stPosPlanHandle, 3, ST_COMP_ELW, // CondIdx4: Item3 Empty STPOSPLAN_addCfgCond(stPosPlanHandle, 4, ST_COMP_ELW, // CondIdx5: TotalInv Empty STPOSPLAN_addCfgCond(stPosPlanHandle, 5, ST_COMP_ELW, Value1, Value2) 1, 0); 0, 0); 0, 0); 0, 0); 0, 0); 0, 0); //Example: STPOSPLAN_addCfgTran(handle, FromState, ToState, CondOption, CondIdx1, CondIdx2, VelLim[pups], AccLim[pups2], DecLim[pups2], JrkLim[pups3]); // NOTE: The deceleration limit must be set between the following bounds [acceleration limit, 10*acceleration limit] // From Init to Item1 STPOSPLAN_addCfgTran(stPosPlanHandle, 0, 2, ST_COND_OR, 0, 2, velLim, accLim, decLim, jrkLim); // From Item3 to Init STPOSPLAN_addCfgTran(stPosPlanHandle, 1, 0, ST_COND_FC, 5, 0, velLim, accLim, decLim, jrkLim); // From Item0 to Item1 STPOSPLAN_addCfgTran(stPosPlanHandle, 1, 2, ST_COND_OR, 0, 1, velLim, accLim, decLim, jrkLim); // From Item1 to Item2 STPOSPLAN_addCfgTran(stPosPlanHandle, 2, 3, ST_COND_OR, 0, 2, velLim, accLim, decLim, jrkLim); // From Item2 to Item3 STPOSPLAN_addCfgTran(stPosPlanHandle, 3, 4, ST_COND_OR, 0, 3, velLim, accLim, decLim, jrkLim); // From Item3 to Item0 STPOSPLAN_addCfgTran(stPosPlanHandle, 4, 1, ST_COND_OR, 0, 4, velLim, accLim, decLim, jrkLim); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 469 SpinTAC 位置规划的软件配置 www.ti.com.cn //Example: STPOSPLAN_addCfgAct(handle, StateIdx, VarIdx, Operation, Value, ActionTriger); // In Item1, clear Fwd Button STPOSPLAN_addCfgAct(stPosPlanHandle, 1, ST_COND_NC, 0, 0, 0, ST_ACT_ENTR); // In Item2, clear Fwd Button STPOSPLAN_addCfgAct(stPosPlanHandle, 2, ST_COND_NC, 0, 0, 0, ST_ACT_ENTR); // In Item3, clear Fwd Button STPOSPLAN_addCfgAct(stPosPlanHandle, 3, ST_COND_NC, 0, 0, 0, ST_ACT_ENTR); // In Item4, clear Fwd Button STPOSPLAN_addCfgAct(stPosPlanHandle, 4, ST_COND_NC, 0, 0, 0, ST_ACT_ENTR); if(STPOSPLAN_getErrorID(stPosPlanHandle) != false) { // Configure FSM: Ts, VelMax, AccMax, DecMax, JrkMax, LoopENB STPOSPLAN_setCfg(stPosPlanHandle, _IQ24(ST_SAMPLE_TIME), velMax, accMax, decMax, jrkMax, false); // Configure halt state: PosStepInt[MRev], PosStepFrac[MRev], VelMax, AccMax, JrkMax, Timer STPOSPLAN_setCfgHaltState(stPosPlanHandle, 0, 0, velMax, accMax, jrkMax, 1000L); } 13.7.5 调用 SpinTAC 位置规划 该操作可在主循环中完成。 本代码示例中包括与注排水阀及传感器进行交互所需的代码。 作为自动售货机 仿真的一部分,它还会更新商品存货信息。 // SpinTAC Position Plan if(gPosPlanRunFlag == ST_PLAN_STOP && gMotorVars.SpinTAC.PosPlanRun == ST_PLAN_START) { if(STPOSMOVE_getDone(stPosMoveHandle) == true) { if(STPOSPLAN_getErrorID(stPosPlanHandle) != false) { STPOSPLAN_setEnable(stPosPlanHandle, false); STPOSPLAN_setReset(stPosPlanHandle, true); gMotorVars.SpinTAC.PosPlanRun = gPosPlanRunFlag; } else { STPOSPLAN_setEnable(stPosPlanHandle, true); STPOSPLAN_setReset(stPosPlanHandle, false); gPosPlanRunFlag = gMotorVars.SpinTAC.PosPlanRun; } } } if(gMotorVars.SpinTAC.PosPlanRun == ST_PLAN_STOP) { STPOSPLAN_setReset(stPosPlanHandle, true); gPosPlanRunFlag = gMotorVars.SpinTAC.PosPlanRun; } if(gPosPlanRunFlag == ST_PLAN_START && gMotorVars.SpinTAC.PosPlanRun == ST_PLAN_PAUSE) { STPOSPLAN_setEnable(stPosPlanHandle, false); gPosPlanRunFlag = gMotorVars.SpinTAC.PosPlanRun; } if(gPosPlanRunFlag == ST_PLAN_PAUSE && gMotorVars.SpinTAC.PosPlanRun == ST_PLAN_START) { STPOSPLAN_setEnable(stPosPlanHandle, true); gPosPlanRunFlag = gMotorVars.SpinTAC.PosPlanRun; } // if we have selected an item from the machine if(gVendSelectButton == 1) { if(STPOSPLAN_getStatus(stPosPlanHandle) != ST_PLAN_IDLE) { // decrease our inventory gVendInventory[gVendAvailableItem - 1]--; } // toggle the select button off gVendSelectButton = 0; 470 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn } SpinTAC 位置规划的软件配置 // Update variables passed into Plan STPOSPLAN_setVar(stPosPlanHandle, VEND_Fwd, gVendFwdButton); STPOSPLAN_setVar(stPosPlanHandle, VEND_Item0Inv, gVendInventory[VEND_ITEM0 - 1]); STPOSPLAN_setVar(stPosPlanHandle, VEND_Item1Inv, gVendInventory[VEND_ITEM1 - 1]); STPOSPLAN_setVar(stPosPlanHandle, VEND_Item2Inv, gVendInventory[VEND_ITEM2 - 1]); STPOSPLAN_setVar(stPosPlanHandle, VEND_Item3Inv, gVendInventory[VEND_ITEM3 - 1]); STPOSPLAN_setVar(stPosPlanHandle, VEND_TotalInv, gVendInventory[0] + gVendInventory[1] + gVendInventory[2] + gVendInventory[3]); // Run SpinTAC Position Plan STPOSPLAN_run(stPosPlanHandle); // display the selected item if(STPOSPLAN_getCurrentState(stPosPlanHandle) > 0) { gVendAvailableItem = (VEND_State_e)STPOSPLAN_getCurrentState(stPosPlanHandle); } else { gVendAvailableItem = VEND_ITEM0; } // Update variables passed out of Plan if(STPOSPLAN_getFsmState(stPosPlanHandle) == ST_FSM_STATE_STAY) { STPOSPLAN_getVar(stPosPlanHandle, VEND_Fwd, &gVendFwdButton); } if(STPOSPLAN_getStatus(stPosPlanHandle) != ST_PLAN_IDLE) { // Send the profile configuration to SpinTAC Position Profile Generator STPOSPLAN_getPositionStep_mrev(stPosPlanHandle, (_iq24 *)&gMotorVars.PosStepInt_MRev, (_iq24 *)&gMotorVars.PosStepFrac_MRev); gMotorVars.MaxVel_krpm = _IQmpy(STPOSPLAN_getVelocityLimit(stPosPlanHandle), _IQ24(ST_SPEED_KRPM_PER_PU)); gMotorVars.MaxAccel_krpmps =_IQmpy(STPOSPLAN_getAccelerationLimit(stPosPlanHandle), _IQ24(ST_SPEED_KRPM_PER_PU)); gMotorVars.MaxDecel_krpmps =_IQmpy(STPOSPLAN_getDecelerationLimit(stPosPlanHandle), _IQ24(ST_SPEED_KRPM_PER_PU)); gMotorVars.MaxJrk_krpmps2 = _IQ20mpy(STPOSPLAN_getJerkLimit(stPosPlanHandle), _IQ20(ST_SPEED_KRPM_PER_PU)); } else { if(gPosPlanRunFlag == ST_PLAN_START && gMotorVars.SpinTAC.PosPlanRun == ST_PLAN_START) { gMotorVars.SpinTAC.PosPlanRun = ST_PLAN_STOP; gPosPlanRunFlag = gMotorVars.SpinTAC.PosPlanRun; } } 13.7.6 调用 SpinTAC 位置规划节拍 该步骤应在主 ISR 中完成。 该组件需要在适当的抽取率下调用此函数。 抽取率由 ISR_TICKS_PER_SPINTAC_TICK 确定;有关详细信息,请参见节 4.7.1.4。 // Run SpinTAC Position Plan Tick STPOSPLAN_runTick(stPosPlanHandle); ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 471 SpinTAC 位置规划的软件配置 13.7.7 根据 SpinTAC 位置移动状态更新 SpinTAC 位置规划 www.ti.com.cn 该步骤应在主 ISR 中完成。 SpinTAC 位置移动在完成系统配置时需要调用该函数。 这是为了警告 SpinTAC 位置规划,提示已达到其向 SpinTAC 位置规划提供的目标位置。 此函数应置于 SpinTAC 位置移 动的函数调用之后。 // Update SpinTAC Position Plan when the profile is completed if(STPOSMOVE_getDone(stPosMoveHandle) != false) { STPOSPLAN_setUnitProfDone(stPosPlanHandle, true); } else { STPOSPLAN_setUnitProfDone(stPosPlanHandle, false); } 13.8 SpinTAC 位置规划故障排除 13.8.1 ERR_ID ERR_ID 为用户提供错误代码,用于识别引发错误的特定 SpinTAC 位置规划函数。 表 13-6 列出了在 SpinTAC 位置规划中定义的 ERR_ID。 ERR_code 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 表 13-6. SpinTAC 位置规划 ERR_ID 规划函数 STPOSPLAN_addCfgCond 中存在配置错误 STPOSPLAN_delCfgCond 中存在配置错误 STPOSPLAN_setCfgCond 中存在配置错误 STPOSPLAN_getCfgCond 中存在配置错误 STPOSPLAN_addCfgTran 中存在配置错误 STPOSPLAN_delCfgTran 中存在配置错误 STPOSPLAN_setCfgTran 中存在配置错误 STPOSPLAN_getCfgTran 中存在配置错误 STPOSPLAN_addCfgAct 中存在配置错误 STPOSPLAN_delCfgAct 中存在配置错误 STPOSPLAN_setCfgAct 中存在配置错误 STPOSPLAN_getCfgAct 中存在配置错误 STPOSPLAN_addCfgVar 中存在配置错误 STPOSPLAN_delCfgVar 中存在配置错误 STPOSPLAN_setCfgVar 中存在配置错误 STPOSPLAN_getCfgVar 中存在配置错误 STPOSPLAN_addCfgState 中存在配置错误 STPOSPLAN_delCfgState 中存在配置错误 STPOSPLAN_setCfgState 中存在配置错误 STPOSPLAN_setVar 中存在配置错误 STPOSPLAN_getVar 中存在配置错误 STPOSPLAN_setCfg 中存在配置错误 STPOSPLAN_setCfgHaltState 中存在配置错误 STPOSPLAN_setCfgArray 中存在配置错误 STPOSPLAN_addCfgVarCond 中存在配置错误 STPOSPLAN_delCfgVarCond 中存在配置错误 STPOSPLAN_setCfgVarCond 中存在配置错误 472 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn ERR_code 3027 4001 4003 SpinTAC 位置规划故障排除 表 13-6. SpinTAC 位置规划 ERR_ID (continued) 规划函数 STPOSPLAN_getCfgVarCond 中存在配置错误 STPOSPLAN_run(SpinTAC 许可证无效。 使用具有 SpinTAC 有效许可证的芯 片。) STPOSPLAN_run(ROM 版本无效。 使用 ROM 版本有效的芯片或使用与当前 ROM 版本兼容的 SpinTAC 库。) 13.8.2 配置错误 配置错误通过 SpinTAC 位置规划主结构中包含的 CfgError 结构上报。 该结构中包含了用于存储错误附加信 息的元素。 这些元素将在下文介绍: • CfgError.ERR_idx:识别出现错误的已配置元素实例。 • CfgError.ERR_code:识别引发错误的特定错误条件。 特定条件的 ERR_code 对于所有规划函数来说都是相同的。 表 13-7 中列出了在 SpinTAC 位置规划中定义 的 ERR_code 和条件。 ERR_code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 表 13-7. SpinTAC 位置规划 ERR_code 说明 SpinTAC Plan 正在运行 超过最大状态数量 超过最大条件数量 超过最大转换数量 超过最大操作数量 超过最大变量数量 采样时间值无效 VelMax 值无效 AccMax 值无效 JrkMax 值无效 LoopENB 值无效 VelEnd 值无效 AccLim 值无效 JrkLim 值无效 Timer_tick 值无效 状态索引无效 条件索引无效 转换索引无效 操作索引无效 变量索引无效 变量类型无效 对比值无效 操作无效 AndOr 值无效 变量类型错误 对比值错误 状态索引错误 解决方案 运行配置前让 SpinTAC Plan 进入空闲状态。 已配置最大状态数量。 已配置最大条件数量。 已配置最大转换数量。 已配置最大操作数量。 已配置最大变量数量。 将采样时间 cfg.T_sec 设置为 (0, 0.01] 范围内。 在 (0, 1] 范围内选择 VelMax 值。 在 [0.001, 120] 范围内选择 AccMax 值。 在 [0.0005, 2000] 范围内选择 JrkMax 值。 在 {false, true} 范围内选择 LoopENB 值。 在 (0, VelMax] 范围内选择 VelEnd 值。 在 [0.001, AccMax] 范围内选择 AccLim 值。 在 [0.0005, JrkMax] 范围内选择 JrkLim 值。 选择正整数值。 该索引应为已配置的状态索引。 该索引应为已配置的条件索引。 该索引应为已配置的转换索引。 该索引应为已配置的操作索引。 该索引应为已配置的变量索引。 从 ST_PlanVar_e 的值中选择变量类型。 从 ST_PlanComp_e 的值中选择对比值。 从 ST_PlanActOptn_e 的值中选择操作。 从 ST_PlanCond_e 的值中选择 AndOr 值。 ST_VAR_OUT 变量的值无法设置。 ST_VAR_OUT 变量无法在条件中使用。 ST_VAR_IN 变量无法在操作中使用。 Value1 不应大于 Value2。 在转换时,FromState 与 ToState 不能相同,但这些状态必须 与已配置的某个状态相同。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 轨迹规划 473 结论 ERR_code 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 www.ti.com.cn 表 13-7. SpinTAC 位置规划 ERR_code (continued) 说明 转换时条件索引错误 EnterExit 值错误 删除变量时 AndOr 错误 变量附有操作,无法删除 VelLim 值无效 DecLim 值无效 DecMax 值无效 PosStepInt_mrev 或 PosStepFrac_mrev 对 HaltState 无效 PosStepInt_mrev 或 PosStepFrac_mrev 对状 态无效 规划元素声明的规划配置数组过小 状态附有转换,无法删除 状态附有操作,无法删除 变量对比值错误 变量不能与自身进行比较 无法通过基于值的条件索引获得基于变量的条 件 条件附有转换,无法删除 首个状态的 PosStep 必须为 0 [MRev] 解决方案 在转换时:CondIdx1 与 CondIdx2 不能相同,但这些条件必须 与已配置的某个条件相同 从 ST_PlanActTrgr_e 的值中选择 EnterExit 值。 AndOr 值与 VarIdx 值冲突。 删除变量时,会在转换中引起配 置错误。 在删除变量之前从操作配置中移除变量。 在 (0, VelMax) 范围内选择 VelLim 值。 在 [0.001, DecMax] 范围内选择 DecLim 值,并将 DecLim/AccLim 比例限制在 [0.1, 10] 之内。 在 [0.001, 120] 范围内选择 DecLim 值,并将 DecLim/AccLim 比例限制在 [0.1, 10] 之内。 将 PosStepInt_mrev 设置为 [-2, 2] 范围内,并将 PosStepFrac_mrev 设置为 (-1, 1) 范围内。 将 PosStepInt_mrev 设置为 [-2147483647, 2147483647] 范围 内,并将 PosStepFrac_mrev 设置为 (-1, 1) 范围内。 从配置中移除元素或者声明更大的配置数组。 在删除状态之前从转换配置中移除状态。 在删除状态之前从操作配置中移除状态。 变量对比条件的对比枚举值不能超过 ST_COMP_ELW。 确保送往函数的变量索引不同且有效。 发送已知包含基于变量的条件的索引。 在删除条件之前从转换配置中移除条件。 配置首个状态,使 PosStepInt 和 PosStepFrac 均等于 0。 13.9 结论 InstaSPIN-MOTION 提供了一种设计轨迹变化和运动序列的简便方法, 方便您快速执行应用。 借此,您可 以非常快捷地完成运动序列的设计和测试工作。 SpinTAC 速度移动可生成基于约束、时间最优且可重复使 用的轨迹系统配置。 这些系统配置由执行应用运动序列的 SpinTAC 速度规划触发。 474 轨迹规划 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Chapter 14 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 在电机轴承受机械负载低速运转时,需要对 InstaSPIN-FOC 中 FAST 算法的某些方面加以考虑。 本文档介 绍在电机低速运转期间进行无传感器控制时,常见电机控制问题的几个方面。 有关 FAST 性能的综合实验 结果,请参见《MS320F2806xF InstaSPIN-FOC 技术参考手册》(文献编号 SPRUHI9)、 《TMS320F2805xF InstaSPIN-FOC 技术参考手册》(文献编号 SPRUHP4)和《TMS320F2802xF InstaSPIN-FOC 技术参考手册》(文献编号 SPRUHP4)。 本章介绍如下电机控制情形: 1. 满载低速运行 2. 满载换向 3. 满载电机启动 4. 满载从静止状态快速加速 5. 过载和电机过热 在这些实验中,系统使用了以下组件: • 德州仪器 (TI) C2000 处理器:装有 InstaSPIN-FOC 版本 1.6 的 TMS320F28069F • 德州仪器 (TI) 逆变器模块:TMDSHVMTRPFCKIT 版本 1.1 • 具有以下特性的 IPM 电机: – 额定电压 = 300V – 额定电流 = 4A – 电机最大电流 = 6A – 定子电阻 (Rs) = 2.6Ω – 定子正交电感 (Ls_q) = 13.5mH – 定子直接电感 (Ls_d) = 11.5mH – 转子磁通量 (ψ) = 0.5V/Hz = 0.08Wb – 额定转矩 = 1.9N.m • Magtrol 测力计型号:HD-715-8N • Magtrol 测力计控制器型号:DSP6001 待测电机连接至测力计,如 图 14-1 所示。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 475 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 图 14-1. 测试装置照片 Topic ........................................................................................................................... Page 14.1 满载低速运行..................................................................................................... 477 14.2 满载换向........................................................................................................... 488 14.3 满载电机启动..................................................................................................... 495 14.4 满载从静止状态快速加速...................................................................................... 504 14.5 过载和电机过热.................................................................................................. 514 14.6 InstaSPIN-MOTION 和低速运行的考量................................................................... 519 476 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载低速运行 14.1 满载低速运行 为了以低速运行,首先让我们讨论无机械负载的低速运行情况。 无负载时可控的最慢速度可通过电机转速和 电流波形直观地观察得到。 例如,测试电机以 30RPM(或 2Hz)的低速运行时,可能产生一个 30 ±3RPM 的速度变化。 不过,为保持速度相当恒定,所用的速度控制器必须有良好的响应能力,足以补偿速度变化。 14.1.1 满载低速运行时的考量 总之,电机以低速运行时需要考虑以下方面: • 启用偏移重校准;在节 14.1.1.1中说明。 • 启用定子 Rs 重校准;在节 14.1.1.2中说明。 • 禁用强制角;在节 14.1.1.3中说明。 • 调整速度控制器以避免电机停转;在节 14.1.1.4中说明。 • 调整电压反馈电路;在节 14.1.1.5中说明。 14.1.1.1 启用偏移重校准 要达到预期的低速满载性能,需要精确校准电流和电压的偏移值。 为此,应该在闭环中运行电机前启用控制 器对象的偏移重校准。 以下示例代码将启用偏移重校准。 // enable automatic calculation of bias values CTRL_setFlag_enableOffset(ctrlHandle, TRUE); 注意,必须在启用控制器之前调用偏移重校准的使能函数,即调用 CTRL_setFlag_enableCtrl(ctrlHandle, TRUE) 函数。 偏移重校准对于实现低速运行性能至关重要。 偏移重校准对于实现低速运行性能至关重要,具体而言就是校准偏移电压。由于在低速范围内,电机的反馈 电压趋向于很小的值,所以必须要能够精确校准偏移电压。 14.1.1.2 启用定子 Rs 重校准 电机以低速运行时需要考虑的另一个重要因素是软件中的电机模型表示。 定子电阻对于参数估算的准确性非 常重要。 因此应该在启用控制器前启用 Rs 重校准。 下列示例代码将启用 Rs 重校准。 // enable Rs recalibration EST_setFlag_enableRsRecalc(obj->estHandle,TRUE); 14.1.1.3 禁用强制角 电机以低速运行时必须禁用强制角,使得估算器能够不受外部强制角的干扰而得出估算值。 可以使用以下代 码示例来禁用强制角: 强制角必须禁用以允许估算器收敛。 // disable the forced angle EST_setFlag_enableForceAngle(obj->estHandle,FALSE); ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 477 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载低速运行 www.ti.com.cn 14.1.1.4 调整速度控制器以避免电机停转 为了以低速连续驱动电机而不发生电机停转,用户必须调整速度控制器,使速度控制器的响应速度快到足以 避免电机在转矩瞬变期间完全停止。 以下函数可以用于更新 InstaSPIN 内部的速度控制器: _iq New_Kp_spd; _iq New_Ki_spd; // set the kp and ki speed controller gains CTRL_setKp(handle,CTRL_Type_PID_spd, New_Kp_spd); CTRL_setKi(handle,CTRL_Type_PID_spd, New_Ki_spd); 14.1.1.5 调整电压反馈电路 低速运转的前提是假定来自电机的反电动势电压非常小。 由于 FAST 算法要求使用相电压作为算法的输 入,我们鼓励用户对每伏特电压使用最大的 ADC 位数。 例如,如果系统的最大输入电压为 400V,则强烈 建议对输入电压进行反馈,从而在电机的反电动势出现低电压时(即在低速运行期间),ADC 转换器输出 提供最大位数值以便能评估到更多信息来支持电机模型。 为说明使用每伏最大位数的重要性,请使用 TMDSHVMTRPFCKIT 版本 1.1 实现电压反馈,如图 14-2 所 示。 图 14-2. 高压套件的电压反馈电路 (TMDSHVMTRPFCKIT) 478 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载低速运行 电路的跳线 J1、J2、J3 和 J4 开路(请参见 PCB 的 M5 部分),当 DC-BUS 为 409.9V 时,将得到最大 3.3V 的 Vfb-Bus。这意味着该电路能够为输入为 409.9V 的电机提供最佳的 ADC 分辨率。不过,如果电机 运行在仅 100V 的电压下时,表示电机内部电压的 ADC 分辨率将会非常小,实际上大约为实际值的 ¼。 如 果已知电机运行电压为 100V,则应对以上电路作出调整以便 DC-BUS 为 100V 时,ADC 引脚上出现最大 3.3V 的 Vfb-Bus。 调整电压反馈电路以最大化 ADC 3.3V 输入范围。 更改电压反馈值将影响 user.h 文件中配置的两个参数。 例如在上述原理图中,若 J1、J2、J3 和 J4 开路, 则需要在 user.h 中定义以下参数: #define USER_ADC_FULL_SCALE_VOLTAGE_V (409.9) #define USER_VOLTAGE_FILTER_POLE_Hz (375.5) 这可通过如下公式导出(J1、J2、J3 和 J4 开路): ADC_INmax = 3.3V R1 = 300kΩ + 820kΩ = 1120kΩ R2 = 9.09kΩ USER _ ADC _ FULL _ SCALE _ VOLTAGE _ V = ADC _ INmax ´ R1 + R2 = 409.9 V R2 RParallel = R2 R2 ´ R1 + R1 = 9.017 kW C = 47 nF USER _ VOLTAGE _ FILTER _ POLE _ Hz = 1 = 375.5 Hz 2 ´ p ´ RParallel ´ C 当 J1、J2、J3 和 J4 短路时,需要在 user.h 中重新定义以下参数: #define USER_ADC_FULL_SCALE_VOLTAGE_V (112.2) #define USER_VOLTAGE_FILTER_POLE_Hz (383.8) 这可通过如下公式导出: ADC_INmax = 3.3V R1 = 300kΩ R2 = 9.09kΩ USER _ ADC _ FULL _ SCALE _ VOLTAGE _ V = ADC _ INmax ´ R1 + R2 = 112.2 V R2 (79) RParallel = R2 R2 ´ R1 + R1 = 8.823 kW C = 47 nF USER _ VOLTAGE _ FILTER _ POLE _ Hz = 1 = 383.8 Hz 2 ´ p ´ RParallel ´ C 14.1.2 瞬时满载低速运行示例 在考虑以上要求后,让我们来看看待测电机使用测力计时的几个低速响应示例。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 479 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载低速运行 14.1.2.1 4Hz,无负载至满载瞬态 图 14-3 显示了此条件下的电流波形: • 测力计 = 1.9N·m(满载) • 速度控制器 = 4Hz (60RPM ± 1RPM) www.ti.com.cn Load Applied Here Load Removed Here 图 14-3. 4Hz,无负载至满载瞬态图 将 1.9Nm 的电机额定转矩瞬间施加到电机轴,产生 4A 的电流。示波器显示的电频率为 4Hz。 对于一个 4 对电极的电机,此频率一旦稳定后,将得到一个 60 ± 1RPM 的转速。 请注意,应用负载时的时间可能不同 于采集变量时的时间。 不过,示波器上显示的应用转矩与采集变量时的完全相同。 时间不同的原因是,尽 管具有相同的参数,但是捕获电流是在不同测试中采集到的。 FAST 代表磁通量 (Flux)、角度 (Angle)、速度 (Speed) 和转矩 (Torque)。图 14-4、图 14-5、图 14-6 和 图 14-7 显示了 FAST 算法的表现以及转矩阶跃命令是如何影响 FAST 输出变量的。 即使在 100% 阶跃负载的情况下,FAST 变量也保持不变。 图 14-4 是估算的电机磁通量。 它实际为 FAST 提供的磁链,可以看出相当稳定。 造成磁通量变化的原因是 多方面的,比如电机参数准确性以及特定负载情况下电机磁路设计的好坏。 480 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Flux 0.6 0.5 0.4 Flux 0.3 (V/Hz) 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-4. 磁通量图 满载低速运行 图 14-5、图 14-6 和图 14-7 显示了由 FAST 提供的磁通角。 如图所示,角度随着电机负载的增加和减少而 变化。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-5. 角度图 如果在电机负载时角度放大,可以看出角度的变化率是如何变为很低的,并且一旦速度控制器进行相应校正 后,该变化率就变回到指定速度。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 481 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载低速运行 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 Time (s) 图 14-6. 放大的角度图 - 电机负载 www.ti.com.cn 当负载从电机轴移除时,可以观察到同样的情况。 由于速度控制器提供的转矩命令,将使转速提高,一段时 间后,速度控制器将转速下调至 4Hz (60RPM)。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 Time (s) 图 14-7. 放大的角度图 - 移除负载 值得一提的是,显示速度变化的目的不是为了说明速度控制器的作用。 实际上,速度控制器与 FAST 估算 器毫无关系。图 14-8 说明即便在转矩命令使电机停转一小会时,估算器是如何追踪电机转速的。 482 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载低速运行 Speed 200 180 160 140 120 Speed 100 (RPM) 80 60 40 20 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-8. 速度图 图 14-9 显示了 FAST 产生的转矩信号。 转矩信号有助于了解电机轴的瞬时转矩,以及在不使用转矩传感器 的情况下计算电机负载。 甚至在控制阶跃的时候,该高带宽信号也能显示转矩的轨迹。 Torque 2.5 2 1.5 Torque 1 (N.m) 0.5 0 -0.5 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-9. 转矩图 同时,我们还绘制了 Iq 电流波形图来显示当转矩阶跃被控制时 FAST 允许的磁场定向控制性能。 如 Iq 电流 图所示 (图 14-10),阶跃负载施加到转轴时,在示例中可以看出相应的电流需量呈阶跃变化。 估算器的角度 追踪功能在 Iq 控制器中实现此阶跃响应。 您可能也注意到,转矩曲线不像电流曲线那样平。 这是因为之前 的磁通量图中的磁链变化,这个变化则可能是由于软件电机模型与实际模型不匹配所致。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 483 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载低速运行 Iq Current 5 4 3 Iq Current 2 (A) 1 0 -1 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-10. Iq 电流图 www.ti.com.cn 在之前的示例中,可以看出当负载大幅度变化时,电机速度可能降为零。 此响应可以通过速度控制器循环本 身来改善,但是测试的目的是说明 FAST 提供的变量如何是不变的和有效的,甚至当执行 100% 阶跃的负载 命令时也如此。 14.1.2.2 2Hz,无负载至满载瞬态 图 14-11 显示了此条件下的电流波形: • 测力计 = 1.9N·m(满载) • 速度控制器 = 2 Hz (30RPM ± 3RPM) Load Applied Here Load Removed Here 图 14-11. 2Hz,无负载至满载瞬态图 将 1.9Nm 的电机额定转矩瞬间施加到电机轴,产生 4A 的电流。示波器显示的电频率为 2.2Hz,大约比参考 控制速度高出 3RPM。 对于一个 4 对电极的电机,此频率一旦稳定后,将得到一个 30 ± 3RPM 的转速。 484 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载低速运行 使用滞后测力计将遇到转矩生成问题,并且在测力计转轴中出现的启动转矩产生了高于指令转矩的瞬时转 矩,从而时常导致电机停转。 这是我们为何相较之前的示例,以较慢的速率来增加测力计转矩命令的主要原 因,目的是为了避免测力计产生大于致使电机暂时停转的指令转矩。 图 14-12、图 14-13、图 14-14 和图 14-15 显示 FAST 算法的表现。 FAST 代表磁通量、角度、速度和转 矩,这就是转矩阶跃命令影响那些变量的方法。 第一个变量是电机的磁链。 Flux 0.6 0.5 0.4 Flux 0.3 (V/Hz) 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-12. 磁通量图 图 14-13、图 14-14 和图 14-15 显示了由 FAST 提供的磁通角。 如之前的测试所见,角度随着电机负载的 增加和减少而变化。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-13. 角度图 放大角度图,可以看出电机加载和负载移除时的角度瞬态情况。 当运行速度降低时,结合了滞后测力计的转 矩脉动的信号质量,使得角度看起来不像是完好的锯齿波。 即使这样,角度信息还是能为 2 Hz 速度满载瞬 态的完全 FOC 控制提供了足够准确的信息。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 485 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载低速运行 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 1.3 1.5 1.7 1.9 2.1 2.3 2.4 2.6 2.8 3.0 3.2 Time (s) 图 14-14. 放大的角度图 - 电机负载增加 www.ti.com.cn 若在负载从电机轴上移除时放大,可以看到瞬时角度轨迹。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 Time (s) 图 14-15. 放大的角度图 - 电机负载减少 速度图如图 14-16 所示。 目标速度为 30RPM,并且可以看出,与 60RPM 相比,估算速度有较多的波纹。 这是因为滞后测力计中出现了脉动转矩,并且估算速度的输出是瞬时的,而不是每个电周期输出。 因此任何 角度斜坡上的失真都会反映到速度示波器上。 FAST 变量总是能支持 FOC 系统在低速下应用满转矩,即使存在 100% 阶跃负载的情况也如此。 同时,当通过关闭测力计控制器完全移除负载时,即便存在很快的加速度,速度估算也与实际速度相符,如 图 14-11 所示。 486 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载低速运行 Speed 180 150 120 Speed 90 (RPM) 60 30 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-16. 速度图 转矩信号如图 14-17 所示。 由于估算器的频率低,而且在低速运行时,滞后测力计中出现转矩脉动,从而 出现振荡。 Torque 3 2.5 2 1.5 Torque 1 (N.m) 0.5 0 -0.5 -1 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-17. 转矩图 从图 14-18 可知,电流控制器跟随指令转矩曲线变化,将 Iq 电流变为额定的 4A。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 487 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载换向 Iq Current 5 4 3 Iq Current 2 (A) 1 0 -1 -2 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-18. Iq 电流图 www.ti.com.cn 14.2 满载换向 为进行换向,以任何加速度从高速或低速正向转为高速或低速反向,非常有必要关注我们在转矩瞬态响应示 例中考虑的那些要点。 14.2.1 满载低速运行时的换向考量 在这种模式下运行时需要考虑以下事项: • 启用偏移重校准;在节 14.1.1.1中说明。 • 启用定子 Rs 重校准;在节 14.1.1.2中说明。 • 禁用强制角;在节 14.1.1.3中说明。 • 调整速度控制器以避免电机停转;在节 14.1.1.4中说明。 • 调整电压反馈电路;在节 14.1.1.5中说明。 14.2.2 满载低速运行时的换向示例 在考虑了以上要求后,让我们来看看几个待测电机使用测力计时的几个换向响应示例。 14.2.2.1 满载情况下从 -4 至 +4Hz 图 14-19 显示了此条件下的电流波形。 请注意电流是如何改变相位的,这表示方向发生改变。 488 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载换向 Speed Reversal Commanded Here 图 14-19. 满载情况下从 -4 至 +4Hz 图 从磁通量估算可知,在方向改变时出现了瞬变,尽管在几秒的时间后便稳定下来。 从图 14-20 可见,磁通 量不断升高。 这可能表示软件的电机模型与实际系统存在轻微的不匹配。 磁通量的误差可能由于软件电机 模型与实际电机相比不准确所致,不准确可能是电机过热或者电流和电压的感测容差引起。 如果磁通量持续 升高,这可能表示由于电机负载导致电机升温,从而定子电阻收敛为一个新值。 在这种情况下,建议使用 InstaSPIN 的 Rs 在线特性。 有关如何运行 Rs 在线特性的示例,请参见Chapter 15。 Flux 0.6 0.5 0.4 Flux 0.3 (V/Hz) 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-20. 磁通量图 在图 14-21 中,可以看出当速度通过零时,磁通角改变相位。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 489 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载换向 www.ti.com.cn Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-21. 角度图 如果在电机换向时放大(图 14-22),可以更清楚地看出换向实现的过程。 我们可以看出方向实际改变了两 次。 这是因为当速度接近零时,算法试图找到角度旋转的方向。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 3.5 3.7 3.9 4.1 4.3 4.5 4.7 4.9 5.1 5.3 5.5 Time (s) 图 14-22. 放大的角度图 电机的估算速度也显示了当速度通过零时可能发生方向(符号)错误(图 14-23)。 即速度在 ±10RPM 范 围内时,转换成的频率为 ±0.66Hz。 490 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载换向 Speed 80 60 40 20 Speed 0 (RPM) -20 -40 -60 -80 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-23. 速度图 从下图可知,FAST 的转矩信号从 -1.9Nm 持续增长至 +1.9Nm(图 14-24),并且在正向侧有一个小幅的 过冲。 该过冲可能是电机速度通过零时,滞后测力计中的电流积累所致,而这种现象对这类测力计很常见。 Torque 3 2 1 Torque 0 (N.m) -1 -2 -3 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-24. 转矩图 图 14-25 显示了正交电流 Iq。 可以看出 Iq 的波形与估算转矩的波形十分相似。 该图中没有太多值得注意的 现象,但我们可以看出电流的曲线比转矩更平直。 这是由于在驱动满载一段时间后磁通量估算收敛为一个新 值所致。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 491 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载换向 Iq Current 6 4 2 Iq Current 0 (A) -2 -4 -6 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-25. Iq 电流图 www.ti.com.cn 14.2.2.2 满载情况下从 -2 至 +2 Hz 图 14-26 显示了此条件下的电流波形。 请注意电流是如何改变相位的,这表示方向发生改变。 图 14-26. 满载情况下从 -2 至 +2 Hz 图 在本例中,实际速度约为 2.5Hz (37RPM),所以本例中的总误差大约为 7RPM。 速度计算误差是由于磁通 量误差所致。 磁通量的误差可能由于软件电机模型与实际电机相比不准确所致,不准确可能是电机过热或者 电流和电压的感测容差引起。 为获得最佳换向性能:启用偏移和 Rs 重校准、禁用强制角、调整速度控制器避免停转以及调整电压反馈电 路。 磁通量在此测试中较高,如图 14-27 所示。 这仍然可能是由于电机模型差异导致的,由于电机多次经历负 载测试而过热,从而会产生这种差异。 492 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载换向 Flux 0.7 0.6 0.5 Flux 0.4 (V/Hz) 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-27. 磁通量图 从图 14-28 可看出换向时的角度。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-28. 角度图 如果放大角度(图 14-29),我们可以看到在电机换向时,FAST 如何能够在甚至是满载换向的情况下提供 稳定的角度。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 493 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载换向 www.ti.com.cn Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 Time (s) 图 14-29. 放大的角度图 速度在这时也二次改变了符号(图 14-30),这也是因为在接近零速,尤其是满载时,速度估算器追逐速度 符号;而且,我们可以在某个瞬间看出速度是如何在 ±10RPM(或 ±0.66Hz)之间改变符号的。 Speed 50 40 30 20 10 Speed 0 (RPM) -10 -20 -30 -40 -50 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-30. 速度图 转矩估算器提供了清晰的过零点和最终值 (图 14-31)。 不过,由于转矩的估算需使用磁通量估算值,因此随 磁通量的变化(见本例中的图 14-26)出现一个小的偏量。 494 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Torque 3 2 1 Torque 0 (N.m) -1 -2 -3 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-31. 转矩图 另外还在 图 14-32 显示了电流 Iq。 Iq Current 5 4 3 2 1 Iq Current 0 (A) -1 -2 -3 -4 -5 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-32. Iq 电流图 满载电机启动 14.3 满载电机启动 在本小节中,我们讨论在使用 InstaSPIN 和 FAST 算法的情况下,允许满载启动所需考虑的事项。 在介绍 相关考虑事项后,我们将讨论几个实例。 14.3.1 满载电机启动的考量 在之前的章节中讨论的考虑事项仍然适用于此运行模式: • 启用偏移重校准;在节 14.1.1.1中说明。 • 启用定子 Rs 重校准;在节 14.1.1.2中说明。 • 启用强制角;在节 14.3.1.1中说明。 • 调整速度控制器以避免电机停转;在节 14.1.1.4中说明。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 495 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载电机启动 • 调整电压反馈电路;在节 14.1.1.5中说明。 www.ti.com.cn 14.3.1.1 启用强制角 为在满载下从静止启动电机,估算器需要一个初始转角以允许电机存在些反电动势,如图 14-33 所示。 通 常,FAST 需要不到 1 个电周期便能锁定真实角度。 为启用转角,用户必须启用 InstaSPIN 的强制角特 性。 一旦电机已经启动,建议禁用强制角以便电机可以实现换向。 不过,如果电机在任何低速运行或者换 向测试期间停转了几秒,则建议重新启用强制角模式以摆脱电机停转状态。 Frequency Fe_min T1 FAST estimator Delta Angle ( ∆θˆ ) time 1 Estimated Angle S ( θˆ ) Forced delta Angle 图 14-33. 启用强制角 • 强制角用于在转子速度较低时,强制估算器的 d 轴角度。 在零至 Fe_min 频率的范围将使用默认为 1Hz 的设置激活强制角。 • 通过使用 FAST 估算器输出的角度信息,在时间 T1 过后启动闭环向量控制。 • FAST 算法在一个电频率周期内收敛到转子角度。 FAST 算法对任何速度(即使是零速)都是稳定的。 • 在改变速度方向时,为实现平滑换向,请禁用强制角。 以下示例代码在启动控制器之前启用强制角。 // enable the forced angle EST_setFlag_enableForceAngle(obj->estHandle,TRUE); 为实现最佳启动性能 FAST 配置有所不同:启用强制角。 14.3.2 满载电机启动示例 在考虑上述事宜后,让我们来看看几个待测电机使用测力计时的几个满载启动示例。 496 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载电机启动 14.3.2.1 满载情况下从静止至 4Hz 图 14-34 显示了此条件下的电流波形。 请注意电流是如何从 0A 一直升高到 6A 的,6A 被设置为速度控制 器的最大输出或者是 Iq 电流控制器的最大参考值(请参见Chapter 5的最大电流)。 另外还可以看出在强制 角的一个周期内,电机电流降回 4A,即生成最大转矩的额定电流。 请记住,本例中电机的最大电流是 6A, 而产生额定转矩的额定电流为 4A。 图 14-34. 满载情况下从静止至 4Hz 图 图 14-35. 速度控制器周期 图 14-36 为磁通量图,从中可以看出磁通量如何从瞬态转为稳定的情况。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 497 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载电机启动 Flux 0.6 0.5 0.4 Flux 0.3 (V/Hz) 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-36. 磁通量图 www.ti.com.cn 从角度图可知,最初在不到一个周期的时间便实现了强制角(图 14-37)。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-37. 角度图 实际上,如果放大角度图,就可以知道角度被强制了多少个周期或者到底一个周期的百分之多少。 在本例 中,角度强制只使用了半个电周期。 通常,需要不到 1 个电周期便能锁住角度。 这可通过图 14-38 计算得出,从图中得到每秒 1 个电周期的斜率,因为角度从 0 增加到 0.5 用了 0.5 秒。 498 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 Time (s) 图 14-38. 放大的角度图 如果需要其它强制角频率,用户可以通过修改 user.h 文件中的下列值来更改频率: //! \brief Defines the forced angle frequency, Hz #define USER_FORCE_ANGLE_FREQ_Hz (1.0) 满载电机启动 为满足启动时间要求,可能需要通过提供更快的强制角更改此频率。 不过,更快的强制角需要在开环中更快 的速度,但不可以慢到足以在开环中转动负载。 从本例中的估算速度可以分析出很多信息(图 14-39)。 首先,可以看出最初并没有与强制角对准,这也是 速度变为小于零并持续了一段时间的原因。 同时可知,等到电机对准之后,电机加速至指令速度的电流大于 所需电流。 这便是速度过冲很多的原因。 通常,估算器需要最多一个电周期便能赶上转子的磁通角。 因此 在相反方向上通常需要最多一个电周期。 Speed 150 120 90 60 Speed (RPM) 30 0 -30 -60 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-39. 速度图 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 499 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载电机启动 www.ti.com.cn 由于估算的磁通量存在瞬态导致估算扭矩过冲,如图 14-40 所示。 不过,在估算角度与电机角度对准后, 该瞬态很快减少,估算转矩趋于稳定且与测力计控制器显示的转矩相符。 Torque 3.5 3 2.5 2 Torque 1.5 (N.m) 1 0.5 0 -0.5 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-40. 转矩图 本例中的最后一张图是 Iq 电流(图 14-41)。 已知 Iq 参考值的限制为 6A,这是该电机的最大安全电流。 从图中可以看出在启动时该电流如何达到最大值,然后在角度对准后,电流降回到 4A 的额定电流。 Iq Current 7 6 5 4 Iq Current 3 (A) 2 1 0 -1 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-41. Iq 电流图 14.3.2.2 满载情况下从静止至 2Hz 在图 14-42 中,电流再次达到该电机的最大安全电流 6A,但这次用时更长。 不过,应用强制角的时间仍然 在一个电周期之内。 还可以看出我们在接近估算器的极限,由于测量频率显示为 2.38Hz,此时的指令速度 为 2Hz,实际相当于 6RPM 的差异。 500 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载电机启动 图 14-42. 满载情况下从静止至 2Hz 图 估算的磁通量显示了一些误差和一次瞬态(图 14-43),尽管这仍然与我们通过其它以 2Hz 运行的测试获得 的结果相当。 磁通量不同于 0.5v/Hz 的额定磁通量,导致实际的电频率与估算的电频率有差异。 Flux 0.7 0.6 0.5 Flux 0.4 (V/Hz) 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-43. 磁通量图 角度估算说明了强制角的时间还不到一个电周期(图 14-44)。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 501 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载电机启动 www.ti.com.cn Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-44. 角度图 放大这个角度,可以看出频率改变之前的第一个周期小于一秒(图 14-45)。 一旦电机角度和估算角度一 致,生成的转矩将更高,导致电机加速超过了目标速度 30RPM。 这可以解释为何紧随强制角周期的第一个 周期为何比后面的周期频率更高。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 Time (s) 图 14-45. 放大的角度图 从图 14-46 中可以看出速度过冲。 还可以看出电机在加速至指令方向前,反转了一小会。 502 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 120 Speed 满载电机启动 90 60 Speed (RPM) 30 0 -30 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-46. 速度图 图 14-47 中的估算转矩情况与上一个示例一致:先是出现由于估算磁通量误差导致的一个瞬态,然后出现一 个稳态误差,这可能是由于测量不准和电机升温所致。 Torque 3 2.5 2 Torque 1.5 (N.m) 1 0.5 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-47. 转矩图 本例的最后一张图(图 14-48)显示电流 Iq,图中实际上显示了超过 4A 的转矩产生,生成了比上一个示例 更高的转矩。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 503 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载从静止状态快速加速 Iq Current 7 6 5 Iq Current 4 (A) 3 2 1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-48. Iq 电流图 www.ti.com.cn 14.4 满载从静止状态快速加速 本小节讨论使用 FAST 算法满载启动时,实现从静止状态以最快的速度加速到指令速度需要考虑的事项。 我们在图 14-4 中也讨论过缩短启动时间问题。 本小节将讨论满载快速加速启动的难点。 无论是使用什么速度控制器和速度控制器增益,为了实现从用户启用系统时尽快使电机闭环运行,都需要考 虑以下几点或进行相关配置。 在介绍相关考虑事项后,我们将讨论几个实例。 14.4.1 无需电机对准时满载最快速度启动电机的考量 在之前的章节中讨论的考虑事项仍然适用于此运行模式: • 加载有效偏移并禁用偏移重校准;在节 14.4.1.1中说明。 • 加载有效 Rs 并禁用 Rs 重校准;在节 14.4.1.2中说明。 • 启用强制角;在节 14.3.1.1中说明。 • 调整速度控制器以避免电机停转;在节 14.1.1.4中说明。 • 调整电压反馈电路;在节 14.1.1.5中说明。 14.4.1.1 加载有效偏移并禁用偏移重校准 通过进行此配置,系统可以避免在用户发出电机启动命令后花时间进行偏移重校准。 不过,由于低速运行和 电机启动要求偏移是正确的,用户必许在调用 CTRL_setFlag_enableCtrl(ctrlHandle, TRUE) 函数之前,加 载这些预校准的偏移。 下列示例代码加载已知的预校准偏移至 HAL 对象。 // disable automatic calculation of bias values CTRL_setFlag_enableOffset(ctrlHandle,FALSE); // set the current bias HAL_setBias(halHandle,HAL_SensorType_Current,0,_IQ(I_A_offset)); HAL_setBias(halHandle,HAL_SensorType_Current,1,_IQ(I_B_offset)); HAL_setBias(halHandle,HAL_SensorType_Current,2,_IQ(I_C_offset)); // set the voltage bias HAL_setBias(halHandle,HAL_SensorType_Voltage,0,_IQ(V_A_offset)); HAL_setBias(halHandle,HAL_SensorType_Voltage,1,_IQ(V_B_offset)); 504 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn HAL_setBias(halHandle,HAL_SensorType_Voltage,2,_IQ(V_C_offset)); 满载从静止状态快速加速 请注意,I_A_offset、I_B_offset、I_C_offset、V_A_offset、V_B_offset 和 V_C_offset 为之前系统运行的预 校准偏移。 重校准启用后,若这些偏移发生更新,可使用以下示例从 HAL 对象获取它们。 // enable automatic calculation of bias values CTRL_setFlag_enableOffset(ctrlHandle,TRUE); // Return the bias value for currents I_A_offset = HAL_getBias(halHandle,HAL_SensorType_Current,0); I_B_offset = HAL_getBias(halHandle,HAL_SensorType_Current,1); I_C_offset = HAL_getBias(halHandle,HAL_SensorType_Current,2); // Return the bias value for voltages V_A_offset = HAL_getBias(halHandle,HAL_SensorType_Voltage,0); V_B_offset = HAL_getBias(halHandle,HAL_SensorType_Voltage,1); V_C_offset = HAL_getBias(halHandle,HAL_SensorType_Voltage,2); 14.4.1.2 加载有效 Rs 并禁用 Rs 重校准 为了避免花时间重校准电阻值,还务必要确保 user.h 中的电阻值正确并禁用电阻重校准特性。 如下显示了 user.h 中提供的电阻: #define USER_MOTOR_Rs (2.6) 以下示例代码将禁用 Rs 重校准: EST_setFlag_enableRsRecalc(obj->estHandle,FALSE); 14.4.1.3 无需电机对准时满载最快速度启动电机的示例 图 14-49 显示了在无需对准的情况下执行快速加速时的其中一个相电流。 可以看出,电流在不到一个周期 的时间内达到最大值,然后加速到 200RPM 的指令速度参考值。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 505 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载从静止状态快速加速 www.ti.com.cn 图 14-49. 无需对准时的快速加速图 磁通量也存在一个瞬态,该瞬态是在估算角度与实际电机角度没对准时发生的(图 14-50)。在瞬态之后, 磁通量稳定在一个相对恒定的值。 Flux 0.6 0.5 0.4 Flux 0.3 (V/Hz) 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-50. 磁通量图 可以看出在第一个周期角度被强制执行(图 14-51),之后由于已经运行在闭环系统中,系统使用估算角度 值而非强制角快速改变频率。 506 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载从静止状态快速加速 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-51. 角度图 通过放大角度(图 14-52)可知,强制角持续了不到一个电周期便加速到了指令速度 200RPM。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 4.1 4.3 4.5 Time (s) 图 14-52. 放大的角度图 由于最初未对准,可以看出速度变负数一小段时间(图 14-53),在估算角度与电机角度对准后,速度便很 快加速到了指令速度 200RPM。 事实上,由于在角度被强制时,速度控制器的积分部分积累了过多的电 流,因此发生了过冲现象。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 507 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载从静止状态快速加速 Speed 320 280 240 200 160 Speed 120 (RPM) 80 40 0 -40 -80 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-53. 速度图 www.ti.com.cn 我们可以看出磁通角误差对转矩信号的影响(图 14-54),以及由于强制角导致的电流过剩情况。 在磁通量 瞬态之后,转矩信号变准确并且在速度稳定后变得恒定。 Torque 3.5 3 2.5 2 Torque 1.5 (N.m) 1 0.5 0 -0.5 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-54. 转矩图 速度阶跃命令使得电流 Iq 出现一个大约 0.5A 的过冲,如图 14-55 所示。 该过冲通过开始时的小脉冲反映 出来,然后降低到 6A 的电流(我们在 user.h 中配置的最大电机电流)限制内。 在电机加速到指令速度且 估算的磁通量稳定后,电流降到 4A 的额定值以产生最大转矩。 508 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载从静止状态快速加速 Iq Current 8 7 6 5 Iq Current 4 (A) 3 2 1 0 -1 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-55. Iq 电流图 我们通过本示例可以得出的结论是,我们所能达到的最快加速度取决于初始估算角度与电机实际角度之间的 最初差异。 这是因为强制角特性将在角度对准期间启用,并且最多占用一个电周期。 user.h 中提供的强制 角的电周期默认频率为 1Hz,因此从静止加速最多需要 1 秒。 不过,根据电机轴的负载类型,可以增大此 强制角频率以实现从静止最快地加速启动。 14.4.2 需要电机对准时满载最快速度启动电机的考量 为解决开始时的电机对准问题,我们将讨论在电机闭环运行之前使用 Rs 重校准工具实现电机对准。 在本例 中,Rs 重校准电流用于使电机轴旋转至最初的对准位置。 在接下来的章节中讨论的考虑事项也适用于此运 行模式: • 加载有效偏移并禁用偏移重校准;在节 14.4.1.1中说明。 • 启用定子 Rs 重校准;在节 14.1.1.2中说明。 • 最大化电流斜率;在节 14.4.2.1中说明。 • 启用强制角;在节 14.3.1.1中说明。 • 调整速度控制器以避免电机停转;在节 14.1.1.4中说明。 • 调整电压反馈电路;在节 14.1.1.5中说明。 14.4.2.1 最大化电流斜率 为了重校准 Rs,需要向电机施加反向 DC 电流,因此在此模式下运行时必须考虑这一点。 该 DC 电流必须 在电机进入闭环运行之前尽快移除。 为此,应使用以下示例代码将最大电流斜率值更改成一个最大值。 // set max current slope value to a maximum EST_setMaxCurrentSlope_pu(obj->estHandle,_IQ(127.99)); 最大斜率函数的输入参数从 IQ24 获得一个值,最大值为 127.99。 当开始输入电流以重校准电阻时,这会 引起一个电流的阶跃增长,而且要实现尽快移除这个电流,也会引发一个阶跃。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 509 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载从静止状态快速加速 www.ti.com.cn 14.4.2.2 需要电机对准时满载最快速度启动电机的示例 在本例中,应用程序必须允许闭环运行前的初始对准时间。 该对准时间作为 Rs 重校准时间在 user.c 中进 行配置,并且将加载到以下两个数组成员中: pUserParams->RsWaitTime[EST_Rs_State_RampUp] = (uint_least32_t)(1.0*USER_EST_FREQ_Hz); pUserParams->RsWaitTime[EST_Rs_State_Fine] = (uint_least32_t)(5.0*USER_EST_FREQ_Hz); 在本例中,总共有 6 秒的时间用于对准电机。 本例中的对准应当在充足的时间和足够的电流条件下实现, 以便在电机进入闭环运行前,能观察到电机调整位置并对准。 在将来的 InstaSPIN 版本中,将增加初始位 置检测 (IPD) 功能以完全避免电机对准。 请记住,仅在 EST_Rs_State_Fine 状态期间会有内阻 Rs 更新。 图 14-56 显示了运行时的其中一个电流波形。 可以看出在 DC 值从 -1A 跳变为 0A 的电流加速很规整(移 除用于电机对准的电流),然后电流呈正弦形式从 0A 升至 4A(峰峰电流 8A)。 这是由于电机最初已对 准,没有出现因为未对准引起的反向运行。 另外,对准过程应该让用户观察到。 图 14-56. 需要电机对准时满载最快速度启动电机的图例 如果放大第一部分的电流(图 14-57),可以看出 -1A 的电流由于高电流斜率配置通过一个阶跃立即被移 除,之后速度便跟随电流变化。 此时,可根据需要大胆调整速度控制器以实现所需的加速度响应。 510 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载从静止状态快速加速 图 14-57. 放大的电流图 可以看出磁通量不像之前那样包含一个瞬态,随着电机在闭环系统中运行,磁通量现在只是稳定到一个恒定 值(图 14-58)。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 511 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 满载从静止状态快速加速 www.ti.com.cn Flux 0.6 0.5 0.4 Flux 0.3 (V/Hz) 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-58. 磁通量图 角度波形从零升到一个高频率(图 14-59),说明由于需要初始对准,强制角在电机加速期间甚至没有激 活。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-59. 角度图 若是放大角度图 (图 14-60),可以再次看到角度曲线斜升过程没有强制角介入的特征,电机直接从静止状态 进入闭环运行。 512 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 满载从静止状态快速加速 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 Time (s) 图 14-60. 放大的角度图 观察估算速度(图 14-61),可以看出没有负向旋转。 速度响应直接是速度控制器的速度响应,没有强制角 初始未对齐现象。 Speed 240 200 160 Speed 120 (RPM) 80 40 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-61. 速度图 同样,估算转矩从零增加到大约 2Nm 的目标值(图 14-62),然后稳定在大约 1.9Nm 处(我们在测力计中 设置的目标数值)。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 513 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 过载和电机过热 www.ti.com.cn Torque 3 2.5 2 Torque 1.5 (N.m) 1 0.5 0 -0.5 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-62. 转矩图 可以看出电流最初发生过冲,原因是速度控制器发出了高加速度命令(图 14-63);在过冲后,电流稳定在 大约 4A,该电流可以产生最大转矩。 Iq Current 6 5 4 Iq Current 3 (A) 2 1 0 -1 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-63. Iq 电流图 14.5 过载和电机过热 本节将讨论要使电机在过载时仍然能运行很长一段时间所需考虑的事项。 为实现此目的,我们将使 用InstaSPIN 的 Rs 在线特性,以便能在电机运行期间识别和重新校准定子电阻 (Rs)。 14.5.1 过载和电机过热的考量 在接下来的章节中讨论的考虑事项也适用于此运行模式: • 启用偏移重校准;在节 14.1.1.1中说明。 • 启用定子 Rs 重校准;在节 14.1.1.2中说明。 • 启用 Rs 在线特性,在Chapter 15中说明。 514 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn • 启用强制角;在节 14.3.1.1中说明。 • 调整速度控制器以避免电机停转;在节 14.1.1.4中说明。 • 调整电压反馈电路;在节 14.1.1.5中说明。 过载和电机过热 14.5.2 过载和电机过热示例 在本例中,负载增加到超出电机额定转矩大约 30%(图 14-64)。 测力计设置的转矩命令为 2.5Nm。 请记 住,电机的额定转矩大约为 1.9Nm,所以实际在电机轴上施加了 130% 的负载。 这会引起电机过热,因此 需要使用 Rs 在线特性使电机在运行期间保持一个准确的电阻值。 在图 14-64 中,可以看到一个较慢的转角叠加在 5A 振幅的电流上,这是由于 Rs 在线特性的影响。 有关 Rs 在线特性的相关信息,请参见Chapter 15。 图 14-64. 过载和电机过热图 放大电流(图 14-65),可以清楚的看出频率为 13.33 Hz,正好是我们指定速度参考值(本例为 200 RPM)的频率。 相关转换大家都很熟悉,取决于电极对数。 速度 (RPM) = 速度 (Hz) * 60/电机对数 = 13.33Hz * 60/4 = 200RPM。 图 14-65. 放大的过载和电机过热图 定子电阻采集了 5 分钟(300 秒),在图 14-66 中显示。 可以看出起始值为 2.8 欧姆,经过 200 秒的时间 后,达到大约 3.45 欧姆并稳定在这个值。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 515 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 过载和电机过热 Rs 3.5 3.4 3.3 3.2 Rs 3.1 (Ohm) 3 2.9 2.8 2.7 www.ti.com.cn 0.0 30.0 60.0 90.0 120.0 15.0 180.0 210.0 240.0 270.0 Time (s) 图 14-66. 定子电阻图 基于此增长情况,可以得出电阻增大了 (3.45-2.8)/2.8 * 100% = 23%。 应用Chapter 15中的公式,可得出此 电阻变化表示的电机温度为: R -1 T = T0 + R0 a 3.45 W -1 T = 30°C + 2.8 W 0.00393°C-1 T = 89°C 工作 10 分钟后得到以下估算值,此时电阻测量值大约为 3.5 欧姆。 估算的磁通量(图 14-67)反映了非常 接近额定磁通量 0.5V/Hz 的一个值。 Flux 0.6 0.5 0.4 Flux 0.3 (V/Hz) 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-67. 磁通量图 我们绘制了在电机过载 30% 时的角度图(图 14-68)。 516 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 过载和电机过热 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-68. 角度图 放大角度图(图 14-69)并扩大到 1 秒的信息,我们可以看到清晰且连续的斜坡曲线。 请记住,该数据是按 每 200 个样本的频度采集的,所以在每个周期的结束时会有不连续的地方。 Angle 1 0.9 0.8 0.7 0.6 Angle 0.5 (pu) 0.4 0.3 0.2 0.1 0 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 Time (s) 图 14-69. 放大的角度图 估算速度大约为 200 RPM,如图 14-70 所示。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 517 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated 过载和电机过热 www.ti.com.cn Speed 240 200 160 Speed 120 (RPM) 80 40 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-70. 速度图 估算转矩大约为 2.5Nm。 在电机过载时,估算转矩同样是准确的和相对恒定的,如图 14-71 所示。 Torque 3 2.5 2 Torque 1.5 (N.m) 1 0.5 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-71. 转矩图 本例中的电流大约为 5.2A(图 14-72),由于长时间 30% 过载导致定子电阻升高,为产生指令转矩,电流 必须更高。 518 管理启动、低速和换向时的满负载 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn InstaSPIN-MOTION 和低速运行的考量 Iq Current 6 5 4 Iq Current 3 (A) 2 1 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (s) 图 14-72. Iq 电流图 14.6 InstaSPIN-MOTION 和低速运行的考量 电机低速运行时需要考虑的一点是,必须调整速度控制器以避免电机停转。 InstaSPIN-MOTION 提供的 SpinTAC 速度控制器是一种先进的速度控制器,它有一个通用的参数调节器并支持宽泛的工作范围。 由于 这些技术的结合,使得用户很容易实现调整 SpinTAC 控制器以避免电机在低速运行时停转。 针对低速运行 调整 SpinTAC 速度控制器时,非常重要的一点是带宽可能需要设置为高出以额定速度运行时的值。 完成此 设置需要达到的目标是,SpinTAC 速度控制器将能够更积极地动作以消除干扰和调节低速。 有关 InstaSPIN-MOTION 提供的 SpinTAC 速度控制器的更多信息,请参见Chapter 12。 ZHCU083F – January 2013 – Revised July 2014 管理启动、低速和换向时的满负载 519 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Chapter 15 ZHCU083F – January 2013 – Revised July 2014 Rs 在线重校准 Rs 在线重校准是一种 InstaSPIN-FOC 特性,当电机运行在闭环中时,该特性可用于重新校准定子电阻 Rs。 这里的术语“在线”用于描述在闭环磁场定向控制 (FOC) 下运行电机的系统。 可在 FAST 估算器内部实 现这一特性,虽然未提供源代码,但这个特性的所有参数均可根据应用需求进行修改,这将在本文档中进行 说明。图 15-1 显示了 FAST 估算器,其中突出显示了与 Rs 在线特性相关的接口区域。 图 15-1. FAST 估算器 - Rs 在线特性突出显示 Topic ........................................................................................................................... Page 15.1 概要................................................................................................................. 521 15.2 电阻与 温度....................................................................................................... 521 15.3 低速运行(包括启动)时所需的 Rs 准确值 .............................................................. 521 15.4 Rs 在线重校准介绍............................................................................................. 521 520 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 概要 15.1 概要 当线圈(也称为电机绕组)的运行温度发生变化时,电机线圈的定子电阻(即 Rs)可能会出现大幅度变 化。 有几种因素可导致运行温度升高。 以下示例列出了可能会影响定子线圈温度的一些条件: • 流过线圈的电流过大。 • 电机机壳不能实现自冷。 • 恶劣的运行环境导致温度升高。 • 电机附近有其它发热元件。 温度升高的结果是电机绕组的电阻增大。 电阻与温度的关系可根据绕组自身所使用的材料进行明确定义。 15.2 电阻与 温度 用于制造绕组的常见材料是铜。 以下公式表示电阻与温度关系的线性近似关系: R = R0[1 + α(T − T0)] (80) 其中: • R:在温度 T 时的电阻,以欧姆 (Ω) 为单位 • R0:在温度 T0 时的电阻,以欧姆 (Ω) 为单位 • α:材料的温度系数,以负一次方摄氏度 (ºC-1) 为单位 • T:材料的最终温度,以摄氏度 (ºC) 为单位 • T0:材料的参考温度,以摄氏度 (ºC) 为单位 例如,定子电阻 Rs 在 20ºC 时为 10Ω,其绕组材料为铜,温度系数为 0.00393ºC-1。 如果电机温度升高到 150ºC,则新的定子电阻为: R = R0[1 + α(T − T0)] (81) R = 10Ω[1 + 0.00393ºC−1(150ºC − 20ºC)] (82) R = 15.109Ω (83) 可以看出,随着温度升高电阻有显著的变化,在本例中,大约增加了 52%。 15.3 低速运行(包括启动)时所需的 Rs 准确值 这种电阻变化会对用于 FAST 的电机模型产生影响,在低速运行时更是如此。 这是因为在低速运行时电机 模型内部的大部分压降取决于定子电阻和电流 DC 分量: Rsis (84) 另一方面,当电机在中速至高速运行时定子电阻的变化不会对电机模型的性能产生显著影响,因为此时电机 模型的内部压降主要取决于反电势和电感与电流的微分的乘积,即: Ls dis dt + es (85) 低速性能要求知道准确的定子电阻值,尤其是在满载运行时(包括在满载下从静止启动电机)。 下一节将介 绍如何在 InstaSPIN-FOC 环境中使用 Rs 在线重校准。 15.4 Rs 在线重校准介绍 将 Rs 在线重校准添加到 InstaSPIN-FOC 中,从而可在电机运行在闭环中时提供准确的定子电阻。 对电阻 进行实时更新并根据新电阻来更新电机模型,从而使电机在整个工作范围(从无负载到满载)运行时都能提 供最佳性能结果。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Rs 在线重校准 521 Rs 在线重校准介绍 www.ti.com.cn 仔细观察 InstaSPIN-FOC 框图,Rs 在线重校准可通过设置一个标志来启用。 当电机运行时,通过向电流直 接分量(又称为 D 坐标轴电流)注入电流,即可测量定子电阻。图 15-2 突出显示了用于 Rs 在线重校准的 区域。 Torque Mode User_SpdRef User_IqRef User_IdRef Traj Ramp Zref Za Speed PI Spdout + + Iq_ref Iq Iq PI Id_ref Id Id PI Vq INV Vd PARK a T VH_out VJ_out Ta SVM Tb Tc PWM Driver Id Iq PARK \a Flux a T Angle Za Speed aW Torque a T a Irated \a Za &^d¡š]uš}Œ Flux, Angle, Speed, Torque aW Motor Parameters ID a T IH_in IJ_in VH_in VJ_in Vbus Ia CLARKE Ib Ic Va CLARKE Vb Vc ADC Driver a Rs a Rr a Lsd a Lsq \a rated a Irated Enable PowerWarp¡ Enable Motor Identification Enable Rs Online Recalibration Enable Force Angle Startup Motor Type 图 15-2. Rs 在线重校准 从框图中可以看出,在线电阻重校准可通过向 Irated 添加额外分量来实现。 此添加操作在 FAST 估算器内部 执行,FAST 输出的 Irated 已经包含了 Rs 在线重校准所需的电流。 对于永磁电机,Irated 可以为零,对于感应 电机则为磁化电流。 在磁场减弱和磁场增强时,可以添加另一个电流 User_IdRef,而这个额外电流不会影响 Rs 在线重校准。 需要注意的是,Rs 在线重校准可以根据 FAST 模块所注入的额外 Id 的交流值进行计算。 这些电流交替出 现正值和负值以便运行内部算法。 除此之外,用户仍然可以基于来自 FAST 的值控制用户的 Id 参考。 例 如,典型情况是电机在磁场减弱区域运行时 Id 参考值为负,此时 FAST 会提供一个新的 Irated 来计算在线电 阻重校准。 这将是预期出现的典型使用情况,这种情况下会在磁场减弱和在线电阻重校准两方面给出预期的 结果。 522 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Rs 在线重校准介绍 由于电流注入已完成,流入电机的相位电流波形会出现失真(不是标准正弦波),具体取决于所注入电流与 转轴机械负载的比率。 对于轻负载,正弦波形会受到很大的影响,而对于部分负载至满载,电流波形变化几 乎令人无法察觉。 下面显示了一些图形,分别显示了电机运行速度为 500RPM 时,启用和禁用 Rs 在线重 校准两种情况下不同机械负载所对应的电流波形。 可以看出,在某些情况下,相位电流的正弦波形失真。 图 15-3 显示了在禁用 Rs 在线重校准的情况下,电流在轻负载时为正弦波。 25x Zoom 图 15-3. 轻负载下的相位电流 - 禁用 Rs 在线重校准 在相同机械负载条件下,如果启用 Rs 在线重校准,从图 15-4 可以看出电流波形为失真的正弦波。 25x Zoom 图 15-4. 轻负载下的相位电流 - 启用 Rs 在线重校准 另一方面,当电机存在机械负载时,无论是否启用 Rs 在线重校准,都很难观察到波形的变化。图 15-5 显 示了禁用 Rs 在线重校准且存在机械负载情况下的电流波形。 25x Zoom 图 15-5. 存在机械负载时的相位电流 - 禁用 Rs 在线重校准 图 15-6 显示了启用 Rs 在线重校准且存在机械负载情况下的电流波形。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Rs 在线重校准 523 Rs 在线重校准介绍 25x Zoom www.ti.com.cn 图 15-6. 存在机械负载时的相位电流 - 启用 Rs 在线重校准 从最后一个图形可以看出,即使启用 Rs 在线重校准,在中负载至高负载情况下失真会小很多,并且随着负 载增加,越来越难以观察到失真。 在本文档后面的几节中,将会介绍实现 Rs 在线重校准时所需的最小额外 电流。 Rs 在线与 Rs 离线 InstaSPIN-FOC 还包含在电机旋转前执行的另一种电阻重校准,称为 Rs 离线重校准。 Rs 离线重校准要求 电机静止,并向 Id 注入 DC 电流。 而 Rs 在线重校准是要求电机旋转以重新校准电阻,并向 Id 注入 AC 电 流。 Rs 离线和 Rs 在线重校准都是 InstaSPIN-FOC 提供最佳低速性能的重要组成部分。 在典型应用中,图 157 显示了 Rs 离线和 Rs 在线重校准的使用。 524 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Rs 在线重校准介绍 图 15-7. Rs 在线和 Rs 离线重校准流程图 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Rs 在线重校准 525 Rs 在线重校准介绍 www.ti.com.cn 启用 Rs 在线重校准 为了启用 Rs 在线重校准,需要设置一些参数。 其中一个最重要的参数是为实现 Rs 在线重校准需要向 D 坐 标轴电流 (Id) 注入电流的大小。 通常,建议使用的最小电流为额定电流的 5%,以便在电机运行时通过可测 量电流获得准确的电阻重校准结果。 _iq RsOnLineCurrent_A = _IQ(USER_MOTOR_MAX_CURRENT * 0.05); 请注意,乘法由预编译器执行,使用 USER_MOTOR_MAX_CURRENT 定义的浮点值乘以 0.05 来表示 5%,然后将浮点结果转换为全局 IQ 值。 有关 IQmath 库的详细信息,请参见《C28x IQMath Library – 虚 拟浮点引擎 – 模块用户指南》(文献编号 SPRC990) 另外,在启用 Rs 在线重校准之前,用户必须设置: • 电阻表示的初始 Q 格式值。 可使用函数 EST_setRsOnLine_qFmt () 完成此操作。 初始值必须取自在电 机静止时通过 Rs 离线重校准测量的值。 可通过调用函数 EST_getRs_qFmt () 来读取此值。 • 将用于 Rs 在线重校准的 Id 幅度设置为零。 可通过调用函数 EST_setRsOnLineId_mag_pu () 来执行此 操作。 • 将 Id 的标么值设置为零。 可通过调用函数 EST_setRsOnLineId_pu () 来执行此操作。 • 启用标志并将标志更新为 FALSE,可通过调用函数 EST_setFlag_enableRsOnLine () 和 EST_setFlag_updateRs () 来完成。 当禁用 Rs 在线重校准时,需要将 Id_mag_pu 和 Id_pu 的值都设置为零,以防止估算器保留任何剩余电流 参考。 在 InstaSPIN 的未来版本中,不需要执行此操作,只需要将 Id_mag_pu 重置为零。但是对于 2806xF 器件,仍需要在启用或禁用 Rs 在线重校准前将上述两个值设置为零。 在估算器内部,两个标志分别用于执行不同的任务。 设置 enableRsOnLine 标志后即可运行完整的 Rs 在线 特性,可以更新内部变量使其保持最新的电阻值,并向 Id 注入电流。 设置第二个标志 updateRs 后,电机 模型便可使用电阻值。 如果未设置 updateRs 标志,但设置了 enableRsOnLine 标志,则仍可使用电阻来监 控电阻变化,但是内部电机模型不能使用此变化电阻。 如果电机温度显著升高且未更新电机模型中的电 阻(将 updateRs 标志设置为 TRUE),则 InstaSPIN 的性能会受到影响,并且无法达到所需的电机低速性 能要求。 另外,在满载时电机可能无法启动。 以下代码示例显示如何设置初始值以及如何检查条件以确保在状态机处于正常状态时设置初始值。 需要在启 用 Rs 在线重校准前执行此操作: CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // get the controller state gMotorVars.CtrlState = CTRL_getState(ctrlHandle); // get the estimator state gMotorVars.EstState = EST_getState(obj->estHandle); if((gMotorVars.CtrlState <= CTRL_State_OffLine) || ((gMotorVars.CtrlState == CTRL_State_OnLine) && (gMotorVars.EstState == EST_State_Rs))) { EST_setRsOnLine_qFmt(obj->estHandle,EST_getRs_qFmt(obj->estHandle)); EST_setRsOnLineId_mag_pu(obj->estHandle,_IQ(0.0)); EST_setRsOnLineId_pu(obj->estHandle,_IQ(0.0)); EST_setFlag_enableRsOnLine(obj->estHandle,FALSE); EST_setFlag_updateRs(obj->estHandle,FALSE); 526 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn } Rs 在线重校准介绍 由于此代码示例仅包含全局变量而不含时间关键代码,因此可在主函数中的死循环中(中断程序外)执行此 代码示例。 请记住,“if”条件中的代码需要在启用 Rs 在线重校准前执行。 如上述代码示例所示,重置 Rs 在线重校准所有参数的其中一个条件是 CtrlState 小于或等于 CTRL_State_OffLine。 此条件表示当状态机空闲(电机未通电)或执行偏移重校准时应禁用并重置 Rs 在 线重校准。 另一个必须重置这些初始值的条件是控制状态为在线 (CTRL_State_OnLine) 且估算器状态为 EST_State_Rs,即正在执行 Rs 离线重校准。 所有这些条件表示电机静止。 有关 InstaSPIN 中这些状态与 整个状态机的关系,请参见Chapter 6。 CTRL_State_OffLine 状态在 CTRL 状态机框图中显示为离 线,CTRL_State_OnLine 状态在 CTRL 状态机框图中显示为在线,而 EST_State_Rs 状态在 EST 状态机 框图中显示为 Rs。 当电机运行时,需要确保 Rs 在线重校准特性给定的电阻与 Rs 离线特性给出的初始电阻足够接近。 这是为 了确保两个电阻值之间进行平稳转换,从而确保不会对闭环系统造成任何干扰。 可通过以下代码执行此操 作,其中包含了上一个代码示例中的“else”条件。 只要电机未处于静止状态(即电机正在旋转),就会执行 以下条件。 此条件可用于启用 Rs 在线重校准,如下所示。 else { // Scale factor to convert Amps to per units. // USER_IQ_FULL_SCALE_CURRENT_A is defined in user.h _iq sf = _IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A); Rs_pu = EST_getRs_pu(obj->estHandle); RsOnLine_pu = EST_getRsOnLine_pu(obj->estHandle); Rs_error_pu = RsOnLine_pu - Rs_pu; EST_setFlag_enableRsOnLine(obj->estHandle,TRUE); EST_setRsOnLineId_mag_pu(obj->estHandle,_IQmpy(RsOnLineCurrent_A,sf)); // Enable updates when Rs Online is only 5% different from if(_IQabs(Rs_error_pu) < _IQmpy(Rs_pu,_IQ(0.05))) { EST_setFlag_updateRs(obj->estHandle,TRUE); } } Rs Offline 请注意,在此示例中通过调用以下函数启用 Rs 在线重校准: EST_setFlag_enableRsOnLine(obj->estHandle,TRUE) 但是,直到将更新标志设置为 TRUE 之后,才会更新 Rs 在线值。 当 Rs 在线值与 Rs 离线所提供的初始值 足够接近时(在本例中为该值的 5%),将更新标志设置为 TRUE。 对于要求启动转矩为满转矩的应用,建 议针对 Rs 在线和 Rs 离线的差值选择更小的比例,即用 3% 左右的值代替 5%。 一旦 Rs 在线值和 Rs 离线 值的差值小于 5%,就可以通过调用以下函数来设置 Rs 在线更新标志: EST_setFlag_updateRs(obj->estHandle,TRUE) ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Rs 在线重校准 527 Rs 在线重校准介绍 www.ti.com.cn 启用这两个标志后,Rs 在线重校准将实时重新计算电阻,而估算器会根据新电阻值更新其内部电机模型。 另外,如代码示例所示,可通过调用以下函数来设置用于估算在线电阻的注入电流的幅度: EST_setRsOnLineId_mag_pu(obj->estHandle,_IQmpy(RsOnLineCurrent_A,sf)); 禁用 Rs 在线重校准 为了禁用 Rs 在线重校准,用户可以参考第一个代码示例(在此处再次列出),在其中写入初始值并禁用标 志。 按照之前的讨论,此代码示例还将检查状态机的状态是否正确以便正确地禁用 Rs 在线重校准: CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // get the controller state gMotorVars.CtrlState = CTRL_getState(ctrlHandle); // get the estimator state gMotorVars.EstState = EST_getState(obj->estHandle); if((gMotorVars.CtrlState <= CTRL_State_OffLine) || ((gMotorVars.CtrlState == CTRL_State_OnLine) && (gMotorVars.EstState == EST_State_Rs))) { EST_setRsOnLine_qFmt(obj->estHandle,EST_getRs_qFmt(obj->estHandle)); EST_setRsOnLineId_mag_pu(obj->estHandle,_IQ(0.0)); EST_setRsOnLineId_pu(obj->estHandle,_IQ(0.0)); EST_setFlag_enableRsOnLine(obj->estHandle,FALSE); EST_setFlag_updateRs(obj->estHandle,FALSE); } 修改 Rs 在线参数 可以在 InstaSPIN-FOC 的 Rs 在线特性中调整和修改几个参数。 下列参数将在本节中详细地进行讨论: • 注入电流幅度 • 慢速转角 • Rs 在线值递增和递减的增量 • 滤波器参数 调整注入电流幅度 本节描述的第一个参数是实现 Rs 在线重校准所需的 D 坐标轴电流 (Id) 的注入电流。 启用 Rs 在线重校准 后,此电流可由估算器模块自身生成,其幅度由用户配置。 如前文所述,建议使用的注入电流值约为电机额 定电流的 5%,以便从电机返回可测量电流,因而实现准确的 Rs 在线重校准。 例如,当电机额定电流为 5A 时,注入电流为 0.25A。以下代码示例将 Rs 在线重校准的注入电流设置为 0.25A: // Scale factor to convert Amps to per units. // USER_IQ_FULL_SCALE_CURRENT_A is defined in user.h _iq sf = _IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A); // Value corresponding to 0.25 Amps _iq RsOnLineCurrent_A = _IQ(0.25); 528 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // Scale value from Amps to per units and set through the use of an API EST_setRsOnLineId_mag_pu(obj->estHandle,_IQmpy(RsOnLineCurrent_A,sf)); Rs 在线重校准介绍 当 Rs 在线重校准运行时,图 15-8 显示了电流波形的振幅,同时测得在未向电机施加机械负载时的电流值 约为 0.25A。 可以看出,无负载时的电流为 0.1A,如果针对 Rs 在线重校准添加 0.25A 的电流,则峰值电 流为 Is = Iq2 + Id2 = 0.12 + 0.252 = 0.27 A Rs Online Disabled 0.1 A Rs Online Enabled 0.27 A Peak to peak Current = 0.54 A 图 15-8. 针对 Rs 在线重校准添加 0.25A 电流的结果 随着电机负载的增加,Rs 在线重校准所需的额外电流按比例减小,如图 15-9 所示。 这种情况下的负载电 流为 0.35A,仍使用 0.25A 的 Rs 在线注入电流。使用上一个示例中的公式,计算出最大电流 为:Is = Iq2 + Id2 = 0.352 + 0.252 = 0.43 A ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Rs 在线重校准 529 Rs 在线重校准介绍 www.ti.com.cn Rs Online Disabled 0.35 A Rs Online Enabled 0.43 A Peak to peak current = 0.86 A 图 15-9. 针对 Rs 在线重校准增加负载的结果 还有示例的电机额定电流为 10A,则 Rs 在线注入电流为 0.5A。使用不同电流值的同一代码示例如下所示: // Scale factor to convert Amps to per units. // USER_IQ_FULL_SCALE_CURRENT_A is defined in user.h _iq sf = _IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A); // Value corresponding to 0.5 Amps _iq RsOnLineCurrent_A = _IQ(0.5); CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // Scale value from Amps to per units and set through the use of an API EST_setRsOnLineId_mag_pu(obj->estHandle,_IQmpy(RsOnLineCurrent_A,sf)); 与之前的示例类似,可以使用相同的公式计算最大电流值: Is = Iq2 + Id2 = 0.62 + 0.52 = 0.78 A (86) 本示例中的相应示波器图形如图 15-10 所示。 530 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Rs Online Disabled Rs Online Enabled Rs 在线重校准介绍 0.6 A 0.78 A 图 15-10. 启用 Rs 在线重校准时的最大电流 通常,如果考虑在电机满载的情况下,电机的电流为 10A,针对 Rs 在线重校准添加电机电流的 5%,则最 大总电流为: Is = Iq2 + Id2 = 10.02 + 0.52 = 10.0125 A (87) 即,提供给电机的额外电流仅为 0.0125A,仅相当于额定电流的 0.125%。 从额外发热的角度来看,这个电 流通常不会对电机产生影响。 例如,电机的额定电流为 2.2A,使用额定电流的 5% 作为 Rs 在线电流,即 2.2*0.05 = 0.11A。额外电流仅 为额定电流的 0.125%,即 2.2*0.00125 = 0.0028A。观察启用 Rs 在线重校准之前和之后的示波器图形,甚 至无法注意到额外电流 (图 15-11)。 读者同样需要注意的是,示波器的垂直方向已从 500mA/ 放大至 2.00A/,因为出于电机机械负载等原因导致电流的振幅远远高于之前。 Rs Online Disabled Rs Online Enabled 2.2 A 2.2 A 2 µŒŒvš= 0.0028 A Not noticeable 图 15-11. 电机电流 2.2A 与 5% Rs 在线电流 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Rs 在线重校准 531 Rs 在线重校准介绍 www.ti.com.cn 调整慢速转角 实现 Rs 在线特性要求特定内部矢量随着电机的旋转缓慢转动。 这个慢速旋转的矢量默认设置为值 0.00001(以标么值表示),因此它会生成一个频率为 0.00001 * 估算器频率(以 Hz 为单位)的矢量。 所 以如果估算器频率为 10kHz,则旋转矢量的频率为 0.1Hz,周期为 10 秒。 需要使用此旋转矢量以便 Rs 在 线重校准能够估算出在矢量不同点测量的平均电阻。 尽管不了解 Rs 在线重校准如何估算变化电阻的细节,但一定要了解此转角可用于估算在不同电流矢量下的 电阻。 随着时间的推移,在线电阻为所有矢量慢速旋转时多次测量所产生的平均电阻。 为了让用户了解设 置的旋转矢量值,除了在示波器上观察电流外,用户还可以使用以下代码示例。 // These defines are in user.h #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) #define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) #define USER_PWM_FREQ_kHz (10.0) #define USER_ISR_FREQ_Hz (USER_PWM_FREQ_kHz * 1000.0) #define USER_CTRL_FREQ_Hz (uint_least32_t)(USER_ISR_FREQ_Hz \ /USER_NUM_ISR_TICKS_PER_CTRL_TICK) #define USER_EST_FREQ_Hz (uint_least32_t)(USER_CTRL_FREQ_Hz \ /USER_NUM_CTRL_TICKS_PER_EST_TICK) // Initialize obj to the controller handle CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; _iq delta_pu_to_kHz_sf = _IQ((float_t)USER_EST_FREQ_Hz/1000.0); _iq RsOnLine_Angle_Delta_pu = EST_getRsOnLineAngleDelta_pu(obj->estHandle); // By default, the returned value in the following line will be close to: // _IQ(0.00001), representing 0.0001 kHz, or 0.1 Hz _iq RsOnLine_Angle_Freq_kHz = _IQmpy(RsOnLine_Angle_Delta_pu, \ delta_pu_to_kHz_sf); 有关 InstaSPIN 中使用的软件执行时钟树以及抽取因数(也称为节拍率)的详细信息,请参见Chapter 9。 如果角度增量从未改变,则由库将其设置为以标么值表示的默认值 0.00001,从而根据 0.00001 乘以估算频 率得到慢速转角频率。 如果估算频率与 PWM 频率相同,均设置为 10kHz,则慢速转角的频率为 0.00001 * 10000 = 0.1Hz(周期为 10 秒)。 可以从电流波形中观察到慢速转角,以及随角度的变化电流以何种方式 注入到 Id 中。图 15-12 显示了电流波形如何以等于慢速转角频率的频率发生变化。 532 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn Rs 在线重校准介绍 10 s 图 15-12. 频率等于慢速转角频率时的电流波形变化 例如,在某个应用中如果电机的温度上升速度过快,因此要求此转角速度更快一些,此时可能需要更改此转 角。 旋转矢量不需要随温度的升高而改变。 只需要根据预期可能出现的系统最坏温度动态情况进行一次设 置,而不需要随温度的变化对此值进行微调。 例如,如果系统的温度动态要求转角更改为 0.2Hz(周期为 5 秒),以下代码示例可用于将慢速转角更改为新值 0.2Hz: // This new define represents the desired RsOnLine rotating angle frequency #define RSONLINE_ANGLE_FREQ_Hz (0.2) // Initialize obj to the controller handle CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; // The scale factor (sf) calculation is done by the pre-compiler _iq delta_hz_to_pu_sf = _IQ(1.0/(float_t)USER_EST_FREQ_Hz); _iq RsOnLine_Angle_Freq_Hz = _IQ(RSONLINE_ANGLE_FREQ_Hz); _iq RsOnLine_Angle_Delta_pu = _IQmpy(RsOnLine_Angle_Freq_Hz, \ delta_hz_to_pu_sf); EST_setRsOnLineAngleDelta_pu(obj->estHandle, RsOnLine_Angle_Delta_pu); 在此代码示例中可以看到,函数现在为角度增量设置一个值,所以它会等待写入一个参数,这里为变量 RsOnLine_Angle_Delta_pu。 完成上述代码示例中的配置后产生的示波器图形如图 15-13 所示。 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated Rs 在线重校准 533 Rs 在线重校准介绍 5s www.ti.com.cn 图 15-13. RsOnLine_Angle_Delta_pu 的结果 调整 Rs 在线值递增和递减的增量 在估算器中(尤其是运行 Rs 在线特性的估算器部分),可根据电阻的方向通过增加和/或减去固定增量值来 更新实际电阻值。 通常,不需要更改此参数,除非是由于电机升温过快等原因导致电阻变化过快。 默认情 况下,会将递增增量和递减增量设置为以 IQ30 格式表示的值 0.00001,可通过以下代码示例对其进行验 证: CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; _iq30 delta_dec = EST_getRsOnLine_delta_dec_pu(obj->estHandle); _iq30 delta_inc = EST_getRsOnLine_delta_inc_pu(obj->estHandle); 为了修改这些增量,可使用下列代码示例更改此值,例如设置为默认值的两倍或 0.00002(以 IQ30 格式表 示): CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle; EST_setRsOnLine_delta_dec_pu(obj->estHandle, _IQ30(0.00002)); EST_setRsOnLine_delta_inc_pu (obj->estHandle, _IQ30(0.00002)); 请注意,这两个函数用于设置增量,而不是获取增量,因此除句柄外它们还需要带一个参数。 图 15-14 显示了电阻如何根据增量值对初始值差异进行响应。 例如,在第一次启用 Rs 在线重校准的最开始 阶段,初始电阻值与稳定状态的电阻值不同。 将增量值设置为 0.00001 会得到以下图形,此图中显示的斜 率 = (0.77-0.4)/3.1 = 0.12Ω/s。 534 Rs 在线重校准 ZHCU083F – January 2013 – Revised July 2014 SPRUHJ1 — http://www-s.ti.com/sc/techlit/SPRUHJ1 版权 © 2013–2014, Texas Instruments Incorporated www.ti.com.cn 1.3 s Rs 在线重校准介绍 Starting Rs Online = 0.