本次进行模数转换器(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 */
五、实验结果
|