最近在客户的一个板子上,调试一个麦克风触发的点烟器。客户是有要求的,要尽量减少误动作,就是普通的拍打,磕碰或者一般的气流冲击是不能触发点烟的。然后我在这些基础上,随便写了一段滤波程序,起初都很顺利,基本不用调试,在仿真器和板子上运行正常。调试时点烟器的板子是单独用稳压电源供电的。然后当我兴致勃勃的把程序烧录到IC里后,接通了直流电源,怎么吹麦克风都没有反应了。
问题出现了,开始调试。第一想法是先看看麦克风的输入端的PADIER对应的位设置是否正常,数字输入对应位一定要设置为1.然后又降低了判断的计数参数,关闭看门狗等等处理。结果都还是仿真时可以,烧录出来就完全没有反应了。不过仿真时有时当停止仿真器运行时,也会弹出这个窗口,不停止不会弹出这个窗口。
可这个窗口的弹出不影响仿真器运行时的结果,仿真的结果还是对的。就是烧录出来的IC,运行结果不对。后来甚至从PMS150G改型号为PFS122,发现结果还是一样的,吹麦克风没有一点反应。后来实在没有办法了,只能搬出示波器先来测试电压。这一测试感觉好奇怪,我没有吹麦克风时,电压也有异动,但是不接MCU就没有问题,电源是正常的。异动的电源波形还直接让我惊呼,线路没有明显的感性负载,电压竟然还会高出平常那么多。可无论你信不信,示波器检测的结果就是这样的记录。
从电源的情况看,可以确定是IC复位了,虽然看起来最低电压还没有跌低于1.8V,但也是2V左右了。既然还没有吹麦克风,可以确定是初始化的过程中就产生了这个复位了。
经查看,Timer2的初始化,原来是这样写的,TM2B的赋值落后于TIMER2开启PWM设置,应该是TM2B上电过程中,初值不确定,应该不是0,造成了开启PWM输出的时候,就有了PWM输出。
void timer2_init(void)
{
$ tm2c IHRC,PA3,PWM;
$ tm2s 6BIT,/1,/32;
// $ tm2s 8BIT,/1,/1;
tm2b = 0;
}
于是将TM2B的设置放置在设置PWM输出之前。
void timer2_init(void)
{
tm2b = 0;
$ tm2c IHRC,PA3,PWM;
$ tm2s 6BIT,/1,/32;
// $ tm2s 8BIT,/1,/1;
tm2b = 0;
}
果然,这样更改之后,在没有吹麦克风时,电源的波形也正常了。
可是一吹麦克风,这个异常的波形又出现了。这下可以明确是电源不行了。于是在MCU的电源端加了2个无极性电容,拆的,也不知道有多大,应该至少20uF以上,也可能有70~90uF。这样一来还真可以了。
其实早20年前,应用电路对MCU的电压要求可高了,连纹波都不能太大,就算是那时的AVR, PIC,也不例外。可随着MCU设计技术的提高,如今的MCU的工作电压大多数都相对较宽,2.5~5.5V的工作电压范围工作基本都是没有问题的。所以设计师对MCU的电源稳定性也越来越没有那么在意,甚至有工程师为了节省成本,MCU两端可能连电容都没有。这样的设计一定要特别注意,不是各家品牌的MCU都能在此环境下正常工作。不要在量产中才发现这类因为电源稳定性造成的功能异常问题,那就很麻烦了。
全部0条评论
快来发表一下你的评论吧 !