原出处:
http://www.znmcu.cn/zn_project_acs_player_1.html
振南电子技术群177856520
=======================================
振南实战项目 模控开关与音频播放 1 ----《功能明确、需求落定与初步方案设计》 鉴于振南在单片机、嵌入式存储以及音频方面有一定研究,一些相关的项目相继而来。接项目一方面是为了创收,另一方面也在实战中进一步提高自己的水平。一些问题看似很基础,很简单,但是真正着手去作,就会发现,还是很有学问的。尤其是要把它作精作小作得低功耗,就比较有难度。 “模控开关及音频播放模块”是近期接的一个比较典型的项目。项目方(甲方)是一个高校的老师,它的基本功能是这样的:检测一个输入信号,比如它连续10s大于0.2V,则播放一段音乐20s(使用PWM),同时把一个开关打开(开关可以是继电器或三极管,应该是用于控制电机或较大用电量的设备)。 这个需求看似很简单,其实不然,它里面隐含着很多东西,到后面大家就会逐步看到。 要实现基本的功能,其实比较简单,下图是主要的程序流程: 其中主要包括几个问题: 1、检测0.2V信号 2、STC的定时器与PWM 对于0.2V信号的检测,一开始认为很简单,只需要用STC的ADC采一下就可以了。但后来,项目方补充了需求:要用电池供电,供电电压范围为5.5V~2.5V。这样一来要检测输入信号是否大于0.2V电压就比较难了。 STC单片机的ADC其实是比较简陋的,他的VREF(基准电压)直接使用的是VCC,所以如果VCC不确定的话,检测一个固定电压也就是无从谈起。比如VCC=5V,0.2V的ADC采样结果为41,而当VCC掉到3V,0.2V的ADC采样结果为68。因为我不可能直接知道VCC是多少,那我又如何能知道0.2V对应的ADC采样数字量是多少呢?。 具体的解决方法是这样的: 使用稳压芯片得到一个固定不变的基准电压,比如LM1117-1.2或LM317等,把这个基准电压接到ADC的一个通道上,以此为参考,我就可以反推VCC是多少,进而检测0.2V。总之,VCC不论怎么变,我的电路中必须有一个基准电压是恒定不变的。 有人问为什么要用LM1117-1.2,为什么要稳到1.2V,3.3V不行吗?稳到3.3V固然是没问题的,但请注意需求:“VCC供电电压范围是5.5V~2.5V”,在VCC>4V的时候,LM1117-3.3是可以稳到3.3V的,但是当VCC掉到3V,甚至更低的时候,LM1117-3.3将无**常工作。因此,我们要考虑采用一个低压的稳压芯片,以保证在VCC掉到2.5V的时候,它仍然能够输出一个固定电压。 关于这个使用电池供电,VCC不确定,而对模拟量采集造成困难的问题,我向项目方阐明,他们也觉得确实是个问题!后来我提出了上面这个方案,使用稳压产生一个恒定的基准,他们觉得想法很好,似乎是恍然大悟!但其实这是在电池供电产品中经常用到的解决方法。在STC手册的ADC章节中,也提到了这一问题。唯一的不足就是要多占用一个ADC通道。这对于成本比较敏感的产品来说,是个问题。后来我针对这个成本问题,又进行了进一步方案优化,甚至可以不用ADC,而实现0.2V电压的检测。 而至于STC单片机的定时器以及PWM,在使用上都是比较简单的,可以参见振南的STC PWM相关实验和讲解。
|