本次进行模数转换器(ADC)实验,利用AC7811QBGE的ADC模块外部通道1采集LM35根据温度变化产生的数据,将采集到数据通过USB转串口工具发送至PC端并经串口助手软件显示。工程的建立同样使用了“AutoGen Studio”。
一、实验资源
1、AC7811-MINI开发板;
2、AutoGen Studio 1.2.0;
3、KEIL 5.28.0.0;
4、USB转串口工具;
5、LM35模块
二、资源简介
AC7811QBGE微控制器的ADC模块共计有18个采样通道,其中外部16个;一个内部温度;一个内部带隙基准电压。转换序列包括一个规则组(可配置16个通道);一个注入组(可配置4个通道)。具有8种工作模式,支持中断、DMA、模拟看门狗。支持内部软件或外部硬件触发启动ADC。精度达12bit、最高转换速率为500K。是一个转换精度高、速度快、使用灵活的片上资源。
三、硬件连接
选择了开发板JP1上的PA8端口与LM35模块的输出端连接,PA8对应ADC的通道1。
四、代码实现
使用“AutoGen Studio”创建ADC工程,过程也是非常简单、同时也非常省心。配置中基本上使用了默认参数,生成的工程再添加用户代码编译后没有得到想要的实验现象,检查了半天才发现少说了一句“ADC_Cmd(ADC, ENABLE);”。
由“AutoGen Studio”生成的ADC配置代码:
void ATC_ADC_Init(void)
{
ADC_InitType adcConfig;
ADC_TrigSourceType adcTrigSourceConfig;
MSP_ADC_Init(ADC);
adcConfig.dataAlign = ADC_DataAlign_Right;
adcConfig.scanMode = ADC_DISABLE;
adcConfig.continousMode = ADC_DISABLE;
adcConfig.disContinousModeOnRegularGroup = ADC_DISABLE;
adcConfig.disContinousModeOnInjectGroup = ADC_DISABLE;
adcConfig.injectAutoMode = ADC_DISABLE;
adcConfig.discNum = 0;
ADC_Init(ADC, &adcConfig);
ADC_SetClockPrescaler(ADC, 15);
adcTrigSourceConfig.regularTrigSource = ADC_TrigSource_Internal;
adcTrigSourceConfig.injectTrigSource = ADC_TrigSource_Internal;
ADC_TrigSourceInit(ADC, &adcTrigSourceConfig);
ADC_SetRegularGroupLength(ADC, 1);
ADC_DMACmd(ADC, ADC_DISABLE);
ADC_SetRegularGroupSequence(ADC, 1, ADC_CHANNEL_AD1);
ADC_SetInjectGroupLength(ADC, 1);
ADC_SetInjectGroupSequence(ADC, 1, ADC_CHANNEL_AD1);
ADC_AnalogWatchDogOnRegularChannelModeEnable(ADC);
ADC_AnalogWatchDogOnInjectChannelModeEnable(ADC);
ADC_AnalogWatchDogSingleChannelModeEnable(ADC);
ADC_AnalogWatchDogInterruptEnable(ADC);
ADC_ChannelSampleTimeSel(ADC, ADC_CHANNEL_AD1, ADC_SampleTime_6Cycle);
}
/* USER CODE BEGIN 1 */
uint16_t GET_ADC_Value(void)
{
static uint16_t ADC_Value;
ADC_SoftwareStartRegularConvCmd(ADC, ADC_ENABLE);
udelay(100);
while (!ADC_GetIntFlag(ADC, ADC_FLAG_EOC));
udelay(1);
ADC_Value = ADC_GetRegularConversionValue(ADC);
return (uint16_t)ADC_Value;
}
/* USER CODE END 1 */
五、实验结果
|