加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

PWM波发生电路解析

(2011-09-19 00:18:46)
标签:

multisim

pwm波

it

分类: electronic

1.三角波产生电路。

    三角波的作用是用来调制音频信号,对此有两方面的要求:其一,调制后的信号可以被完整地恢复。根据Nyquist采样定理,三角波的频率至少是音频信号最高频率的两倍,人类听到的声频范围是20 Hz~20kHz,说明三角波的频率应在40 kHz以上,为确保音频信号的采样,可取三角波的频率为150 kHz。其二,三角波要有稳定的频率和幅度,否则,调制后的脉宽会产生变形,从而降低音频输出的信噪比,音质变差,噪声增大。

该电路我们采用NE5532 及高速精密电压比较器LM311来实现,电路图如图9所示。NE5532具有较宽的频带,而且可以在较低的电压下满幅输出,保证能产生线性良好的三角波。

载波频率的选定既要考虑抽样定理,又要考虑电路的实现,选择 150 kHz 的载波,使用四阶 Bultterworth LC 滤波器,输出端对载频的衰减大于 60dB,满足设计的要求,所以我们选用载波频率为150 kHz。

电路参数的计算:在 5V单电源供电下,我们将运放 5 脚和比较器3 脚的电位用R8调整为 2.5 V,同时设定输出的对称三角波幅度为 1 V(Vp-p=2V)。若选定R10为 100 kΩ,并忽略比较器高电平时R11上的压降,则剩下参数可以求解,不再赘述。

2.比较器电路

     选用LM311精密,高速比较器,电路如图4-5所示,因供电为5V单电源,为给V+=V-提供2.5V 的静态电位,取R12=R15R13=R144个电阻均取 10 kΩ。由于三角波Vp-p=3V,所以要求音频信号的Vp-p不能大于3V否则会使功放产生失真。

PWM波发生电路解析

PWM波发生电路解析

    

---------------------------------------------------------------------------------------------

下面是使用cortex_m3开发板产生PWM波的代码

c) 初始化函数定义:
void TIM_Configuration(void);   //定义TIM初始化函数
d) 初始化函数调用:
TIM_Configuration();   //TIM初始化函数调用
e) 初始化函数,不同于前面模块,TIM的初始化分为两部分——基本初始化和通道初始化:
void TIM_Configuration(void)//TIM初始化函数
{
   TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;//定时器初始化结构
   TIM_OCInitTypeDef   TIM_OCInitStructure;//通道输出初始化结构

//TIM3初始化
   TIM_TimeBaseStructure.TIM_Period = 0xFFFF;        //周期0~FFFF
   TIM_TimeBaseStructure.TIM_Prescaler = 5;       //时钟分频
   TIM_TimeBaseStructure.TIM_ClockDivision = 0;    //时钟分割
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式
   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //基本初始化
   TIM_ITConfig(TIM3, TIM_IT_CC4, ENABLE);//打开中断,中断需要这行代码
 
//TIM3通道初始化
   TIM_OCStructInit(& TIM_OCInitStructure);                                              //默认参数
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                    //工作状态
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //设定为输出,需要PWM输出才需要这行代码
   TIM_OCInitStructure.TIM_Pulse = 0x2000;                   //占空长度
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;                 //高电平
   TIM_OC4Init(TIM3, &TIM_OCInitStructure);                   //通道初始化

   TIM_Cmd(TIM3, ENABLE);                                                                      //启动TIM3
}

f) RCC初始化函数中加入TIM时钟开启:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM3, ENABLE);
g) GPIO里面将输入和输出管脚模式进行设置。信号:AF_PP,50MHz。
h) 使用中断的话在NVIC里添加如下代码:

//打开TIM2中断
   NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;   //通道
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;//占先级
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;           //响应级
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       //启动
   NVIC_Init(&NVIC_InitStructure);                                            //初始化

中断代码:
void TIM2_IRQHandler(void)
{
   if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)    //判断中断来源
   {
TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);          //清除中断标志
GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_11)));//变换LED色彩
IC4value = TIM_GetCapture4(TIM2);                //获取捕捉数值
  
}

i) 简单应用:
//改变占空比
TIM_SetCompare4(TIM3, 变量);

j) 注意事项:
管脚的IO输出模式是根据应用来定,比如如果用PWM输出驱动LED则应该将相应管脚设为AF_PP,否则单片机没有输出。

       

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有