28335 pwm AD程序
根据提供的文件信息,我们可以从以下几个方面来探讨与“28335 pwm AD程序”相关的IT知识点: ### 1. DSP28335简介 TI公司的TMS320F28335(简称DSP28335)是一款高性能、浮点型数字信号处理器,特别适用于控制应用领域,例如电机控制、电源转换器控制等。该芯片拥有丰富的外设资源,包括多个PWM模块和ADC模块,这些资源可以高效地完成各种实时控制任务。 ### 2. ADC模块的理解 ADC (Analog-to-Digital Converter) 模块用于将模拟信号转换为数字信号。在DSP28335中,ADC模块可以配置成多种模式,并且具有很高的采样速率。本例中,通过设置`ADC_MODCLK = 0x3`,使HSPCLK = SYSCLKOUT / 2 * ADC_MODCLK2 = 150MHz / (2 * 3) = 25MHz,从而确保了较高的采样频率,适合于快速变化的信号采集。 ### 3. PWM模块的功能及配置 PWM (Pulse Width Modulation) 是一种对模拟信号电平进行编码的方法。DSP28335提供了多个PWM通道,可以灵活地配置不同的模式以满足不同的需求。在给定的例子中,EPWM1模块被用来实现特定的PWM功能: - 设置周期:`EPwm1Regs.TBPRD = 18750;` 表示设置PWM周期为2毫秒。 - 设置比较值:`EPwm1Regs.CMPA.half.CMPA = 12500;` 和 `EPwm1Regs.CMPB = 500;` 分别设置了两个比较点,用以生成不同占空比的PWM信号。 - 配置计数模式:`EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;` 指定了上下计数模式。 ### 4. 中断处理 中断是微控制器中一个重要的概念,它允许系统在发生特定事件时执行相应的操作。在本例中,EPWM1模块使用中断来处理定时事件: - 定义中断服务函数:`interrupt void epwm1_timer_isr(void);` - 初始化中断向量表:`PieVectTable.EPWM1_INT = &epwm1_timer_isr;` - 在主函数中启用中断:`PieCtrlRegs.PIEIER3.bit.INTx1 = 1; IER |= M_INT3; EINT;` ### 5. 全局变量的应用 全局变量在整个程序的任何位置都可以访问,这使得它们成为数据共享的有效工具。在本例中,定义了几个全局变量,如`Uint16 LoopCount;`、`Uint16 ConversionCount;`、`Uint16 Voltage1[1024] = {0};`和`Uint16 Voltage2[1024] = {0};`。这些变量用于存储循环计数、转换计数以及最近的ADC结果等数据,方便在程序的不同部分间共享信息。 ### 6. 初始化函数的作用 初始化函数如`InitAdc()`和`InitEPwm1Example()`用于设置硬件配置,确保程序运行前所有的外围设备都处于正确的工作状态。这些函数通常包含了对外围设备寄存器的设置,例如ADC模块的采样率配置、PWM模块的周期和比较值设置等。 通过以上分析可以看出,“28335 pwm AD程序”不仅涉及到了DSP28335的基础硬件资源利用,还涵盖了软件编程技巧、中断处理机制等多个方面,是一份非常有价值的代码示例。
//###########################################################################
//16通道 在定时器0中断中软件启动转换,同步采样 连续转换,级连模式;运行通过;定时器中断控制其采样频率,一个T0中断服务程序;
// Watcn Variables:
//
// Voltage1[128] Last 128 ADCRESULT0 values
// ConversionCount Current result number 0-9
// LoopCount Idle loop counter
//###########################################################################
#include "DSP28x_Project.h" // Device neaderfile and Examples Include File
// Global variables used in this example:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[1024]={0};
Uint16 Voltage2[1024]={0};
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
void InitAdc(void);
void InitEPwm1Example();
volatile unsigned int adconvover=0;
interrupt void epwm1_timer_isr(void);
Uint16 EPwm1TimerIntCount;
main()
{
InitSysCtrl();
InitGpio(); // Skipped for this example
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW; // This is needed to write to EALLOW protected register
//PieVectTable.ADCINT = &adc_isr;
PieVectTable.EPWM1_INT = &epwm1_timer_isr;
EDIS;
InitAdc();
InitEPwm1Example();
ConversionCount = 0;
EPwm1TimerIntCount=0;
// Enable ADCINT in PIE
//PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
剩余7页未读,继续阅读
- 粉丝: 1
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 文件读取失败异常(解决方案).md
- ConcurrentResourceAllocationException.md
- 内存分配失败异常(解决方案).md
- SelfOptimizingNetworkException.md
- 文件写入失败异常(解决方案).md
- MicroserviceLatencyException.md
- 资源不足异常(解决方案).md
- AppStateRetentionException.md
- 非法操作异常(解决方案).md
- ContinuousDeliveryFailureException.md
- 堆栈溢出异常(解决方案).md
- SyntheticDataGenerationException.md
- 初始化失败异常(解决方案).md
- BehavioralAnomalyDetectionException.md
- 索引越界异常(解决方案).md
- ComputationalOffloadingException.md
- 1
- 2
前往页