打印
[51单片机]

振南ZN-X开发板(STC51版)实验 ★PCA定时+PWM播放"HelloMoto"音乐★

[复制链接]
2067|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znmcu|  楼主 | 2014-10-15 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
振南网站还在继续美化改进,暂时提供一个平台来发布振南的实验和相关资料!
http://www.znmcu.cn/znx_51_iap_exps_wav_play_test.html
STC/IAP15单片机 ZN-X开发板 群 187478076
振南QQ:987582714  振南的SD卡 FAT32 技术群:198521880


振南ZN-X开发板(STC51版)实验 之 PCA的应用【音频播放器

实验说明:

振南的ZN-X开发板率先使用STC最新的增强型51单片机芯片(具体型号包括3种:STC15L2K60S2、IAP15L2K61S2/IAP15W4K61S4),它们在功能上几乎相同,只是RAM与ROM容量不同,另外前缀IAP的芯片本身具有仿真器的功能。

此实验主要是对PCA(Programable Counter Array,即可编程计数器阵列)的应用,它是STC特有的东西,功能强大,配置灵活,可以实现多种功能:捕获、定时、PWM输出、高速时钟输出等等。再加上一些应用上的技巧,将可以实现更多功能。

这里使用STC的PCA实现PWM输出和定时功能。PWM用来播放音频,而定时器则用来控制音频的播放采样率。也就是说,此实验中所有功能都是基于STC的PCA来实现的。主要是为了对STC的PCA进行测试,实现一个简单的音频播放功能。

所需硬件:

振南ZN-X开发板(STC51版)基板

基础资源模块【主要是用模块上的耳机音频接口】

USB转串口模块(用于供电与程序的下载)

STC PCA简介:

STC15系列部分单片机集成 了3路可编程计数器阵列(CCP/PCA)模块,可用于软件定时器、外部脉冲的捕捉、高速脉冲输出以及脉宽调制(PWM)输出。

PWM输出可以在3组不同管脚之间切换:

PWM通道

可分配管脚

PWM0

P1.1

P3.5

P2.5

PWM1

P1.0

P3.6

P2.6

PWM2

P3.7

P3.7

P2.7

此实验中我们选用P1.1作为PWM输出,它通过一片74HC32作为信号增强和缓冲,最终通过专门的接口输出(位于ZN-X开发板基板右下角的4x2排针,第1针,即上排最左边那根针,如下图)。

关于PCA的定时器与PWM功能的详细介绍:

关于PCA的定时器与PWM功能,振南在前面发布的《STC PCA PWM应用实验》和《STC PCA 定时器应用实验》中有非常详细的介绍,包括:PCA实现定时器和PWM的原理、实现的方法、STC芯片中PCA定时器和PWM的相关寄存器等等。

请参见: http://www.znmcu.cn/znx_51_iap_exps_pca_pwm_test.html

http://www.znmcu.cn/znx_51_iap_exps_pca_timer_test.html

关于此实验的详细说明:

我们知道PWM可以通过数字方式对模拟量进行合成,既然这样,那就可以实现音频的播放了,我们只需要将声波信号的PCM电压值通过PWM进行合成,并且通过定时器去控制采集率,即产生两个电压之间的时间间隔。再通过后级的一些电容滤波和音频接口电路,即可输出简单的音频效果。

实际上,使用PWM实现音频功能在很多产品上都在使用,比如早期的一些手机的铃声、游戏机的音乐等等。

至于音频数据的获取,振地使用CoolEdit将MP3等音频文件转为单声道的8位PCM编码的WAV文件,采样率为8KHz(即产生两个电压之间的时间间隔约为125us,可以通过51的传统定时器T0或T1来精确控制,但是这里使用的是STC PCA的定时器功能)。

最终将WAV文件的数据再转为C语言数组方式,固化在单片机的ROM之中。

关于音频数据的制作,请详见《振南单片机基础外设9日通》视频教程 之 DAC专辑。

振南的视频教程专区http://v.znmcu.cn

实验代码:

#include "STC15Fxxxx.H"

#include "wav_code.h"

unsigned short value=0,index=0;  

void PCA_Isr() interrupt 7 using 1 //PCA定时中断服务程序

{

CCF0=0;

CCAP0L=value;CCAP0H=value>>8;

value+=700;

CCAP1H=wav[index++];index%=WAV_LEN; //更新PWM比较值,即脉宽

}

void main(void)

{   

PCA_USE_P12P11P10P37();

PCA_CLK_1T();

PWM1_NORMAL();

PCA1_PWM(8);

CCAP1L=0;CCAP1H=0;

//PCA0作16位定时器

CCON=0x00;

CL=0;CH=0;

      

value=700;

CCAP0L=value;CCAP0H=value>>8;

value+=700;

      

CCAPM0=0x49;

      

CR=1;

EA=1;

while(1);

}


注:上面程序中的宏来自于STC15头文件,详见头文件源代码

实验效果:



代码下载:

http://down.znmcu.cn/ZN-X/ZN-X(51)/exps/stciap/WAV%20Play%20test.rar



相关帖子

沙发
armxu| | 2014-10-15 17:39 | 只看该作者
好!值得学习!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:振南的znFAT -- 单片机上上的FAT32文件系统 www.znmcu.cn

4474

主题

5195

帖子

33

粉丝