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/LAUNCHXL-F28377S:S/LAUNCHXL-F28377S

Guru**** 2609955 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/687907/ccs-launchxl-f28377s-cs-launchxl-f28377s

器件型号:LAUNCHXL-F28377S

工具/软件:Code Composer Studio

您好!

我们正在尝试使用 QEP 模型运行代码。  但是、我们面临着#10010和#10234-D 问题  我们似乎无法弄清我们的错误所在。 如果有人能帮助我们解决这个问题、我们就会非常有义务。

以下列出了这些代码和构建控制台:

构建控制台:

****为项目 PWM 测试构建配置调试**"C

:\\ti\\ccsv7\\utils\bin\\gmake"-k -j 2 all -O
'生成文件:./ptc_test_tolevel.c'
调用:C2000编译器
'C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/bin/cl2000 /ti/controlSUITE/device_support/F2837xS/v190/F2837xS_common/source -v28 -ml -cla_cla_support=/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/include /ti/controlSUITE/device_support/F2837xS/v190/F2837xS_headers/include -cn-tmu=v32 -board-cn_support=/ti/controlSUITE/device_support/F2837xS/v190/F2837xS_common/include /ti/controlSUITE/device_support/F2837xS/v190/F2837xS_headers/source -cn=vcpu_opt_support-cn=cn=vcpu_opt_optime.pf-natic"-cn=cn=cn=cn=cn_cpu_cpu_opt_opt_opt_optimuminatic"-board-cn=v-cn=v-cn=v-cn=v-board-cn_support-cn=cn=v-cn-cn-cn=v32=vulateg-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn- tc_warning=225 --diag_wrap=off --display_error_number --preproc_with_compile --preproc_dependence="ptc_test_twolevel.d""./ptc_test_twolevel.c"
。


