利用F28335定时DA输出仿真与设计,设计三个小任务,写出流程完整代码

时间: 2023-12-10 09:05:45 浏览: 32
任务一:生成一个正弦波 ```c #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" #define PI 3.14159265358979323846 Uint16 sine_table[256]; void Init_Sine_Table(void) { int i; for(i = 0; i < 256; i++) { sine_table[i] = (Uint16)(2047*sin(2*PI*i/256) + 2047); } } void main(void) { InitSysCtrl(); InitPieCtrl(); InitPieVectTable(); Init_Sine_Table(); EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; //PWM1A GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; //PWM1B EDIS; EPwm1Regs.TBPRD = 7500; //设置PWM周期为10kHz EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; EPwm1Regs.CMPA.bit.CMPA = sine_table[0]; EPwm1Regs.ETSEL.bit.SOCAEN = 1; EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; EPwm1Regs.TBCTL.bit.CLKDIV = 0; EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.CMPA.bit.CMPA = sine_table[0]; EPwm1Regs.CMPB.bit.CMPB = sine_table[0]; EPwm1Regs.ETSEL.bit.SOCAEN = 1; EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; EPwm1Regs.TBCTL.bit.CLKDIV = 0; EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.CMPA.bit.CMPA = sine_table[0]; EPwm1Regs.CMPB.bit.CMPB = sine_table[0]; EPwm1Regs.ETSEL.bit.SOCAEN = 1; EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; while(1) { } } ``` 任务二:实现PWM波形调制 ```c #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" void main(void) { InitSysCtrl(); InitPieCtrl(); InitPieVectTable(); EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; EDIS; EPwm1Regs.TBPRD = 4500; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm1Regs.CMPA.bit.CMPA = 2250; //占空比50% EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; //高电平 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; //低电平 EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; while(1) { } } ``` 任务三:实现ADC采样和输出 ```c #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" #define ADC_SOC_NUMBER 0 //使用的ADC SOC号码 Uint16 AdcData[2]; //存放ADC采样结果的数组 void ADC_Init(void) { EALLOW; AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //内部参考电压 AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; //开启内部参考电压缓冲区 AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; //开启内部参考电压缓冲区 AdcRegs.ADCCTL1.bit.ADCPWDN = 1; //开启ADC电源 AdcRegs.ADCCTL2.bit.CLKDIV2EN = 0; //不分频 AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; //非重叠采样 AdcRegs.ADCCTL2.bit.CHARGEPUMPEN = 1; //开启充电泵 AdcRegs.ADCCTL2.bit.INTPULSEPOS = 1; //中断脉冲在采样之后 AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; //采样通道 AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //采样保持时间 AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; //触发源EPWM1SOCA AdcRegs.ADCSOC0CTL.bit.HI_PRIORITY = 1; //高优先级 AdcRegs.INTSEL1N2.bit.INT1SEL = ADC_SOC_NUMBER; //中断1与ADC SOC关联 AdcRegs.INTSEL1N2.bit.INT1E = 1; //开启ADC中断1 AdcRegs.INTSEL1N2.bit.INT1CONT = 1; //循环模式 AdcRegs.INTSEL1N2.bit.INT1SEL2 = 0; //中断1触发源为EOC0 AdcRegs.INTSEL1N2.bit.INT1SEL1 = 0; //中断1触发源为EOC0 PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //开启ADC中断1 IER |= M_INT1; AdcRegs.ADCSOCFRC1.all = 0x0001; //启动ADC SOC0采样 EDIS; } interrupt void Adc_ISR(void) { AdcData[0] = AdcResult.ADCRESULT0; //存放采样结果 AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除ADC中断1标志位 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //清除PIE中断标志位 } void main(void) { InitSysCtrl(); InitPieCtrl(); InitPieVectTable(); ADC_Init(); EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; EDIS; EPwm1Regs.TBPRD = 4500; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm1Regs.CMPA.bit.CMPA = 2250; //占空比50% EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; //高电平 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; //低电平 EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; while(1) { EPwm1Regs.CMPA.bit.CMPA = AdcData[0]; //将ADC采样结果输出到PWM的占空比上 } } ```

相关推荐

最新推荐

recommend-type

利用C8051F060芯片实现AD和DA转换

C8051F060是一个高性能数据采集芯片,测取模数转换的量化特性,并对其量化精度进行分析,
recommend-type

STM32|4-20mA输出电路

在以STM32为中心的设备中,使用它自带的DAC即可非常方便的实现4-20mA的输出接口,具有精度高、稳定性好、漂移小以及编程方便等特点。
recommend-type

微机原理课程设计 AD DA转换

微机原理课程设计: 微机原理课程设计 题目:正弦波信号输入到ADC0809,8086读EOC状态判断是否采集结束,结束后波形经DAC0832输出。开关K1控制是输出还是采集。当开关闭合时,ADC0809采集波形,当开关断开时,经DAC...
recommend-type

CJC8988就是一颗超低功耗的双路ADC和DAC的音频编码器,CJC8988有2个耳机放大器或立体声输入输出接口的 AD/DA

CJC8988就是一颗超低功耗的双路ADC和DAC的音频编码器,CJC8988有2个耳机放大器或立体声输入输出接口的 AD/DA转换器。 CJC8988是专门为低功耗、便携式设备设计开发的。 具备静音功能和可编程音量调节。音频数据接口有...
recommend-type

Kepware使用教程 OPC DA Client

IOT开发:Kepware中OPC DA Client使用案列,详细介绍Kepware中如何进行设置新建Channel、设置Device、Kepware QC显示等3个过程
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

get() { return this.photoState },

这是一个 JavaScript 中的方法定义,它定义了一个名为 `get` 的方法。这个方法没有参数,它返回了 `this.photoState`。在这个方法中,`this` 是指当前对象,而 `photoState` 是该对象的一个属性。通常情况下,`get` 方法用于获取对象的属性值,并且可以在获取属性值之前进行一些逻辑操作。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。