DSP无刷直流电动机驱动控制程序Word格式.docx
- 文档编号:16052072
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:41
- 大小:24.42KB
DSP无刷直流电动机驱动控制程序Word格式.docx
《DSP无刷直流电动机驱动控制程序Word格式.docx》由会员分享,可在线阅读,更多相关《DSP无刷直流电动机驱动控制程序Word格式.docx(41页珍藏版)》请在冰豆网上搜索。
//0串口发数
Uint16Test:
//1串口测试
Uint16Vflag:
//2转速更新
Uint16SendEnd:
//3串口发送结束
Uint16Sign1:
//4上一次给定转向标志
Uint16Sign2:
//5本次给定转向标志
Uint16Openint:
//6启动标志
Uint16Adfrist:
//7保留
Uint16Spdoff:
//8保留
Uint16Zero:
//9转速过零标志
Uint16Mode:
3;
//10-12保留
Uint16Dshow:
//13保留
Uint16Sign:
//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=&
PieVectTable.CAPINT6=&
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;
EvbRegs.CAPCONB.all=0xB6FF;
EINT;
//使能全局中断INTM
ERTM;
//EnableGlobalrealtimeinterruptDBG
//等待中断(中断之外的时间内进行LCD的发送和接收)
for(;
;
)
{
SCI_CTL();
}
}
//串口控制
//=========================================
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 直流电动机 驱动 控制程序