This thread has been locked.

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

[参考译文] CCS/DRV8301-69M-KIT:DRV8301-69M-KIT:快速启动电动自行车的实时制动系统

Guru**** 2609695 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/686292/ccs-drv8301-69m-kit-drv8301-69m-kit-flying-start-a-real-time-brake-system-for-e-bike

器件型号:DRV8301-69M-KIT

工具/软件:Code Composer Studio

您好!



我已读取并测试了 proj_lab10e。 它可以正常工作、但我需要做的是使用电动自行车电机进行实时实验、我不想损坏任何东西。



我要做的是、当踩下制动器时、电机将会变为自由意志、并且自身减速(不是减速)
如果在松开制动器后速度设置为0以外的任何值、则制动电机必须返回到所需速度。 该部件将通过飞行启动实验室来完成、但我不认为在项目中等待制动器释放的正确方法、因此在该控制器运行飞行启动以获得所需的速度后、该控制器应运行飞行启动。


我想我应该放置一个 while 环路、以便制动传感器等待其释放。
现在、项目通过将 Flag_runState 更改为0来运行、从而使电机减速、但项目会将 Flag_runState 设置为1本身的超短时间。

到目前为止、我在 flyingStart.h 函数 FS_run 中执行的操作
静态内联 void FS_run (CTRL_Handle handle、FS_handle fsHandle)



CTRL_Obj * Ctrl =(CTRL_Obj *)句柄;



FS_Obj * FS=(FS_Obj *) fsHandle;



if (fs->flag_enableFs == true)



CTRL_setId_ref_pu (handle、_IQ (0.0));

CTRL_setIq_ref_pu (handle、_IQ (0.0));



fs->speed_ref_pu = CTRL_getSpd_ref_pu (handle);

fs->speed_est_pu = EST_getFm_pu (ctrl->estHandle);

fs->speed_est_avg =_IQmpy (fs->speed_est_avg、_IQ (0.8))+_IQmpy (fs->speed_est_pu、_IQ (0.20));



if (fs->cnt_checktime >= fs->max_checktime)



if (_IQabs (fs->speed_est_avg)< fs->speed_fs_min)



fs->speed_set_pu =_IQ (0.0);



其他



fs->speed_set_pu = fs->speed_est_avg;





fs->flag_enableF = false;

fs->flag_enableSpeedCtrl = true;



TRAJ_setIntValue (Ctrl->trajHandle_SPD、FS->SPED_SET_PU);

PID_setUi (ctrl->pidHandle_SPD、_IQ (0.0));



CTRL_setSpd_out_pu (handle、_IQ (0.0));



其他

fs->cnt_checktime++;



其他



fs->flag_enableSpeedCtrl = true;





返回;

}// FS_run()函数结束



如果我更改此行
if (fs->cnt_checktime >= fs->max_checktime)

更改为

while (brakeSensor);//brakeSensor 为1等待释放、然后运行回所需速度并快速启动。

然后、我将检查估算速度和预先确定的最小速度。


if (_IQabs (fs->speed_est_avg)< fs->speed_fs_min)

fs->speed_set_pu =_IQ (0.0);

其他

fs->speed_set_pu = fs->speed_est_avg;

fs->flag_enableF = false;
fs->flag_enableSpeedCtrl = true;

TRAJ_setIntValue (Ctrl->trajHandle_SPD、FS->SPED_SET_PU);
PID_setUi (ctrl->pidHandle_SPD、_IQ (0.0));

CTRL_setSpd_out_pu (handle、_IQ (0.0));


我的方向是正确的、还是我的想法完全错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请确保在电动自行车启动、扭矩关闭控制或速度关闭控制时首先使用哪种控制模式? 在 fs_run()中添加一个永远循环不是一个好主意,因为该函数在 mainISR 中被调用,这将导致中断溢出和代码被占用。 因此、如果您有制动命令、只能通过将 gMotorVars.Flag_enableRun 设置为1来禁用电机运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在使用速度控制、不能再诚实地认为另一种方法、因为试验和错误可能会对控制器板造成损害、我无法真正以这种方式改进我的想法。

    我不理解最后一句。 我认为您要停止电机、我必须将 gMotorVars.Flag_enableRun 设置为1。 如果是这样、我实际上需要如何使电机保持禁用状态、直到我希望电机以快速启动模式重新运行以从当前速度继续。

    据了解、当我切换 gMotorVars.Flag_enableRun 电机时、代码会在短时间内禁用其 PWM、然后代码会估算速度并继续使用当前速度。 这里的问题是、我需要较短的时间更长、具体取决于传感器(制动器上)、以便在松开制动器时、代码将以当前速度继续。

    也许我应该在 FS_RUN ()中添加另一个标志,而不是永久循环,这样,如果按下制动器,代码就不会开始飞跨,以从当前速度继续?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如实验10e 指南所述、飞行启动用于启动旋转电机、使驱动器能够确定旋转电机的速度和方向、以当前速度和方向启动电机、而不会突然变化电流。 这是制动的另一个应用、您需要知道在制动模式下将使用什么控制/停止模式。 如果在电机有制动命令时使用自由停止模式、则只需将 gMotorVars.Flag_enableRun 设置为零、然后在电机需要重新启动时将 gMotorVars.Flag_enableRun 设置为1。
    您可以参阅实验指南和项目以获取有关如何实现飞行启动功能的更多信息。