STC8G数据采集跳变为0
1、原先用STC15W408AS单片机做控制芯片,数据采集没有问题;将采样时间设长些
一次完整的 A/D 时间含【ADC输入通道的切换时间+采样的时间+关闭采样的时间+固定转换 - ADC/比较器,DMA支持的12位ADC,轨到轨比较器,DAC - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
如下,MCU-GND 是 ADC的模拟地
1、原先用STC15W408AS单片机做控制芯片,数据采集没有问题;
2、因为STC15W408AS-SOP20与STC8G1K08-SOP20管脚一样,原位替换原单片机,单片机配置及初始化升级程序;
3、开机几分钟内上报数据准确,时间长(几分钟)了出现AD值跳变为0现象,时间越长,出现概率越大;
4、读内部精准电压,没有重新跳0现象;
5、批量产品,现象一致
attach://40277.jpg
这个吗?speed=1 yzhja 发表于 2024-4-1 23:10
这个吗?speed=1
SYSclk=11.0592MHz 本帖最后由 梁工 于 2024-4-2 23:35 编辑
yzhja 发表于 2024-4-1 23:04
1、原先用STC15W408AS单片机做控制芯片,数据采集没有问题;
2、因为STC15W408AS-SOP20与STC8G1K08-SOP20管 ...
STC8G的ADC初始化可以控制好几个时间参数,比STC15的ADC好多了。
ADC输入端对地一定要接1nF~100nF的电容,最好串联一个1K~3K的电阻。
开机时间越长,出现几率越大,可能跟你的信号稳定性有关,可以使用STC的官方例子测试一下。
读内部精准电压,没有重新跳0现象,更说明是跟输入信号有关(也跟外部电路有关)。
STC8G的ADC初始化:
#define ADC_START (1<<6) /* 自动清0 */
#define ADC_FLAG (1<<5) /* 软件清0 */
#define ADC_SPEED 1 /* 0~15, ADC时钟 = SYSclk/2/(n+1) */
#define RES_FMT (1<<5) /* ADC结果格式 0: 左对齐, ADC_RES: D9 D8 D7 D6 D5 D4 D3 D2, ADC_RESL: D1 D0 000000 */
/* 1: 右对齐, ADC_RES: 000000D9 D8, ADC_RESL: D7 D6 D5 D4 D3 D2 D1 D0 */
#define CSSETUP (0<<7) /* 0~1,ADC通道选择时间 0: 1个ADC时钟, 1: 2个ADC时钟,默认0(默认1个ADC时钟) */
#define CSHOLD (1<<5) /* 0~3,ADC通道选择保持时间(n+1)个ADC时钟, 默认1(默认2个ADC时钟) */
#define SMPDUTY 20 /* 10~31, ADC模拟信号采样时间(n+1)个ADC时钟, 默认10(默认11个ADC时钟) */
/* ADC转换时间: 10位ADC固定为10个ADC时钟, 12位ADC固定为12个ADC时钟. */
P_SW2 |=0x80; //访问XSFR
P1n_pure_input(0xff); //设置要做ADC的IO做高阻输入
P3n_pure_input(0x7f); //设置要做ADC的IO做高阻输入
ADC_CONTR = 0x80 + 0; //ADC on + channel
ADCCFG = RES_FMT + ADC_SPEED;
ADCTIM = CSSETUP + CSHOLD + SMPDUTY;
谢谢!输入端加了10K//0.1uF。
我反复设置参数,好像效果不大,机器温度高了就频繁出现跳0现象,好在有规律,我用软件方法把它剔除了。
奇怪的是:STC15W没有跳0现象 梁工 发表于 2024-4-2 23:32
STC8G的ADC初始化可以控制好几个时间参数,比STC15的ADC好多了。
ADC输入端对地一定要接1nF~100nF的电容, ...
梁工:您好!
页:
[1]
2