注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
liongt的个人空间 https://home.eeworld.com.cn/space-uid-53096.html [收藏] [复制] [分享] [RSS]
日志

LM3开发笔记_5.ADC采集

已有 1197 次阅读2010-11-17 21:02

       由于项目需要监测一些模拟量所以要用到ADC,这两天试了试LM3S8962的ADC功能,有一些收获,不敢独享和拿出来和大家分享。

 

       ADC用于将连续变化的模拟电压转换成离散的数字量。LM3S8962集成有一个 10 位的 ADC 模块,支持 8 个输入通道,以及一个内部温度传感器。ADC 模块含有一个可编程的序列发生器,可在无需控制器干涉的情况下对多个模拟输入源进行采样。每个采样序列均对完全可配置的输入源、触发事件、中断的产生和序列优先级提供灵活的编程。

 

       Stellaris系列的ADC 模块提供系列特性:
   8 个模拟输入通道 
   单端和差分输入配置; 
   内部温度传感器; 
   高达 1Msps(每秒采样一百万次)的采样率;
   4个可编程的采样转换序列, 入口长度1到8, 每个序列均带有相应的转换结果FIFO; 
   灵活的触发控制:处理器(软件) 、定时器、模拟比较器、PWM、GPIO; 
   硬件可对多达 64 个采样值进行平均计算(牺牲速度换取精度); 
   转换器采用内部的 3V参考电压; 
   分开的模拟电源和模拟地,跟数字电源和数字地分离。

 

       直接上示例程序:

 

//ADC初始化
void ADC_Init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); //使能ADC模块
    SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); //设置ADC采样速率
    ADCSequenceDisable(ADC_BASE, 3);   //配置前先禁止采样序列 
 
    //采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
    ADCSequenceConfigure(ADC_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
 
    //采样步进设置:ADC基址,采样序列编号,步值,温度传感器|中断使能
    ADCSequenceStepConfigure(ADC_BASE, 3, 0, ADC_CTL_TS|ADC_CTL_END|ADC_CTL_IE);

 
    //使能采样序列
    ADCSequenceEnable(ADC_BASE, 3);

}

 

//ADC查询采样
unsigned long ADC_Sample(void)
{
    unsigned long ulValue;
 
    ADCProcessorTrigger(ADC_BASE, 3);   //处理器触发采样序列
    while(!ADCIntStatus(ADC_BASE, 3, false)); //等待采样结束

    ADCSequenceDataGet(ADC_BASE, 3, &ulValue);  //读取ADC转换结果
 
    return(ulValue);
}

 

//温度发送到串口
void SendCelsius(unsigned long ulValue)
{
 unsigned long ulTmp;
 ulTmp = 151040UL - 225*ulValue;
 
 printf("Temperature=%d.%d\n", ulTmp/1024, (ulTmp % 1024) / 102);
}

 

int main(void)
{
    unsigned long ulValue;
 
    SysCtlClockSet(SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_8MHZ|SYSCTL_SYSDIV_4); //50MHz

 
    ADC_Init();
 
    //while
    while(1)
    {
      ulValue=ADC_Sample();
      SendCelsius(ulValue);
      Delay_nMS(1000);
    }
}

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章