在DSP 28335直流电机定时中断中,通过调节占空比实时调整转速,实现0-100%的调速调节。
时间: 2024-02-23 12:58:16 浏览: 92
实现在DSP 28335直流电机定时中断中通过调节占空比实时调整转速,实现0-100%的调速调节,可以按照以下步骤进行:
1. 首先需要在代码中包含DSP 28335的头文件和PWM控制模块的头文件:
```
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "DSP2833x_EPwm.h"
```
2. 然后需要定义一个EPwm结构体和一个变量,用于存储PWM占空比:
```
//定义EPwm结构体
EPwm_Structure epwm1_info;
//定义PWM占空比变量
Uint16 pwm_duty = 0;
```
3. 在定时中断中,通过修改`epwm1_info.CMPA.half.CMPA`的值来改变PWM的占空比,从而控制电机的转速。例如,要将PWM占空比设置为50%:
```
pwm_duty = 1000; //50%的占空比
epwm1_info.CMPA.half.CMPA = pwm_duty;
```
4. 在初始化完成后,需要启动PWM控制模块:
```
//启动PWM控制模块
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
```
5. 最后,在main函数中循环等待即可:
```
void main(void)
{
//将DSP 28335的时钟配置为150MHz
InitSysCtrl();
//初始化PWM控制模块
InitEPwm1();
//启动PWM控制模块
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
//循环等待
while(1)
{
}
}
```
完整的DSP 28335直流电机定时中断中实时调节转速代码示例请参考以下代码:
```
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "DSP2833x_EPwm.h"
//定义EPwm结构体
EPwm_Structure epwm1_info;
//定义PWM占空比变量
Uint16 pwm_duty = 0;
//定时中断服务函数
interrupt void timer_isr(void)
{
//修改PWM占空比为50%
pwm_duty = 1000; //50%的占空比
epwm1_info.CMPA.half.CMPA = pwm_duty;
//清除定时中断标志位
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
//PWM控制模块初始化
void InitEPwm1(void)
{
//初始化EPwm结构体
epwm1_info.TBPRD = 2000; //设置PWM周期为2000
epwm1_info.TBCTL.bit.CTRMODE = 0; //设置PWM计数器为上升计数
epwm1_info.CMPA.half.CMPA = 1000; //设置PWM占空比为50%
epwm1_info.AQCTLA.bit.CAU = 2; //设置PWM输出为高电平
epwm1_info.AQCTLA.bit.CAD = 1; //设置PWM输出为低电平
//将EPwm结构体的配置应用到PWM控制模块
InitEPwm1Gpio();
InitEPwm1Registers();
}
void main(void)
{
//将DSP 28335的时钟配置为150MHz
InitSysCtrl();
//初始化PWM控制模块
InitEPwm1();
//配置定时中断
EALLOW;
PieVectTable.TINT1 = &timer_isr; //将定时中断服务函数与中断向量表关联
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //使能总中断
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能定时中断
IER |= M_INT1; //使能中断控制器INT1的中断
EDIS;
//启动PWM控制模块
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
//循环等待
while(1)
{
}
}
```
阅读全文