Thread 中讨论的其他器件: controlSUITE
尊敬的 TI 您好、
我想使用 TMDSHVMTRPFCKIT 中已经实现的 CAP-1/Hall-1测量电机速度、
我正在使用激光传感器、我将 H-1引脚连接到正输入"2"、将 GND 连接到引脚"10"、
问题是、即使我改变电机速度、Speed2.SpeedRpm 仍然保持不变127!
我是否必须连接任何其他连接或跳线?
提前感谢、
此致、
S.Tarik、
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.
尊敬的 TI 您好、
我想使用 TMDSHVMTRPFCKIT 中已经实现的 CAP-1/Hall-1测量电机速度、
我正在使用激光传感器、我将 H-1引脚连接到正输入"2"、将 GND 连接到引脚"10"、
问题是、即使我改变电机速度、Speed2.SpeedRpm 仍然保持不变127!
我是否必须连接任何其他连接或跳线?
提前感谢、
此致、
S.Tarik、
Sean、
我正在调试 HVMotorCtrl+PfcKit_v2.1文件夹中的标量控制项目、
您可以在 controlSUITE 中找到该项目:C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVACI_Scalar、
Speed2.SpeedRpm 是一个 Int32输出 r.pm 速度、在这个项目中、缺省情况下、Iq 是一个 IQ24、
实际上、我的电机的转速 RPM 小于1000rpm、我无法确定为什么不计算转速、
在 TI 速度结构中、我们有 PU 速度和 rpm 速度、对于任何速度、两个输出保持不变。
#ifndef __speed_PR_H__ #define __speed_PR_H__ typedef 结构{ uint32 NewTimeStamp;//变量:对应于捕获事件(Q0)的新“时间戳”-与全局队列独立 uint32 OldTimeStamp;//变量:对应于捕获事件(Q0)的旧“时间戳”-与全局 Q 独立 uint32时间戳;//输入:对应于捕获事件(Q0)的当前“时间戳”-与全局 Q 独立 uint32 Speedscaler;//参数:scaler 将1/N 周期转换为 global_Q 速度(Q0)-独立于全局 Q Int32 EventPeriod;//输入/变量:事件周期(Q0)-独立于全局队列 Int16 InputSelect; //输入:时间戳(InputSelect=0)和 EventPeriod (InputSelect=1)之间的输入选择 _IQ 速度;//输出:单位内的速度 uint32 BaseRpm;//参数:缩放器将 global_Q 速度转换为 rpm (Q0)速度-与全局 Q 独立 Int32 SpeedRpm;//输出:以 r.p.m.为单位的速度 (Q0)-独立于全局 Q } SPED_MEAS_CAP;//创建的数据类型 /*----------------- speed_MEAS_CAP 对象的默认初始化程序。 -------------------------------------------------- *
#if (BUILDLEVEL = LEVEL1) //------------------------------------ //连接 VOLT_Prof.模块的输入并调用 VOLT 配置文件宏 //--------------------------------- vhz1.Freq = SpeedRef; VHZ_PROF_MACRO (vhz1); //------------------------ //连接 SVGEN_MF 模块的输入并调用空间矢量发生器。 宏 ///----------------------------------------------------------------------------------------------------------- svgen_MF1.gain = vhz1.VoltOut; svgen_MF1.Freq = vhz1.Freq; SVGENMF_MACRO (svgen_MF1); //------------------------------------ //连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏 //------------------------ pwm1.Mfunc1 = svgen_MF1.Ta; pwm1.MfuncC2 = svgen_MF1.TB; pwm1.MfuncC3 = svgen_MF1.TC; PWM_MACRO (1、2、3、pwm1)//计算新的 PWM 比较值 //------ //连接 PWMDAC 模块的输入 //--------------------------------- pwmdac1.Mfunc1 = svgen_MF1.Ta; pwmdac1.MfuncC2 = svgen_MF1.TB; PWMDAC_MACRO (6、pwmdac1)// PWMDAC 6A、6B pwmdac1.Mfunc1 = svgen_mf1.tc; pwmdac1.MfuncC2 = svgen_MF1.tB-svgen_MF1.TC; PWMDAC_MACRO (7、pwmdac1)// PWMDAC 7A、7B //--- //调用 CAP 宏(如果用于速度感应的链轮或杂散齿轮) //连接 SPED_PR 模块的输入并调用速度计算宏 //--------------- CAP_MACRO (1、CAP1) IF (cap1.CapReturn = 0)//检查捕获返回 { speed2.EventPeriod =(Int32)(cap1.EventPeriod);//读出新的事件周期 speed_PR_MACRO (speed2) //调用速度宏 } //--- //连接数据记录模块的输入 //--------------- DlogCh1 =(Int16)_IQtoIQ15 (svgen_MF1.Ta); DlogCh2 =(Int16)_IQtoIQ15 (svgen_MF1.TB); DlogCh3 =(Int16)_IQtoIQ15 (svgen_MF1.TC); DlogCh4 =(Int16)_IQtoIQ15 (svgen_MF1.tB-svgen_MF1.TC); #endif //(BUILDLEVEL = LEVEL1)
我使用的是 eCAP EventPeriod "InputSelect = 1"、我认为该 模块不起作用/未配置某项功能!
/*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ 文件名: F2803XCAP.H 目标:F2803x 系列 ==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== */ #ifndef __F280x_CAP_H__ #define __F280x_CAP_H__ #include "f2803xbmsk.h" #include "f2803xdrvlib.h" /*--- ECAP1的 ECAP 控制寄存器1和2的初始化状态 --------------------------------------------------------------- */ #define ECCTL1_INIT_STATE (CAP1POL_RISTING _EDGE +\ CAPLDEN_ENABLE +\ CTRST1_Difference _TS +\ EVTFLTPS_X_1 +\ emulation_free) #define ECCTL2_init_State (continuous_mode +\ TSCNTSTP_FREE +\ SYNCI_DISABLE +\ SYNCO_DISABLE +\ 捕获模式) /*------------------ 定义捕捉驱动程序对象的结构------------------------------------------------------- // typedef struct{Int32 EventPeriod;//输出:检测到的两个边沿之间的计时器值差异(Q0) uint16 CapReturn; } 捕捉; /*----------------- F280x 捕获对象的默认初始化程序 ------------------------------------------------------- */ #define F280XCAP1 {1、0\ } /*------------------ 目标独立的默认初始化程序捕获对象------------------------------------------------------- */ #define CAPTURE_DEFAULTS F280XCAP1 /*------------------------------------------------------- CAP_INIT 和 CAP 宏定义------------------------------------------------------- * #define CAP_INIT_MACRO (n)\ /* Init ECAP Control Register 1 and 2 for ECAP1*/\ (* eCAP[n]).ECCTL1.ALL = ECCTL1_INIT_STATE;\ (* eCAP[n]).ECCTL2.ALL = ECCTL2_INIT_STATE;\ //确保 GPIO 配置在...-DevInit_F2803x.c 文件中正确完成,如下所示\\ EALLOW; /*启用 EALLOW */\ /*将 ECAP1引脚设置为主要功能*/\ GpioCtrlRegs.GPAMUX2.bit.GPIO24=1;// GPIO24为 ECAP1 */\ EDIS; /*禁用 EALLOW*/ #define CAP_MACRO (n、v)\ if ((* eCAP[n]).ECFlG.bit.CEVT1!= 0)/*检查 ECAP1引脚第一个事件的一个入口状态*/\ {\ V.EventPeriod =(* eCAP[n]).CAP1;/*标记检测到的两个边沿之间的定时器计数器差异*/\ V.CapReturn=0; /*然后,返回零*/\ }\ 否则\ {\ V.CapReturn=1; /*否则,返回一个*/\ } #endif //__F280x_CAP_H__
此致、
S.Tarik、
我们发现 eCAP 计数器不会递增、
问题是信号输入电压范围来自我们用于测量速度的传感器、当我们使用 GBF 输出方波形时、一切看起来都很好、
我们还将 SpeedScaled 更改为 适合我们应用的值。
Speed2.SpeedScale=60*(system_frequency *1000000/(1*x*speed2.BaseRpm));
此致、
S.Tarik、