DSP无刷直流电动机驱动控制程序.docx
- 文档编号:3141139
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:41
- 大小:24.42KB
DSP无刷直流电动机驱动控制程序.docx
《DSP无刷直流电动机驱动控制程序.docx》由会员分享,可在线阅读,更多相关《DSP无刷直流电动机驱动控制程序.docx(41页珍藏版)》请在冰豆网上搜索。
DSP无刷直流电动机驱动控制程序
2.4无刷直流电动机驱动控制程序
//#############################################################################///
//无刷电机控制源程序
//TMS320F2812
//
//#############################################################################
//=====================================================================
//头文件调用
//=====================================================================
#include"DSP28_Device.h"
#include"math.h"
#include"float.h"
//=====================================================================
//常量附值
//=====================================================================
#defineIdc_max3000//电流给定最大值
#defineIdc_min0//电流给定最小值
//=====================================================================
//标志位
//=====================================================================
charIab_Data=0;
structFlag_Bits{//bitsdescription
Uint16Send:
1;//0串口发数
Uint16Test:
1;//1串口测试
Uint16Vflag:
1;//2转速更新
Uint16SendEnd:
1;//3串口发送结束
Uint16Sign1:
1;//4上一次给定转向标志
Uint16Sign2:
1;//5本次给定转向标志
Uint16Openint:
1;//6启动标志
Uint16Adfrist:
1;//7保留
Uint16Spdoff:
1;//8保留
Uint16Zero:
1;//9转速过零标志
Uint16Mode:
3;//10-12保留
Uint16Dshow:
1;//13保留
Uint16Sign:
1;//14当前转向标志
};
unionFlag_Reg{
Uint16all;
structFlag_Bitsbit;
}FlagRegs;
//=====================================================================
//全局变量
//=====================================================================
//串口通信变量
unsignedintSci_Rx[8]={0,0,0,0,0,0,0,0};//接收数据数组
unsignedintSci_Tx[8]={0,0,0,0,0,0,0,0};//发送数据数组
charT_pointer=0;//发送数据数组指针
charR_pointer=0;//接收数据数组指针
charT_length=1;//发送数据长度
charR_length=0;//接收数据长度
chara2=0;
//控制参数
unsignedintspd_kp=0;//转速环P参数
unsignedintspd_ki=0;//转速环I参数
unsignedintid_kp=0,id_ki=0;//电流PI参数
signedintspd_given=0;//转速给定
signedintspd_given1=0;//转速给定
signedintspd_given2=0;//转速给定
//控制变量
unsignedintcap1=0;//前次换向标志位
unsignedintcap2=0;//本次换向标志位
unsignedintintruptcount=0;//定时器1下溢中断次数
unsignedintspeed_given=1000;//转速给定
signedintIdc_given2=0;//算得本次电流给定值
signedintspeed_e1=0;//前次转速误差
signedintspeed_e2=0;//本次转速误差
signedintIa_e1=0;//前次电流误差
signedintIa_e2=0;//本次电流误差
chart2first=0;
signedintCOMP2=0;//装比较寄存器值
//转速反馈
charSpd_Data=0;//滤波计数
intspeed_counter=0;//速度环计数器
unsignedintcap_a;//本次捕获单元数据
unsignedintcap_b;//上次捕获单元数据
longcap_c;//捕获单元数据差
signedintBLDC_SPD[10]={0,0,0,0,0,0,0,0,0,0};//转速滤波
signedintspd_fd_q1=0;//转速反馈临时变量
unsignedintspd_fd_q0=0;//转速检测值
charcc=0;
//电流反馈
unsignedintia[6]={0,0,0,0,0,0};//A相电流反馈值
unsignedintib[6]={0,0,0,0,0,0};//B相电流反馈值
signedintia_fd=0,ib_fd=0;//电流反馈
signedintTemp_filter=0;//临时变量
unsignedintt1per=0;//周期寄存器数值
//临时变量
signedlonglong1_tmp=0;
signedlonglong2_tmp=0;
signedintu16_tmp1=0;
signedintu16_tmp2=0;
//=====================================================================
//子程序声明
//=====================================================================
interruptvoidt1uf_int(void);
interruptvoidcap_int(void);
voidAd(void);
voidspeed(void);//计算速度
voidIa_PI(void);//电流环调节Ia
voidspeed_PI(void);//速度环调节
voidbldc(void);
voidCheck_Rxdata(void);
voidSci_Send(signedintsci_delay);
char*Fen_Jie(signedintSend_Temp);
unsignedintSci_Rx_check(unsignedinti_Rx,unsignedint*p_Rx);
signedintDIV_CAL(longsignedintdividend,signedintdivisor);
unsignedintU_DIV_CAL(longunsignedintudividend,unsignedintudivisor);
//=====================================================================
//主程序开始
//=====================================================================
voidmain(void)
{
//控制寄存器初始设置
InitSysCtrl();//初始化系统
DINT;//关全局中断
IER=0x0000;
IFR=0x0000;
InitPieCtrl();//初始化PIE中断
InitPieVectTable();//初始化PIE中断矢量表
InitGpio();//初始化Gpio输入输出口
InitEv();//初始化Eva的T和T2
InitAdc_Eva();//初始化AD
InitData();
EALLOW;//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.T1UFINT=&t1uf_int;//T1下溢中断地址
PieVectTable.CAPINT4=&cap_int;
PieVectTable.CAPINT5=&cap_int;
PieVectTable.CAPINT6=&cap_int;
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters
PieCtrl.PIEIER2.bit.INTx6=1;//T1下溢中断使能
PieCtrl.PIEIER5.bit.INTx5=1;
PieCtrl.PIEIER5.bit.INTx6=1;
PieCtrl.PIEIER5.bit.INTx7=1;
IER|=M_INT2;//EnableCPUInterrupt2
IER|=M_INT4;//EnableCPUInterrupt4
IER|=M_INT5;//EnableCPUInterrupt5
EvbRegs.EVBIMRC.bit.CAP4INT=1;
EvbRegs.EVBIMRC.bit.CAP5INT=1;
EvbRegs.EVBIMRC.bit.CAP6INT=1;
EvbRegs.CAPCONB.all=0x36FF;
NOP;
NOP;
NOP;
NOP;
EvbRegs.CAPCONB.all=0xB6FF;
EINT;//使能全局中断INTM
ERTM;//EnableGlobalrealtimeinterruptDBG
//等待中断(中断之外的时间内进行LCD的发送和接收)
for(;;)
{
SCI_CTL();
}
}
//=====================================================================
//串口控制
//=========================================
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 直流电动机 驱动 控制程序