Microchip
直播中

李家沌

7年用户 213经验值
私信 关注
[问答]

PIC16F1619中的PID重置累加器的高字节

你好,我在汇编程序工作了一段时间(用微芯片将近20年),我很好奇增强的中间范围的新特性,所以我试图用PID模块为信号输入提供一个平滑的回答,所以一个简单的积分反馈回路,输出直接连接。ED到下一个周期的输入(输入(T+ 1)=输出(T0)/ 2 ^ 20)。很容易和直接,或不:)我观察到一个非常奇怪的行为的PID。即使是非常温和的K1因子,它也会变得不稳定。我的观察:通常接近设定值的最小值或最大值,它变得稳定,大约30秒后它又变得不稳定,然后开始另一个30秒的循环。在规模的中心附近,它保持不稳定。因此,我试着使用16b未分配和15b有符号输入,关闭中断,查找累加器溢出,改变输出缩放,改变K1、K2、K3,在不稳定性方面没有真正的差异。每个字节的结果输出,有时不。非常奇怪。我损失了将近一天,试图找出什么黑客…最后,我放弃了外围设备,并在一个小时内实现了一个计算更平滑的积分,它工作得很好。所以我的结果是:不要用累加器使用PID,它不工作,是坏的!那么,我是否拥有一个有缺陷的晶片,或者你们那里的女孩和女孩也经历过同样的现象吗?请分享您的经验与这个8位PID模块。

回帖(5)

李方树

2020-4-8 07:54:03
是的,很多次。它在某些方面非常肤浅。
举报

李方树

2020-4-8 08:24:22
[解决]在2CI(PIC16F1619/P(e3)15138S2和PIC16F1619/P(e3)1715JB5)中尝试这个问题之后,我发现这两者的行为是相同的。所以硅片的质量问题还不错。在调试这个问题时,我发现PID1OUTU的第3位被记录为UNIMPLEMENTED,READAS0。但是它在0到1之间以可预测的和可靠的方式实现和改变。使用周围的工作,我可以使PID的工作方式,它应该。周围工作:当使用PID1OUTU时,确保所有的“未实现”位被重置亲爱的微芯片团队:这是一个错误在晶片和文件!请把它列入勘误表!!!!讨论当这个位打开和关闭时的发现:我发现了一个关系,当PID1IN>PID1SET设置该位时,当PID1IN<=PID1SET设置该位时,该位是清晰的。这也在2的补码逻辑(0xMung&0xFFFF)下工作。所有的数字是E13APIDID1SET E139(in & gt;set)PID1OUD DA4BD0C(未实现的位集)PID1ACC 5A48 BD00 CPID1 in E138PID1SET E139(in & lt;set)PID1OUT 5A48 BD070(未实现位复位)PID1ACC 5A48 BD070PID1in 2004 4PID1SET 2003(in & gt;set)pID1ODA4BD070(未实现的位集)PID1ACC 5A48 BD070PID1in 2002 2pID1SET 2003(in & lt;set)PID1OUT 5A48 BD0D4(未实现位复位)PID1ACC 5A48 BD0D4PID1in 2003 3pID1SET 2003(In=SET)PID1OUT 5A48 BD00 C(未实现位复位)PID1ACC 5A48 BD00 C
举报

李维兴

2020-4-8 08:53:46
PIC16F1619数据表:表3-14“特殊功能寄存器摘要”和表32-2显示具有四个实现位的PID1OUTU,而寄存器32-12“PID.UTU:PID输出上位寄存器”仅显示三个实现位。
举报

李方树

2020-4-8 09:04:16
1和0:谢谢你看,我没有。但是我还测试了PID1ACC的溢出标志,它在3FFFFFFFF->400000000触发,显然有3位在PID1ACCU实现,这是使用累加器时PID1OUT的副本。另一件没有意义、也不会正常工作的事情是32.4处理溢出的指令,要求它“饱和”PID1OUT,但是在示例中,它们忘记设置PID1OUTU,并且设置了两次PID1OUTHH。而且这个疯狂的比特3可能会在试图“饱和”输出时弄得一团糟。无论如何,因为我们正在处理2的补码,所以饱和值永远不是0xF…….杰克:谢谢你的提示,我将提交一个支持票(并等待)。有人知道如何编辑线程的标题到[解决]…?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分