[MCU] 【ESK32-360测评】+ A/D转换及应用

jinglixixi   2020-8-12 10:39 楼主

1. A/D采集

在例程中提供A/D采集功能,它是通过采集外接的电位器来模拟电位变化,进而来获得数据的变化。此外,它通过串口通信来输出采集结果。

image-20200812103628-1.png

图1 电位器调节电位

 

经编译下载,程序的运行效果如图2所示。

image-20200812103628-2.png

图2 调整前的数据显示

 

为了改善观察效果,特添加了延时函数,修改后程序内容为:

void mdelay(unsigned int z)
{
         unsigned int x,y;
         for(x=z;x>0;x--)
                   for(y=100;y>0;y--);
}
int main(void)
{
  RETARGET_Configuration();
  ADC_Configuration();
  ADC_Cmd(HT_ADC0, ENABLE);
  ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);

  while (1)
  {
    if (gADC_SingleEndOfConversion)
    {
      printf("\rPotentiometer level is %04d \r\n", (int)gPotentiometerLevel);  //115200
    }
         mdelay(100);
  }
}

修改后的运行效果如图3所示,这样数据的变化就很便于观察了。

image-20200812103628-3.png

图3 调整后的数据显示

 

2.数据显示

前面为数据的显示,已经增添了数值显示函数,此时就可以排上用场了,实现图4显示效果的主程序如下:

int main(void)
{
  RETARGET_Configuration();
  ADC_Configuration();
  ADC_Cmd(HT_ADC0, ENABLE);
  ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);
 
  LCD_Init();
  LCD_Config();
  LCD_Clear(0x2c5c);
  LCD_BackColorSet(0x2c5c)
  LCD_TextColorSet(Yellow);
  LCD_StringLineDisplay(Line9, "     ADC=");
  while (1)
  {
    if (gADC_SingleEndOfConversion)
    {
       LCD_ShowNum(Line9,180,adc,4);
    }
         mdelay(100);
  }
}

image-20200812103628-4.png

图4 采集数据显示

 

3.波形绘制

为了能更直观地观察数据的变化趋势,绘制数据的波形曲线是一种有效的方法。

在利用前面完成的画线函数和区域填充函数的检测上,实现图5所示效果的主程序如下:

int main(void)
{
  int adc,p,q,t,l,k;
 
  RETARGET_Configuration();
  ADC_Configuration();
  ADC_Cmd(HT_ADC0, ENABLE);
  ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);
 
  LCD_Init();
  LCD_Config();
  LCD_Clear(0x2c5c);
  LCD_BackColorSet(0x2c5c);
  LCD_TextColorSet(Yellow);
  LCD_RectDraw(10, 10, 200, 300);
  LCD_DrawLine(105,12 , 105,308 ,Red);
  LCD_DrawLine(10,25 , 210,25 ,Red);
  LCD_StringLineDisplay(Line9, "  n=     adc=");
  mdelay(50000);
 
  for(t=0;t<60;t++)
  {
         l=t*5+10;
         LCD_DrawLine(210,l,214,l,Yellow);
  }
        
  for(t=0;t<10;t++)
  {
         l=t*21;    
         LCD_DrawLine(210-l,6,210-l,10,Yellow);
  }
  t=10;
  l=15;
  q=210;
  p=210;
  k=21;
  while (1)
  {
         mdelay(50000);
    if(gADC_SingleEndOfConversion)
    {
                   adc=(int)gPotentiometerLevel;
                   LCD_ShowNum(Line9,220,adc,4);
                   p=adc/21;
                   l=t+5;
                   LCD_ShowNum(Line9,60,t/5-1,3);
                   LCD_DrawLine(q,t,p,l,Yellow);
                   t=l;
                   q=p;
       
                   if(t>=305)
                   {
                      LCD_fill(11,11,199,297,0x2c5c);
                      LCD_DrawLine(105,12 , 105,308 ,Red);
                LCD_DrawLine(10,25 , 210,25 ,Red);
                t=10;
                      l=15;
                q=210;
                   }
    }
  }
}

image-20200812103628-5.png

图5 波形曲线绘制

回复评论 (6)

谢谢分享!
点赞  2020-8-12 11:27
引用: damiaa 发表于 2020-8-12 11:27 谢谢分享!

感谢支持!!!

点赞  2020-8-12 16:24

谢谢楼主分享!赞!!

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2020-8-12 16:34
引用: okhxyyo 发表于 2020-8-12 16:34 谢谢楼主分享!赞!!

感谢鼓励!!!

点赞  2020-8-12 16:39

谢谢楼主分享! 还可以用在机器人上把

多面手工程师
点赞  2020-8-13 11:38
引用: maoshen 发表于 2020-8-13 11:38 谢谢楼主分享! 还可以用在机器人上把

看用途吧,应该可以。

点赞  2020-8-14 08:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复