188610329 发表于 2021-9-27 18:28 刚试了下,烧录器5V直接供电单片机和LCD1602,断开12V升压SX1308的5V供电。ADC数值非常稳定,一点不跳动。但一接SX1308的供电(没有如何负载),ADC马上不稳定。SX1308开关频率是固定1.2M,看来需要重新布局PCB降低干扰,或更换频率低的升压IC |
yinnan128 发表于 2021-9-28 10:19 1.19V是STC8G内部参考电压值 1.27V是STC15W内部参考电压值 |
Y_G_G 发表于 2021-9-28 01:14 1.19V这个电压是怎么来的呢? |
yinnan128 发表于 2021-9-27 17:29 对的 第一校准之后,把当前的内部参考电压写入EEPROM之后,以后,不管VCC是多少,都可以通过内部参考电压来测量VCC,精度就和8G系列是一样的了 不推荐,太麻烦了 但如果你是一定要这么做,那最好是增加一个校准程序和按键或者串口通讯之类的,方便一次性完成和批量生产 |
188610329 发表于 2021-9-27 18:28 不知道你想说什么 15系列和8系列在内部参考电压的使用上是有本质区别的 通过内部参考电压测量VCC不需要进行两次的ADC,只要进行一次内部参考的ADC就可以知道当前的VCC是多少了,当你得到内部参考电压的数字量之后,再和1.19V进行运算,就可以知道当前的VCC是多少了 |
Y_G_G 发表于 2021-9-27 15:01 8 系列内部 参考电压,现对 15系列的确每个批次 +- 要少, 但是,没有什么实际意义,最终你要确切的电压,还是必须要每一片读一下出厂的测试数据,或者,你自己测量给出校正值。 但是,在依靠内部电压为参考,去测量外部电压时,还是要重新测量内部电压,来知道当前的VCC电压值,还要保证,测量内部电压,算出VCC电压,到利用这个算出来的VCC电压,测量外部电压这个过程,VCC不产生变化,这才是没有Vref 引脚的单片机的硬伤。 其实,保证了,VCC的稳定之后,8系列也好,15系列也好,ADC这块,本质上没有什么区别,无非,一个要每一台读出基准电压的具体数值直接用1.25V误差有点大,,一个计算不测量,直接用1.19V最多业就是 千分之五的误差。业就这个区别而已。 |
yinnan128 发表于 2021-9-27 17:29 没用的, 比如,你VCC 5V 的时候,测到内部基准电压是 0x40, 代表 1.25V, 你VCC 4V时 再测内部电压,就要 0x6A 了, 所以,你只能,每次去测内部电压, 并且保证, 测内部电压时,和外部电压时,你的VCC 不发生变化。 |
Y_G_G 发表于 2021-9-27 15:01 VCC首次用精准稳定的5V,测试出内部参考电压并保存到EEPROM,次后如果VCC不稳定,用首次读到的内部参考电压和外部ADC对比,是不是就不受VCC影响呢 |
Y_G_G 发表于 2021-9-26 21:18 谢谢,找到说明了 |
188610329 发表于 2021-9-26 20:17 非常感谢你的回答。我用4位半万能表测12V经7805降压的5V,电压显示是稳定没有波动,看来是电源纹波影响ADC的稳定,这个需要示波器才能判断了。 下面是数据手册给的读取内部参考电压列程,读取到内部参考电压后,怎么反推出锂电池VCC电压呢。还有你说的省IO口,是不是ADC第9通道首次读取到内部参考电压后,就可以设置为普通IO复用吗。 第一步:通过ADC的第9通道测试Bandgap电压的ADC测量值 ADC_RES=0; PIASF=0x00; II不设置PIASF,即可从ADC的第9通道读取内部Bandgap电压的ADC测量值 ADC_CONTR =ADC_POWER|ADC_SPEEDLL; Delay(2); ADC_CONTR=ADC_POWER|ADC_SPEEDLL10|ADC_START; _nop_0; _nop_0; _nop_0); _nop_O; while (I(ADC_CONTR&ADC_FLAG); ADC_CONTR &=~ADC_FLAG; ADCbg =ADC_RES; /I清除结果寄存器 /IADC上电并延时 /1等待4个NOP //等待ADC转换完成 /1清除ADC标志 II第二步:通过ADC的第2通道测试外部输入电压的ADC测量值 ADC_RES= 0; PIASF=0x02; /1清除结果寄存器 1/设置P1.1口为模拟通道 |
188610329 发表于 2021-9-26 20:17 8A系列,8G系列,8H系列这三个的内部参考电压是稳定而且是相对固定的,可以用来作为参考电压来测量VCC的电压 唯独15W系列不行,虽然它内部参考电压也是稳定的,但每一片之间并不是固定的1.27V,最大误差可以达到0.2V,所以,直接用锂电池供电,然后就测量VCC电压是不行的 至少是要先进行一次校正,在15W数据手册中,不止一次的强调要在VCC很精准的情况先测量内部参考电压,然后保存到EEPROM中,而8A系列,8G系列,8H系列是没有这个说明的 我之前就是用15W来DIY几个小手电的,也是想通过内部参考电压来测量电池电压的,但是,5个单片机之间的误差最大的就是0.2V,改用8G系列就可以直接测量了 |
它有一个通道电压,但是每个差别比较大,需要在烧录程序的时候设置获得这个值保存在特定地址,然后根据这个值反推其他通道电压 |
让采样传感器(如分压电阻)使用的电源,与AD的参考电源,是同一个电源。也是一种方式。 |
数据手册898页有说明 这个单片机我以前做LED手电的时候用过,就是想通过内部参考电压来进行低电压指示和自动关机,但内部参考电压每片都有可能不一样的,所以,经常出现低电压指示不一样的情况, 误差最大可以达到0.2V 所以,每片要使用这个内部参考电压之前都要进行测量才能正确的使用,很麻烦,后来才改用STC8G系列的 |
刚才,手机打字不方便,就简单得回了一下。 上一篇你提问时,已经和你说过,STC15系列也好,8系列也好,只要没有带Vref 引脚的,接不接外部参考电压,没什么区别,反之,对VCC的稳定(是稳定,不是精确)要求是非常高的。上次没有展开说,就这次和你捋一下原因。 有Vref 引脚,测量ADC的时候,满值(1023,有的是4095)是以外部参考电压Vref引脚的电压作为标准,所以,无论你VCC如何波动,只要你的外部参考电压,足够稳定,你测量到的ADC结果,就是稳定的。 而没有Vref引脚,无论你是通过内部参考电压,做参考,还是外部ADC引脚接一个参考电压,在每次测量的时候,ADC满值的1023,都是针对当前的VCC电压而言的,那么,你说当你VCC在4.9V~5.1V波动的情况下,你每次测量的ADC值,是不是都会上下浮动? 即便你用内部的参考电压,或者外部接一个参考电压。当你需要测量外部电压的时候,都需要测量两次,一次是用VCC测量参考电压,一次是用VCC测量你需要知道电压的被测电压。问题的关键是,你需要确保这两次测量的时候,VCC是没有变化的。做不到这点,你的参考电压哪怕再精准,被测电压哪怕再稳定,最后得出的结果也是频繁跳跃的。 经过我15W401AS系列 15W4k系列,8A系列,8G系列,8H系列的各系列验证,当电池供电的情况下,通过ADC测量内部基准电压的时候,返回值是极其稳定的,数值几乎是恒定不动的(个人以为,测量ADC,数值稳定,精准重要的多,数值有偏差可以后期修正,不稳定是最麻烦的),比测量TL431(接在AD口)得到值要稳定的多(低2位~低3位会跳动)。当然,前面已经说了,Vref引脚另论。 所以,我才会建议你,单片机直接锂电池供电,你测量内部基准电压就能知道锂电池电压,省事,还省IO口。最后,15W是宽电压,电池完全不需要降压到3.3V,你上篇帖子说要降压到3.3V是没有任何意义的。 |
什么都不用接,内部参考电压在内部,大约是1250nv,具体大小可以看isp检测信息,每片不同。只要p1as=0,就是测的内部电压,基于vcc为1023的,内部电压,所以你测出512说明vcc是2.5v测出256,说明vcc是5v,所以,vcc接锂电,你就直接得到了锂电电压。s |