打印
[开发板]

CW32L010开发板学习记录八:使用内部ADC读取位移传感器数据

[复制链接]
268|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 聪聪哥哥 于 2024-12-31 09:35 编辑

1:CW32模式转化器(ADC介绍)
CW32L010 内部集成一个 12 位精度、最高 2M SPS 转换速度的逐次逼近型模数转换器 (SAR ADC),最多可将 16路模拟信号转换为数字信号。现实世界中的绝大多数信号都是模拟量,如光、电、声、图像信号等,都要由 ADC转换成数字信号,才能由 MCU 进行数字化处理。

主要特性:
● 12 位精度
● 各序列通道转换速度可单独配置,最高达 2M SPS
● 16 路输入转换通道
‒ 14 路外部引脚输入
‒ 内置温度传感器
‒ 内置 BGR 1.2V 基准
● VDD 电源电压作为参考电压源(Vref)
● 采样电压输入范围:0 ~ Vcc
● 支持序列通道转换模式
‒ 支持单次和连续转换
‒ 支持最多 8 个转换通道,每个通道可选 16 个转换源之一
● 支持输入通道电压阈值监测
● 支持片内外设自动触发 ADC 转换

内部ADC框图结构:

查阅一下CW32得用户手册,我们可以看到该芯片的每个IO口都可以配置成ADC得输入口,如下图所示:

这样我们在使用内部ADC时候,有了更多的选择。
这里我使用PA02引脚作为ADC的输入检测引脚:
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] ADC 配置
*
*/
void ADC_Configuration(void)
{
    ADC_InitTypeDef ADC_InitStructure = {0};
    __SYSCTRL_ADC_CLK_ENABLE();
   
    ADC_InitStructure.ADC_ClkDiv = ADC_Clk_Div2;
    ADC_InitStructure.ADC_ConvertMode = ADC_ConvertMode_Once;
    ADC_InitStructure.ADC_SQREns = ADC_SqrEns0to0;
    ADC_InitStructure.ADC_IN0.ADC_InputChannel = ADC_InputCH2;
    ADC_InitStructure.ADC_IN0.ADC_SampTime = ADC_SampTime9Clk;   
   
    ADC_Init(&ADC_InitStructure);
    ADC_SetTs(ADC_TsEnable);   
    ADC_Enable();   
}
使用普通定时GTIME作为ADC的触发来源:
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] GTIM初始化
*
*/
void GTIM_Init(void)
{
    GTIM_InitTypeDef GTIM_InitStruct = { 0 };

    //打开GTIM时
    __SYSCTRL_GTIM1_CLK_ENABLE();
   
    GTIM_InitStruct.AlignMode = GTIM_ALIGN_MODE_EDGE;
    GTIM_InitStruct.ARRBuffState = GTIM_ARR_BUFF_DIS;
    GTIM_InitStruct.Direction = GTIM_DIRECTION_UP;
    GTIM_InitStruct.EventOption = GTIM_EVENT_NORMAL;
    GTIM_InitStruct.Prescaler = 8000-1;    //实际分频为 Prescaler+1 = 8000, 频率为1kHz
    GTIM_InitStruct.PulseMode = GTIM_PULSE_MODE_DIS;
    GTIM_InitStruct.ReloadValue = 1000-1;    // 1秒
    GTIM_InitStruct.UpdateOption = GTIM_UPDATE_EN;
   
    GTIM_TimeBaseInit(CW_GTIM1, >IM_InitStruct);
   
    GTIM_MasterTRGOCfg(CW_GTIM1, GTIM_MASTER_TRGO_UPDATE);
   
}

在主程序中添加代码如下:
    //LED初始化
    LED_Init();
    ADC_Configuration();
    GTIM_Init();
   //ADC外部中断触发源配置
    ADC_ExtTrigCfg(ADC_TRIG_GTIM1TRGO, ENABLE);
    GTIM_Cmd(CW_GTIM1, ENABLE);
实物验证图片如下:


使用特权

评论回复
沙发
使用内部ADC读取位移传感器数据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

126

帖子

0

粉丝