资源简介
利用28335的epwm模块产生pwm波形,并触发内部的AD采样。产生三相PWM波,并触发三路AD采样
代码片段和文件信息
#include “DSP2833x_Device.h“
#include “DSP2833x_Examples.h“
#include “DSP2833x_EPwm.h“
void InitEPWM1(void);
void InitEPWM2(void);
void InitEPWM3(void);
void InitADC_init(void);
interrupt void epwm1_isr(void);
Uint16 resultA;
Uint16 resultB;
Uint16 resultC;
#define ADC_SHCLK 0xf // S/H width in ADC module periods
#define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 15MHz/(1*2)
#define ADC_usDELAY 5000L
void main(void)
{
//第一步,初始化系统控制
InitSysCtrl();
EALLOW;
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ)
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
#endif
EDIS;
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)=15MHZ
EDIS;
//第二步,初始化GPIO为ePWM1,ePWM2,ePWM3
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
//第三步,清所有中断
DINT;
//初始化PIE控制
InitPieCtrl();
//禁止CPU中断并清空所有CPU中断标志位
IER = 0x0000;
IFR = 0x0000;
//初始化PIE向量表
InitPieVectTable();
//将中断指向中断函数
EALLOW;
PieVectTable.EPWM1_INT = &epwm1_isr;
EDIS;
//第四步,初始化片内外设,这里初始化ePWM1,2,3
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
InitEPWM1();
InitEPWM2();
InitEPWM3();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
//使能连接到ePWM1,2,3的CPU中断
IER |= M_INT3;
//使能ePWM在PIE的中断:Group3,中断1-3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
EINT; //使能全局中断INTM
ERTM; //使能全局实时中断DBGM
InitAdc();
InitADC_init();
for(;;)
{
asm(“ NOP“);
}
}
void InitADC_init(void)
{
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;//设置采样窗口时间:(15+1)*ADCCLK
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;//允许SEQ1被ePWMxSOCA触发信号启动
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0; //在每一个SEQ1序列结束设置INT_SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;//SEQ1的中断使能
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;//ADC内核时钟分频:HSPCLK/2=6.25MHZ
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1选择级联模式
AdcRegs.ADCTRL1.bit.CONT_RUN=0; //启动-停止模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1=2;//设置最大转换通道为2+1=3次
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;//顺序采样
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //通道选择ADCAIN0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //通道选择ADCAIN0
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; //通道选择ADCAIN0
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; //带隙和参考电路上电
DELAY_US(1);
AdcRegs.ADCTRL3.bit.ADCPWDN = 1; //模拟内核的除带隙和参考电路之外所有模拟电路上电
DELAY_US(ADC_usDELAY);
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //清除SEQ1中断标志位
}
interrupt void epwm1_isr(void)
{
while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {}
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
resultA = (AdcRegs.ADCRESULT0>>4);
resultB = (AdcRegs.ADCRESULT1>>4);
resultC = (AdcRegs.ADCR
- 上一篇:great_project.zip
- 下一篇:28335控制LCD12864液晶显示
相关资源
- F28335无刷直流电机开闭环控制
- 28335CAN调试程序
- DSP28335程序片内FLASH搬运至RAM运行的
- 28335写的用spi读取传感器数据并用CA
- 28335控制的直流电机程序
- ICETEK-F28335-A评估板及教学实验箱实验
- 基于DSP28335的直流电机闭环调速
- TMS320F28335系列头文件、库文件、cmd等
- 永磁同步电机无位置传感器DSP28335代码
- TI-tms320f28335中文数据手册
- 28335设计参考
- TMS320F28335全套开发例程 TMS320F28335全套
- DSP原理及应用考试试题28335
- 基于28335的电机FOC控制
- TIDSP28335CAN中文使用手册.pdf
- DSP完成APF源代码
- 基于TMS320F28335的超声波流量计.rar
- DSP28335的PMSM的SVPWM电机代码
- dsp 2808 pfc epwm adc两相PFC测试程序 程序
- dsp28335各外设
- SVG_APF_28335源代码,正常编译
- DSP28335串口二阶BOOT源码
- F28335程序-BLDC
- DSP28335中文手册
- DSPF28335一体板用户手册
- F2823x_RevA_CSP_.exe
- 用于DSP28335的编程例程 主要是用于有
- 28335芯片中文资料
- TI+TM320F28335数据手册中文版.pdf
- DSP28335TI例程
评论
共有 条评论