stc单片机产生pwm,这有一个程序,有人能详细解释下它怎么产生pwm波吗,能逐句详解吗

stc单片机产生pwm,这有一个程序,有人能详细解释下它怎么产生pwm波吗,能逐句详解吗,第1张

哥们,这个已经很详细了;
大概说说吧,PWM[54]是定义的一组PWM脉宽输出数组,PWM脉宽输出是0-255;0的时候脉宽输出最大,255的时候脉宽输出最小;
然后那个初始化PCA,初始化定时器0就不说了,你自己下一个手册看下就明白;
然后是中断,每中断一次index加1,然后判断index是不是等于54,意思就是PWM[54]整个数组里面的PWM是不是都送了一次CCAP寄存器;如果都数组都送了一次,将index置零,从头开始送;标志位取反,如果标志位zf=1,让P14输出PWM,P13关闭;,如果zf=0,让P13输出PWM,P14关闭;if(zf==0)后面的语句就是让PWM[54]中的每一个数都送CCAP寄存器一次;
其实按这个程序注释的话,他本意是PWM波形从小变大P14输出,PWM波形有大变小P13输出;但是这个程序的实际效果是P14由小变大再由大变小。然后P14关闭,P13由小变大再由大变小
如此循环;
你最关心的PWM怎么输出:就是这两个语句,CCAP0H=pwm[index]; CCAP1H=pwm[index]; index每中断一次加1,那么index是由0加到54,假如说index=0 ,那么CCAP0H=pwm[0]; ,pwm[0]对应数字里面的255,寄存器CCAP0H=255;这个寄存器等于255,PWM输出就是一个小脉宽;下一次中断CCAP0H=240了,脉宽有增加了一点;至于CCAP0H送一个数据就有脉宽输出,这个是由单片机硬件本身决定的;你看看手册就知道了;
这个已经说得很明白了吧;累死,打字都打了20分钟;

你对BOOST电路的理解不太正确。占空比虽然动态调节,但是开关频率是固定的。实际上决定电感电容参数选取的,主要是你的振荡频率、最大负载(电流)、输出电压等级以及输出纹波要求。
第一个参数是你的程序决定的,后面的参数是你的设计要求决定的。
一般来说,电感的工作电流应不小于最大负载电流×安全系数(至少15),电感值 = (Vin - Vsat)·T / Ipk;
输出电容的耐压应不小于(额定输出电压+最大纹波)×安全系数(至少15),电容值 = 9·Ipk·T/Vripple。

CCON = 0; //初始化PCA控制寄存器,PCA定时器停止,清除CF标志,清除模块中断标志
CL = 0; //复位PCA计数寄存器
CH = 0;
CMOD = 0x02; //设置PCA时钟源为sysclock/2,禁止PCA定时器溢出中断
value = T100KHz; //计算PCA输出100K方波应设定的值
CCAP0L = value; //将值得低8位赋给CCAP0L
CCAP0H = value >> 8; //高8位赋给CCAP0H
value += T100KHz; //累加,为下一次赋值做好准备。//这个地方绝对不能注释掉,产生方波就靠它了。
CCAPM0 = 0x4d; //PCA模块1为16位定时器模式,同时反转CEX0(P13)口
CR = 1; //PCA定时器开始工作
EA=1; //开中断
========================================================
void pca_isr()interrupt 7 using 1
{
CCF0=0;
CCAP0L=value;
CCAP0H=value>>8;
//value +=T100KHZ; //累加,这个地方也绝对不能注释掉。要产生方波,就得每次在原值的基础上加上同样的值。
}

STC15F100没有用过,只用过STC12C5A60S2系列的,以下是基于STC12C5A60S2的PWM方波输出的一个例程,仅供参考。STC的单片机应该是大同小异的。
//文件包含
#include "stc12c5a60s2h"

