找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4075|回复: 17
打印 上一主题 下一主题
收起左侧

STC8H单片机ADC采样时被其它中断打断 会导致结果不正确吗?

[复制链接]
跳转到指定楼层
楼主
ID:612392 发表于 2021-10-18 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,我用STC8H3K64S2单片机做太阳能MPPT产品,需要同时用到PWM和ADC采样。
PWM直接采用硬件16位高级PWM,生成带死区互补的PWM波形,使用到PWM中断。频率约56kHz,中断周期约18us
ADC直接采用查询方式进行,在每次PWM中断后进行一次计数,采输入电压、输入电流、输出电压。采样时间约12us。
但现在ADC返回的三个数值都是0(0~3之间波动,实际数值应该在300~1000之间,12位ADC),ADC采样程序是其它项目上正常移植过来的,应该没啥问题;输入电压、电流、输出电压用万用表测量,数值都正常;IO口上直接测量输入数值也都正确

现在怀疑PWM中断有可能会打断ADC,但这个会导致ADC读出来的数值全部是0吗?
是否一定要用ADC中断方式才可以呢?
谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2021-10-18 18:38 | 只看该作者
18uS就进入中断一次,如果ADC是查询方式的话,刚刚退出中断没多久又要进入中断了,程序能不能正常运行都是个问题
至于PWM,它是不会影响ADC结果的
回复

使用道具 举报

板凳
ID:612392 发表于 2021-10-18 18:45 | 只看该作者
Y_G_G 发表于 2021-10-18 18:38
18uS就进入中断一次,如果ADC是查询方式的话,刚刚退出中断没多久又要进入中断了,程序能不能正常运行都是个问 ...

程序的PWM是正常的,互补波形也正常。现在就是ADC采集的数据不正常,所以怀疑会不会是因为这个查询方式被PWM中断打断了,导致采到的数值是0,有这个可能吗?
明天我把ADC采集改成中断方式试试看,但也可能有中断冲突的可能。
回复

使用道具 举报

地板
ID:160500 发表于 2021-10-18 18:50 | 只看该作者
你算一下中断处理程序是多少时间,看看给主程序留了多少时间
回复

使用道具 举报

5#
ID:612392 发表于 2021-10-18 18:57 | 只看该作者
liuzx66 发表于 2021-10-18 18:50
你算一下中断处理程序是多少时间,看看给主程序留了多少时间

进PWM中断,就三行程序
1.软件清中断标志位
2.一个变量++1
3.一个IO口取反
应该应该非常快,不到1us应该可以出中断了。
回复

使用道具 举报

6#
ID:401564 发表于 2021-10-18 19:38 | 只看该作者
cjjdemon 发表于 2021-10-18 18:57
进PWM中断,就三行程序
1.软件清中断标志位
2.一个变量++1

这不是中断用时的问题,是你只给主程序18uS的时间,每18uS就要进入中断一次,主程序很有可能是一直不断的被打断
不知道你用这么高频率的PWM来干嘛,如果是驱动LED,建议用超过1KHz就可以了
如果ADC再使用中断,估计主程序都没有时间干活了,不断的在ADC和PWM之间来回的跑........
回复

使用道具 举报

7#
ID:612392 发表于 2021-10-18 22:08 | 只看该作者
Y_G_G 发表于 2021-10-18 19:38
这不是中断用时的问题,是你只给主程序18uS的时间,每18uS就要进入中断一次,主程序很有可能是一直不断的被 ...

高频PWM是用来做BOOST升压的,同步整流升压。
主程序就是不断地采集太阳能板的电压和电流,以便让太阳能板一直处于最大功率点工作。BOOST升压后给电池充电,或者给逆变器供电。
希望能够做到逐周期检测太阳能板的功率,以便快速调整占空比,让太阳能板最大功率运行。
回复

使用道具 举报

