完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我们产品用了芯片内部温度采集,但是发现批量生产时有一些时-233度,有些是-23度,有些是30度,请问这种有没有办法统一一个参考点(比如就是25度作为一个参考点),如何修改?
|
|
相关推荐
4个回答
|
|
内部的温度测量,是依赖于 ADC ,
请确保ADC 本身测量没有问题, 比如当IO 的输入电平,高于芯片的供电电压时候, 将会影响到ADC 的测量结果, 对于ch578/579 如果使能的ADC 的粗调 值进行修正,请确保PA5 在校准时候配置为高阻输入,且外部也是高阻态, 否则将可能影响到 ADC 的粗调结果,从而进一步影响到ADC的测量结果. 另外,也可将具体的测量温度的代码发我邮箱zxy@wch.cn,我们进一步排查. |
|
|
|
麻烦帮忙看一下ADC采集温度代码是否有问题,代码如下所示:
#include "CH57x_common.h" #include "adc.h" signed short RoughCalib_Value=0;// ADC粗调偏差值 /******************************************************************************* * Function Name : ADC_Init * Description : ADC初始化函数 * Input : None * Output : None * Return : None *******************************************************************************/ void ADC_Init(void) { /* 温度采样并输出, 包含数据粗校准 */ PRINT( "n1.Temperature sampling...n"); ADC_InterTSSampInit(); RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到变量 RoughCalib_Value中,注意这个变量需要定义为有符号变量 } /******************************************************************************* * Function Name : Get_Adc_Average * Description : 获取内部温度通道的转换值,取times次,然后平均 * Input : times:获取次数 * Output : None * Return : 内部温度通道的times次转换结果平均值 *******************************************************************************/ uint16_t Get_Adc_Average(uint8_t times) { uint32_t temp_val=0; uint8_t t; for(t=0;t{ temp_val+=ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次 } return temp_val/times; } /******************************************************************************* * Function Name : Get_Adc_Average * Description : 获取温度 * Input : None * Output : None * Return : 内部温度通道的times次转换结果平均值 *******************************************************************************/ uint8_t Get_Temprate(void) { int temp=0; temp=ADC_GetCurrentTS(Get_Adc_Average(20)); if(temp<0) temp=256+temp; PRINT("temp:%d 'crn",temp); return temp; } |
|
|
|
同样的问题,我也碰到了。
/* 温度采样并输出, 包含数据校准 */ PRINT( "n1.Temperature sampling...n" ); ADC_InterTSSampInit(); RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到变量 RoughCalib_Value中,注意这个变量需要定义为有符号变量 while(1) { for( i = 0; i < 20; i++ ) { ababab = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次 } for( i = 0; i < 20; i++ ) { PRINT( "%d n", ababab ); } } |
|
|
|
从你给出的这个数据,你用的应该不是579吧,用的是573或者是582,你是怎么给芯片改变温度的呢,外部温度没有明显变化的情况下,adc采样出的值基本不会有太大的变化的。
|
|
|
|
只有小组成员才能发言,加入小组>>
477 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2874 浏览 2 评论
2361 浏览 1 评论
818浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
645浏览 1评论
500浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
365浏览 1评论
642浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 00:40 , Processed in 1.228133 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号