This thread has been locked.

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

[参考译文] TMS320F2.8335万:F2.8335万

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/633407/tms320f28335-f28335

部件号:TMS320F2.8335万
主题:controlSUITE中讨论的其他部件

您好,

我需要使用eQEP [Simulink]从编码器计算速度。 我已经读 过eQep_sprug05a,但我不能说我明白到底该做什么。 我有一个2000 [额定转速]马达和 一个增量转速计,每转可产生1024个脉冲。 我尝试配置eQEP,但所有寄存器都是零[CCSv6, Real Time ]。

如何计算速度;它是否只能与QEPa脉冲配合使用,还是我也需要QEPindex;

在数据表中,有一种不同的低速和高速方法。 是2000 RMP高速,所以我需要使用两种方法;

controlSUITE中有'example_posspeed.xls'。 我是否可以使用此示例来计算寄存器的值;

我是否可以使用PWM模块代替编码器脉冲?

      e2e.ti.com/.../MW_5F00_c28xx_5F00_qep.c

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

    感谢您的帖子。 您的线程已分配给C2000专家,应很快得到解答。

    此致,
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要配置eQEP寄存器,您需要首先启用eQEP模块的时钟,如下所示;如果您不需要使用信号校准转子的零位,则可以使用不带索引的eQEP模块。
    SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    在controlSUITE中有eQEP 'example_2833xEqep_pos_speed'->'example_posspeed.c'的示例。

    1.我有'增量转速计1.0 ',它每转可提供1024个脉冲。 是否与每转1024行相同?

    2.我是否可以在没有IQmath的情况下使用此示例? 我有F2.8335万,它是浮点。

    3.如何将寄存器的值与实际值相对应? 例如,在'ADC_Spr812a.pdf'中,它表示电压正在转换为0到4096之间的范围。 是否有方法在寄存器中查看此值? QCPRDLAT注册怎么样?

    4.我有这些错误。 我无法确定此问题是来自数据类型还是需要使用IQmath?

    5.模型基本费率为0.2。 这是个问题吗?

    int main (void)
    {
    volatile boolumel_T runModel =1;
    float modelBaseRate = 0.2 ;
    float systemClock =150;
    c2000_flash_init();
    init_board();
    

    void isr_int5pie_task_fcn (void)
    {/*
    调用系统:<Root>/Speed_Regulation */*
    
    	S-function (c28xisr_c2000):'<Root>/C28x Hardware Interrupt'*/
    
    /*函数调用系统的输出和更新:'<Root>/Speed_Regulation'*/
    
    /* S函数(c280xqep):'<S2>/eQEP'*/
    
    
    	//使用QEP位置计数器进行高速计算
    	//检查单位超时事件以进行速度计算:
    	//在初始化功能中将单位计时器配置为100Hz
    
    	real32_T newp,oldp,tmp1,speed_fr,speedrpm_fr,speed_pr,speedrpm_pr;
    	Int DirectionQep;
    
    
    	IF (EQep1Regs.QFLG.bit.uto=1) //如果设备超时(一个100Hz周期)
    	{
    	//
    	//差异性
    	//以下行计算位置=
    	//(x2-x1)/4000 (转1圈时的位置)
    	//
    		rtDW.eQEP_o2 = EQep1Regs.QPOSLAT;/* eQEP位置计数器锁存器(QPOSLAT)寄存器*/
    	newp =(real32_T)((REAL_T) rtDW.eQEP_o2*RTP.mech_scaler);
    	oldp=rtp.oldpos;
    	DirectionQep = EQep1Regs.QEPSTS.bit.QDF;
    
    	如果(DirectionQep=0) 	// POSCNT正在倒计时
    	{
    	IF (newp>oldp)
    	{
    	Tmp1 =-(1-newp + oldp);// x2-x1应为负数
    	}
    	否则
    	{
    	Tmp1 = newp -oldp;
    	}
    	}
    	如果(DirectionQep=1)// POSCNT正在倒计时,则为ELSE
    	{
    	如果(newp<oldp)
    	{
    	Tmp1 = 1 + newp - oldp;
    	}
    	否则
    	{
    	Tmp1 = newp - oldp; // x2-x1应为正值
    	}
    	}
    
    	IF (Tmp1>1)
    	{
    	speed_fr = 1;
    	}
    	否则,如果(Tmp1<-1)
    	{
    	speed_fr =-1;
    	}
    	否则
    	{
    	speed_fr = Tmp1;
    	}
    
    	//
    	//更新电气角度
    	//
    	rtp.oldpos = newp;
    
    
    	SpeedRPM_fr = rtp.BaseRpm * Speed_fr * 1.3655 ;
    
    	EQep1Regs.QCLr.bit.uto=1;					//清除中断标志
    	}
    
    	//
    	//使用QEP捕获计数器进行低速计算
    	//
    
    	IF (EQep1Regs.QEPSTS.bit.UPEVNT==1) //单元位置事件
    	{
    	IF (EQep1Regs.QEPSTS.bit.COEF=0)//无捕获溢出
    	{
    	rtDW.eQEP_o1 = EQep1Regs.QCPRDLAT; /* eQEP捕获周期锁存器(QCPRDLAT)寄存器*/ // temp1 = T2-T1
    	}
    	否则//捕获溢出,将结果饱和
    	{
    	rtDW.eQep_o1=0xffff;
    	}
    
    	//
    	// Speed_pr = SpeedScaler/rtDW.eQEP_o1
    	//
    	Speed_pr =RTP.SpeedScaler/ rtDW.eQEP_o1;
    	Tmp1=Speed_pr;
    
    	IF (Tmp1>1)
    	{
    	speed_pr = 1.0 ;
    	}
    	否则
    	{
    	speed_pr = Tmp1;
    	}
    
    	//
    	//将Speed_pr转换为RPM
    	//
    	如果(DirectionQep=0) //反向=负
    	{
    	SpeedRPM_pr =-(RTP) BaseRpm * Speed_pr;
    	}
    	否则 //正向=正
    	{
    	SpeedRPM_pr = RTP.BaseRpm * Speed_pr * 1.3655 ;
    	}
    
    	EQep1Regs.QEPSTS.all=0x88;	//清除单元位置事件标志
    	//清除溢出错误标志
    	}
    
    /*开关:'<S2>/Switch'包括:
    *常量:'<S2>/常量'
    */
    IF (SpeedRPM_fr > rtp.constitue_value)
    {
    rtDW.Switch =(REAL_T)SpeedRPM_fr;
    }
    否则
    {
    rtDW.Switch =(REAL_T)SpeedRPM_pr
    ;}
    
    /*交换机结束:'<S2>/Switch'*/
    
    /* S-Function (c28xisr_c2000)输出结束:'<Root>/C28x Hardware Interrupt'*/
    
    /* RateTransition更新:'<Root>/Rate Transition'*/
    rtDW.RateTransition_Buffer[rtDW.RateTransition_ActiveBufIdx ==0]=
    rtDW.Switch;
    rtDW.RateTransition_ActiveBufIdx =(rtDW.RateTransition_ActiveBufIdx == 0);
    
    P RTP ={
    90.0F, /*掩码参数:DiscertePIDController1_I
    *引用者:'<S3>/Integral Gain (整体增益)'
    */60.0F
    , /*掩码参数:DiscertePIDController1_LowerSat
    *引用者:
    *'<S3>/saturate'
    *'<S4>/deadzone'
    */10.0F
    , /*掩码参数:DiscertePIDController1_P
    *引用者:'<S3>/Proportional Gain (比例增益)'
    */5.94万.0F
    , /*掩码参数:DiscertePIDController1_UpperSat
    *引用者:
    *'<S3>/saturate'
    *'<S4>/deadzone'
    */ 136.5
    , /*表达式:136.5
    *引用者:'<S2>/Constant
    */ 0.0
    , /*表达式:0
    *引用者:'<S2>/Switch'
    */0.2F
    , /*计算参数:Integrator_gainval
    *引用人:'<S3>/Integrator'
    */0.0F
    , /*计算参数:Integrator_IC
    *引用人:'<S3>/Integrator'
    */0.0F
    , /*计算参数:ZeroGain_gain
    *引用人:'<S4>/ZeroGain'
    */0.0F
    , /*计算参数:常量值g
    *引用者:'<S3>/Constant
    */0.0F
    , /*计算参数:RateTransition_X0
    *引用者:'<Root>/Rate Transition (<根>/速率转换)'
    */ 0.0
    ,									/*oldpos*/ 0.0.0244万
    , 			/*机械除锈机*/
    94,									/*速度除锈机*/
    2400								/*额定转速*/
    };
    
    结构P_{
    real32_T DiscretePIDController1_I;/*掩码参数:DiscretePIDController1_I
    *引用者:'<S3>/Integral Gain (整体增益)'
    */
    real32_T DiscretePIDController1_LowerSat;/*掩码参数:DiscretePIDController1_LowerSat
    *引用者:
    *'<S3>/saturate'
    *'<S4>/deadzone'
    */
    real32_T DiscretePIDController1_P;/*掩码参数:DiscretePIDController1_P
    *引用者:'<S3>/Proportional Gain (比例增益)'
    */
    real32_T DiscretePIDController1_UpperSat;/*掩码参数:DiscretePIDController1_UpperSat
    *引用者:
    *'<S3>/saturate'
    *'<S4>/deadzone'
    */
    real32_T常量值; /*表达式:136.5
    *引用者:'<S2>/Constant
    */
    Real_T Switch_Threshold; /*表达式:0
    *引用者:'<S2>/Switch'
    */
    real32_T Integrator_gainval; /*计算参数:Integrator_gainval
    *引用人:'<S3>/Integrator'
    */
    real32_T Integrator_IC; /*计算参数:Integrator_IC
    *引用人:'<S3>/Integrator'
    */
    real32_T ZeroGain_gain; /*计算参数:ZeroGain_gain
    *引用人:'<S4>/ZeroGain'
    */
    real32_T常量值_g; /*计算参数:常量值g
    *引用者:'<S3>/Constant
    */
    real32_T RateTransition_X0; /*计算参数:RateTransition_X0
    *引用者:'<Root>/Rate Transition (<根>/速率转换)'
    */
    real32_T oldpos;					/*初始oldpos*/
    real32_T mech_scaler;		/*机械除标值8*/
    real32_T SpeedScaler;		/*速度除标器*/
    real32_T BaseRpm;				/*标称RMP*/
    }; 



    提前感谢您的参与。