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

[复制链接]
 楼主| 聪聪哥哥 发表于 2024-12-31 09:32 | 显示全部楼层 |阅读模式
本帖最后由 聪聪哥哥 于 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框图结构:
图片20.png
查阅一下CW32得用户手册,我们可以看到该芯片的每个IO口都可以配置成ADC得输入口,如下图所示:
图片21.png
这样我们在使用内部ADC时候,有了更多的选择。
这里我使用PA02引脚作为ADC的输入检测引脚:
  1. /**
  2. * [url=home.php?mod=space&uid=247401]@brief[/url] ADC 配置
  3. *
  4. */
  5. void ADC_Configuration(void)
  6. {
  7.     ADC_InitTypeDef ADC_InitStructure = {0};
  8.     __SYSCTRL_ADC_CLK_ENABLE();
  9.    
  10.     ADC_InitStructure.ADC_ClkDiv = ADC_Clk_Div2;
  11.     ADC_InitStructure.ADC_ConvertMode = ADC_ConvertMode_Once;
  12.     ADC_InitStructure.ADC_SQREns = ADC_SqrEns0to0;
  13.     ADC_InitStructure.ADC_IN0.ADC_InputChannel = ADC_InputCH2;
  14.     ADC_InitStructure.ADC_IN0.ADC_SampTime = ADC_SampTime9Clk;   
  15.    
  16.     ADC_Init(&ADC_InitStructure);
  17.     ADC_SetTs(ADC_TsEnable);   
  18.     ADC_Enable();   
  19. }
使用普通定时GTIME作为ADC的触发来源:
  1. /**
  2. * [url=home.php?mod=space&uid=247401]@brief[/url] GTIM初始化
  3. *
  4. */
  5. void GTIM_Init(void)
  6. {
  7.     GTIM_InitTypeDef GTIM_InitStruct = { 0 };

  8.     //打开GTIM时
  9.     __SYSCTRL_GTIM1_CLK_ENABLE();
  10.    
  11.     GTIM_InitStruct.AlignMode = GTIM_ALIGN_MODE_EDGE;
  12.     GTIM_InitStruct.ARRBuffState = GTIM_ARR_BUFF_DIS;
  13.     GTIM_InitStruct.Direction = GTIM_DIRECTION_UP;
  14.     GTIM_InitStruct.EventOption = GTIM_EVENT_NORMAL;
  15.     GTIM_InitStruct.Prescaler = 8000-1;    //实际分频为 Prescaler+1 = 8000, 频率为1kHz
  16.     GTIM_InitStruct.PulseMode = GTIM_PULSE_MODE_DIS;
  17.     GTIM_InitStruct.ReloadValue = 1000-1;    // 1秒
  18.     GTIM_InitStruct.UpdateOption = GTIM_UPDATE_EN;
  19.    
  20.     GTIM_TimeBaseInit(CW_GTIM1, >IM_InitStruct);
  21.    
  22.     GTIM_MasterTRGOCfg(CW_GTIM1, GTIM_MASTER_TRGO_UPDATE);
  23.    
  24. }

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

小夏天的大西瓜 发表于 2025-1-8 21:26 | 显示全部楼层
使用内部ADC读取位移传感器数据
OKAKAKO 发表于 2025-1-22 09:08 | 显示全部楼层
绝大多数信号都是模拟量,如光、电、声、图像信号等,都要由 ADC转换成数字信号,才能由 MCU 进行数字化处理。
星辰大海不退缩 发表于 2025-1-23 19:01 | 显示全部楼层
使用内部ADC读取位移传感器数据
AdaMaYun 发表于 2025-1-25 22:59 | 显示全部楼层
使用内部ADC读取位移传感器数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

238

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部