PSOC的API比较方便;但不是太全,比如del-sig模块的输入,只能在器件编辑器中选择好,程序运行中没有API函数可以改变其输入。
通过PSOC寄存器定义发现,可以通过更改相应的模块来改变del-sig模块的输入信号的,于是自己编写API,通过改变ASC10CRx寄存器的值来切换输入通道,经测试在多个方案中均可行。
但是某一个应用比较苛刻的方案,却发现同样的方法,若有del-sig切换,相邻的模块在特定时刻会受到“干扰”。我描述如下,请斑竹和高人指点:
使用del-sig采集两路输入信号VA和VB,其中,VA通过PGA可连到del-sig模块,而VB则可直接连到del-sig模块,另外一个比较器模块连接到PGA。del-sig的输入通道的切换(从VB和PGA输出的互相切换是在中断中使用ASC10CR寄存器操作来完成)。
发现如下情况: 次数 VA范围(v) VB范围(v) PGA值 CMP(阀值v) 结果 1: 0~3.5 0~3.6 1.0 3.75 比较器正常,不动作 2: 0~3.5 0~3.6 1.0 3.2 比较器异常 3: 0~3.5 0~3.1 1.0 3.2 比较器正常动作 4: 0~3.5 0~3.6 1.23 3.75 比较器异常
比较器异常时,情况如下: VA输入电压已经超过CMP阀值,CMP一直在动作,CMP输出1时,VA便迅速减小,CMP便又输出0.在这个过程中,一旦发生del-sig的切换(在定时中断中切换),便会出现,CMP会长时间输出1,即使VA已经远低于阀值,此时间持续1~2秒后,CMP才能正常工作-根据VA的值正常输出0或者1.
1)根据第1次和第3次的结果,所以第4次测试我故意将PGA提高到1.23,是想通过提高CMP阀值来避开异常,但不幸的是,故障仍然存在;
2)直接将CMP连到VA引脚,不通过PGA,测试第2种,还是有故障。
3)不进行del-sig切换,比较器工作正常,没有问题。
此问题困扰我多日仍无法完善解决,特来麻烦各位前辈,指点一二: 1)使用用户定义的API(操作寄存器),存在什么风险?为什么cypress不提供诸如改变del-sig输入的API?(del-sig不适合多路采样等不是充分的理由)
2)为什么切换会对比较器产生“干扰”?
|