打印
[学习笔记]

【AutoChips MCU评测报告】三、ADC

[复制链接]
867|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      本次进行模数转换器(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 */



五、实验结果



使用特权

评论回复

相关帖子

沙发
marginer| | 2020-6-12 14:52 | 只看该作者
AutoGen Studio,很好

使用特权

评论回复
板凳
lisingch|  楼主 | 2020-6-12 16:28 | 只看该作者

容易上手,操作便捷

使用特权

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

本版积分规则

99

主题

14990

帖子

17

粉丝