本帖最后由 mxkw0514 于 2025-3-28 09:32 编辑
#申请原创# @21小跑堂
这次论坛里面有一个关于超频讨论的话题,我突然想到了我之前的工作学习经历,这个经历与这个话题相关,那是很久之前了......
那时我刚毕业,进公司之后,由于我的底子较弱,连焊接芯片都不会。我的领导帮我找了一个师傅,领导和师傅在我前期的工作学习过程中指点我颇多,我对此非常感谢。我相信如果我将来有机会和有能力帮助新人时,我也会像他们那样。
有一天,我师傅收到了客户发来的邮件,客户反馈了他遇到的问题,希望问题得到及时的解决。对于客户反馈的问题,我师傅迅速地找到了原因并提供了解决方法,他觉得这个问题比较特殊,让新人拿去练习,去模拟解决客户遇到的问题,可以帮助新人学会一些技能:(1)焊接电路板、(2)针对性地查询数据手册、(3)查看原理图、(4)软硬件调试和验证、(5)与客户沟通。我师傅拿来一个单片机板子和一些dsPIC33EP芯片,要求我去解决客户的问题。建议我在遇到麻烦时,如果努力半个小时仍然解决不了,可以请教他,避免时间的浪费。
下面我想分享这个学习经历:
一、问题:
“客户”在某公司的电机例程宏定义中设置了死区时间的大小,然而实际测得的死区时间却只有其中的一半,“客户”要求我们找到该问题的原因并提供其解决办法。
二、解决方法:
1、首先需要复现该问题。
2、如果能够复现该问题,则先从软件方面找问题,再从硬件方面找问题(因为硬件方面出现问题的概率要小得多)
三、解决过程:
问题复现:
考虑到客户用的是dsPic33EP,使用的是某公司官网的某个测试例程,而我现在手头上只有一块基于diPIC33FJ demo板(如图1)和少量dsPic33EP样片(如图2),所以我需要做的是: 1、将demo板上的diPIC33FJ芯片取下,在原来的位置焊上dsPic33EP芯片。(因为PIC同系列单片机是Pin to Pin的)
图1 diPIC33FJ demo
图2 diPIC33FJ 芯片
2、将示例程序移植成基于dsPic33EP的程序,编译无误后下载到单片机中使用示波器查看一对PWM中的deadtime。然后将客户所用程序下载到单片机中,使用示波器查看一对PWM中的deadtime。
四、测试结果 1、使用示波器观察到运行新版本官方示例程序的单片机RB14和RB15引脚输出的PWM波形的deadtime为1us(如图3所示),而宏定义中设也是1us由此可知示例程序中的deadtime宏定义与实际测量值无误。
图3 新版本示例程序测试的PWM deadtime
图4 新版本示例程序deadtime宏定义
2、使用示波器观察到“客户”程序的单片机RB14和RB15引脚输出的PWM波形的deadtime为1us(如图5所示),而程序中的宏定义设置的是2us(如图6所示)。这明显不对
图5 “客户”程序测试的PWM deadtime
图6 “客户”程序deadtime宏定义
3、通过查询官方参考手册到deadtime的计算公式(如图7所示),与“客户”程序中的计算公式不同(如图8所示),这是问题所在(客户计算漏了分频比参数)。
图7 官方参考文档的PWM deadtime计算公式
图8 “客户”程序的PWM deadtime计算公式
五、讨论 官方示例程序可能也会更新,如果客户使用了官方提供的参考程序,那么在解决客户遇到问题的过程中,就不能仅仅只看官方的参考程序,还要看客户现有程序,有时对比着看才能更好地解决问题。
此外,分享测试过程中的一个小心得,就是disPIC系列单片机的Vcap引脚一定要就低ESR的电容,建议使用瓷片电容,这是因为disPIC单片机有一个片上稳压电源(1.8V为内核供电),高ESR电容会导致电源轨出现较大的纹波,从而导致锁相环无法稳定输出高频时钟给CPU。我当时在Vcap处焊接了一个电解电容,结果主频只能达到70MHz,而例程中使用的是最高主频,所以中途折腾了很久,还是我师傅引导我发现和解决这个问题的。
由于本人水平有限,分享内容中难免存在不足,还请麻烦批评指正。
|
针对dsPICEP的死区时间仅为预设时间的一半的问题,作者通过复现故障找到问题根源,修复因忽略分频比导致的问题。