Ti的C28x系列的DSP(28069)(28377)使用经验,ADC经验
笔者使用过的项目中,使用的ADC都是DSP的片内ADC,使用片内ADC的好处是,转换速度快,节约成本,这是相比片外ADC的优势。
DSP_28069的ADC精度是12位,DSP_28377D的ADC精度可以选择为12位,也可以选择为16位,笔者这里采用的是12位,两种DSP的采样模式都是单端模式。
DSP的ADC采样精度和参考电压有很大的关系,一般选择外部参考电压,参考电压一定要加RC滤波电路。
计算公式如下:
关于ADC其他方面的原理,这里就不作介绍了,如果读者想了解更多,可以搜搜其他博客看看。
笔者在项目中使用ADC,基本上只涉及以下几个方面:
ADC的初始化
ADC初始化,主要分为两个部分,ADC的模式选择,(精度模式、采样方式(差分或单端)),中断触发时刻,使能中断等。
void InitAdcPart1(void)
{EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;(*Device_cal)();EDIS;EALLOW;AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power ADC BGAdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power referenceAdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADCAdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADCAdcRegs.ADCCTL1.bit.ADCREFSEL = 1; // External VREFHI or VREFLO pins used for //reference generationEDIS;DELAY_US(1000L); // Delay before converting ADC channelsEALLOW;AdcRegs.ADCCTL2.bit.CLKDIV2EN = 0; //ADCCLK = SYSCLK = 80MhzEDIS;DELAY_US(1000L); // Delay before converting ADC channels
}void InitAdcPart2(void)
{EALLOW;AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; // Overlap of sample is not allowedAdcRegs.ADCSAMPLEMODE.all = 0; // Single sample mode//物理采样通道选择AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; //ADCINA0AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;AdcRegs.ADCSOC2CTL.bit.CHSEL = 2;AdcRegs.ADCSOC3CTL.bit.CHSEL = 3;AdcRegs.ADCSOC4CTL.bit.CHSEL = 4;AdcRegs.ADCSOC5CTL.bit.CHSEL = 5;AdcRegs.ADCSOC6CTL.bit.CHSEL = 6;AdcRegs.ADCSOC7CTL.bit.CHSEL = 7; //ADCINA7AdcRegs.ADCSOC8CTL.bit.CHSEL = 8; //ADCINB0AdcRegs.ADCSOC9CTL.bit.CHSEL = 9;AdcRegs.ADCSOC10CTL.bit.CHSEL= 10;AdcRegs.ADCSOC11CTL.bit.CHSEL= 11;AdcRegs.ADCSOC12CTL.bit.CHSEL= 12;AdcRegs.ADCSOC13CTL.bit.CHSEL= 13;AdcRegs.ADCSOC14CTL.bit.CHSEL= 14;AdcRegs.ADCSOC15CTL.bit.CHSEL= 15; //ADCINB7//采样保持时间//Sample window =(19 + 1 clock cycles).AdcRegs.ADCSOC0CTL.bit.ACQPS = 19;AdcRegs.ADCSOC1CTL.bit.ACQPS = 19;AdcRegs.ADCSOC2CTL.bit.ACQPS = 19;AdcRegs.ADCSOC3CTL.bit.ACQPS = 19;AdcRegs.ADCSOC4CTL.bit.ACQPS = 19;AdcRegs.ADCSOC5CTL.bit.ACQPS = 19;AdcRegs.ADCSOC6CTL.bit.ACQPS = 19;AdcRegs.ADCSOC7CTL.bit.ACQPS = 19;AdcRegs.ADCSOC8CTL.bit.ACQPS = 19;AdcRegs.ADCSOC9CTL.bit.ACQPS = 19;AdcRegs.ADCSOC10CTL.bit.ACQPS = 19;AdcRegs.ADCSOC11CTL.bit.ACQPS = 19;AdcRegs.ADCSOC12CTL.bit.ACQPS = 19;AdcRegs.ADCSOC13CTL.bit.ACQPS = 19;AdcRegs.ADCSOC14CTL.bit.ACQPS = 19;AdcRegs.ADCSOC15CTL.bit.ACQPS = 19;//ADC触发源//4//set SOC0 start trigger on XIN2AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 4; //4;// // 5 set SOC0 start trigger on EPWM1AAdcRegs.ADCSOC1CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC11CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC13CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC14CTL.bit.TRIGSEL = 4; //4;AdcRegs.ADCSOC15CTL.bit.TRIGSEL = 4; //4;EDIS;}void InitAdcINT(void)
{EALLOW;AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; // ADCINT1 trips after AdcResults latchAdcRegs.INTSEL1N2.bit.INT1CONT = 0; // Disable ADCINT1 Continuous modeAdcRegs.INTSEL1N2.bit.INT1SEL = 15; // EOC15 is trigger for ADCINT1EALLOW;
}void EnableAdcInterrupt(void)
{EALLOW;AdcRegs.INTSEL1N2.bit.INT1E = 1; // Enabled ADCINT1EDIS;
}
ADC的触发源,即表示如何启动ADC转换,一般用PWM启动ADC,或者外部GPIO启动ADC,比如FPGA外部触发ADC。
ADC转换的结果ADCRESULT
ADCRESULT表示数据采集的源头,各种电压电流,都是通过这个公式(ADCRESULT - 零漂)* 系数而得到的。
ADC的转换完成后触发的中断
ADC触发的中断,一般是整个DSP系统中的主中断,这个中断里会运行一些数据采集、算法、故障保护等实时性要求比较高的函数。
void InitInterrupt(void)
{EALLOW; // This is needed to write to EALLOW protected registerPieVectTable.ADCINT1 = &Interrupt_Adc1;EDIS; // This is needed to disable write to EALLOW protected registersPieCtrlRegs.PIEIFR1.bit.INTx1 = 0;PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // Enable ADC1 INT 1.1 in the PIEPieCtrlRegs.PIEACK.all = 0x0FFF; //set all ack to 0}__interrupt void Interrupt_Adc1(void)
{ServeMainInt();AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Clear ADCINT1 flag reinitialize //for next SOCPieCtrlRegs.PIEACK.all |= PIEACK_GROUP1; // Acknowledge interrupt to PIE}
Ti的C28x系列的DSP(28069)(28377)使用经验,ADC经验相关推荐
- Ti的C28x系列的DSP使用经验,如何整合DSP中运行的函数。
我从事Ti的C28x系列的DSP的开发时间不长,短短一年,使用过两种架构的DSP,主要针对资源管理有一些自己的心得. 在工程文件的分布上,本人认为需要DSP运行的的代码应该放在一个.C文件中管理,这样 ...
- Ti的C28x系列的DSP(28069)使用经验,I2C与EEPROM(AT24C256C)
本人正式使用I2C的经历只有一次,使用EEPROM是为了实现DSP的RAM中的变量断电后仍不会丢失的目的.这可能不是一个恰当的比喻.下面我来详细描述EEPROM的过程. 项目中使用的EEPROM的型号 ...
- TI的C28x系列芯片的存储结构(1)——总括
C28x内核为哈佛结构,程序储存和数据储存分开,使用32位数据地址和22位程序地址.这样总地址可以达到:在数据空间中存储4G个字(1个字= 16位),在程序空间中存储4M个字.C28x的程序和数据空间 ...
- 二、TI毫米波雷达系列——IWR6843 DSP系统内存结构
DSP系统结构: 1)IWR6843的DSS的核心是600MHz的C674xDSP核,客户可以编程运行雷达信号处理算法.DSP本地有两级内存(L1和L2).L1(32KBL1D.32KBL1P)以60 ...
- TI的C28x系列芯片的存储结构(2)——CLA的RAM
CLA有自己的程序和数据总线,它的RAM存储区分三种:程序RAM(program RAM).数据RAM(data RAM)和信号RAM(message RAM). ①program RAM CLA的程 ...
- [解疑][TI]TI毫米波雷达系列(一):Texas Instruments德州仪器 相关软件安装及使用时问题汇总,持续更新......
德州仪器 (Texas Instruments),简称TI,是全球领先的半导体公司,为现实世界的信号处理提供创新的数字信号处理(DSP)及模拟器件技术.除半导体业务外,还提供包括传感与控制.教育产品和 ...
- 基于TI AM5728(浮点双DSP C66x +双ARM Cortex-A15)的开发板
开发板简介 基于TI AM5728浮点双DSP C66x +双ARM Cortex-A15工业控制及高性能音视频处理器: 多核异构CPU,集成双核Cortex-A15.双核C66x浮点DSP.双核PR ...
- 信迈TI OMAP-L138(定点/浮点DSP C674x+ARM9) + Xilinx Spartan-6 FPGA开发板规格书
1 评估板简介 基于TI OMAP-L138(定点/浮点 DSP C674x+ARM9)+ Xilinx Spartan-6 FPGA处理器: OMAP-L138 FPGA 通过uPP.EMIFA.I ...
- STM8S系列基于IAR开发单通道ADC连续采样示例
STM8S系列基于IAR开发单通道ADC连续采样示例
最新文章
- Spring+MyBatis
- Java 时间 Date类型,Long类型,String类型
- BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
- 软件稳定性测试的测试点
- 微软借Bletchley项目将云计算信息加入区块链
- HH SaaS电商系统的销售订单毛利润模块设计
- 东北大学c语言真题及答案,东北大学C语言总测试题(含答案).pdf
- 内外网切换软件_不需要软件,用命令简单实现内外网切换指定网段走哪条线路...
- 世界摩天大楼2009年排名
- 基于SSM的医学健康网站
- 将计算机知识应用于生活中,电脑知识在生活中的灵活运用(6页)-原创力文档...
- 中国电网计算机面试题目,国家电网面试经验
- php读取excel显示,PHP读取Excel并展示实现代码
- 微信、米聊等国内kik类手机通信录互动应用前景探讨
- 解决Veil—Evasion安装中git clone导致失败的问题
- optionnally mysql_关于Tomcat与MySQL连接池问题的解析!
- 计算机鼠标双击怎么,鼠标双击变成属性怎么办 鼠标双击变成属性解决办法【详解】...
- Android rom开发:recovery取消校验Vbmeta version和framework matrix
- 产生分类中的双月问题的数据集
- Linux中的各种栈:进程栈 线程栈 内核栈 中断栈