DSP电机控制PMSMWord文档下载推荐.docx
- 文档编号:15494487
- 上传时间:2022-11-02
- 格式:DOCX
- 页数:28
- 大小:19.93KB
DSP电机控制PMSMWord文档下载推荐.docx
《DSP电机控制PMSMWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DSP电机控制PMSMWord文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
unsignedintRunFlag=0;
//运行标志
unsignedintTurnFlag=0;
//正反转
//_iqha=65545;
//_iqhb=65521;
//_iqhc;
voidShowDisp(void);
//显示函数,用于将数据显示到显示板
_iqtest1[20];
_iqtest2[20];
voidmain(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER=0x0000;
IFR=0x0000;
/*初始化PIE控制寄存器*/
InitPieCtrl();
/*初始化PIE矢量表*/
InitPieVectTable();
/*初始化SCIb寄存器*/
InitSci();
//初始化24Vxx
// Init24Cxx();
/*设置CPU定时器*/
InitCpuTimers();
ConfigCpuTimer(&
CpuTimer2,150,20000);
CpuTimer1,150,100000);
//每0.1秒加1Hz,每秒加Y*1000000赫兹
StartCpuTimer1();
StartCpuTimer2();
/*初始化IO口*/
//InitGpio();
/*初始化EV*/
eva.Init(&
eva);
evb.Init(&
evb);
/*设置中断服务程序入口地址*/
EALLOW;
//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.T1UFINT=&
T1UFINT_ISR;
PieVectTable.TXBINT=&
SCITXINTB_ISR;
//设置串口B发送中断的中断向量
PieVectTable.RXBINT=&
SCIRXINTB_ISR;
//设置串口B接受中断的中断向量
PieVectTable.TXAINT=&
SCITXINTA_ISR;
//设置串口A发送中断的中断向量
PieVectTable.RXAINT=&
SCIRXINTA_ISR;
//设置串口A接受中断的中断向量
PieVectTable.TINT2=&
ISRTimer2;
PieVectTable.XINT13=&
ISRTimer1;
//定时器1和外部中断合用一个中断标志位
//此处为XINT13并不是TINT1
EDIS;
//ThisisneededtodisablewritetoEALLOWprotectedregisters
/*使能位于PIE中组2的第6个中断定时器1下溢中断*/
PieCtrl.PIEIER2.bit.INTx6=1;
/*开中断*/
IER|=M_INT2;
//EVA
IER|=M_INT9;
//SCI//允许串口中断
IER|=M_INT14;
//cputimer2
IER|=M_INT13;
//cputimer1
EINT;
//EnableGlobalinterruptINTM
ERTM;
//EnableGlobalrealtimeinterruptDBGM
eva.Close(&
evb.Open(&
rampgen.StepAngleMax=_IQ(0.0128);
//最大频率128hz中断频率10k
while
(1)
{
// hc=_IQmpy(ha,hb);
只进行保留整数位,对于小数位不进行四舍五入。
hc=(ha*hb)/65536
}
}
//===========================================================================
//定时器1下溢中断服务程序.
interruptvoidT1UFINT_ISR(void)//EV-A
//asm("
ESTOP0"
);
//PieCtrl.PIEACK.bit.ACK2=1;
//EvaRegs.EVAIFRA.bit.T1UFINT=1;
//清中断标志位
//rampgen模块产生矢量旋转的角度需要设置StepAngleMax这里是控制转速的。
//rampgen.Freq=_IQ(50)>
>
7;
rampgen.Freq=_IQ((float)f_now)>
//因为最大频率128Hz,是2的7次方,那么除以128就是以最大频率来看的标幺值
rampgen.calc(&
rampgen);
//vhzprof模块vvvf控制,根据频率比例控制输出电压的量
// vhzprof.Freq=_IQ(50);
vhzprof.Freq=_IQ((float)f_now)+_IQ(0.11);
vhzprof.calc(&
vhzprof);
//RotateVector模块产生旋转矢量对应的UalphaUbeta
if(TurnFlag==0)
rotatevector.Angle=rampgen.Angle;
//停止标志
else
rotatevector.Angle=-rampgen.Angle;
rotatevector.k=vhzprof.VoltOut;
rotatevector.calc(&
rotatevector);
//svgendq模块根据UalphaUbeta产生比较器需要的TATBTC
svgendq.Ualpha=rotatevector.Ualpha;
svgendq.Ubeta=rotatevector.Ubeta;
svgendq.calc(&
svgendq);
happy=rotatevector.Angle;
//ev模块
eva.Ta=svgendq.Ta;
eva.Tb=svgendq.Tb;
eva.Tc=svgendq.Tc;
eva.SetPwm(&
evb.Ta=svgendq.Ta;
evb.Tb=svgendq.Tb;
evb.Tc=svgendq.Tc;
evb.SetPwm(&
PieCtrl.PIEACK.bit.ACK2=1;
EvaRegs.EVAIFRA.bit.T1UFINT=1;
}
interruptvoidSCIRXINTA_ISR(void)
{
PieCtrl.PIEACK.bit.ACK9=1;
RABuf=SciaRegs.SCIRXBUF.all;
switch(RABuf)
{}
EINT;
}
interruptvoidSCIRXINTB_ISR(void)//SCI-B
//相应PIE组9的其他中断
RBBuf=ScibRegs.SCIRXBUF.all;
switch(RBBuf)
case0:
//增加输入电压百分比
break;
case1:
//运行
case2:
//增加频率
case3:
//增加频率
case4:
//减少输入电压百分比
case5:
//停止
f_given=0;
case6:
//减小频率
case7:
//减小频率
interruptvoidISRTimer1(void)
{
//内部定义的计数变量
if(RABuf==0)
{
CpuTimer1.InterruptCount=0;
f_given=0;
SciaRegs.SCITXBUF=(unsignedint)f_now;
f_given_disp=f_now;
}
if(RABuf==1)//FWDAuto
{
//unsignedinta;
RunFlag=1;
eva.Open(&
f_given_disp=f_now;
TurnFlag=0;
CpuTimer1.InterruptCount++;
if((CpuTimer1.InterruptCount<
20)&
&
(CpuTimer1.InterruptCount>
0))
{
f_given++;
f_now=f_given;
//f_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 电机 控制 PMSM