8#
ID:161164 发表于 2021-10-18 22:52 | 只看该作者
有没有用过示波器观察输入电压、输入电流、输出电压的波型?
有没有机会是每次ADC开始测量时都刚好到了死区时间?
在ADC开始时罝高某脚,如P37 = 1;
在ADC结束时罝低某脚,如P37 = 0;
对比P37和输入电压、输入电流、输出电压的波型
看看ADC在测量什么
回复

使用道具 举报

9#
ID:960157 发表于 2021-10-19 09:35 | 只看该作者
AD转换的速度够不够???
回复

使用道具 举报

10#
ID:401564 发表于 2021-10-19 11:41 | 只看该作者
cjjdemon 发表于 2021-10-18 22:08
高频PWM是用来做BOOST升压的,同步整流升压。
主程序就是不断地采集太阳能板的电压和电流,以便让太阳能 ...

MPPT也不用每个PWM时钟都进行调节的吧?
这18uS阳光能有多大变化呢?
回复

使用道具 举报

11#
ID:612392 发表于 2021-10-19 21:39 | 只看该作者
lkc8210 发表于 2021-10-18 22:52
有没有用过示波器观察输入电压、输入电流、输出电压的波型?
有没有机会是每次ADC开始测量时都刚好到了死 ...

感谢老哥,今天又调试了一下,发现有个bug,现在已经搞定了。
回复

使用道具 举报

12#
ID:612392 发表于 2021-10-19 21:42 | 只看该作者
Y_G_G 发表于 2021-10-19 11:41
MPPT也不用每个PWM时钟都进行调节的吧?
这18uS阳光能有多大变化呢?

恩,现在改成5ms了,实际采样加计算,最快能到2.7Khz左右。不需要每周期检测也是可以的,只是波动会更大。
今天找到bug了,现在已经正常运行啦,我不是电子相关专业的,我是化学专业的,对于很多类似的原理不太了解,所以当程序不能正常运行的时候,才会有这些疑问,非常感谢各位的回答。
回复

使用道具 举报

13#
ID:420836 发表于 2021-10-20 09:11 | 只看该作者
如果结果始终为零,则可能是由于快速中断调用而不是来自 PWM 输出的干扰。
回复

使用道具 举报

14#
ID:161164 发表于 2021-10-20 10:26 | 只看该作者
cjjdemon 发表于 2021-10-19 21:39
感谢老哥,今天又调试了一下,发现有个bug,现在已经搞定了。

赠人玫瑰 手留余香
说一下是什么Bug
让后人参考一下
回复

使用道具 举报

15#
ID:213173 发表于 2021-10-20 21:23 | 只看该作者
经实物测试,10us中断对ADC没有明显影响,测量电压偏高十几mV。
回复

使用道具 举报

16#
ID:612392 发表于 2021-10-21 09:01 | 只看该作者
lkc8210 发表于 2021-10-20 10:26
赠人玫瑰 手留余香
说一下是什么Bug
让后人参考一下

很低级的错误,我每次进中断要用P1.0/1.1/1.2采集数据,但采集完成后,通道没有复位为0x00,一直是0x02,写通道的操作又是|,导致除了第一次采集的数据是正确的,第二次以后全部采的是最后02通道的数据,正好最后一个通道采的是电流,系统没正常工作是没电流的,所以后面的数据一直是0,我上位机读数据又是每500ms读一下,第一组数据被漏了。
后来我改了一下程序,降低了频率,每次都上传数据,就发现这个问题啦。
回复

使用道具 举报

17#
ID:612392 发表于 2021-10-21 09:01 | 只看该作者
wulin 发表于 2021-10-20 21:23
经实物测试,10us中断对ADC没有明显影响,测量电压偏高十几mV。

感谢!以后就不会再怀疑中断会影响ADC啦。
回复

使用道具 举报

18#
ID:981034 发表于 2022-1-5 09:54 | 只看该作者
你学化学,没电类基础也会玩这个,真服你了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表