【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(&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, &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 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>210)
{
x=20;
y=260;
LCD_Fill(21,121,219,259,RED);
}
}
adc_ordinary_software_trigger_enable(ADC1, TRUE);
}
}</code></pre>
<p> </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> <p>AT32WB415 的ADC精度和采样率如何?</p>
wangerxian 发表于 2022-8-22 17:52
AT32WB415 的ADC精度和采样率如何?
<p>精确的需要专业设备,一般的要求还可以,能达到满量程能随动。</p>
wangerxian 发表于 2022-8-22 17:52
AT32WB415 的ADC精度和采样率如何?
<p>12位分辨率,基本就那样了,一般应用</p>
<p>楼主的帖子讲解详细,特别是有好多很美元件,象电位器、LED灯,那是相当的美。</p>
<p>楼主厉害啊,帖子讲解详细,特别是有好多精美器件</p>
<p> </p>
你记忆中的那个人 发表于 2022-8-22 21:37
楼主厉害啊,帖子讲解详细,特别是有好多精美器件
<p>感谢支持</p>
lugl4313820 发表于 2022-8-22 20:20
楼主的帖子讲解详细,特别是有好多很美元件,象电位器、LED灯,那是相当的美。
<p>哈哈,有点儿小积累。</p>
秦天qintian0303 发表于 2022-8-22 20:19
12位分辨率,基本就那样了,一般应用
<p>是的没错,最近见到有一块24位的开发板,只是没拿到手,有点遗憾了。</p>
<p>高精度的ADC都限制出口</p>
页:
[1]