虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

PWM信号

  • 基于FPGA的PWM发生器的研究与设计.rar

    PWM(脉冲宽度调制)是一种利用数字信号来控制模拟电路的控制技术,广泛应用于电源、电机、伺服系统、通信系统、电子控制器、功率控制等电力电子设备。PWM技术在逆变电路中的应用最为广泛,也是变频技术的核心,同时在机床,液压位置控制系统等机械装置中也发挥着重要的作用。PWM技术已经成为控制领域的一个热点,因此研究PWM发生器对于基础理论的发展和技术的改进都有十分重要的意义。 论文研究的主要内容是用任意波形作为调制信号通过特定的方法来产生所需要的PWM波形,任意波形的合成和PWM波形的生成是两个主要任务。任意波形的合成是课题设计的一个难点,也是影响系统性能的关键因素之一。论文中波形合成采用直接数字频率合成(DDS)技术来实现。DDS技术以相位为地址,通过查找离散幅度数据进行波形合成,具有输出波形相位变化连续、分辨率高、频率转换速率快的优点,而且通过设置控制字可灵活方便地改变输出频率,是目前波形合成的主流方法。 实现PWM发生器的设计方法有多种。在综合比较了单片机、DSP、ARM等常用开发工具特点的基础上,本文提出了一种以可编程逻辑器件(PLD)为主体,单片机辅助配合的设计方法。随着计算机技术和微电了技术的迅速发展,可编程逻辑器件的集成度和容量越来越大,基于PLD的设计方法正逐步成为一种主流于段,是近些年来电子系统设计的一个热点。整个系统分为模拟波形产生、单片机控制电路、FPGA内部功能模块三大部分。FPGA部分的设计是以Altera公司的Quartus Ⅱ软件为开发平台,采用VHDL语言为主要输入手段来完成内部各功能模块的设计输入、编译、仿真等调试工作,目标载体选用性价比比较高的Altera公司的CycloneⅡ系列的器件;单片机控制电路主要负责控制字的设置和显示,波形数据的接受与发送;用MATLAB软件完成仟意波形的绘制和模拟任务。 论文共分五章,详细介绍了课题的背景、PWM发生器的发展和应用以及选题的目的和意义等,论述了系统设计方案的可行性,对外围电路和FPAG内部功能模块的设计方法进行了具体说明,并对仿真结果、系统的性能、存在的问题和改进方法等进行了分析和阐述。整个设计满足PWM发生器的任务和功能要求,设计方法可行。

    标签: FPGA PWM 发生器

    上传时间: 2013-04-24

    上传用户:ommshaggar

  • 如何用ST7 PWM ST7 BRM产生模拟信号输出(50Hz正弦波)

    The purpose of this note is to present how to use the ST7 PWM/BRM for the generation of a50Hz si

    标签: ST7 PWM BRM 50

    上传时间: 2013-06-01

    上传用户:huyanju

  • 基于FPGA的PWM发生器的研究与设计

    PWM(脉冲宽度调制)是一种利用数字信号来控制模拟电路的控制技术,广泛应用于电源、电机、伺服系统、通信系统、电子控制器、功率控制等电力电子设备。PWM技术在逆变电路中的应用最为广泛,也是变频技术的核心,同时在机床,液压位置控制系统等机械装置中也发挥着重要的作用。PWM技术已经成为控制领域的一个热点,因此研究PWM发生器对于基础理论的发展和技术的改进都有十分重要的意义。 论文研究的主要内容是用任意波形作为调制信号通过特定的方法来产生所需要的PWM波形,任意波形的合成和PWM波形的生成是两个主要任务。任意波形的合成是课题设计的一个难点,也是影响系统性能的关键因素之一。论文中波形合成采用直接数字频率合成(DDS)技术来实现。DDS技术以相位为地址,通过查找离散幅度数据进行波形合成,具有输出波形相位变化连续、分辨率高、频率转换速率快的优点,而且通过设置控制字可灵活方便地改变输出频率,是目前波形合成的主流方法。 实现PWM发生器的设计方法有多种。在综合比较了单片机、DSP、ARM等常用开发工具特点的基础上,本文提出了一种以可编程逻辑器件(PLD)为主体,单片机辅助配合的设计方法。随着计算机技术和微电了技术的迅速发展,可编程逻辑器件的集成度和容量越来越大,基于PLD的设计方法正逐步成为一种主流于段,是近些年来电子系统设计的一个热点。整个系统分为模拟波形产生、单片机控制电路、FPGA内部功能模块三大部分。FPGA部分的设计是以Altera公司的Quartus Ⅱ软件为开发平台,采用VHDL语言为主要输入手段来完成内部各功能模块的设计输入、编译、仿真等调试工作,目标载体选用性价比比较高的Altera公司的CycloneⅡ系列的器件;单片机控制电路主要负责控制字的设置和显示,波形数据的接受与发送;用MATLAB软件完成仟意波形的绘制和模拟任务。 论文共分五章,详细介绍了课题的背景、PWM发生器的发展和应用以及选题的目的和意义等,论述了系统设计方案的可行性,对外围电路和FPAG内部功能模块的设计方法进行了具体说明,并对仿真结果、系统的性能、存在的问题和改进方法等进行了分析和阐述。整个设计满足PWM发生器的任务和功能要求,设计方法可行。

    标签: FPGA PWM 发生器

    上传时间: 2013-06-03

    上传用户:a155166

  • 三相PWM整流器的死区效应分析及补偿方法

    在三相PWM 整流器的功率管驱动信号中加入死区时间可防止电压直通,但这会对变换器的电压电流波形产生影响,称之为死区效应。为此,详细描述了死区时间内变换器的工作过程,提出了三相PWM 整流器的死区电压效应和电流效应,并分别进行了定量分析。然后结合空间矢量调制策略,引入了死区效应空间矢量的概念,统一并从本质上解释了死区的两种效应。为了克服死区效应的不良影响,提出了两种补偿措施,并详细介绍了利用DSP 的数字实现方法,这两种措施均不需要改变硬件电路,也不会增加控制器的复杂度和负担。最后,通过实验验证了理论分析的正确性和补偿措施的有效性,还指明了进一步研究的方向。

    标签: PWM 三相 整流器 效应分析

    上传时间: 2013-10-21

    上传用户:Aeray

  • 基于C8051F410的精确信号模拟电路设计

    针对某型检测设备使用中存在的工作点不稳定问题,基于C8051F410 单片机,采用PWM 调制技术和负反馈测量技术设计了一种新型的精确信号模拟电路,有效抑制了工作点漂移问题,提高了模拟电路输出精度和抗噪性能。本电路的设计思想和方法对于同类电路的设计具有一定的借鉴意义。

    标签: C8051F410 信号 模拟电路设计

    上传时间: 2014-10-14

    上传用户:dapangxie

  • PWM的调速原理与应用—小车调速

    17-1.  PWM调速基本原理17-2.  P89V51RD2的PWM功能模块结构与应用17-3.  智能小车电机调速案例分析  17-4.  课后思考和实验准备PWM脉冲驱动电路直流电机的速度控制中,需要对控制信号进行功率驱动或电气隔离,以下为典型应用电路(负载为直流电机M1)。 P89V51RD2的几个重要寄存器CMOD-PCA计数器方式寄存器CCON-PCON计数器控制寄存器CCAPMn-PCA模块比较/捕获寄存器(n=1、2、3、4、5)

    标签: PWM 调速

    上传时间: 2014-01-03

    上传用户:tianyi996

  • Arduino学习笔记4_Arduino软件模拟PWM

    注:1.这篇文章断断续续写了很久,画图技术也不精,难免错漏,大家凑合看.有问题可以留言.      2.论坛排版把我的代码缩进全弄没了,大家将代码粘贴到arduino编译器,然后按ctrl+T重新格式化代码格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脉宽调制波,通过调整输出信号占空比,从而达到改 变输出平均电压的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 个8 位精度PWM 引脚,分别是3, 5, 6, 9, 10, 11 脚。我们可以使用analogWrite()控 制PWM 脚输出频率大概在500Hz 的左右的PWM 调制波。分辨率8 位即2 的8 次方等于 256 级精度。但是有时候我们会觉得6 个PWM 引脚不够用。比如我们做一个10 路灯调光, 就需要有10 个PWM 脚。Arduino Duemilanove 2009 有13 个数字输出脚,如果它们都可以 PWM 的话,就能满足条件了。于是本文介绍用软件模拟PWM。 二、Arduino 软件模拟PWM Arduino PWM 调压原理:PWM 有好几种方法。而Arduino 因为电源和实现难度限制,一般 使用周期恒定,占空比变化的单极性PWM。 通过调整一个周期里面输出脚高/低电平的时间比(即是占空比)去获得给一个用电器不同 的平均功率。 如图所示,假设PWM 波形周期1ms(即1kHz),分辨率1000 级。那么需要一个信号时间 精度1ms/1000=1us 的信号源,即1MHz。所以说,PWM 的实现难点在于需要使用很高频的 信号源,才能获得快速与高精度。下面先由一个简单的PWM 程序开始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 这是一个软件PWM 控制Arduino D13 引脚的例子。只需要一块Arduino 即可测试此代码。 程序解析:由for 循环可以看出,完成一个PWM 周期,共循环255 次。 假设bright=100 时候,在第0~100 次循环中,i 等于1 到99 均小于bright,于是输出PWMPin 高电平; 然后第100 到255 次循环里面,i 等于100~255 大于bright,于是输出PWMPin 低电平。无 论输出高低电平都保持30us。 那么说,如果bright=100 的话,就有100 次循环是高电平,155 次循环是低电平。 如果忽略指令执行时间的话,这次的PWM 波形占空比为100/255,如果调整bright 的值, 就能改变接在D13 的LED 的亮度。 这里设置了每次for 循环之后,将bright 加一,并且当bright 加到255 时归0。所以,我们 看到的最终效果就是LED 慢慢变亮,到顶之后然后突然暗回去重新变亮。 这是最基本的PWM 方法,也应该是大家想的比较多的想法。 然后介绍一个简单一点的。思维风格完全不同。不过对于驱动一个LED 来说,效果与上面 的程序一样。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,这段代码少了一个For 循环。它先输出一个高电平,然后维持(bright*30)us。然 后输出一个低电平,维持时间((255-bright)*30)us。这样两次高低就能完成一个PWM 周期。 分辨率也是255。 三、多引脚PWM Arduino 本身已有PWM 引脚并且运行起来不占CPU 时间,所以软件模拟一个引脚的PWM 完全没有实用意义。我们软件模拟的价值在于:他能将任意的数字IO 口变成PWM 引脚。 当一片Arduino 要同时控制多个PWM,并且没有其他重任务的时候,就要用软件PWM 了。 多引脚PWM 有一种下面的方式: int brights[14] = {0}; //定义14个引脚的初始亮度,可以随意设置 int StartPWMPin = 0, EndPWMPin = 13; //设置D0~D13为PWM 引脚 int PWMResolution = 255; //设置PWM 占空比分辨率 void setup() { //定义所有IO 端输出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //随便定义个初始亮度,便于观察 brights[ i ] = random(0, 255); } } void loop() { //这for 循环是为14盏灯做渐亮的。每次Arduino loop()循环, //brights 自增一次。直到brights=255时候,将brights 置零重新计数。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是计数一个PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每个PWM 周期均遍历所有引脚 { if(i < brights[j])\   所以我们要更改PWM 周期的话,我们将精度(代码里面的变量:PWMResolution)降低就行,比如一般调整LED 亮度的话,我们用64 级精度就行。这样速度就是2x32x64=4ms。就不会闪了。

    标签: Arduino PWM 软件模拟

    上传时间: 2013-10-08

    上传用户:dingdingcandy

  • Arduino学习笔记4_Arduino软件模拟PWM

    注:1.这篇文章断断续续写了很久,画图技术也不精,难免错漏,大家凑合看.有问题可以留言.      2.论坛排版把我的代码缩进全弄没了,大家将代码粘贴到arduino编译器,然后按ctrl+T重新格式化代码格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脉宽调制波,通过调整输出信号占空比,从而达到改 变输出平均电压的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 个8 位精度PWM 引脚,分别是3, 5, 6, 9, 10, 11 脚。我们可以使用analogWrite()控 制PWM 脚输出频率大概在500Hz 的左右的PWM 调制波。分辨率8 位即2 的8 次方等于 256 级精度。但是有时候我们会觉得6 个PWM 引脚不够用。比如我们做一个10 路灯调光, 就需要有10 个PWM 脚。Arduino Duemilanove 2009 有13 个数字输出脚,如果它们都可以 PWM 的话,就能满足条件了。于是本文介绍用软件模拟PWM。 二、Arduino 软件模拟PWM Arduino PWM 调压原理:PWM 有好几种方法。而Arduino 因为电源和实现难度限制,一般 使用周期恒定,占空比变化的单极性PWM。 通过调整一个周期里面输出脚高/低电平的时间比(即是占空比)去获得给一个用电器不同 的平均功率。 如图所示,假设PWM 波形周期1ms(即1kHz),分辨率1000 级。那么需要一个信号时间 精度1ms/1000=1us 的信号源,即1MHz。所以说,PWM 的实现难点在于需要使用很高频的 信号源,才能获得快速与高精度。下面先由一个简单的PWM 程序开始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 这是一个软件PWM 控制Arduino D13 引脚的例子。只需要一块Arduino 即可测试此代码。 程序解析:由for 循环可以看出,完成一个PWM 周期,共循环255 次。 假设bright=100 时候,在第0~100 次循环中,i 等于1 到99 均小于bright,于是输出PWMPin 高电平; 然后第100 到255 次循环里面,i 等于100~255 大于bright,于是输出PWMPin 低电平。无 论输出高低电平都保持30us。 那么说,如果bright=100 的话,就有100 次循环是高电平,155 次循环是低电平。 如果忽略指令执行时间的话,这次的PWM 波形占空比为100/255,如果调整bright 的值, 就能改变接在D13 的LED 的亮度。 这里设置了每次for 循环之后,将bright 加一,并且当bright 加到255 时归0。所以,我们 看到的最终效果就是LED 慢慢变亮,到顶之后然后突然暗回去重新变亮。 这是最基本的PWM 方法,也应该是大家想的比较多的想法。 然后介绍一个简单一点的。思维风格完全不同。不过对于驱动一个LED 来说,效果与上面 的程序一样。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,这段代码少了一个For 循环。它先输出一个高电平,然后维持(bright*30)us。然 后输出一个低电平,维持时间((255-bright)*30)us。这样两次高低就能完成一个PWM 周期。 分辨率也是255。 三、多引脚PWM Arduino 本身已有PWM 引脚并且运行起来不占CPU 时间,所以软件模拟一个引脚的PWM 完全没有实用意义。我们软件模拟的价值在于:他能将任意的数字IO 口变成PWM 引脚。 当一片Arduino 要同时控制多个PWM,并且没有其他重任务的时候,就要用软件PWM 了。 多引脚PWM 有一种下面的方式: int brights[14] = {0}; //定义14个引脚的初始亮度,可以随意设置 int StartPWMPin = 0, EndPWMPin = 13; //设置D0~D13为PWM 引脚 int PWMResolution = 255; //设置PWM 占空比分辨率 void setup() { //定义所有IO 端输出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //随便定义个初始亮度,便于观察 brights[ i ] = random(0, 255); } } void loop() { //这for 循环是为14盏灯做渐亮的。每次Arduino loop()循环, //brights 自增一次。直到brights=255时候,将brights 置零重新计数。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是计数一个PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每个PWM 周期均遍历所有引脚 { if(i < brights[j])\   所以我们要更改PWM 周期的话,我们将精度(代码里面的变量:PWMResolution)降低就行,比如一般调整LED 亮度的话,我们用64 级精度就行。这样速度就是2x32x64=4ms。就不会闪了。

    标签: Arduino PWM 软件模拟

    上传时间: 2013-10-23

    上传用户:mqien

  • :介绍了一种基于数字信号处理器(DSP)的移相调频(Phase-Shifted and Frequency-Varied

    :介绍了一种基于数字信号处理器(DSP)的移相调频(Phase-Shifted and Frequency-Varied,PSFV)PWM控制 逆变电源,给出了主电路拓扑结构,分析了其控制原理并设计了其控制程序流程图。新颖的PSFV 控制能够实现输出 电压90%的调整率,输出电流波动小于单纯移相调功PWM方式,并在轻载时保持连续。功率开关器件零电压零电流 通断(Zero-Voltage-Zero-Current Switching,ZVZCS)软开关的实现,有利于进一步提高开关频率和降低开关损耗。采用 高性能的专用DSP 芯片TMS320F2812 实现了系统的数字控制,满足了系统控制的灵活性和实时性,减小了系统的 体积和生产成本。仿真分析和实验结果证明了此控制模式的可行性与合理性。

    标签: Frequency-Varied Phase-Shifted DSP and

    上传时间: 2013-12-04

    上传用户:kristycreasy

  •  PSoC(可编程片上系统)是Cypress半导体公司生产的包含有8位微处理器核和数字与模拟混合的信号阵列芯片

     PSoC(可编程片上系统)是Cypress半导体公司生产的包含有8位微处理器核和数字与模拟混合的信号阵列芯片,其应用领域与8位的MCU相同。与8位的MCU的区别在于PSoC的数字周边资源(如定时器、PWM、UART等等)和模拟周边资源(放大器、比较器、滤波器等等)以数字模块和模拟模块的方式给出。不同型号的PSoC芯片的差异,主要是拥有数字模块和模拟模块的数量不同,用户可以根据自己的需要来定义这些模块。所有这些预定义的模块称为用户模块。在PSoC Express出现以前,开发PSoC的应用项目与MCU的应用开发相似,使用PSoC Designer集成开发环境,根据项目的需要调用和配置资源(用户模块),然后编写代码(C或汇编)、编译、调试等步骤,制成目标芯片。

    标签: Cypress PSoC 8位微处理器 可编程片上系统

    上传时间: 2013-12-31

    上传用户:netwolf