【GD32L233C-START评测】+ADC采集PT1000获得温度
[复制链接]
- 前言
前面已经把显示和串口打印数据调试完成,这样对接下来的工作就很有利,可以很直观的看见ADC采样的值。我们选用的PA1,是ADC1通道。准备用内部的VREFINT参考电压来校准采样值。默认这个电压是1.2V。
- 初始化ADC功能
void adc_config(void)
{
adc_special_function_config(ADC_SCAN_MODE, ENABLE);
/* ADC data alignment config */
adc_data_alignment_config(ADC_DATAALIGN_RIGHT); //ADC值靠右对其
/* ADC channel length config */
// adc_channel_length_config(ADC_REGULAR_CHANNEL, 1U); //通道长度设置?
/* ADC channel length config */
adc_channel_length_config(ADC_INSERTED_CHANNEL, 2);
/* ADC temperature sensor channel config */
adc_inserted_channel_config(0U, ADC_CHANNEL_1, ADC_SAMPLETIME_239POINT5);
/* ADC internal reference voltage channel config */
adc_inserted_channel_config(1U, ADC_CHANNEL_17, ADC_SAMPLETIME_239POINT5);
/* ADC trigger config */
adc_external_trigger_source_config(ADC_INSERTED_CHANNEL, ADC_EXTTRIG_INSERTED_NONE);
//adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE); //软件触发方式
/* ADC external trigger config */
//adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
adc_external_trigger_config(ADC_INSERTED_CHANNEL, ENABLE);
adc_channel_16_to_19(ADC_INTERNAL_CHANNEL_SWITCH, ENABLE); //使能内部参考电平通道
/* enable ADC interface */
adc_enable();
delay_1ms(1U);
/* ADC calibration and reset calibration */
adc_calibration_enable();
}
- 获取PT1000采集温度值
初始化函数在例程的基础上修改了一下,采集两路ADC值。
- PA1 ADC1的值
- 2. 内部参考电平值
/**********************************************************
*
* 函数名: static uint32_t adc_get_PT1000_value( void )
* 功 能: 获取PT1000电压
* 说 明:
* 设计人:
* 设计时间:
* 入口参数:无
* 出口参数:无
***********************************************************/
static uint32_t adc_get_PT1000_value( void )
{
uint32_t voltage = 0;
uint32_t temp0,temp1;
adc_software_trigger_enable(ADC_INSERTED_CHANNEL);
while (!adc_flag_get(ADC_FLAG_EOC)); //ADC_FLAG_EOIC
adc_flag_clear(ADC_FLAG_EOC);
temp0 = ADC_IDATA0; //PA1端口
temp1 = ADC_IDATA1; //内部参考电压通道 1.2V
printf("PA1端口为:%4d \r\n",temp0);
printf("内部参考电压为:%4d \r\n",temp1);
voltage = temp0*120/temp1; //--对应实际电压*100
printf("电压为:%4d \r\n",voltage);
return voltage;
}
通过软件触发,然后去读寄存器的值,就能获得当前ADC的值。
然后对采集值进行平均计算,减少数据误差
通过串口打印数据获取采集信息。
在LCD屏上进行显示。
4.下一步计划
准备试一下FMC功能,通过内部FLASH保存一些传感器是参数值,例如传感器编组,报警上下限等。。。
|