//函数声明
void PCA_Init(void);
//主方法
void main(void)
{
PCA_Init(); //PCA计数器初始化
while(1)
{
}
}
/
函数名称:PCA_Init
功 能:PCA计数器初始化函数
入口参数:无
返 回 值:无
备 注:PWM频率=PCA时钟源/256,占空比=(CCAP0L/256)100%
/
void PCA_Init(void)
{
CCON=0; //初始化PCA控制寄存器,停止PCA计数器,清除CF标记,清除PCA各个模块中断
CL=0; //清除PCA计数器
CH=0;
CMOD=0x82; //设置PCA计数器时钟源为Fosc/2(即PWM频率=(11059200/2)/256=21600Hz=216KHz)
//PCA计数器空闲模式停止计数
//禁止PCA计数溢出中断
CCAP0H=CCAP0L=0x80;//PWM0端口输出50%占空比方波
//8位PWM模式最大为256,一半为128,即0x80(即占空比=(0x80/256)100%=50%)
CCAPM0=0x42; //PCA模块0工作于8位PWM模式,允许比较器功能,允许PWM输出,禁止CCF0中断
CR=1; //运行PCA计数器
}

stc12C5A60s2的官方文档

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1034 脉宽调节模式(PWM) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

有介绍

PWM频率= PCA时钟/256

PCA的时钟源可以选择:sysclk,sysclk/2,sysclk/4,sysclk/6,sysclk/8,sysclk/12,(其中 sysclk就是你的晶振频率),定时器0的溢出,P34口的输入时钟

CCAPnL寄存器的值 = 256-(256脉宽/周期)

另外CCAPnL是重装值,也需要配置好

周期20ms,也就是说频率是50Hz

那你只能选择使用定时器0的溢出作为PCA的时钟了

CL = 0;        // 清零PCA计数器
CMOD = 0x04;    // 定时器0溢出做PCA模块的时钟源
CCAPnH=CCAPnL = 0xF3;  // n = 0 or 1    // 1ms
CCAPMn= 0x42;    // n = 0 or 1    // 脉宽调节模式
CR  = 1;     // 都配置好了之后,打开PCA计数器

当然其它的寄存器配置你需要自己写,比如说定时器0

详见官方文档

我写是对照文档现写的,比较匆忙,代码可能有问题,但是思路是对的

你这段代码的意思很简单。
所谓PWM 就是 高电平和 低电平,所以你这有定义一个IO拉高拉低
占空比,就是高电平和低电平的比例。
所以,我们需要控制高电平 和 低电平的时间。
那么,CCAP0L=pwm[0]; //初始化spwm输出的占空比
CCAP0H=pwm[0];
CCAP1L=pwm[0]; //初始化spwm输出的占空比
CCAP1H=pwm[0]
就是定义了0 1两个定时器,
一个给高电平,一个给电平。
好,现在高低电平时间都有了,波形也就出来了

