【CW32L052测评】+ADC数据采集与温度测控
[复制链接]
本帖最后由 jinglixixi 于 2023-7-28 10:56 编辑
CW32L052开发板提供了3个配有滤波处理的信号采集通道,见如图1所示。
图1 数据采集电路
当以PA0来输入采集信号时,若对VDDA进行连续检测,其检测结果如图2所示,说明其检测最大值并没有达到4095,而只在4080以内。
图2 检测VDDA信号
若使信号输入端处于悬浮或接地状态,其检测结果如图3所示,说明其检测最小值可以达到0。
图3 检测悬浮或接地信号
在信号检测程序的情况下,则可显示出检测的电压值,其程序如下:
void ADC_Test(void)
{
ADC_SoftwareStartConvCmd(ENABLE);
while(CW_ADC->START_f.START);
printf("ADC value = %d\r\n", CW_ADC->RESULT0);
printf("U value = %f3.2\r\n", (CW_ADC->RESULT0)*3.3/4096);
}
int32_t main(void)
{
RCC_Configuration();
RCC_SystemCoreClockUpdate(24000000);
InitTick(24000000);
RCC_HSI_OUT();
GPIO_Configuration();
UART_Configuration();
ADC_Test_Init();
printf("\r\nADC Test Start\r\n");
while(1)
{
ADC_Test();
int i=500;
while(i--)
{
LED1_TOG;
if(f==1) BEEP_TOG;
SysTickDelay(1);
}
}
}
经程序的编译和下载,其检测结果如图4所示。
图4 显示电压值
在使用NTC热敏元件的情况下,可进行温度的测控,其电路构成如图5所示。
图5 温度测控电路
实现温度测控的程序为:
void ADC_Test(void)
{
int16_t u;
float v;
ADC_SoftwareStartConvCmd(ENABLE);
while(CW_ADC->START_f.START);
printf("ADC value = %d\r\n", CW_ADC->RESULT0);
printf("U value = %3.2f V\r\n", (CW_ADC->RESULT0)*3.3/4096);
u=CW_ADC->RESULT0;
if((u<=2042)&&(u>1644)) v=0+(2042-u)/4.0;
if((u<=1644)&&(u>1268)) v=10+(1644-u)/37.0;
if((u<=1268)&&(u>947)) v=20+(1268-u)/32.0;
if((u<=947)&&(u>692)) v=30+(947-u)/25.0;
printf("Temp value = %3.2f C\r\n", v);
if(v>24.0) f=1;
else f=0;
}
在编译和下载程序后,其检测结果如图6所示。
图6 温度检测值
|