采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx

上传人:b****6 文档编号:3039097 上传时间:2022-11-17 格式:DOCX 页数:13 大小:17.80KB
下载 相关 举报
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx_第1页
第1页 / 共13页
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx_第2页
第2页 / 共13页
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx_第3页
第3页 / 共13页
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx_第4页
第4页 / 共13页
采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx

《采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx》由会员分享,可在线阅读,更多相关《采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx(13页珍藏版)》请在冰豆网上搜索。

采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序.docx

采用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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1