打印
[MM32硬件]

【MM32 eMiniBoard测评报告】+ADC测试 (LED指示电平变化)

[复制链接]
1407|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本次测试内置12位的ADC,在官方温度测量例程的基础上进行修改;
ADC采用单次转换模式。
在使用库函数ADC1_SingleChannel( ADC_Channel_XX)时需注意,
如果多个通道使用单次模式时,每个通道采集前调用该函数,否则采集的数据还为上一通道数据。
本次使用了通道10 (连接内部温度传感器)和通道5(外接RV3)
通道采集电压小于0.5V时所有LED不亮,电压大于0.5V时点亮1个LED,电压大于1.5V时点亮2个LED,
电压大于2.5V时点亮3个LED,电压大于3V时点亮4个LED,
使用库函数,ADC设置很简单,简单修改即可

实物图


同时串口输出温度及电压值;

来张GIF动图,看看效果,动图中使用了RV1,调节其电阻值,LED指示电平的高低
实际中RV1、RV2、RV3都试了,都没有问题。


体会:ADC配置比较方便,简单修改例程即可使用。
问题:仿真器虚拟串口的问题,因为是win7系统,能看到串口但是不能收发数据(应该是驱动没有数字签名导致)
按照官网的解决方法进入安全模式也不行,希望厂家能改进(使用其他厂商的板子未出现这种问题),实例中只能
使用外接USB转串口模块查看串口输出数据。

使用特权

评论回复
沙发
hu9jj| | 2020-5-23 15:04 | 只看该作者
请教一下:您这是分别单次转换吗,如果想用单周期扫描转换,即通过DMA的获得数据该如何设置?

使用特权

评论回复
板凳
zhangbtj|  楼主 | 2020-5-23 15:10 | 只看该作者
hu9jj 发表于 2020-5-23 15:04
请教一下:您这是分别单次转换吗,如果想用单周期扫描转换,即通过DMA的获得数据该如何设置? ...

DMA方式还没有试

使用特权

评论回复
地板
hu9jj| | 2020-5-23 15:45 | 只看该作者
本帖最后由 hu9jj 于 2020-5-23 15:46 编辑

继续请教:测试RV2和RV3时还要配置GPIO吗?
我测试时没有读取到正确数据。

使用特权

评论回复
5
zhangbtj|  楼主 | 2020-5-23 16:02 | 只看该作者
hu9jj 发表于 2020-5-23 15:45
继续请教:测试RV2和RV3时还要配置GPIO吗?
我测试时没有读取到正确数据。

没有单独去配置,但是在adc.c文件中有配置,另外adcc中的函数还调用了hal_adc.c的函数里面有配置,我没有单独去配置,我使用的是官方提供的例程

使用特权

