资源简介
利用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液晶显示
相关资源
- 28335控制LCD12864液晶显示
- 基于28335的有刷电机控制
- DSP28335生成SPWM波形源代码
- DSP28335学习经验分享
- TMS320F28335SPWM开环测试程序
- 不对称规则采样法得28335实现
- 直流无刷电机控制算法
- F28335浮点库问题
- Candance dsp28335 原理图
- 28335 PWM启动AD程序,自己写的简单易懂
- 三相逆变器SVPWM.rar
- DSP28335片外 FLASH 读写实验CCS工程
- TMS320F28335_flash_kernel
- Flash28335_API_V210
- f28335最小系统原理图
- 基于TMS320F28335的全数字锁相环的设计
- 28335 spwm
- DSP28335 AD7606 研旭
- dsp28335原理图库
- SHEPWM算法分区列表
- DSPF28335带死区设置的SPWM代码
- 28335通过CAN更新程序资料
- DSP 28335 CAN中文使用手册
- TMS320F28335_SCI.rar
-
em
bedded Coder Support Package for Texas In - 基于CAN总线TMS320F28335的IAP
- 利用DSP28335实现SPWM波形产生
- DSP28335控制单相逆变器双闭环控制程序
- 28335读写I2CEEPROM的例程
- DSP TMS320F28335例程全
评论
共有 条评论