采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序Word下载.docx
- 文档编号:15950048
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:13
- 大小:17.80KB
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序Word下载.docx
《采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序Word下载.docx》由会员分享,可在线阅读,更多相关《采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
math.h>
//函数声明
interruptvoidMainISR(void);
//系统使用的全局变量
float32SpeedRef=0.20;
//速度参考(pu)
float32T=0.001/ISR_FREQUENCY;
//采样周期,见文件parameter.h
Uint32VirtualTimer=0;
Uint16ILoopFlag=FALSE;
Uint16SpeedLoopFlag=FALSE;
int16DFuncDesired=0x1A00;
//期望的占空比(Q15)
_iqCurrentSet=_IQ(0.0031);
Uint16IsrTicker=0;
Uint16BackTicker=0;
int16DlogCh1=0;
int16DlogCh2=0;
int16DlogCh3=0;
int16DlogCh4=0;
volatileUint16EnableFlag=FALSE;
//采用PID控制器调节无刷直流电动机的电流和速度
PIDREG3pid1_idc=PIDREG3_DEFAULTS;
PIDREG3pid1_spd=PIDREG3_DEFAULTS;
//定义并初始化PWM驱动
PWMGENpwm1=PWMGEN_DEFAULTS;
//定义并初始化ADC驱动
ADCVALSadc1=ADCVALS_DEFAULTS;
//定义并初始化霍尔传感器HALL3驱动
HALL3hall1=HALL3_DEFAULTS;
//定义斜波控制器平滑斜坡信号
RMPCNTLrc1=RMPCNTL_DEFAULTS;
//RAMP2模块初始化
RMP2rmp2=RMP2_DEFAULTS;
//MOD6CNT模块初始化
MOD6CNTmod1=MOD6CNT_DEFAULTS;
//SPEED_PR模块初始化
SPEED_MEAS_CAPspeed1=SPEED_MEAS_CAP_DEFAULTS;
//创建并初始化DATALOG模块
DLOG_4CHdlog=DLOG_4CH_DEFAULTS;
voidmain(void)
{
//******************************************
//初始化x281x处理器代码
//初始化系统控制寄存器,锁相环,看门狗,时钟等模块:
//InitSysCtrl()函数在DSP281x_SysCtrl.c文件中定义
InitSysCtrl();
//HISPCP预定标寄存器设置,一般情况下设置为默认值
EALLOW;
//解除寄存器保护
P.all=0x0000;
//SYSCLKOUT/1
EDIS;
//禁止对受保护寄存器进行写操作
//禁止并清除所有CPU中断:
DINT;
IER=0x0000;
IFR=0x0000;
//初始化外设中断扩展单元控制寄存器为默认状态:
//InitPieCtrl()函数在DSP281x_PieCtrl.c中定义
InitPieCtrl();
//初始化PIE矢量表为已知状态
InitPieVectTable();
//用户专用函数,重新分配中断向量,使能中断:
//使能EVA定时器1/2:
//配置定时器1/2寄存器(EVA)
NA.all=0;
//设置通用定时器2的周期
EvaRegs.T2PR=SYSTEM_FREQUENCY**T;
//清除定时器2的计数器/比较寄存器
EvaRegs.T2CNT=0x0000;
EvaRegs.T2CMPR=0x0000;
//等待使能标志置位
while(EnableFlag==FALSE)
{
BackTicker++;
}
//使能通用定时器2的周期中断
RB.bit.T2PINT=1;
//配置定时器:
递增计数,x1,内部时钟,禁止比较操作,使用自己的周期
EvaRegs.=0x9040;
//重新分配中断
PieVectTable.T2PINT=&
MainISR;
//禁止对受保护寄存器进行写操作
//为T2PINT使能PIE的组3的中断1
R3.all=M_INT1;
//为T2PINT使能CPUINT3
IER|=M_INT3;
//初始化PWM模块
dMax=(SYSTEM_FREQUENCY/PWM_FREQUENCY)*1000;
//不对称PWM
unc=DFuncDesired;
//DutyFunc=Q15
(&
pwm1);
//初始化DATALOG模块
1=&
DlogCh1;
2=&
DlogCh2;
3=&
DlogCh3;
4=&
DlogCh4;
_value=0x01;
=0x400;
alar=1;
dlog);
//初始化ADC模块
ect=0x6543;
adc1);
//初始化时能驱动模块
drv1);
//初始化SPEED_PR模块(150MHz,N=1eventperiod/rev)
Select=0;
pm=120*(BASE_FREQ/P);
Scaler=(Uint32)(ISR_FREQUENCY/(1*BASE_FREQ*0.001));
//初始化RMPCNTL模块
elayMax=20;
owLimit=_IQ(0);
ighLimit=_IQ
(1);
//初始化霍尔传感器模块
nceAmount=5;
utions=-10;
hall1);
//初始化RMP2模块
=(int32)DFuncDesired;
2Delay=0x;
2Max=0x00007FFF;
2Min=0xF;
//初始化PID_REG3模块,直流母线电流调节
pid1_=_IQ
(1);
pid1_=_IQ(T/0.003);
pid1_=_IQ(0/T);
pid1_=_IQ(0.2);
pid1_x=_IQ(0.99);
pid1_n=_IQ(0);
//初始化PID_REG3模块,速度调节
pid1_=_IQ(T/0.1);
//使能全局中断和更高优先级的适时调试中断
EINT;
//使能全局中断INTM
ERTM;
//使能全局适时调试中断DBGM
//循环
for(;
;
)BackTicker++;
}
interruptvoidMainISR(void)
//验证ISR
IsrTicker++;
//*****************LEVEL1*****************
#if(BUILDLEVEL==LEVEL1)
//------------------------------------------------------------------------------
//调用ADC04U_DRV读取函数
//连接HALL模块并调用传感器检测函数
apPointer=(int16)er;
//连接输入到MOD6模块,调用Modulo6计数器计数函数
nput=(int32)rigHall;
er=(int32)apPointer;
mod1);
//连接RMP2模块,调用Ramp控制计算函数
edInput=(int32)DFuncDesired;
rmp2);
//连接PWM_DRV模块,调用PWM信号产生函数
ointer=(int16)er;
unc=(int16);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 采用 TMS320F2812 数字信号 处理器 实现 直流电动机 控制 主程序