kangkls 发表于 2022-3-12 13:54

沁恒CH583的AD测试

<p>通过usb下载程序后,断电,把串口连接到开发板,电源指示灯微亮,可是程序并不运行。</p>

<p>打开串口助手,没有任何信息,配置好串口后,接通usb电源后,电源等变得更亮了。</p>

<p>串口助手也显示</p>

<p>Start @ChipID=82</p>

<p>1.Temperature sampling...<br />
2805&nbsp;<br />
2806&nbsp;<br />
2807&nbsp;<br />
2805&nbsp;<br />
2804&nbsp;<br />
2806&nbsp;<br />
2804&nbsp;<br />
2805&nbsp;<br />
2807&nbsp;<br />
2806&nbsp;<br />
2805&nbsp;<br />
2807&nbsp;<br />
2805&nbsp;<br />
2805&nbsp;<br />
2806&nbsp;<br />
2805&nbsp;<br />
2806&nbsp;<br />
2807&nbsp;<br />
2804&nbsp;<br />
2806&nbsp;</p>

<p>连续20次的采样,最小的2804,最大的2807</p>

<p>12位的AD,最低两位还是丢弃,当10位的AD来用吧,有的场合也够用了。</p>

<p>这个例子测试的是内部温度的ADC,连续20次读取温度的AD值。</p>

<p>&nbsp;</p>

kangkls 发表于 2022-3-12 13:57

<p>发完上个帖子,就想再看一下AD吧,就按了下reset。</p>

<p>有一次的连续20次AD采样,会有奇迹出现吗?</p>

<p>2807&nbsp;<br />
2804&nbsp;<br />
2806&nbsp;<br />
Start @ChipID=82</p>

<p>1.Temperature sampling...<br />
2808&nbsp;<br />
2806&nbsp;<br />
2809&nbsp;<br />
2807&nbsp;<br />
2805&nbsp;<br />
2811&nbsp;<br />
2806&nbsp;<br />
2805&nbsp;<br />
2809&nbsp;<br />
2809&nbsp;<br />
2805&nbsp;<br />
2809&nbsp;<br />
2808&nbsp;<br />
2808&nbsp;<br />
2811&nbsp;<br />
2808&nbsp;<br />
2806&nbsp;<br />
2809&nbsp;<br />
2808&nbsp;<br />
2807&nbsp;</p>

<p>&nbsp;</p>

kangkls 发表于 2022-3-12 13:59

<p>估计是程序运行,芯片温度升高,AD采样值从2805到2811,整体增加了,这样的话,12位的AD只能用9位了吧</p>

kangkls 发表于 2022-3-12 14:08

<p>再读一次</p>

<p>Start @ChipID=82</p>

<p>1.Temperature sampling...<br />
2810&nbsp;<br />
2807&nbsp;<br />
2811&nbsp;<br />
2809&nbsp;<br />
2807&nbsp;<br />
2811&nbsp;<br />
2807&nbsp;<br />
2809&nbsp;<br />
2809&nbsp;<br />
2810&nbsp;<br />
2809&nbsp;<br />
2809&nbsp;<br />
2811&nbsp;<br />
2809&nbsp;<br />
2811&nbsp;<br />
2809&nbsp;<br />
2809&nbsp;<br />
2809&nbsp;<br />
2808&nbsp;<br />
2810&nbsp;</p>

<p>内部温度AD值从2807到2811。</p>

kangkls 发表于 2022-3-12 15:11

<p>内部温度采样就这样了。</p>

<p>下边看下第一个AD通道的情况,接一个电阻</p>

<p>&nbsp;</p>

<p>&nbsp; /* 单通道采样:选择adc通道0做采样,对应 PA4引脚, 带数据校准功能 */<br />
&nbsp; PRINT( &quot;\n2.Single channel sampling...\n&quot; );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_4, GPIO_ModeIN_Floating );<br />
&nbsp; ADC_ExtSingleChSampInit( SampleFreq_3_2, ADC_PGA_0 );</p>

<p>&nbsp; GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeIN_Floating );<br />
&nbsp; RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中<br />
&nbsp; PRINT( &quot;RoughCalib_Value =%d \n&quot;, RoughCalib_Value );</p>

<p>&nbsp; ADC_ChannelCfg( 0 );</p>