评论回复
6
hu9jj| | 2020-5-23 16:10 | 只看该作者
我不配置PA4和PA5的GPIO时编译出错,配置后单个通道测试正常,变动对应的RV,数值会变化,但象您那样在循环中逐个转换,则所有的数值一样,没有变化。
麻烦您看一下我的代码对么:
while(1)
{
    ADC1_SingleChannel( ADC_Channel_1);
    ADCVAL = Get_Adc_Average(ADC_Channel_1,5);//取5次的平均值
    adc_val[0] = ((float)ADCVAL/4095)*3.3;
    printf("ADC通道1= %fV\r\n",adc_val[0]);
    delay_ms(200);

    ADC1_SingleChannel( ADC_Channel_4);
    ADCVAL = Get_Adc_Average(ADC_Channel_4,5);//取5次的平均值
    adc_val[1] = ((float)ADCVAL/4095)*3.3;
    printf("ADC通道4= %fV\r\n",adc_val[1]);
    delay_ms(200);

    ADC1_SingleChannel( ADC_Channel_5);
    ADCVAL = Get_Adc_Average(ADC_Channel_5,5);//取5次的平均值
    adc_val[2] = ((float)ADCVAL/4095)*3.3;
    printf("ADC通道5= %fV\r\n",adc_val[2]);
    delay_ms(200);

    ADC1_SingleChannel( ADC_Channel_10);
    ADCVAL=Get_Adc_Average(ADC_Channel_10,5);
    adc_val[3] = 27.0+(ADCVAL-1800)/5.96;
    printf("内部温度= %.2f度\r\n",adc_val[3]);
    delay_ms(200);

    ADC1_SingleChannel( ADC_Channel_11);
    ADCVAL=Get_Adc_Average(ADC_Channel_11,5);
    adc_val[4] = ((float)ADCVAL/4095)*3.3;
    printf("内部基准电压= %fv\r\n\r\n",adc_val[4]);
    delay_ms(1000);

使用特权

评论回复
7
zhangbtj|  楼主 | 2020-5-23 16:29 | 只看该作者
本帖最后由 zhangbtj 于 2020-5-23 16:31 编辑
hu9jj 发表于 2020-5-23 16:10
我不配置PA4和PA5的GPIO时编译出错,配置后单个通道测试正常,变动对应的RV,数值会变化,但象您那样在循环 ...

我的没问题,按照你的写法
    u16 ADCVAL;
    float Temp[4];
    delay_init();
    LED_Init();
    uart_initwBaudRate(115200);         //串口初始化为115200

    /*配置为内部温度传感器*/
  //  ADC1_SingleChannel( ADC_Channel_10);
        //  ADC1_SingleChannel( ADC_Channel_1);
    while(1)
    {   
                         ADC1_SingleChannel( ADC_Channel_10);
         ADCVAL=Get_Adc_Average(ADC_Channel_10,5);
                          Temp[0]=27.0+(ADCVAL-1800)/5.96;
        printf("内部温度=%.2f度\r\n",Temp[0]);
                          delay_ms(10);
                        ADC1_SingleChannel( ADC_Channel_5);
                       
                          ADCVAL=Get_Adc_Average(ADC_Channel_5,5);
                          Temp[1] = ((float)ADCVAL/4095)*3.3;
                        printf("VR3电压值为: %.3f伏\r\n",Temp[1]);
                               
                        delay_ms(10);
                        ADC1_SingleChannel( ADC_Channel_1);
                       
                          ADCVAL=Get_Adc_Average(ADC_Channel_1,5);
                          Temp[2] = ((float)ADCVAL/4095)*3.3;
                        printf("VR1电压值为: %.3f伏\r\n",Temp[2]);
                        delay_ms(10);
                                ADC1_SingleChannel( ADC_Channel_4);
                       
                          ADCVAL=Get_Adc_Average(ADC_Channel_4,5);
                          Temp[3] = ((float)ADCVAL/4095)*3.3;
                        printf("VR2电压值为: %.3f伏\r\n",Temp[3]);

使用特权

评论回复
8
hu9jj| | 2020-5-23 17:00 | 只看该作者
谢谢!刚开始测试时温度值和内部参考电压数值是正常的,就是前三个通道的数值相同,到后来竟全部相同了,我再找找原因。

使用特权

评论回复
9
huangzushuimd| | 2020-5-24 07:37 | 只看该作者
hu9jj 发表于 2020-5-23 17:00
谢谢!刚开始测试时温度值和内部参考电压数值是正常的,就是前三个通道的数值相同,到后来竟全部相同了,我 ...

每个采样通道可以试试如上间隔10ms:delay_ms(10);

使用特权

评论回复
10
hu9jj| | 2020-5-24 07:54 | 只看该作者
huangzushuimd 发表于 2020-5-24 07:37
每个采样通道可以试试如上间隔10ms:delay_ms(10);

试过间隔200ms都一样,没有变化,也许是过采样时间设置的问题。

使用特权

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

本版积分规则

个人签名:持之以恒

33

主题

995

帖子

5

粉丝