初创业公司做网站,广州社交软件app开发,互联网行业都有哪些专业,wordpress 数组文章目录 1 ADC介绍2 ADC框图2.1 外部输入通道2.2 输入电压范围2.3 触发源2.4 时钟源2.5 偏移矫正功能2.5.1 校准 3 单通道中断采集实验3.1 ADC选项3.2 ADC配置3.3 配置用户通道和中断3.4 中断代码 1 ADC介绍
RT1052 有 2 个 ADC#xff0c;每个 ADC 有 12 位、10 位、8 位可… 文章目录 1 ADC介绍2 ADC框图2.1 外部输入通道2.2 输入电压范围2.3 触发源2.4 时钟源2.5 偏移矫正功能2.5.1 校准 3 单通道中断采集实验3.1 ADC选项3.2 ADC配置3.3 配置用户通道和中断3.4 中断代码 1 ADC介绍
RT1052 有 2 个 ADC每个 ADC 有 12 位、10 位、8 位可选每个 ADC 有 16 个外部通道。
ADC具有最高 1MS/s 采样率支持单次或连续转换模式可配置采样时间和转换速度支持硬件求平均支持自动比较转换结果为小于、大于或等于某一设定的值或者在设定的范围内、范围外。
2 ADC框图 2.1 外部输入通道
外部模拟的电压信号通过 ADCx_INn(n 取 0 到 15) 进入 ADC 模块
RT1052 的每个 ADC 多达 16 外部输入个通道这 16 个外部输入通道对应着不同的引脚以下是ADC1对应的引脚
2.2 输入电压范围
ADC 的输入电压范围为0~3.3V。
如果我们想让输入的电压范围变宽可以测试负电压或者更高的正电压我们可以在外部加一个电压调理电路把需要转换的电压抬升或者降压到 0~3.3V。
2.3 触发源
RT1052 支持软件触发和硬件触发
当 ADCx_CFG 寄存器的 ADTRG 位转换触发选择位为 1时ADC 为软件触发方式 此时向 ADCx_HC0 寄存器 ADCH 位外部输入通道选择位写入需要转换的外部输入通道则开启一次转换。 ADC 还支持外部事件触发转换通过 XBAR外设间交叉开关几乎可选择任何其他外设的相 关事件作为 ADC 的外部触发事件。
2.4 时钟源
时钟有四个分别为 ADACK、IPG Clock、IPG Clock 除 2、ALTCKL。
IPG clock . 默认时钟源。IPG clock 二分频, 如果 IPG 的时钟过高使用 ADIV 寄存器最大可得到 16 分频的 IPG 时钟。ADACK, 该时钟是 ADC 模块中的时钟源生成的所以当单片机处于停止模式时该时钟仍然在运行。使用该时钟在停止模式下 ADC 可以进行转换。
寄存器 ADICLK[1:0]位决定 ADC 数字部分的时钟源。
2.5 偏移矫正功能
ADCx_OFS 用于在转换结果基础上增加或者减少固定的值。ADCx_OFS 寄存器 SIGN 位用于设置增加或者减少OFS 位用于设置增加或者减少的值。
2.5.1 校准
在系统复位后启动 ADC 转换之前要进行校准。ADCx_CAL 寄存器 CAL_CODE 保存有硬件校准值每次校准之后该值自动更新。
3 单通道中断采集实验
RT1052 的 ADC 不使用 ADC_ETC(外部触发控制器) 时非常简单完成 ADC 配置之后将转换通道写入相应的寄存器即可自动转换如果开启了中断转换完成后触发中断。
3.1 ADC选项
#define ADC1_BASE (0x400C4000u)
/** Peripheral ADC1 base pointer */
#define ADC1 ((ADC_Type *)ADC1_BASE)
/** Peripheral ADC2 base address */
#define ADC2_BASE (0x400C8000u)
/** Peripheral ADC2 base pointer */
#define ADC2 ((ADC_Type *)ADC2_BASE)3.2 ADC配置
typedef struct _adc_config {
2 bool enableOverWrite; /*! 使能覆盖 . */
3 bool enableContinuousConversion;/*! 启用连续转换模式 . */
4 bool enableHighSpeed; /*! 使能高速模式 . */
5 bool enableLowPower; /*! 使能低功耗模式 */
6 bool enableLongSample; /*! 使能长采样 */
7 /*! 使能异步时钟输出 . */
8 bool enableAsynchronousClockOutput;
9 /*! 选择参考电压源 */
10 adc_reference_voltage_source_t referenceVoltageSource;
11 /*! 长采样模式或短采样模式下的采样周期 */
12 adc_sample_period_mode_t samplePeriodMode;
13 adc_clock_source_t clockSource; /*! 时钟源选择 . */
14 adc_clock_driver_t clockDriver; /*! 选择时钟分频比 */
15 adc_resolution_t resolution; /*! 选择 ADC 分辨率 */
16 } adc_config_t;3.3 配置用户通道和中断
/* Configure the user channel and interrupt. */
adcChannelConfigStruct.channelNumber DEMO_ADC_USER_CHANNEL;
adcChannelConfigStruct.enableInterruptOnConversionCompleted true;
g_AdcInterruptCounter 0U; /* Clear the interrupt counter. */3.4 中断代码
#define DEMO_ADC_BASE ADC1
#define DEMO_ADC_IRQn ADC1_IRQn
#define DEMO_ADC_USER_CHANNEL 0U
#define DEMO_ADC_CHANNEL_GROUP 0U
#define EXAMPLE_ADC_IRQHandler ADC1_IRQHandlerEnableIRQ(DEMO_ADC_IRQn);void EXAMPLE_ADC_IRQHandler(void)
{g_AdcConversionDoneFlag true;/* Read conversion result to clear the conversion completed flag. */g_AdcConversionValue ADC_GetChannelConversionValue(DEMO_ADC_BASE, DEMO_ADC_CHANNEL_GROUP);g_AdcInterruptCounter;/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlappingexception return operation might vector to incorrect interrupt */
#if defined __CORTEX_M (__CORTEX_M 4U)__DSB();
#endif
}