<p>&nbsp; for( i = 0; i &lt; 20; i++ )<br />
&nbsp; {<br />
&nbsp; &nbsp; abcBuff = ADC_ExcutSingleConver() + RoughCalib_Value; &nbsp; &nbsp; &nbsp;// 连续采样20次<br />
&nbsp; }<br />
&nbsp; for( i = 0; i &lt; 20; i++ )<br />
&nbsp; {<br />
&nbsp; &nbsp; PRINT( &quot;%d \n&quot;, abcBuff ); // 注意:由于ADC内部偏差的存在,当采样电压在所选增益范围极限附近的时候,可能会出现数据溢出的现象<br />
&nbsp; }</p>

littleshrimp 发表于 2022-3-12 15:37

kangkls 发表于 2022-3-12 13:59
估计是程序运行,芯片温度升高,AD采样值从2805到2811,整体增加了,这样的话,12位的AD只能用9位了吧

<p>有跳动很正常,电源、外部干扰这些都会影响ADC的测量。你把AD值转换成对应的温度看看,感觉读取的不像温度呢。</p>

kangkls 发表于 2022-3-12 22:00

littleshrimp 发表于 2022-3-12 15:37
有跳动很正常,电源、外部干扰这些都会影响ADC的测量。你把AD值转换成对应的温度看看,感觉读取的不像温 ...

<p>Start @ChipID=82</p>

<p>1.Temperature sampling...<br />
第1次采样的AD数值2802 对应的温度3&nbsp;<br />
第2次采样的AD数值2804 对应的温度4&nbsp;<br />
第3次采样的AD数值2804 对应的温度4&nbsp;<br />
第4次采样的AD数值2802 对应的温度3&nbsp;<br />
第5次采样的AD数值2805 对应的温度4&nbsp;<br />
第6次采样的AD数值2804 对应的温度4&nbsp;<br />
第7次采样的AD数值2801 对应的温度3&nbsp;<br />
第8次采样的AD数值2802 对应的温度3&nbsp;<br />
第9次采样的AD数值2804 对应的温度4&nbsp;<br />
第10次采样的AD数值2805 对应的温度4&nbsp;<br />
第11次采样的AD数值2805 对应的温度4&nbsp;<br />
第12次采样的AD数值2802 对应的温度3&nbsp;<br />
第13次采样的AD数值2804 对应的温度4&nbsp;<br />
第14次采样的AD数值2802 对应的温度3&nbsp;<br />
第15次采样的AD数值2804 对应的温度4&nbsp;<br />
第16次采样的AD数值2804 对应的温度4&nbsp;<br />
第17次采样的AD数值2801 对应的温度3&nbsp;<br />
第18次采样的AD数值2804 对应的温度4&nbsp;<br />
第19次采样的AD数值2802 对应的温度3&nbsp;<br />
第20次采样的AD数值2805 对应的温度4&nbsp;</p>

kangkls 发表于 2022-3-12 22:01

littleshrimp 发表于 2022-3-12 15:37
有跳动很正常,电源、外部干扰这些都会影响ADC的测量。你把AD值转换成对应的温度看看,感觉读取的不像温 ...

<p>对应的程序</p>

<p>&nbsp; /* 温度采样并输出, 包含数据校准 */<br />
&nbsp; PRINT( &quot;\n1.Temperature sampling...\n&quot; );<br />
&nbsp; ADC_InterTSSampInit();<br />
&nbsp; RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到变量 RoughCalib_Value中,注意这个变量需要定义为有符号变量</p>

<p>&nbsp; for( i = 0; i &lt; 20; i++ )<br />
&nbsp; {<br />
&nbsp; &nbsp; abcBuff = ADC_ExcutSingleConver() + RoughCalib_Value; &nbsp; &nbsp; &nbsp;// 连续采样20次<br />
&nbsp; }<br />
&nbsp; for( i = 0; i &lt; 20; i++ )<br />
&nbsp; {<br />
&nbsp; &nbsp; PRINT( &quot;第%d次采样的AD数值%d 对应的温度%d \n&quot;, (i+1),abcBuff,ADC_GetCurrentTS(abcBuff) );<br />
&nbsp; }</p>

kangkls 发表于 2022-3-12 22:01

<p>这个3度,4度,我认为也是不对,应该再有个校正值。</p>

kangkls 发表于 2022-3-12 22:04

<p>又读了两次温度</p>

