jinglixixi 发表于 2022-8-22 09:44

【AT32WB415测评】ADC数据采集与波形绘制

<div class='showpostmsg'><p>在AT32WB415片内配了1组2M采样速率12位A/D转换器,且有8个采集通道,通过相应的例程可供测试,其效果如图1所示。</p>

<p >图1 测试效果</p>

<p >在例程中,除了ADC的初始化处理,在使用中最为关注的则是函数adc_config (),其内容如下:</p>

<pre>
<code class="language-cpp">static void adc_config(void)
{
  adc_base_config_type adc_base_struct;
  crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
  crm_adc_clock_div_set(CRM_ADC_DIV_6);
  nvic_irq_enable(ADC1_IRQn, 0, 0);
  adc_base_default_para_init(&amp;adc_base_struct);
  adc_base_struct.sequence_mode = TRUE;
  adc_base_struct.repeat_mode = FALSE;
  adc_base_struct.data_align = ADC_RIGHT_ALIGNMENT;
  adc_base_struct.ordinary_channel_length = 2;
  adc_base_config(ADC1, &amp;adc_base_struct);
  adc_ordinary_channel_set(ADC1, ADC_CHANNEL_0, 1, ADC_SAMPLETIME_239_5);
  adc_ordinary_channel_set(ADC1, ADC_CHANNEL_1, 2, ADC_SAMPLETIME_239_5);
  adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);
  adc_dma_mode_enable(ADC1, TRUE);
  adc_voltage_monitor_enable(ADC1, ADC_VMONITOR_SINGLE_ORDINARY);
  adc_voltage_monitor_threshold_value_set(ADC1, 0xBBB, 0xAAA);
  adc_voltage_monitor_single_channel_select(ADC1, ADC_CHANNEL_1);
  adc_interrupt_enable(ADC1, ADC_VMOR_INT, TRUE);
  adc_enable(ADC1, TRUE);
  adc_calibration_init(ADC1);
  while(adc_calibration_init_status_get(ADC1));
  adc_calibration_start(ADC1);
  while(adc_calibration_status_get(ADC1));
}</code></pre>

<p >因此可知,它配置了2个数据采集通道,即ADC0和ADC1。而实际使用的只是ADC1,即使用PA1来采集外部的模拟信号。</p>

<p >为实现检测数据的波形绘制功能,在TFT屏显示程序的基础上,略加修改即可实现图2和图3所示的运行效果。</p>

<p >值得指出的是,由于PA0和PA1被ADC所占用,故原TFT屏所使用的引脚改为PC0和PC1。</p>

<p >电位器被接到PA1上,见图3所示。</p>

<p >受屏幕尺寸的限制,数据波形被限定在指定的窗口内,其范围是(20, 120)~(220, 260)之内。每个数据的间隔为4个像素点,绘制曲线的比例1/30。</p>

<p >图2&nbsp; VDD电压检测</p>

<p >图3 电位器调节曲线</p>

<p >实现波形曲线绘制功能的主程序为:</p>

<pre>
<code class="language-cpp">int main(void)
{
    __IO uint32_t index = 0;
    uint16_t u= 0,x,y,yp;
    nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
    system_clock_config();
    gpio_config();
    dma_config();
    adc_config();
    app_tft_init();
    tft_Init();
    LCD_Clear(RED);
    LCD_Fill(0,0,239,50,WHITE);
    show_tb(60,0,0);
    delay_ms(1000);
    BACK_COLOR=WHITE;
    POINT_COLOR=RED;
    LCD_ShowChar(80,16,'A',1);
    LCD_ShowChar(90,16,'D',1);
    LCD_ShowChar(100,16,'C',1);
    LCD_Fill(0,287,239,319,WHITE);
    BACK_COLOR=WHITE;
    POINT_COLOR=RED;
    LCD_ShowString(60,294,"BY: jinglixixi");
    BACK_COLOR=RED;
    POINT_COLOR=YELLOW;
    LCD_ShowString(40,70,"ADC=");
    LCD_ShowString(40,90,"U=    .   V");
    LCD_DrawRectangle(20, 120, 220, 260);
    x=20;
    y=260;
    while(1)
    {
       delay_sec(1);
       if(vmor_flag_index == 1)
       {
              vmor_flag_index = 0;
              u=adc1_ordinary_valuetab;
              LCD_Show2Num(80,70,u,4);
              u=3.3*u/4.095;
              LCD_Show2Num(80,90,u/1000,1);
              LCD_Show2Num(96,90,u%1000,3);
              yp=260-u/30;
              LCD_DrawLine(x, y, x+4, yp);
              y=yp;
              x=x+4;
              if(x&gt;210)
              {
                    x=20;
                    y=260;
                    LCD_Fill(21,121,219,259,RED);
              }
       }
       adc_ordinary_software_trigger_enable(ADC1, TRUE);
    }
}</code></pre>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

wangerxian 发表于 2022-8-22 17:52

<p>AT32WB415 的ADC精度和采样率如何?</p>

jinglixixi 发表于 2022-8-22 18:44

wangerxian 发表于 2022-8-22 17:52
AT32WB415 的ADC精度和采样率如何?

<p>精确的需要专业设备,一般的要求还可以,能达到满量程能随动。</p>

秦天qintian0303 发表于 2022-8-22 20:19

wangerxian 发表于 2022-8-22 17:52
AT32WB415 的ADC精度和采样率如何?

<p>12位分辨率,基本就那样了,一般应用</p>

lugl4313820 发表于 2022-8-22 20:20

<p>楼主的帖子讲解详细,特别是有好多很美元件,象电位器、LED灯,那是相当的美。</p>

你记忆中的那个人 发表于 2022-8-22 21:37

<p>楼主厉害啊,帖子讲解详细,特别是有好多精美器件</p>

<p>&nbsp;</p>

jinglixixi 发表于 2022-8-23 09:31

你记忆中的那个人 发表于 2022-8-22 21:37
楼主厉害啊,帖子讲解详细,特别是有好多精美器件

&nbsp;

<p>感谢支持</p>

jinglixixi 发表于 2022-8-23 09:32

lugl4313820 发表于 2022-8-22 20:20
楼主的帖子讲解详细,特别是有好多很美元件,象电位器、LED灯,那是相当的美。

<p>哈哈,有点儿小积累。</p>

jinglixixi 发表于 2022-8-23 09:34

秦天qintian0303 发表于 2022-8-22 20:19
12位分辨率,基本就那样了,一般应用

<p>是的没错,最近见到有一块24位的开发板,只是没拿到手,有点遗憾了。</p>

秦天qintian0303 发表于 2022-8-23 15:39

<p>高精度的ADC都限制出口</p>
页: [1]
查看完整版本: 【AT32WB415测评】ADC数据采集与波形绘制