【AB32VG1开发板测评】A/D采集及显示
<p class="paragraph" style="margin-top:12px; margin-bottom:12px; text-align:justify">AB32VG1 有 16 个ADC通道,精度为 10 bit ,且有100k 的内部上拉电阻,其最大采样速度为 78k/s。</p><p>为进行A/D采集,可对硬件加以设置,见图1所示,随后在图2的对话框中选取“保存”。</p>
<p> </p>
<p>图1 硬件配置</p>
<p> </p>
<p>图2 保存配置</p>
<p>由资料可知adc0是与 PA5相对于的,因此在测试过程中将外部的模拟信号连接到该引脚即可。</p>
<p>在编程时,需在程序首部作如下的定义:</p>
<p>#define ADC_DEV_NAME "adc0"</p>
<p>#define ADC_DEV_CHANNEL 0</p>
<p>此外,在程序中还需调用rt_device_find()函数来查找设备以获取设备句柄,调用rt_adc_enable()函数来使能ADC设备,调用rt_adc_read()函数来读取ADC设备及调用rt_adc_ disable ()函数来关闭ADC设备.</p>
<p>结合前面已介绍的OLED屏显示功能,即可将A/D的采样值直接显示出来。</p>
<p>实现数据采集与显示的主程序如下:</p>
<pre>
<code class="language-cpp">int main(void)
{
uint32_t cnt = 0;
rt_adc_device_t adc_dev;
rt_err_t ret = RT_EOK;
rt_uint32_t value_sum,vol,vol_ave,ii;
rt_uint32_t value,CONVERT_BITS=1023;
rt_uint32_t REFER_VOLTAGE=33,
pin = rt_pin_get("PE.1");
rt_pin_mode(pin, PIN_MODE_OUTPUT);
pin_cs = rt_pin_get("PA.0");
pin_scl = rt_pin_get("PE.3");
pin_sda = rt_pin_get("PE.2");
rt_pin_mode(pin_cs, PIN_MODE_OUTPUT);
rt_pin_mode(pin_scl, PIN_MODE_OUTPUT);
rt_pin_mode(pin_sda, PIN_MODE_OUTPUT);
rt_pin_write(pin_cs, PIN_HIGH);
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"AB32VG1 RISC-V",16);
OLED_ShowString(0,2,"OLED & A/D",16);
rt_thread_mdelay(2000);
OLED_Clear();
adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
if (adc_dev == RT_NULL)
{
OLED_ShowString(0,0,"can't find",16);
while(1);
}
else{
ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
}
while(1)
{
value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
rt_kprintf("\nthe value is :%d \n", value);
OLED_ShowString(0,2,"value=",16);
OLED_ShowNum(50,2,value,5,16);
vol = value * REFER_VOLTAGE /CONVERT_BITS;
OLED_ShowString(0,0,"voltage= . V",16);
OLED_ShowNum(64,0,vol / 10,1,16);
OLED_ShowNum(80,0,vol % 10,1,16);
rt_pin_write(pin, PIN_LOW);
rt_thread_mdelay(500);
rt_pin_write(pin, PIN_HIGH);
rt_thread_mdelay(500);
}
}</code></pre>
<p>经程序的编译与下载,其运行效果如图2所示。</p>
<p> </p>
<p>图2 运行效果</p>
<p> </p>
<p>为了能动态地改变模拟信号量,这里是将电位器连接到PA5,通过调节电位器就可改变采样信号值。此外,为了能直观地读取采集信号的电位值,还通过转换处理完成了电压值的显示。</p>
<p>有了A/D采集功能,我们通过它来连接相应的模拟信号传感器来感知周围环境的状态以便进行相应的处理。</p>
<p>那个电位器看着很炫酷</p>
<p>电压值的显示的怎么样,精度如何</p>
Jacktang 发表于 2021-9-11 16:54
那个电位器看着很炫酷
电压值的显示的怎么样,精度如何
<p>一般的使用还是可以的,为省事只显示了一位小数。</p>
<p>我也看到手册里提到上拉电阻,感觉给ADC配100K上拉电阻挺奇怪的,你试过没,如果输入悬空测量的结果会是1023吗?</p> littleshrimp 发表于 2021-9-12 02:35
我也看到手册里提到上拉电阻,感觉给ADC配100K上拉电阻挺奇怪的,你试过没,如果输入悬空测量的结果会是102 ...
<p>有空试试,一般是无需配上拉电阻的,除非是I/O口进行输入检测。</p>
页:
[1]