警告#179-D:变量"T_pred"已声明但从未引用
"../PTC_TEST_twolevel.c"、行594:警告#179-D:变量"psi_pred_alpha_s"已声明但从未引用"../ptc_test_tolevel.c"
、行594:警告#179-D:"twet_pred_twete_tolevelt.c"、但
从未引用"t.t_t_twet_tolevelt.t.c.t.t.t.t.c.t.c.tine"。
变量"k"已声明但从未引用
"已完成构建:./PTC_TEST_twolevel.c"
'
''''构建目标:PWM 测试.out'
'调用:C2000 Linker'
"C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/bin/cl2000 -v28 -ml -mt --cla_support=cla1 -fpu_support=fpu32 -tmu_support=tmu_iscluse-display=v2=v2=v2-pwm_display_off-display-v2=vbot_display_warning=v2-pf-natning=v2-v2-vfpf-ning=v2-pwm=v-display-display-display_bulk=v2-wm=v2-s=vbat_off-display-display-d_ warn_sections -i"C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/lib -i"C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/include -reread_libs -diag_wrap=off -display_error_number -xml_link_info="PWM test_linkInfo.xml"-rom_model -o "pwm test.out"./dcl_ipc.example"/f37x28s" v/f37x28xsr_ex/fs.f2837xobj "/s.cs.cs.filterb./f2837x2837x28x37s"

警告#10247-D:创建输出段"dclfuncs"、其中未

定义的段规范首先被引用
符号 文件中
------ --------
_IQ24div ./example_posspeed.obj

错误#10234-D:未解析符号仍
存在错误#10010:链接期间遇到错误;"PWM test.out"未生成

>>编译失败
makefile:155:目标'PWM test.out'的配方失败
gmake[1]:***[PWM test.out]错误1
**:151:目标'make 'all failed' gmakefile 2失败




主代码为:

/*
PTC_TEST_twolevel.c
*
*创建日期:2018年4月12日
* 作者:abedya
*/

#include "common.h"//设备头文件和示例包括文件
#include "example_posspeed.h"


//uint16 Interrupt_Count = 0;

#define _LAUNCHXL_F28377S

// v/f 代码所需的宏
#define PI 3.1415927
#define vbyflimit 0.6
#define vbyftime 50
#define PRD 2500
#define f_rated 50.0
//#define freq_step 0.00003//*f_rated timerthertherming vbyflimit/vr/ vr#define 50r/ vr/ vr#define 50r/ vr/ vr/ vr/ vrm

限制/vrmes#r/ vr/ vr/ vr/ vr/ vr/ vr#rm 0.50r/ vr/ vr/ vr/ vr/ vr/ vr/ vr/ vr/ vr/ vr/ vr




#define LS 0.34634
#define LR 0.34634
#define Lm 0.329
#define J 0.0106
#define B 0.01
#define T_nom 9.982
#define SF_nom 1.3426
#define TS 0.00005
#define p 2 ///pole pole pairs//ADC

offset dCOFFSET 9.982 #define
VDCOFFSET 5127//define OSE20553/define
OFFT


#define 0.0005125/18上测得的偏移


量#define OCIRT#define 0.453/OFFT #define 805125/805125/OSE#define #define #define #define OFFT #FF 此文件中找到的函数的原型语句。
_interrupt void cpu_timer0_isr (void);
__interrupt void cpu_Timer1_isr (void);
//_interrupt void cpu_timer2_isr (void);

/*defining the PI regulator inputs*/
pi pi_speed = pi_float;
float T_ref=0;
spref_ref=0;sstep=spe0_m=funsigned speed_free0_m=v_m=fule0*

、


/funsigned v_freq=fule0_freq=ful_free0*;/funsigned v_freq=funsigned ful_freq=ful_fule0_de0_free0_free0_m=v_free0_de0_free0_fre






//用于存储 A/D 转换结果的变量
/* uint16 AdcaResult0;
uint16 AdcaResult1;
uint16 AdcbResult0;
uint16 AdcbResult1;
uint16 AdcaResult2;*/
float V_dcm =0、I_AM=0、I_BM=0、I_b=0
、I_b=0、I_b=0、I_b=0、I_b=0;i_float V_b=0;i_b=0=v_b=0=0; I_c=0;
float speed=0;
unsigned char j=1;


/* PTC 术语声明*/
float tr、sigma、kr、t_sigma、r_sigma、lambda;
float V_a=0、v_b=0、v_c=0;
float V_alpha1[8]={0.0、0.6667、 0.3333、-0.3333、-0.6667、-0.3333、0.3333、 0.0};
float V_beta1[8]={0.0、0.0、0.5774、0.5774、 0.0、-0.5774、-0.5774、0.0};
浮点 G_OPT = 100000、G;
浮点 V_alpha、V_beta;
浮点 PSI_alpha_s、PSI_beta_s、PSI_alpha_r、PSI_beta_r;
float i_meas _alpha、i_meas _beta;
unsigned char x_opt =0;
float w_meas;

/*外设函数声明*/
void GPIO_select (void);
void setup_ePWM (void);
void ConfigureADC (void);
void SetupADCSoftware (void);
void runvbyf (void);

// PTC
void PTC 的函数(float T_ref、float w_meas、float SF、float I_meas _alpha、float I_meas _beta);
void pulsegeneration (unsigned char x);
void ReadADC (void);

void main (void)
{
//步骤1。 初始化系统控制:
// PLL、看门狗、启用外设时钟
//此示例函数位于 F2837xS_SYSCTRL.c 文件中。


InitSysCtrl();
//InitSysPll (XTAL_OSC、IMULT_40、FULT_0、PLLCLK_By_2);

//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xS_GPIO.c 文件中,
//说明了如何将 GPIO 设置为其默认状态。
// InitGpio ();
// GPIO_SetupPinMux (65、GPIO_MUX_CPU1、0);
// GPIO_SetupPinOptions (65、 GPIO_OUTPUT、GPIO_PushPull);
GPIO_select ();

//步骤3。 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
Dint;

//将 PIE 控制寄存器初始化为默认状态。
//默认状态是禁用所有 PIE 中断并
清除标志//。
//此函数位于 F2837xS_PIECTRL.c 文件中。
InitPieCtrl();

//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;

//使用指向 shell 中断
//服务例程(ISR )的指针初始化 PIE 矢量表。
//这将填充整个表,即使在
本示例中未使用中断//也是如此。 这对于调试很有用。
//可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xS_PieVect.c 中找到
InitPieVectTable();

//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.TIMER0_INT =&CPU_timer0_ISR;
PieVectTable.Timer1_INT =&CPU_Timer1_ISR;
//PieVectTable.TIMER2_INT =&CPU_timer2_ISR;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的

//步骤4. 初始化器件外设。 该函数可以是
// 可在 F2837xS_CpuTimers.c 中找到
InitCpuTimer();//对于此示例,只初始化 CPU 计时器

//将 CPU 定时器0、1和2配置为每秒中断一次:
// 200MHz CPU 频率,1秒周期(以 uSeconds 为单位)
ConfigCpuTimer (&CpuTimer0、200、50);
ConfigCpuTimer (&CpuTimer1、200、10);
//ConfigCpuTimer (&CpuTimer2、200、1000000);

//为了确保精确的时序,使用只写指令写入整个寄存器。 因此、如果有的话
配置位的//在 ConfigCpuTimer 和 InitCpuTimers (在 F2837xS_cputimervars.h 中)中更改、
//下面的设置也必须更新。
CpuTimer0Regs.TCR.ALL = 0x4000;//使用只写指令将 TSS 位设置为0
CpuTimer1Regs.TCR.ALL = 0x4000;//使用只写指令将 TSS 位设置为0
//CpuTimer2Regs.TCR.ALL = 0x4000;//使用只写指令将 TSS 位设置为0

//步骤5. 特定于用户的代码、启用中断:

//启用连接到 CPU 定时器0、CPU INT13的 CPU INT1
//连接到 CPU 定时器1,CPU int 14连接
//到 CPU 定时器2:
IER |= M_INT1;
IER |= M_INT13;
//IER |= M_INT14;

//在 PIE 中启用 TINT0:组1中断7
PieCtrlRegs.PIEIER1.bit.INTx7=1;

//启用全局中断和更高优先级的实时调试事件:
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

countlimit =(vbyfttime/50)*1000000;
FREQ_STEP =(f_rated * vbyflimit)/ countlimit;
ma_step = vbyflimit/countlimit;

// Vbyf start 的 ePWM 初始化
Setup_ePWM ();


//配置 ADC 并为其加电
ConfigureADC();

//设置用于软件转换的 ADC
SetupADCSoftware();

//设置 PI 控制器值
pi_speed.kp = 60.0f;//将比例增益设置为20.0
pi_speed.ki = 0.02f;
pi_speed.Umax = 10.0f;//输出钳位上限= 10
pi_speed.Umin =-10.0f;

// PTC 术语
TR = LR/RR;
KR = Lm/LR;
Sigma=(1-((Lm*Lm)/(Ls*LR));
r_sigma = Rs +((kr*kr)*rr);
t_sigma = sigma*(ls/r_sigma);
λ= T_nom/sf_nom;



//步骤6。 空闲循环。 只需坐下来循环(可选):
while (1)
{

}
}

__interrupt void cpu_timer0_isr (void)
{
CpuTimer0.InterruptCount++;

ReadADC ();
runvbyf ();


speed_ref=100;
speed=10;

t_ref=DCL_runPI (π 速度、speed_ref、speed);


i_meas_alpha = 0.666667*(i_a - i_b/2 - i_c/2);
i_meas_beta = 0.57735*(i_b - i_c);

if (GpioDataRegs.GPADP.BIT.BIG=12.bit= GPIO12)
V_A = V_dc/2;
else //if (GpioDataRegs.GPADAT.bit.GPIO13=1)
V_A =-V_dc/2;
if (GpioDataRegs.GPADAT.bit.GPIO14==1)
V_b = V_dc/2;
else //if (GpioDataRegs.GPADAT.bit.GPIO15=1)
V_b =-V_dc/2;
if (GpioDataRegs.GPADAT.bit.GPIO16==1)
V_c = V_dc/2;
else //if (GpioDataRegs.GPADAT.bit.GPIO17=1)
V_c =-V_dc/2;

V_alpha = 0.666667*(V_a - V_b/2 - V_c/2);
v_beta = 0.57735*(V_b - V_c);


psi_alpha_s = psi_alpha_s + TS*(V_alpha)-(i_meas_alpha* Rs);
psi_alpha_s = 0.9989*pi_alpha_s;/psi_pru_bag_pi_s+0.5*pi_bt_pi_s+pi_pi_s+peti_b_bi_s=pi_s+0.5*pi_pi_pi_s+pi_bt_pi_bi_s+pi_bi_pi_pi_s*=0.5*=pi_pi_bega+pi_s+pi_pi_s+pi_pi_pi_s*=pi_bt_bt_s+pi_pi_s*=pi_bt_b&s+pi_b&s+pi_b&s+pi_bt













//确认此中断以从组1
PieCtrlRegs.PIEACK.all = PIEACK_Group1接收更多中断;
}

__interrupt void CPU_Timer1_ISR (void)
{
CpuTimer1.InterruptCount++;


uINT16 I;

//
//位置和速度测量
//
qep_posspeed.calc(&qep_posspeed);

//
//用于位置控制和速度控制的控制循环代码
//
/* Interrupt_Count++;

//
//每1000个__interrupts (4000个 QCLK 计数或1个修订版)
//
IF (Interrupt_Count=1000)
{
EALLOW;
GpioDataRegs.GPASET.bit.GPIO4 = 1;//脉冲指数信号(1个脉冲/修订版)
(i=0;i<700;i++)
{
}
GpioDataRegs.GPACLEAR.bit.GPIO4=1;
INTERRUPT_Count = 0; //重置计数
EDIS;
}

*/
// CPU 确认中断。

}
/*
__interrupt void CPU_timer2_ISR (void)
{
CpuTimer2.InterruptCount++;
// CPU 确认中断。
}*/


void setup_ePWM (void)
{

//设置 TB 时钟和其他设置 EPwm7
EPwm7Regs.TBCTL.bit.PHSEN = 0;
EPwm7Regs.TBCTL.bit.CTRMODE = 2;
//EPwm7Regs.TBCTL.bit.PRDLD=1;
EPwm7Regs.TBCTL.bit.SYNCOSEL = 0;
//EPwm7Regs.TBCTL.bit.SWFSYNC = 0;
EPwm7Regs.TBCTL.bit.HSPCLKDIV = 1;//表示 SYSCLK/2
EPwm7Regs.TBCTL.bit.CLKDIV = 1;//表示 SYSCLK/2
//EPwm7Regs.TBCTL.bit.free_soft = 2;
EPwm7Regs.TBCTL.bit.PHSDIR = 0;
//EPwm7Regs.TBSTS.All=0;
EPwm7Regs.TBPHS.All=0;
EPwm7Regs.TBCTR = 0;

//操作 AQCTLA -一个 PWM

EPwm7Regs.AQCTLA.bit.CAU = AQ_SET; //设置事件 CMPA 上的 PWMxA、递增计数
EPwm7Regs.AQCTLA.bit.CAD = AQ_CLEAR; //清除事件 CMPA 上的 PWMxA,倒计数

//操作 AQCTLB -其他 PWM

EPwm7Regs.AQCTLB.bit.CBU = AQ_CLEAR; //在事件 CMPB 上清零 PWMxB、递增计数
EPwm7Regs.AQCTLB.bit.CBD = AQ_SET; //在事件 CMPB 上设置 PWMxB、递减计数


//比较值
//EPwm7Regs.CMPA.bit.CMPA = MOD_A;//设置比较值

EPwm7Regs.TBPRD=PRD;//加载请求 周期值


//设置 TB 时钟和其它设置 EPwm8
EPwm8Regs.TBCTL.bit.PHSEN = 0;
EPwm8Regs.TBCTL.bit.CTRMODE = 2;
//EPwm8Regs.TBCTL.bit.PRDLD=1;
EPwm8Regs.TBCTL.bit.SYNCOSEL = 0;
//EPwm8Regs.TBCTL.bit.SWFSYNC = 0;
EPwm8Regs.TBCTL.bit.HSPCLKDIV = 1;//表示 SYSCLK/2
EPwm8Regs.TBCTL.bit.CLKDIV = 1;//表示 SYSCLK/2
//EPwm8Regs.TBCTL.bit.free_soft = 2;
EPwm8Regs.TBCTL.bit.PHSDIR = 0;
//EPwm8Regs.TBSTS.All=0;
//EPwm8Regs.TBCTR = 0;
EPwm8Regs.TBPHS.bit.TBPHS=0;


//操作 AQCTLA -一个 PWM

EPwm8Regs.AQCTLA.bit.CAU = AQ_SET; //设置事件 CMPA 上的 PWMxA、递增计数
EPwm8Regs.AQCTLA.bit.CAD = AQ_CLEAR; //清除事件 CMPA 上的 PWMxA,倒计数

//Actions AQCTLB - Other PWM

EPwm8Regs.AQCTLB.bit.CBU = AQ_CLEAR; //在事件 CMPB 上清零 PWMxB、递增计数
EPwm8Regs.AQCTLB.bit.CBD = AQ_SET; //在事件 CMPB 上设置 PWMxB、递减计数

//比较值
//EPwm8Regs.CMPA.bit.CMPA = 250;//设置比较值

EPwm8Regs.TBPRD=PRD;//加载请求 周期值


//设置 TB 时钟和其它设置 EPwm9
EPwm9Regs.TBCTL.bit.PHSEN = 0;
EPwm9Regs.TBCTL.bit.CTRMODE = 2;
//EPwm9Regs.TBCTL.bit.PRDLD=1;
EPwm9Regs.TBCTL.bit.SYNCOSEL = 0;
//EPwm9Regs.TBCTL.bit.SWFSYNC = 0;
EPwm9Regs.TBCTL.bit.HSPCLKDIV = 1;//表示 SYSCLK/2
EPwm9Regs.TBCTL.bit.CLKDIV = 1;//表示 SYSCLK/2
//EPwm9Regs.TBCTL.bit.free_soft = 2;
EPwm9Regs.TBCTL.bit.PHSDIR = 0;
//EPwm9Regs.TBSTS.All=0;
//EPwm9Regs.TBCTR = 0;
EPwm9Regs.TBPHS.bit.TBPHS=0;


//操作 AQCTLA -一个 PWM

EPwm9Regs.AQCTLA.bit.CAU = AQ_SET; //设置事件 CMPA 上的 PWMxA、递增计数
EPwm9Regs.AQCTLA.bit.CAD = AQ_CLEAR; //清除事件 CMPA 上的 PWMxA,倒计数

//Actions AQCTLB - Other PWM

EPwm9Regs.AQCTLB.bit.CBU = AQ_CLEAR; //在事件 CMPB 上清零 PWMxB、递增计数
EPwm9Regs.AQCTLB.bit.CBD = AQ_SET; //在事件 CMPB 上设置 PWMxB、递减计数

//比较值
//EPwm9Regs.CMPA.bit.CMPA = 250;//设置比较值

EPwm9Regs.TBPRD=PRD;//加载请求 周期值

//设置 TB 时钟和其它设置 EPwm11
EPwm11Regs.TBCTL.bit.PHSEN = 0;
EPwm11Regs.TBCTL.bit.CTRMODE = 2;
//EPwm11Regs.TBCTL.bit.PRDLD=1;
EPwm11Regs.TBCTL.bit.SYNCOSEL = 0;
//EPwm11Regs.TBCTL.bit.SWFSYNC = 0;
EPwm11Regs.TBCTL.bit.HSPCLKDIV = 1;//表示 SYSCLK/2
EPwm11Regs.TBCTL.bit.CLKDIV = 1;//表示 SYSCLK/2
//EPwm11Regs.TBCTL.bit.free_soft = 2;
EPwm11Regs.TBCTL.bit.PHSDIR = 0;
//EPwm11Regs.TBSTS.All=0;
EPwm11Regs.TBPHS.All=0;
EPwm11Regs.TBCTR = 0;

//操作 AQCTLA -一个 PWM

EPwm11Regs.AQCTLA.bit.CAU = AQ_SET; //设置事件 CMPA 上的 PWMxA、递增计数
EPwm11Regs.AQCTLA.bit.CAD = AQ_CLEAR; //清除事件 CMPA 上的 PWMxA,倒计数
//操作 AQCTLB -其他 PWM

EPwm11Regs.AQCTLB.bit.CBU = AQ_CLEAR; //在事件 CMPB 上清零 PWMxB、递增计数
EPwm11Regs.AQCTLB.bit.CBD = AQ_SET; //在事件 CMPB 上设置 PWMxB、递减计数

//比较值
//EPwm11Regs.CMPA.bit.CMPA = MOD_A;//设置比较值
EPwm11Regs.TBPRD=PRD/8;//加载请求 期间值
}




void GPIO_select (void)
{
EALLOW;


GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用 GPIO12上的上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 1;// GPIO12 = EPwm7A

GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;//启用 GPIO13上的上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 1;// GPIO13 = EPwm7B

GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0;//启用 GPIO14上的上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 1;// GPIO14 = EPwm8A

GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0;//启用 GPIO15上的上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 1;// GPIO15 = EPwm8B

GpioCtrlRegs.GPAPUD.bit.GPIO16=0;//启用 GPIO16上的上拉
GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;// GPIO16=EPwm9A
GpioCtrlRegs.GPAGMUX2.bit.GPIO16=1;

GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;//启用 GPIO17上的上拉;
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;// GPIO17 = EPwm9B
GpioCtrlRegs.GPAGMUX2.bit.GPIO17 = 1;

GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0;//启用 GPIO20上的上拉
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1;// GPIO20 = EPwm11A
GpioCtrlRegs.GPAGMUX2.bit.GPIO20 = 1;


GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;//启用 GPIO21上的上拉
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1;// GPIO21 = EPwm11B
GpioCtrlRegs.GPAGMUX2.bit.GPIO21 = 1;

//GpioCtrlRegs.GPAMUX2.ALL = 0x00000000;//所有 GPIO
//GpioCtrlRegs.GPBMUX1.ALL = 0x00000000;//所有 GPIO

//GpioCtrlRegs.GPADIR.ALL = 0xFFFFFFFF;//所有输出
//GpioCtrlRegs.GPBDIR.ALL = 0x00001FFF;//所有输出

EDIS;

}

//Write ADC 配置并为 ADC A 和 ADC B
的 ADC 加电 void ConfigureADC (void)
{
EALLOW;

//写入配置
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcbRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);

//将脉冲位置设置为晚期
AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;

//为 ADC 加电
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;

//延迟1ms 以允许 ADC 加电时间
DELAY_US (1000);

EDIS;
}

void ReadADC (void)
{
AdcaRegs.ADCSOCFRC1.ALL = 0x0007;//SOC0 - 2、SOC1-3和 SOC2-5
AdcbRegs.ADCSOCFRC1.ALL = 0x0007;//SOC0、SOC1和 SOC2
//存储结果

if (AdcaResultRegs.ADCRESULT0 = 0) V_DCM = 0.0;
否则、如果(AdcResultRegs.ADCRESULT0 = 4095) V_DCM = 3.0;
否则 V_dcm =__divf32 (3.0*((float) AdcaResultRegs.ADCRESULT0),4096.0);

//V_DCM = AdcaResultRegs.ADCRESULT0;//A2关闭设置观察到的2055
//V_dc =((V_DCM-(VDCOFFSET-offset))*3.0)/4096.0;
V_DCM = V_DCM-VDCOFFSET;
V_dc =((V_DCM-1.5)/0.15384)*200;
//AdcaResult1 = AdcaResultRegs.ADCRESULT1;
//AdcaResult2 = AdcaResultRegs.ADCRESULT2;
//I_AM = AdcbResultRegs.ADCRESULT0;观察到的//B1偏移2054

if (AdcbResultRegs.ADCRESULT0 = 0) I_AM = 0.0;
否则、如果(AdcbResultRegs.ADCRESULT0 = 4095) I_AM = 3.0;
否则 I_AM =__divf32 (3.0*((float) AdcbResultRegs.ADCRESULT0),4096.0);
I_AM = I_AM - IAOFFSET;
I_A =((I_AM-1.5)/0.15384);

//I_BM = AdcbResultRegs.ADCRESULT1;观察到的2063的//B4偏移
if (AdcbResultRegs.ADCRESULT1 =0) I_BM = 0.0;
否则、如果(AdcbResultRegs.ADCRESULT1 = 4095) I_BM = 3.0;
否则 I_BM =__divf32 (3.0*((float) AdcbResultRegs.ADCRESULT1),4096.0);
I_BM = I_BM - IBOFFSET;
i_b =((I_BM-1.5)/0.15384);

//i_cm = AdcbResultRegs.ADCRESULT2;观察到的//B2偏移2057
if (AdcbResultRegs.ADCRESULT2 ==0) I_cm = 0.0;
否则、如果(AdcbResultRegs.ADCRESULT2 == 4095) I_cm = 3.0;
否则 i_cm =__divf32 (3.0*((float) AdcbResultRegs.ADCRESULT2),4096.0);
I_cm = I_cm - ICOFFSET;
i_c =((i_cm-1.5)/0.15384);
}

void SetupADCSoftware (void)
{
uint16 acqps;

//根据分辨率确定最小采集窗口(在 SYSCLKS 中)
if (adc_resolution_12bit = AdcaRegs.ADCCTL2.bit.resolution){
acqps = 14;//75ns
}
否则{//分辨率为16位
acqps = 63;//320ns
}

//选择要转换的通道和转换结束标志
//ADCA
EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2; //SOC0将转换引脚 A2
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //采样窗口为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 3; //SOC1将转换引脚 A3
AdcaRegs.ADCSOC1CTL.bit.ACQPS = acqps; //采样窗口为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 5; //SOC1将转换引脚 A5
AdcaRegs.ADCSOC2CTL.bit.ACQPS = acqps; //采样窗口为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 2; SOC2的//end 将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //启用 INT1标志
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //确保清除 INT1标志

//ADCB
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 1; //SOC0将转换引脚 B1
AdcbRegs.ADCSOC0CTL.bit.ACQPS = acqps; //采样窗口为 acqps + 1个 SYSCLK 周期
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 4; //SOC1将转换引脚 B4
AdcbRegs.ADCSOC1CTL.bit.ACQPS = acqps; //采样窗口为 acqps + 1个 SYSCLK 周期
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2; //SOC1将转换引脚 B2
AdcbRegs.ADCSOC2CTL.bit.ACQPS = acqps; //采样窗口为 acqps + 1个 SYSCLK 周期
AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 2; SOC2的//end 将设置 INT1标志
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; //启用 INT1标志
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //确保清除 INT1标志

}


void ptc (float T_ref、float w_meas、float i_meas_alpha、float i_meas_beta)
{
float i_pred_alpha、i_pred_beta;
float T_pred、psi_pred_beta s、psi_alpha_s*=pref_se_sigma_s*s*s*s=pref_s*/pref_se_sbot_s*s*s*s*s*s=s*s*s*s=premot_s*s*s*s*s*s*s=premot_s*s*s*s*s*s*s=premot_bot_s*s*s*s*s*s*s*s*s+premot_s&s*s*s*s*s=premot_s&s*s*s*s*s*s*s*s*s*s*s*







PSI_BETY_r = PSI_BETY_S/kr + sigma*lm*i_meas _beta;



//

if (k<=7)
{
V_alpha = V_alpha1[k]*V_dc;
v_beta = V_beta1[k]*v_dc;
//磁通预测
psi_pred_alpha_s = psi_alpha_s + TS*(V_alpha - Rs*i_meas_alpha);
psi_pred_beta_s=psi_t*(psi_pret_t_bet_s*i





)+ sigma_t_prema_t_t+ sq_dema_t_t_t_t_pre+ s*i (psi_pet_t_t_t_premi_t_t_premi_t_t_pet_p_t_bet_pre+ s*i)*(ps_t_t_sigma_t_t_t_t_t_premi_pet_t_t_t_t_t_t_t_premi_premi_t_t_pet_pre+ premi_t_t_t_pet_t_t_t_t_t_t_prema





//目标函数

G =(T_ref-T_pred)+ lambd*(sf_nom - psi_pred);

if (G '0':="" gpiodataregs.gpadat.all="" break;="" '1':="" '2':="" '3':="" '4':="" '5':="" '6':="" '7':="" default:="" runvbyf(void)="" float="" theta1,theta2;="" if="" (i=2*pi)
Theta = 0.0;
if (freq<=5.0)
{
M_A = 0.1;
}
其他
{
m_a += ma_step;
}

i++;

}
其他
{
//theta=0;

i=countlimit+5;
频率= vbyflimit*f_rated;
Theta +=2*pi*freq*0.00005;
if (theta>= 2*pi)
Theta = 0.0;
m_a = vbyflimit;


}

theta1 = theta +(2*PI/3);
theta2 = theta +(4*PI/3);

mod_a =(((sin (theta))* m_a*0.5)+ 0.5)* PRD;
mod_b =(((sin (theta1))* m_a*0.5)+ 0.5)* PRD;
mod_c =(((sin (theta2))*m_a*0.5)+ 0.5)*PRD;

// Assign_PWM (uint8_t mod_a、mod_b、mod_c);


//mod_a = 1250;
EPwm7Regs.CMPA.bit.CMPA = MOD_A;
EPwm7Regs.CMPB.bit.CMPB = MOD_A;
EPwm8Regs.CMPA.bit.CMPA = mod_b;
EPwm8Regs.CMPB.bit.CMPB = mod_b;
EPwm9Regs.CMPA.bit.CMPA = mod_c;
EPwm9Regs.CMPB.bit.CMPB = mod_c;

} 
ePWM setup.c 文件为: 
//######################################################################################################################
//
////文件:example_EpwmSetup.c
//
//标题:使用 eQEP 外设进行 POS 速度测量
//
//说明:
//
////此文件包含
// pos/speed 模块
//
//####################################的 EPWM 初始化源
//$TI 发行版:F2837xS 支持库 V210 $//
$发行 日期:星期二11月1日15:35:23 CDT 2016 $//
版权所有:版权所有(C) 2014-2016德州仪器(TI)公司-//
            http://www.ti.com/ 保留所有权利$
//############################################################################################################

//
//包含的文件
//
#include "F28x_Project.h"
#include "example_posspeed.h"

//
定义
//
#define TB_CLK 100e6
#define PWM_CLK 5e3 // 5kHz (300rpm) EPWM1频率
#define SP TB_CLK/(2*PWM_CLK)
#define TBCTLVAL 0x200A //向上向下计数,timebase=SYSCLKOUT

//
initEpwm -初始化 EPWM1配置
//
void initEpwm()
{
EPwm1Regs.TBSTS.All=0;
EPwm1Regs.TBPHS.ALL =0;
EPwm1Regs.TBCTR=0;

EPwm1Regs.CMPCTL.All=0x50; // CMPA 和 CMPB 的立即模式
EPwm1Regs.CMPA.bit.CMPA=SP/2;
EPwm1Regs.CMPB.All=0;

EPwm1Regs.AQCTLA.All=0x60; // CTR=CMPA 当 inc->EPWM1A=1时,
//当解码->EPWM1A=0时
EPwm1Regs.AQCTLB.All=0x09; // CTR=PRD ->EPWM1B=1,CTR=0 ->EPWM1B=0
EPwm1Regs.AQSFRC.All=0;
EPwm1Regs.AQCSFRC.All=0;

EPwm1Regs.TZSEL.All=0;
EPwm1Regs.TZCTL.All=0;
EPwm1Regs.TZEINT.All=0;
EPwm1Regs.TZFLG.All=0;
EPwm1Regs.TZCLR.All=0;
EPwm1Regs.TZFRC.All=0;

EPwm1Regs.ETSEL.All=0x0A; PRD 上的//中断
EPwm1Regs.ETPS.All=1;
EPwm1Regs.ETFLG.All=0;
EPwm1Regs.ETCLR.All=0;
EPwm1Regs.ETFRC.All=0;

EPwm1Regs.PCCTL.All=0;

EPwm1Regs.TBCTL.ALL=0x0010+TBCTLVAL;//启用定时器
EPwm1Regs.TBPRD=SP;
}

//
//文件结束 

//

posspeed.c 文件是
//######################################################################################################################
//
////文件:example_posspeed.c
//
//标题:使用 eQEP 外设进行 POS/speed 测量
//
说明:
//
//此文件包括 eQEP 初始化以及
eQEP_posspeed.c 调用的位置和速度//计算函数
由 POSSPEED_CALC ()在 SYSCLKOUT=200MHz 时执行的位置和速度//计算步骤为
//描述如下:
//
。 此程序计算:** theta_mech**
//
theta_mech = QPOSCNT/mech_scal= QPOSCNT/4000,其中4000是编号
// 数的数量。
// (4000/4 = 1000线路/转 正交编码器)
//
// 2. 此程序计算:** theta_elec**
//
theta_elec =(#个极对)* theta_mech = 2*QPOSCNT/4000
//
// 3. 此程序计算:** SpeedRPM_fr**
//
SpeedRPM_fr =[(x2-x1)/4000]/T -公式1
//注意(x2-x1)= QPOSCNT 计数的差异。 除以(x2-x1)
//除以4000可得到一周内相对于索引的位置。
//如果基本 RPM = 6000 rpm:6000 rpm =[(x2-x1)/4000 ]/10ms -公式2
// =[(x2-x1)/4000]/(.01S*1分钟/60秒)
// =[(x2-x1)/4000]/(1/6000)最小
值// Max (x2-x1)= 4000个计数、或10ms 内旋转1次
//

//////如果等式2的两侧除以6000rpm、则:
// 1 =[(x2-x1)/4000] Rev./[(1/6000) min * 6000rpm]
// 因为(x2-x1)对于 QPOSCNT 增量必须小于4000 (最大值)、
// (X2-x1)/4000 < 1、用于 CW 旋转
// 而且、对于 QPOSCNT 递减、(x2-x1)必须>-4000、
// (X2-x1)/4000>-1 (逆时针旋转
)// speed_fr =[(x2-x1)/4000]/[(1/6000) min * 6000rpm]
// =(x2-x1)/4000 -公式3
//
//要将 speed_fr 转换为 RPM,请将公式3乘以6000rpm
// SpeedRpm_fr = 6000rpm *(x2-x1)/4000 -最终公式
//
// 2. **最小转速**=根据 CCPS 预分频器选项在10rpm 时选择
//可用(最大128)
//
3. ** SpeedRPM_pr**
// SpeedRPM_pr = X/(T2-T1)-公式4
//其中 X = QCAPCTL [UPPS]/4000 Rev.(相对于索引的位置,在
// 1转)
//如果最大/基本转速= 6000 rpm:
// 6000 =(32/4000)/[(T2-T1)/(200MHz/64)]
// 其中32 = QCAPCTL [UPPS](单位超时-每32个边沿一次)
// 32/4000 = 1转中的位置(作为分次的位置
// 1次旋转)
// t2-t1/(200MHz/64),t2-t1= QCAPCLK 周期数,和
// QCAPCLK 周期= 1/(200MHz/64)
// = QCPRDLAT
//
//// SO: 6000 rpm =[32 (200MHz/64)*60s/min]/[4000 (T2-T1)]//
T2-T1 =[32 (200MHz/64)*60s/min]/(4000*6000rpm)-公式5
// = 250个 CAPCLK 周期=最大值(T2-T1)= SpeedScale///

//将两侧除以(T2-T1)、和:
// 1 = 32/(T2-T1)=[32 (200MHz/64)*60 s/min]/(4000*6000rpm)]/(T2-T1)
// 因为(T2-T1)对于 QPOSCNT 增量必须< 250:
// 250/(T2-T1)< 1用于 CW 旋转
// 而且、对于 QPOSCNT 递减:
//、(T2-T1)必须>-250 250/(T2-T1)>-1表示逆时针旋转
//
// eed_pr = 250/(T2-T1)
// 或[32 (200MHz/64)*60s/min]/(4000*6000rpm)]/(T2-t1)-公式6
//
//将 speed_pr 转换为 RPM:
//将公式6乘以6000rpm:
// SpeedRPM_fr = 6000rpm *[32 (200MHz/64)*60s/min]/[4000 *6000t1*/(T2/)
=[32 (200MHz/64)*60 s/min]/[4000 *(T2-T1)]//
或[(32/4000) rev * 60s/min]/[(T2-T1)(QCPRDLAT)]-最终公式
//
////示
例文件夹中包含的 Example_freqcal.xls //电子表格中提供了更详细的计算结果。
//
////此文件包含 posspeed 模块的源
//
/////##############################################################################################
//$TI 发行版:F2837xS 支持库 V210 $//
$发行 日期:星期二11月1日15:35:23 CDT 2016 $//
版权所有:版权所有(C) 2014-2016德州仪器(TI)公司-//
            http://www.ti.com/ 保留所有权利$
//############################################################################################################

//
//包含的文件
//
#include "F28x_Project.h"
#include "example_posspeed.h"

//
// POSISPEED_Init -初始化 EQEP1配置
//
void POSISPEED_Init (void)
{
EQep1Regs.QUPRD = 2000000; //频率为200MHz 时频率为100Hz 的单位定时器
// SYSCLKOUT
EQep1Regs.QDECCTL.bit.QSRC = 00; // QEP 正交计数模式
EQep1Regs.QEPCTL.bit.free_soft = 2;
EQep1Regs.QEPCTL.bit.PCRM = 00; // PCRM=00模式- QPOSCNT 复位打开
//索引事件
EQep1Regs.QEPCTL.bit.UTE = 1; //设备超时启用
EQep1Regs.QEPCTL.bit.QCLM = 1; //锁存装置超时
EQep1Regs.QPOSMAX = 0xffffffff;
EQep1Regs.QEPCTL.bit.QPEN = 1; // QEP 使能
EQep1Regs.QCAPCTL.bit.UPP=5; // 1/32表示单元位置
EQep1Regs.QCAPCTL.bit.CCPS = 6; 对于 CAP 时钟、为//1/64
EQep1Regs.QCAPCTL.bit.CEN = 1; // QEP 捕捉使能
}

//
POSSPEED_CALC -执行位置计算
//
void POSSPEED_CALC (POSSPEED *p)
{
长温度;
unsigned int pos16bval、temp1;
_iq Tmp1、newp、oldp;

//
//位置计算-机械和电动机角度
//
P->DirectionQep = EQep1Regs.QEPSTS.bit.QDF;//电机方向:
// 0 = CCV/反向,1 = CW/正向

pos16bval =(unsigned int) EQep1Regs.QPOSCNT;//捕捉位置一次
//每个 QA/QB 周期
p->theta_raw = pos16bval+ p->cal_angle; //原始 θ=当前位置。 +
//对。 来自 QA 的偏移

//
//下面的行计算
// p->theta_mech ~= QPOSCNT/mech_scaler [当前 cnt/(1修订版中的总 cnt)]
//其中 mech_scaler = 4000 cnts/Revolution
//
tmp =(long)(((long) p->theta_ray*(long) p->mech_scaler);// q0*Q26 = Q26
tmp &= 0x03FFF000;
p->theta_mech =(int)(Tmp>>11); //Q26 -> Q15
p->theta_mech &= 0x7FFF;

//
//以下行计算 p->elec_mech
//
p->theta_elec = p->pole _pairs*p->theta_mech; // q0*q15 = q15
p->theta_elec &= 0x7FFF;

//
//检查索引出现情况
//
if (EQep1Regs.QDL.bit.IEL = 1)
{
P->index_SYNC_FLAG = 0x00F0;
EQep1Regs.QCLR.bit.IEL = 1;//清除__interrupt 标志
}

//
//使用 QEP 位置计数器进行高速计算
//
//检查单位时间超时事件以计算速度:
//初始化函数中的单位计时器配置为100Hz
//
if (EQep1Regs.QFLG.bit.UTO = 1)//如果单元超时(一个100Hz 周期)
{
//
//微分器
//
//下面的行计算
//位置=(x2-x1)/4000 (1转的位置)
//
pos16bval =(unsigned int) EQep1Regs.QPOSLAT;//锁定的 POSCNT 值
tmp =(long)((long) pos16bval*(long) p->mech_scaler);// q0*Q26 = Q26
tmp &= 0x03FFF000;
tmp =(int)(Tmp>>11); //Q26 -> Q15
tmp &= 0x7FFF;
newp =_IQ15toIQ (tmp);
oldp = p->oldp;

if (p->DirectionQep=0) // POSCNT 正在递减计数
{
if (newp>oldp)
{
Tmp1 =-(_IQ (1)- newp + oldp);// x2-x1应该为负
}
其他
{
Tmp1 = newp -oldp;
}
}
否则,如果(p->DirectionQep=1) // POSCNT 正在递增计数
{
if (newp _iq (1))
{
P->Speed_fr =_IQ(1);
}
否则、IF (Tmp1 <_IQ(-1))
        {
            p->speed_fr =_IQ (-1);
}
其他
{
P->Speed_fr = Tmp1;
}

//
//更新电角
//
p->oldpos = newp;

//
//将电机转速从 pu 值更改为 rpm 值(Q15 -> Q0)
// q0 = q0*global_Q =>_IQXmpy(),X = global_Q
//
p->SpeedRpm_fr =_IQmpy (p->BaseRpm、p->Speed_fr);

EQep1Regs.QCLR.bit.UTO=1; //清除__interrupt 标志
}

//
//使用 QEP 捕捉计数器进行低速计算
//
if (EQep1Regs.QEPSTS.bit.UPEVNT = 1) //单位位置事件
{
if (EQep1Regs.QEPSTS.bit.COEF = 0) //没有捕捉溢出
{
TEMP1 =(无符号长整型) EQep1Regs.QCPRDLAT;// temp1 = T2-T1
}
否则//捕获溢出,使结果饱和
{
TEMP1 = 0xFFFF;
}

//
// p->Speed_pr = p->SpeedScaler/temp1
//
P->Speed_pr =_IQdiv (p->SpeedScaler, temp1);
Tmp1 = p->Speed_pr;

IF (Tmp1>_IQ (1))
{
P->Speed_pr =_IQ(1);
}
其他
{
P->Speed_pr = Tmp1;
}

//
//将 p->Speed_pr 转换为 RPM
//
if (p->DirectionQep =0)//反向=负
{
//
// q0 = q0*global_Q =>_IQXmpy(),X = global_Q
//
P->SpeedRPM_pr =-_IQmpy (p->BaseRpm、p->Speed_pr);
}
其他 //正向=正
{
//
// q0 = q0*global_Q =>_IQXmpy(),X = global_Q
//
P->SpeedRPM_pr =_IQmpy (p->BaseRpm、p->Speed_pr);
}

EQep1Regs.QEPSTS.ALL = 0x88;//清除单元位置事件标志
//清除溢出错误标志
}
}

//
//文件结束
// 

最后,pospeded.h 文件是:
//######################################################################################################################
//
////文件:Example_posspeed.h
//
//标题:使用 eQEP 外设的 POS/速度测量
//
说明:
//
//头文件包含数据类型和对象定义以及
//初始化程序。
//
//##########################################################################################################################
//$TI 发行版:F2837xS 支持库 V210 $//
$发行 日期:星期二11月1日15:35:23 CDT 2016 $//
版权所有:版权所有(C) 2014-2016德州仪器(TI)公司-//
            http://www.ti.com/ 保留所有权利$
//############################################################################################################

#ifndef __POSISPEED__
#define __POSISPEED__

//
包含的文件
//
#include "IQmathLib.h"

//
定义
//
#define POSSPEED_DEFAULTS{0x0、0x0、0x0、0x0、0x0、16776、2、0、0x0、\
250、0、000、0、\
0、0、0、\
(void (*)(long)) POSSPEED_Init、\
(void (*)(long)) POSISPEED_CALC}

//
Globals
//
typedef struct{int theta_elec; //输出:电机电角(Q15)
int theta_mech; //输出:电机机械角度(Q15)
int DirectionQep; //输出:电机旋转方向(Q0)
int QEP_cnt_idx; //变量:编码器计数器索引(Q0)
int theta_raw; //变量:定时器2的原始角度(Q0)
int mech_scaler; //参数:0.9999/总数,总计
//计数= 4000 (Q26)
Int POLE_PAIRS; //参数:极对数(Q0)
int cal_angle; //参数:原始角度偏移
//编码器与 A 相(Q0)之间
int index_SYNC_FLAG;//输出:索引同步状态(Q0)

uint32 SpeedScal; //参数:缩放转换1/N
//周期到 GLOBAL_Q 速度(Q0)-
//与全局 Q 独立
_iq Speed_pr; //输出:单位内的速度
uint32 BaseRpm; //参数:缩放转换
// GLOBAL_Q 转速至 rpm (Q0)转速-
//与全局 Q 独立
int32 SpeedRPM_pr; //输出:以 r.p.m.为单位的速度 (问题0)-
//与全局 Q 独立
_iq oldpos; //输入:电角(pu)
_iq Speed_fr; //输出:单位内的速度
int32 SpeedRPM_fr; //输出:转速,单位为 rpm (Q0)-
//与全局 Q 独立
void (*init)(); //指向 init funcion 的指针
void (*calc)(); //指向计算功能
的指针} POSSPEED;

typedef POSSPEED * POSSPEED_Handle;

//
函数原型
//
void POSSPEED_Init (void);
void POSSPEED_CALC (POSSPEED_Handle);

#endif //_POSSPEED__

//
文件末尾
// 
所有必要的文件均已包含在内。 如果有任何帮助,将不胜感激。 
谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅:
    e2e.ti.com/.../580724
    e2e.ti.com/.../549619

    谢谢
    Ki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ki、
    问题是 CCS 中使用的 IQmath.lib 对于 c2820是 V160、而我们在 f28377中使用的是 CCS 的 V210。 运行的代码显示不兼容的错误。 如果您有任何建议或所需文件、我们将不胜感激。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Kunal DAS)]问题是 CCS 中使用的 IQmath.lib 对于 c2820为 V160,而我们在 f28377s 中使用的是 CCS 的 V210。 运行的代码显示不兼容的错误。 如果您有任何建议或所需的文件、我们将不胜感激。[/引述]

    我将把这个主题移至 C2000论坛。 那里的专家将能够最好地帮助您解决此兼容性问题。

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "未解析符号"错误是否为您所指的错误? 我看不到 IQmath .lib 文件在链接器选项中的拉入位置。 您是否已将其添加到您的项目中?

    我不确定您所指的不兼容性是什么。 V160是 IQMath 库的版本、V210是 F28377S 器件支持的版本。 它们是 controlSUITE 中的两种不同产品。 它们的版本号不需要匹配即可兼容。

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

    尊敬的惠特尼:

    如果您注意到代码中的 posspeed.h 文件示例... 在声明中、一个值设置为16776、并分配给计数值为4000 POR 的机械分频器。 在本例中、我们的编码器为2000ppr。 我们无法理解转换是如何工作的。 请帮帮我们。

    谢谢

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

    您是否修复了上述链接器错误?

    Example_posspeed.h 上有一条注释、提示 mech_scaler 为"0.9999/总计数...(Q26)"、因此它的值为16776 = 0.999/4000 *(2 ^ 26)

    惠特尼