方案一 以单片机为核心处理器的DMR对讲机方案(MSP430F149+AMBE1000)
1工作原理
发射时,由麦克送来的模拟语音经CSP1027进行A/D转换,由声码器AMBE1000进行语音压缩,交单片机MSP430F149进行协议填充组帧,送到CC1101进行调制后发射。接收时,由CC1101解调出来的码流经MSP430F149进行帧恢复,交由声码器进行解压,数据经CSP1027进行D/A转换为模拟语音信号。
2关键器件
微控制器采用TI公司的MSP430F149,它是16位超低功耗、混合信号微控制器,采用“冯·诺依曼”结构,可用JTAG(一种标准测试接口)进行仿真调试。
芯片的电源电压为(18~36)V,在RAM数据保持方式下耗电仅01uA,活动模式耗电250 uA/MIPS(每秒百万条指令数)。运算时由于本单片机采用16位RISC(精简指令集计算机),一个时钟周期可以执行一条指令,而传统的单片机要12个时钟周期才执行一条指令。工作在8MHz的晶振频率时,指令速度可达8MIPS,而同样这个指令速度,16位处理器比8位处理器高远不止两倍。
概述
声码器AMBE1000在国内已有产品,价格比较合理。CC1101的灵敏度为-116dBm(12kbps,1%数据包误码率,工作在433MHz时),与国内的对讲机可用灵敏度-120dBm相比偏低,但符合欧盟的CE标准规定小于-107dBm另外,射频模块的功率输出仅12dBm(16mW),所以本方案仅适用短距离范围的通信。提高灵敏度可考虑用器件ADF7021作为射频模块。
方案二 以DSP+MCU为核心处理器的对讲机方案
1工作原理
方案以MSP430为中心系统来完成数据的收、发控制等工作,系统采用MSP430中 USART模块的SPI同步通信模式。在接收过程中,首先接收来自射频芯片的FSK数据,解调后由MSP430将数据帧的同步域、尾域、ID域以及命令字节去除后,数据发至C5402进行去压缩处理,数据交AIC23进行D/A转换为语音信号。在发送过程中,首先由AIC23进行A/D转换,数据交C5402将语音压缩,再由微控制器MSP430进行协议填充,加上头域、尾域、ID域以及命令字节形成数据帧,然后控制射频模块将数据发送。
2关键器件
TMS320C5402是TI公司于1996年推出的一种定点DSP芯片,采用先进的修正哈佛结构和8总线结构,使处理器的性能大大提高。其独立的程序和数据总线允许同时访问程序存储器和数据存储器,实现高速并行 *** 作。如,可以在一条指令中同时执行3次读 *** 作和1次写 *** 作。TMS320C5402的运行速度为40MIPS,指令周期为25ns此外,还可以在数据总线与程序总线之间相互传送数据。从而使处理器具有单个周期内同时执行算术运算、逻辑运算、位移 *** 作、乘法累加运算以及访问程序、数据存储等强大功能。
概述
采用DSP方案时,免去选用语音芯片声码器的烦恼,提高了数字对讲机对语音处理的能力,可让语音编码的算法尽量优化,从而使对讲机语音信号的处理更具通用性和扩展性。本方案是以DSP为开发平台,经过连续可变斜率增量(CVSD)调制编解码得到语音信号的清晰度和自然度好,但软件开发工作量大。CC1000不支持4FSK调制与解调,本方案不适用于DMR与dPMR协议。另外CC1000的接收可用灵敏度为-110dBm,国内对讲机厂家可能嫌低。
方案三 以单片机为核心处理器的dPMR对讲机方案(CMX618+CMX7141)
1工作原理
发射时,麦克送来的模拟语音经CMX618内部进行增益调节,A/D转换和压缩处理,然后通过SPI(串行外围设备接口)进入CMX7141基带处理器,在微控制器LPC2138的控制和管理下经CMX7141芯片内部进行信道编码,dPMR协议栈打包,数字滤波以及4FSK调制,调制编码后的语音数据经CMX7141芯片的MOD1/2管脚分别输出给外部的发射VCO和压控温补参考时钟,经两点调制输出射频载波给发射功放,并到天线输出。
接收时,CMX7141对基于超外差射频接收模块送来的4FSK解调信号在微控制器LPC2138的控制和管理下进行4FSK解调,dPMR拆包,信道解码,最终得到语音编码数据,经SPI串口送给CMX618进行语音解压缩并恢复语音信号。
2关键器件
语音编解码片CMX618是CML微电子(新加坡)私人有限公司的产品,芯片由音频压缩/解压器、RALCWI编解码器、前向纠错编解码器和其他特殊功能模块几部分组成。
RALCWI是一种鲁棒的先进的复杂性波形插入技术,与其他语音编解码技术不同,它使用独有的信号分解和参数编码方法,可确保在较高的压缩率下有较好的语音质量。
在声码器中,采用RALCWI技术实现的语音质量与编码速率在4kbps以上的标准声码器话音质量相当。
概述
本方案优点是开发时的灵活性高,模拟与数字可双模设计,且同一个硬件开发平台能满足不同的数字对讲机标准,支持多种语音声码器,射频的接收灵敏度可做得较高达到-118dBm(误码率为1%时)。发射功率05W,功率容易提升。
缺点是前期的软件开发成本高并有一定难度,射频模块ATB010只支持dPMR的EN301,166标准,不支持DMR
方案四 以MCU+DSP的DMR对讲机方案(MSP430FG4619+VC5510)
1工作原理
发射时,由麦克送来的模拟语音经模数转换器AD73311采样成数字信号,AMBE2000对语音数字信号进行压缩编码,数字信号由VC5510进行DMR通信协议填充组成帧信号和4FSK的调频波成形,最后由微控制器MCU进行D/A转换,送往射频模块进行发射调制,实现发射。
接收时,MCU将射频模块送来已解调数据进行A/D转换,经VC5510进行拆帧,交AMBE2000进行解压,数据由AD73311数模转换为语音信号。
微控制器MSP430FG4619是整个系统的控制中心,人机接口如键盘、显示器与MCU直接连接。微控制器实现对射频模块的控制,包括基带信号的发送与接收、射频频率点的控制、信道检测等,MCU还负责DMR协议的高层信令控制、人机接口的互通等。
另外,请注意微控制器还要完成基带信号的AD/DA转换功能。
2关键器件
AMBE2000TM声码器是美国语音公司DVSI推出的一款适应性强、高性能、单芯片的语音压缩编解码器。它能在低速率下提供优良的语音质量,并实现了实时的、全双工的标准设定的AMBE语音压缩软件算法。
大量的评估显示,这款声码器具有在一般数据速率下提供同数字蜂窝系统一样性能的能力。AMBE在24kbps速率下保持自然语音质量和清晰度,由于AMBE算法复杂性低,所以它能够完全集成在成本低、功耗低的芯片上。
概述
方案简单,实用。
软件开发中,微控制器和数字处理器的程序对DMR协议的分层必须有清晰的概念,正确的程序设计是硬件实现的保证。声码器的选用有较大的余地。
方案五 以ARM+DSP的DMR对讲机方案
1工作原理
发射时,由麦克送来的话音信号由数模转换器AD73311进行采样,数据由声码器进行压缩,OMAP5910内的DSP与ARM对压缩的数据进行协议添加与控制,形成4FSK波形,数模转换器AIC23将4FSK数字波形模拟化后进行射频调制,调频载波由天线发射。
接收时,射频模块对接收的模拟信号进行解调,模拟信号交AIC23进行数字化处理,OMAP5910对接收到的数据进行信道解码和拆帧,帧信号交声码器进行解压,数据由AD73311还原为模拟语音信号。
2关键器件
OMAP5910是一款嵌入式双核处理器,它集成了高性能的ARM925、TMS320C55x DSP核和已经得到的广泛应用的各种接口与外设,具有较强的处理能力、较低的功耗和较高的信价比。ARM处理器内核用于DMR协议的处理与系统控制,DSP内核用于完成数字信号的实时处理。
OMAP5910及其设计套件具有多个目标应用市场,提供多媒体功能、改善人机界面并延长电池寿命。
概述
从技术上讲,双核处理器方案与前面介绍的DSP+MCU相比,可以降低系统体积,减少电路的复杂性,对通信协议能作较好的兼容,升级空间大。声码器的应用有可选国产芯片的余地。
缺点是前期的软件开发工作量大,ARM与DSP间的协调工作要深入研究,以免浪费处理器的资源。此外,由于OMAP的功能十分强大,该平台还可以有更多的应用,如加入视频、娱乐等功能。
方案六
1工作原理
发射时,麦克送来的模拟语音经WM8758B进行A/D转换,送到SCT3252进行压缩处理,经SCT3252进行dPMR协议处理后送到WM8758B的D/A转换单元调制成4FSK信号,经两点调制输出射频载波给发射功放,送天线输出。
接收时,WM8758B对射频模拟信号进行A/D转换,送到SCT3252进行4FSK解调,dPMR拆包,信道解码,最终得到语音编码数据,经解码处理后把语音数据送到WM8758B进行D/A转换,经由外部放大电路送入喇叭还原成话音。
2关键器件
SCT3252是上海士康公司生产的语音编解码及dPMR协议栈处理芯片。具有较好的语音质量及较高的接收灵敏度(可达-126dBm)。
概述
本方案的特点是语音编解码及dPMR协议栈都集成在SCT3252中,大大减少了控制单元MCU的工作量,另外SCT3252为LQFP100封装,焊接方便。整个方案简单,软件升级的空间大。本方案可以实现数模兼容,通过开关可方便进行数字与模拟通信之间的切换。
WM8758B只起模数转换作用,厂家认为,把它集成进SCT3252是指日可待的事。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13213901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-21
下一篇 2023-06-21

发表评论

登录后才能评论

评论列表(0条)

保存