采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx
- 文档编号:3039097
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:13
- 大小:17.80KB
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx
《采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx》由会员分享,可在线阅读,更多相关《采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx(13页珍藏版)》请在冰豆网上搜索。
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序。
/*==================================================================
系统名称:
无刷直流电动机控制(DSP281x)
文件名称:
BLDC3_1.C
功能描述:
采用霍尔传感器实现三相无刷直流电动机的控制
==================================================================*/
//主函数使用的头文件
#include"target.h"
#include"DSP281x_Device.h"
#include"IQmathLib.h"
#include"bldc3_1.h"
#include"parameter.h"
#include"build.h"
#include
//函数声明
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;
RB.bit.T2PINT=1;
//配置定时器:
递增计数,x1,内部时钟,禁止比较操作,使用自己的周期
EvaRegs.=0x9040;
//重新分配中断
EALLOW;//解除寄存器保护
PieVectTable.T2PINT=&MainISR;
EDIS;//禁止对受保护寄存器进行写操作
//为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
(1);
pid1_=_IQ(T/0.1);
pid1_=_IQ(0/T);
pid1_=_IQ(0.2);
pid1_x=_IQ(0.99);
pid1_n=_IQ(0);
//使能全局中断和更高优先级的适时调试中断
EINT;//使能全局中断INTM
ERTM;//使能全局适时调试中断DBGM
//循环
for(;;)BackTicker++;
}
interruptvoidMainISR(void)
{
//验证ISR
IsrTicker++;
//*****************LEVEL1*****************
#if(BUILDLEVEL==LEVEL1)
//------------------------------------------------------------------------------
//调用ADC04U_DRV读取函数
//------------------------------------------------------------------------------
(&adc1);
//------------------------------------------------------------------------------
//连接HALL模块并调用传感器检测函数
//------------------------------------------------------------------------------
apPointer=(int16)er;
(&hall1);
//------------------------------------------------------------------------------
//连接输入到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 数字信号 处理器 实现 直流电动机 控制 主程序