<p><br />
1.Temperature sampling...<br />
第1次采样的AD数值2811 对应的温度5&nbsp;<br />
第2次采样的AD数值2810 对应的温度5&nbsp;<br />
第3次采样的AD数值2809 对应的温度5&nbsp;<br />
第4次采样的AD数值2813 对应的温度5&nbsp;<br />
第5次采样的AD数值2811 对应的温度5&nbsp;<br />
第6次采样的AD数值2810 对应的温度5&nbsp;<br />
第7次采样的AD数值2813 对应的温度5&nbsp;<br />
第8次采样的AD数值2811 对应的温度5&nbsp;<br />
第9次采样的AD数值2811 对应的温度5&nbsp;<br />
第10次采样的AD数值2809 对应的温度5&nbsp;<br />
第11次采样的AD数值2815 对应的温度6&nbsp;<br />
第12次采样的AD数值2809 对应的温度5&nbsp;<br />
第13次采样的AD数值2808 对应的温度5&nbsp;<br />
第14次采样的AD数值2811 对应的温度5&nbsp;<br />
第15次采样的AD数值2811 对应的温度5&nbsp;<br />
第16次采样的AD数值2812 对应的温度5&nbsp;<br />
第17次采样的AD数值2814 对应的温度5&nbsp;<br />
第18次采样的AD数值2811 对应的温度5&nbsp;<br />
第19次采样的AD数值2814 对应的温度5&nbsp;<br />
第20次采样的AD数值2813 对应的温度5&nbsp;<br />
Start @ChipID=82</p>

<p>1.Temperature sampling...<br />
第1次采样的AD数值2810 对应的温度5&nbsp;<br />
第2次采样的AD数值2807 对应的温度5&nbsp;<br />
第3次采样的AD数值2812 对应的温度5&nbsp;<br />
第4次采样的AD数值2815 对应的温度6&nbsp;<br />
第5次采样的AD数值2812 对应的温度5&nbsp;<br />
第6次采样的AD数值2810 对应的温度5&nbsp;<br />
第7次采样的AD数值2811 对应的温度5&nbsp;<br />
第8次采样的AD数值2815 对应的温度6&nbsp;<br />
第9次采样的AD数值2810 对应的温度5&nbsp;<br />
第10次采样的AD数值2812 对应的温度5&nbsp;<br />
第11次采样的AD数值2811 对应的温度5&nbsp;<br />
第12次采样的AD数值2810 对应的温度5&nbsp;<br />
第13次采样的AD数值2814 对应的温度5&nbsp;<br />
第14次采样的AD数值2812 对应的温度5&nbsp;<br />
第15次采样的AD数值2811 对应的温度5&nbsp;<br />
第16次采样的AD数值2810 对应的温度5&nbsp;<br />
第17次采样的AD数值2811 对应的温度5&nbsp;<br />
第18次采样的AD数值2815 对应的温度6&nbsp;<br />
第19次采样的AD数值2812 对应的温度5&nbsp;<br />
第20次采样的AD数值2810 对应的温度5&nbsp;<br />
&nbsp;</p>

littleshrimp 发表于 2022-3-12 22:35

kangkls 发表于 2022-3-12 22:01
这个3度,4度,我认为也是不对,应该再有个校正值。

<p>我觉得更像是你的通道没选对,测量到的可能是一个悬空的AD输入引脚。</p>

littleshrimp 发表于 2022-3-12 22:38

kangkls 发表于 2022-3-12 22:04
又读了两次温度


1.Temperature sampling...
第1次采样的AD数值2811 对应的温度5&nbsp;
第2次采样的A ...

<p>或者你测量时用手机或者其他东西加热芯片,看看温度有没有明显变化。</p>

kangkls 发表于 2022-3-13 10:40

littleshrimp 发表于 2022-3-12 22:35
我觉得更像是你的通道没选对,测量到的可能是一个悬空的AD输入引脚。

<p>芯片内置温度传感器温度,程序如下,都是例程。</p>

<p>&nbsp;</p>

<p>/* 温度采样并输出, 包含数据校准 */<br />
&nbsp; PRINT( &quot;\n1.Temperature sampling...\n&quot; );<br />
&nbsp; ADC_InterTSSampInit();<br />
&nbsp; RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到变量 RoughCalib_Value中,注意这个变量需要定义为有符号变量</p>

