#include "DSP2833x_Device.h"
void SysCtrl(void);
//
/*与ECana模块相关的函数*/
void En_ECanaModeClk(void);
void Confi_ECanaGpio(void);
void Init_ECana(void);
void Confi_ECanaMbox1_Tr(void);
void Confi_ECanaInterrupt(void);
void Confi_PieECana(void);
void interrupt ISR_ECana(void);
/*与定时中断相关的函数*/
void Confi_LedGpio(void); //中断正常检测引脚
#define LED1 GpioDataRegs.GPBDAT.bit.GPIO60
#define LED2 GpioDataRegs.GPBDAT.bit.GPIO61
void En_CpuTimer(void);
void En_CpuTimer(void);
//
void Confi_CpuTimer0(float PRD,float TDDR);
void Confi_PieTimer0(void);
//
void Confi_CpuTimer1(float PRD,float TDDR);
//
void interrupt ISR_Timer0(void);
void interrupt ISR_Timer1(void);
//
/*与EPwm产生相关的定义的函数*/
void En_EPwmModeClk(void);
void En_TBCLKSYNC(void);
void Dis_TBCLKSYNC(void);
//
void Confi_EPwmGpio(void);
void Init_EPwmMode(void);
//
#define Duty1 EPwm1Regs.CMPA.half.CMPA
#define Duty2 EPwm2Regs.CMPA.half.CMPA
#define Duty3 EPwm3Regs.CMPA.half.CMPA
#define Duty4 EPwm4Regs.CMPA.half.CMPA
#define Duty5 EPwm5Regs.CMPA.half.CMPA
#define Duty6 EPwm6Regs.CMPA.half.CMPA
//
/*与Hall位置检测相关的定义的函数*/
void Confi_HallGpio(void);
Uint16 hall_a;
Uint16 hall_b;
Uint16 hall_c; //Hall 位置传感器的缓存器
#define Hall_A GpioDataRegs.GPADAT.bit.GPIO24
#define Hall_B GpioDataRegs.GPADAT.bit.GPIO25
#define Hall_C GpioDataRegs.GPADAT.bit.GPIO26
//
/*设置外部按键*/
void Confi_KeyGpio(void);
#define Key1 GpioDataRegs.GPBDAT.bit.GPIO58
#define Key2 GpioDataRegs.GPBDAT.bit.GPIO59
//
Uint16 ct;
Uint32 Speed; //定义速度符号
//
Uint16 count_dir; //定义定时器0的计数方向
Uint16 running_dir; //定义电机转动方向
int16 count; //定时器定时个数
int16 count_buf; //定时计数器缓存器
//#define count_max = 100; //定时器定时个数最大计数值
//
/*与捕获模块相关的函数*/
void En_ECapModeClk(void);
#define T1 ECap1Regs.CAP1
#define T2 ECap1Regs.CAP2
#define T3 ECap1Regs.CAP3
#define T4 ECap1Regs.CAP4
//
Uint32 t1; Uint32 t2; Uint32 t3; Uint32 t4;
//
Uint32 Period1; Uint32 Period2; Uint32 Period3;
///
void Init_ECapMode(void);
//
void main(void)
{
Speed = 0;Period1 = Period2 = Period3 = 0;
//
t1=t2=t3=t4=0;
count = 0;
count_dir = 0; //定时计数值为加计数
running_dir = 0; //电机转向初始为正方向旋转
//
ct = 0;
//
SysCtrl();
En_ECanaModeClk(); //ECana模块的时钟使能
En_ECapModeClk(); //ECap模块的时钟使能
En_EPwmModeClk(); //EPwm模块的时钟使能
En_CpuTimer(); //使能定时器的时钟模块
Dis_TBCLKSYNC(); //与epwm模块相关
//
//
Confi_LedGpio(); //设置LED灯的功能引脚
Confi_EPwmGpio(); //设置pwm功能相关的引脚
Confi_HallGpio(); //设置位置模块外部引脚功能
Confi_ECanaGpio(); //设置ECana模块引脚功能
Init_ECana(); //初始化ECana
Confi_ECanaMbox1_Tr(); //设置邮箱1为发送邮箱
//
DINT;
//
IFR = 0x0000; IER = 0x0000;
//
Confi_CpuTimer0(100000,150); //定时周期为 0.1s
Confi_PieTimer0();
Confi_CpuTimer1(10000,150); //设置定时器1
Confi_ECanaInterrupt(); //设置ECana发送中断
Confi_PieECana();
//
EALLOW;
PieVectTable.TINT0 = & ISR_Timer0;
PieVectTable.XINT13 = & ISR_Timer1;
PieVectTable.ECAN0INTA = & ISR_ECana;
EDIS;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
//
Init_EPwmMode();
En_TBCLKSYNC();
//
Init_ECapMode();
//
IER = 0x1101; //启动定时器0 和1,已经ECana模块的中断
//
EINT;ERTM; //CpuTimer1Regs.TCR.bit.TSS = 0;
LED1 = 1; LED2 = 1;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;
//ECanaRegs.CANMC.bit.CDR = 1;
ECanaMboxes.MBOX1.MDL.all = Speed;
//ECanaRegs.CANMC.bit.CDR = 0;
ECanaRegs.CANTRS.bit.TRS1 = 1;
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
while(1)
{
if(Key1 == 0 && Key2 == 1) //启动按键是否按下
{
CpuTimer0Regs.TCR.bit.TSS = 0; //有键按下时启动定时器0
CpuTimer1Regs.TCR.bit.TSS = 0;
//
count_dir = 0; //启动键按下后,设定为计数加计数方式
do
{
//
hall_a = Hall_A ;hall_b = Hall_B;hall_c = Hall_C;
if(running_dir == 0) //判断电机方向
{
/*六路位置判断*/
if(hall_a == 0 && hall_b == 1 && hall_c ==1) //判断霍尔位置确定开关管的导通启动电机 1
{
if(count ==0 || count<50) //电机调速占空比的确定
{
Duty2 = 50000 - 500* count;
Duty3 = 50000 - 500* count; //电机的启动运行
}
else if(count>=50)
{
Duty2 = 25000;Duty3 = 25000; //电机的正常运行
}
EPwm1Regs.AQCTLA.bit.CAU = 1;
EPwm2Regs.AQCTLA.bit.CAU = 2;
EPwm3Regs.AQCTLA.bit.CAU = 2;
EPwm4Regs.AQCTLA.bit.CAU = 1;
EPwm5Regs.AQCTLA.bit.CAU = 1;
EPwm6Regs.AQCTLA.bit.CAU = 1;
//
}
else if(hall_a == 0 && hall_b == 1 && hall_c == 0) //2
{
if(count==0 || count<=50)
{
Duty3 = 50000 - 500 * count;
Duty6 = 50000 - 500* count;
}
else if(count>50)
{
Duty3 = 25000;Duty6 = 25000;
}
EPwm1Regs.AQCTLA.bit.CAU = 1;
EPwm2Regs.AQCTLA.bit.CAU = 1;
EPwm3Regs.AQCTLA.bit.CAU = 2;
EPwm4Regs.AQCTLA.bit.CAU = 1;
EPwm5Regs.AQCTLA.bit.CAU = 1;
EPwm6Regs.AQCTLA.bit.CAU = 2;
//
}
else if(hall_a == 1 && hall_b ==1 && hall_c ==0) //3
{
if(count== 0 || count<=50)
{
Duty1 = 50000 - 500* count;
Duty6 = 50000 - 500 * count;
}
else if (count >50)
{
Duty1 = 25000;Duty6 = 25000;
}
EPwm1Regs.AQCTLA.bit.CAU = 2;
EPwm2Regs.AQCTLA.bit.CAU = 1;
EPwm3Regs.AQCTLA.bit.CAU = 1;
EPwm4Regs.AQCTLA.bit.CAU = 1;
EPwm5Regs.AQCTLA.bit.CAU = 1;
EPwm6Regs.AQCTLA.bit.CAU = 2;
}
else if(hall_a == 1 && hall_b == 0 && hall_c == 0) // 4
{
if(count == 0 || count <=50)
{
Duty1 = 50000- 500 * count;Duty4 = 50000 - 500* count;
}
else if(count >50)
{
Duty1 = 25000;Duty4 = 25000;
}
EPwm1Regs.AQCTLA.bit.CAU = 2;
EPwm2Regs.AQCTLA.bit.CAU = 1;
EPwm3Regs.AQCTLA.bit.CAU = 1;
EPwm4Regs.AQCTLA.bit.CAU = 2;
EPwm5Regs.AQCTLA.bit.CAU = 1;
EPwm6Regs.AQCTLA.bit.CAU = 1;
////
}
else if(hall_a == 1 && hall_b == 0 && hall_c == 1) //5
{
if(count == 0 || count<=50)
{
Duty5 = 50000 - 500* count;
Duty4 = 50000 - 500* count;
}
else if(count >50)
{
Duty5 = 25000;Duty4 = 25000;
}
EPwm1Regs.AQCTLA.bit.CAU = 1;
EPwm2Regs.AQCTLA.bit.CAU = 1;
EPwm3Regs.AQCTLA.bit.CAU = 1;
EPwm4Regs.AQCTLA.bit.CAU = 2;
EPwm5Regs.AQCTLA.bit.CAU = 2;
EPwm6Regs.AQCTLA.bit.CAU = 1;
//
}
else if(hall_a == 0 && hall_b ==0 && hall_c ==1) //6
{
if(count == 0 || count <=50)
{
Duty5 = 50000- 500 * count;
Duty2 = 50000- 500* count;
}
else if(count >50)
{
Duty5 = 25000;Duty2 = 25000;
}
EPwm1Regs.AQCTLA.bit.CAU = 1;
EPwm2Regs.AQCTLA.bit.CAU = 2;
EPwm3Regs.AQCTLA.bit.CAU = 1;
EPwm4Regs.AQCTLA.bit.CAU = 1;
EPwm5Regs.AQCTLA.bit.CAU = 2;
EPwm6Regs.AQCTLA.bit.CAU = 1;
///
}
//
ECanaMboxes.MBOX1.MDL.all = Speed;
ECanaRegs.CANTRS.bit.TRS1 = 1; //启动ECana通讯
} ///正转启动设置完成
else if(running_dir ==1) //电机反转标定
{ /*反向转动时的,位置信号所对应的开关管导通顺序*/
if(hall_a == 0 && hall_b == 1 && hall_c == 1) //位置信号 1 Q1 Q4 导通
{
if(count == 0 || count<50 )
{
Duty4 = 50000 - 500 * count;
Duty1 = 50000 - 500 * count;
}
else if(count >= 50)
{
Duty4 = 25000;Duty1 = 25000;
}
EPwm1Regs.AQCTLA.bit.CAU = 2;
EPwm2Regs.AQCTLA.bit.CAU = 1;
EPwm3Regs.AQCTLA.bit.CAU = 1;
EPwm4Regs.AQCTLA.bit.CAU = 2;
EPwm5Regs.AQCTLA.bit.CAU = 1;
EPwm6
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于DSP28335的直流电机闭环调速 (114个子文件)
DSP2833x_CodeStartBranch.asm 3KB
DSP2833x_usDelay.asm 3KB
DSP2833x_ADC_cal.asm 1KB
motor_OpenControl_run.c 20KB
motor_run_text.c 20KB
motor_opencontrol.c 17KB
loopControl_motro.c 12KB
eCAN.c 10KB
DSP2833x_loopCtrlMotor.c 8KB
DSP2833x_ECan.c 7KB
DSP2833x_ECAN_text.c 6KB
DSP28335_eCAN.c 6KB
DSPF28335_GlobleVariableDefs.c 5KB
DSP28335_EPwm.c 4KB
DSP28335_ECanb_text.c 4KB
DSP28335_eCap.c 3KB
DSP28335_Gpio.c 3KB
current_detection.c 3KB
ECan_main(transmit).c 2KB
motor_speed_control_fengji.c 2KB
IQmath_text.c 2KB
DSP2833x_ECap_frequence.c 1KB
DSP28335_TIME1_TEXT.C 1KB
DSP28335_EPwmChopper.c 1KB
DSP28335_Timer0-1.c 1KB
DSP28335_ADC_text.c 705B
Position_dectect.c 648B
DSP28335_SYSCLKCtrl.c 617B
eCan_trans.c 617B
eCAN_Tr.c 0B
SYMBOL.CDX 542KB
SYMBOL.CDX 399KB
FILE.CDX 3KB
FILE.CDX 3KB
DSP2833x_Headers_nonBIOS.cmd 8KB
28335_RAM_lnk.cmd 4KB
SYMBOL.DBF 526KB
SYMBOL.DBF 333KB
FILE.DBF 2KB
FILE.DBF 1KB
SYMBOL.FPT 911KB
SYMBOL.FPT 572KB
FILE.FPT 3KB
FILE.FPT 1KB
DSP2833x_SWPrioritizedIsrLevels.h 142KB
IQmathLib.h 123KB
DSP2833x_ECan.h 44KB
DSP2833x_Mcbsp.h 31KB
DSP2833x_EPwm.h 16KB
DSP2833x_Gpio.h 16KB
DSP2833x_DMA.h 13KB
DSP2833x_SysCtrl.h 13KB
DSP2833x_Adc.h 10KB
DSP2833x_EQep.h 10KB
DSP2833x_GlobalPrototypes.h 8KB
DSP2833x_Sci.h 8KB
DSP2833x_I2c.h 7KB
DSP2833x_DefaultISR.h 7KB
DSP2833x_PieVect.h 6KB
DSP2833x_Spi.h 6KB
DSP2833x_ECap.h 6KB
DSP2833x_Device.h 6KB
DSP2833x_PieCtrl.h 6KB
DSP2833x_CpuTimers.h 6KB
DSP2833x_Examples.h 5KB
DSP2833x_I2c_defines.h 4KB
DSP2833x_EPwm_defines.h 4KB
DSP2833x_Xintf.h 4KB
SFO_V5.h 3KB
DSP2833x_DevEmu.h 3KB
DSP_GLOBLE.h 2KB
DSP2833x_XIntrupt.h 2KB
SFO.h 2KB
DSP2833x_Dma_defines.h 2KB
DSP2833x_Project.h 720B
DSP_TYPE.h 256B
rts2800.lib 1.14MB
IQmath.lib 611KB
Debug.lkf 1KB
cc_build_Debug.log 552B
DSP28335_Motor_loopControl.map 27KB
dsp28335.map 21KB
motor_run_text.obj 173KB
motor_OpenControl_run.obj 172KB
motor_opencontrol.obj 168KB
loopControl_motro.obj 147KB
DSP2833x_loopCtrlMotor.obj 137KB
DSPF28335_GlobleVariableDefs.obj 130KB
DSP2833x_ECan.obj 128KB
eCAN.obj 126KB
DSP2833x_ECAN_text.obj 126KB
DSP28335_ECanb_text.obj 125KB
DSP28335_eCAN.obj 125KB
IQmath_text.obj 125KB
DSP28335_EPwm.obj 125KB
DSP2833x_ECap_frequence.obj 125KB
ECan_main(transmit).obj 123KB
DSP28335_EPwmChopper.obj 123KB
DSP28335_Gpio.obj 123KB
motor_speed_control_fengji.obj 123KB
共 114 条
- 1
- 2
资源评论
weixin_42165831
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功