<p>&nbsp; for( i = 0; i &lt; 20; i++ )<br />
&nbsp; {<br />
&nbsp; &nbsp; abcBuff = ADC_ExcutSingleConver() + RoughCalib_Value; &nbsp; &nbsp; &nbsp;// 连续采样20次<br />
&nbsp; }<br />
&nbsp; for( i = 0; i &lt; 20; i++ )<br />
&nbsp; {<br />
&nbsp; &nbsp; PRINT( &quot;第%d次采样的AD数值%d 对应的温度%d \n&quot;, (i+1),abcBuff,ADC_GetCurrentTS(abcBuff) );<br />
&nbsp; }</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>/*******************************************************************************<br />
* Function Name &nbsp;: ADC_InterTSSampInit<br />
* Description &nbsp; &nbsp;: 内置温度传感器采样初始化<br />
* Input &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: None<br />
* Return &nbsp; &nbsp; &nbsp; &nbsp; : None<br />
*******************************************************************************/<br />
void ADC_InterTSSampInit( void )<br />
{<br />
&nbsp;&nbsp; &nbsp;R8_TKEY_CFG &amp;= ~RB_TKEY_PWR_ON;<br />
&nbsp; &nbsp; R8_TEM_SENSOR = RB_TEM_SEN_PWR_ON;<br />
&nbsp; &nbsp; R8_ADC_CHANNEL = CH_INTE_VTEMP;<br />
&nbsp; &nbsp; R8_ADC_CFG = RB_ADC_POWER_ON&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;\<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |RB_ADC_DIFF_EN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |( 3&lt;&lt;4 )&nbsp;&nbsp; &nbsp;;<br />
}</p>

littleshrimp 发表于 2022-3-13 18:27

kangkls 发表于 2022-3-13 10:40
芯片内置温度传感器温度,程序如下,都是例程。

&nbsp;

/* 温度采样并输出, 包含数据校准 */
&nb ...

<p>例程里直接输出温度了吗?看一下是不是转换温度计算有误,或者加热芯片看一下温度变化是不是正常。</p>

kangkls 发表于 2022-3-13 21:15

littleshrimp 发表于 2022-3-13 18:27
例程里直接输出温度了吗?看一下是不是转换温度计算有误,或者加热芯片看一下温度变化是不是正常。

<p>由这个函数实现温度转换ADC_GetCurrentTS,都是自带例程的函数,未做更改<br />
/*******************************************************************************<br />
* Function Name &nbsp;: ADC_GetCurrentTS<br />
* Description &nbsp; &nbsp;: 获取当前采样的温度值(℃)<br />
* Input &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: ts_v:当前温度传感器采样输出<br />
* Return &nbsp; &nbsp; &nbsp; &nbsp; : 转换后的温度值(℃)<br />
*******************************************************************************/<br />
int ADC_GetCurrentTS( UINT16 ts_v )<br />
{<br />
&nbsp; int &nbsp;C25;<br />
&nbsp; int &nbsp;cal;</p>

<p>&nbsp; C25 = (*((PUINT32)ROM_CFG_TMP_25C));<br />
&nbsp; cal = ( ( (ts_v * 1050) + 2048 ) &gt;&gt; 12 ) + ( 1050 &gt;&gt; 1 );<br />
&nbsp; cal = 25 + ((cal - C25)*10/14);<br />
&nbsp; return ( &nbsp;cal );<br />
}<br />
&nbsp;</p>

littleshrimp 发表于 2022-3-13 21:31

kangkls 发表于 2022-3-13 21:15
由这个函数实现温度转换ADC_GetCurrentTS,都是自带例程的函数,未做更改
/*************************** ...

<p>你实验的环境温度真的只有5摄氏度左右吗?</p>

kangkls 发表于 2022-3-14 09:22

littleshrimp 发表于 2022-3-13 21:31
你实验的环境温度真的只有5摄氏度左右吗?

<p>肯定不是5度,至少15度吧。</p>

<p>&nbsp;</p>

kangkls 发表于 2022-3-14 09:22

littleshrimp 发表于 2022-3-13 21:31
你实验的环境温度真的只有5摄氏度左右吗?

<p>厂家说这个是个相对值,不是绝对值</p>

lugl4313820 发表于 2022-3-14 13:11

<p>我原来也做过内部温度转换,厂家说,这个较正还在开发中。。。。</p>

WCH_Risc5 发表于 2022-3-14 17:14

<p>582ad测温在绝对温度上目前还需要自己手动校准,如测试转换出的数据为5度,而实际温度为15度,则将结果加10.另外关于ad是12位是全部用到了不,只是在测温的时候你温度达不到那么高,可以测量电压值试试。</p>
页: [1] 2
查看完整版本: 沁恒CH583的AD测试