搜索
bottom↓
回复: 23

请高手给点建议,想用在CPLD中做一路PWM输出(对速度没要求)。

[复制链接]

出0入0汤圆

发表于 2005-10-14 14:31:23 | 显示全部楼层 |阅读模式
我电路中PMW用完了,想用在CPLD(MAX7000)中做一路PWM输出(对速度没要求),

想利用库中的锁储器、二位加法器和一些与门来搭一个,但了好多天。

想高手给点建议。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2005-10-14 14:52:28 | 显示全部楼层
计数器

出0入0汤圆

 楼主| 发表于 2005-10-14 16:12:41 | 显示全部楼层
谢谢。

你是指用中断来做的吗?我也想过,开消太大了。

如果在CPLD中做我不知如何做一个可设定的计数器,求教?

出0入0汤圆

发表于 2005-10-14 16:20:30 | 显示全部楼层
用CPLD做PWM太耗费资源了,成本太高

出0入0汤圆

 楼主| 发表于 2005-10-14 16:44:37 | 显示全部楼层
我现在有的资源就是CPLD啊!在CPLD中做我不知如何做一个可设定的计数器,求教?

出0入0汤圆

发表于 2005-10-14 16:52:32 | 显示全部楼层
MaxPlus里面有现成的啊,可预设初值的计数器

出0入0汤圆

发表于 2005-10-14 17:09:41 | 显示全部楼层
CPLD想做个PWM,最起码需要这些资源:



1、至少8个逻辑单元做计数器;

2、8个逻辑单元做比较寄存器;

3、8个逻辑单元做设置数据通道;

4、若干个逻辑单元做比较器

5、为了防止CPLD发生竞争冒险(亚稳态),还要使用同步逻辑。这些同步逻辑大约是上述逻辑单元的1.5-2倍(否则你的PWM输出肯定会有毛刺)

6、CPLD资源还不可能被全部利用,80%的利用率就不错了。



你想想,这样一个逻辑,要使用多大规模的CPLD?至少要MAX7128之类才可能实现。MAX7128比单片机贵多了。有这个代价,不如换一种单片机或者就用软件实现。你不是不在乎速度吗?软件实现起来便捷多了。

出0入0汤圆

 楼主| 发表于 2005-10-14 17:10:36 | 显示全部楼层
是吗? 谢谢。

我找一下。

出0入0汤圆

 楼主| 发表于 2005-10-14 17:48:26 | 显示全部楼层
谢谢 AA55!



请看4楼.

出0入4汤圆

发表于 2005-10-14 18:35:14 | 显示全部楼层
用程序编写

很简单的 verilog HDL代码



介绍:仅仅实现8bitPWM功能,没有别的功能,通过设置data数据可以设定占空比

频率是clk/255HZ;

pwmOut:是PWM输出引脚

cs:选通信号,低电平时把data的数据写到pwmreg寄存器中去

counter:相当于AVR中TCNT

pwmreg:相当于AVR中的OCR







从这里开始是代码:因为最近比较忙,代码写的很粗糙



module pwm(data,clk,pwmOut,cs);



input clk;                //主时钟信号;

input cs;

input [7:0]data;



output pwmOut;

reg pwmOut;

reg [7:0]pwmreg;

reg [7:0]counter;



always @(posedge clk)

begin

if(!cs)

pwmreg=data;

end



always @(posedge clk)

begin

  counter=counter+1;

  if(counter>=pwmreg)

  pwmOut=0;

  else

  pwmOut=1;         

end

endmodule   //代码结束





我用的是MAXPLUS 2,编译后的资源利用情况,显示使用了34个宏单元,显然,用这么的多积存器是

比较消耗CPLD资源的,如果在附加一些功能,比如设置分频数,多个PWM通道,选择位数更高的PWM

则需要更多的宏单元,说明一下EPM7128有128个宏单元,价格50元,非常耗电

如果PWM需要很多,到是可以选择EPM7064,因为多路PWM其实couter是公用的,data是公用的,



pwmreg的个数就是PWM的路数,估计7064能做5-6路PWM



** DEVICE SUMMARY **



Chip/                     Input   Output   Bidir         Shareable

POF       Device          Pins    Pins     Pins     LCs  Expanders  % Utilized



pwm       EPM7064SLC44-5   10       1        0      34      23          53 %



User Pins:                 10       1        0  



仿真结果:















-----此内容被ilan2003于2005-10-14,19:14:22编辑过


-----此内容被ilan2003于2005-10-14,19:19:55编辑过

出0入0汤圆

 楼主| 发表于 2005-10-15 08:51:31 | 显示全部楼层
谢谢  ilan2003 小松工程

出0入0汤圆

发表于 2005-10-15 09:42:56 | 显示全部楼层
小松工程给出的例子是为了说明原理的,其实真正用在工程上,这代码要细化。



比如,计数器和比较器是通过时钟同时驱动的,就有可能因为延迟路径不同,有可能会在输出产生毛刺。应该在计数器处于稳定状态时候,再去比较,这就是同步逻辑的意思。



另外,没有输入数据锁存逻辑和写数据逻辑以及总线机制,在MAXPLUS上仿真无妨,但是真正下载到CPLD上,你如何与单片机接口?这还需要一大片逻辑单元来支持



所以我说,用CPLD来做PWM其实很不划算。

出0入0汤圆

发表于 2005-10-15 21:58:30 | 显示全部楼层
转一个



频率为CLK/4096

出0入0汤圆

发表于 2005-10-15 22:11:52 | 显示全部楼层
唉。都没法说了



这个例子虽然有了4位同步逻辑,但是191和191之间还是异步的逻辑(但而且现上占用的逻辑单元一点儿也不少,只不过被封装了而已),但仍然没有输入锁存和总线控制逻辑(也没有他们和计数器、比较器之间的同步逻辑),并且存在CPLD设计上最忌讳的回馈逻辑。



难道大家真的就认为工程应用和做课堂实验一样简单?只要基本答案对了就不管它是不是严谨了?

出0入0汤圆

发表于 2005-10-16 02:06:12 | 显示全部楼层
请楼上的给出一个完整没有漏洞的例子



学习一下

出0入0汤圆

发表于 2005-10-16 20:19:23 | 显示全部楼层
学习一下?您是想学习吗?我看是不服气想犟两句吧。



我已经说过,上述两个方案都存在对行波计数进行比较译码时候的竞争冒险现象。这个基本问题都想不到,只能说明数字电子技术基础知识不够牢固。如果基础知识不牢固,就是我给你一个解决方案,能真正“学习”并领会吗?



还有,没有复位逻辑来确定初始状态,这个PWM怎么用?上电后自己先乱跑,一直等到单片机来设定吗?没有初始化的随机状态PWM如果用在工程上,要惹祸的。更何况方案根本没有单片机控制接口,从哪里下手控制?这些都是工程实际上要切实解决的,否则这个"PWM"根本就不能实用。

出0入0汤圆

发表于 2005-10-16 22:31:14 | 显示全部楼层
当然是学习了



我当时就说了,是“转一个”根本就不是我做的



只是很想学习一下

出0入4汤圆

发表于 2005-10-17 08:33:24 | 显示全部楼层
恩,我的代码确实属于原理的,仅仅说明还有一种解决方法的途径,那就是写verilog HDL代码,相对与图形输入方式实现起来要简单。



实际工程中应用要注意很多的细节的。在功能上,和可靠性上还需要不断的完善的,

具体看这里,在这里有很多资料的http://www.fpga.com.cn/

出0入0汤圆

 楼主| 发表于 2005-10-17 23:42:47 | 显示全部楼层
多谢各位的热心,高手们能多多指教。

AA55 请教一下,在MaxPlus里现成的计数器下载到器件后会出现竞争吗?

出0入0汤圆

发表于 2005-10-18 07:58:15 | 显示全部楼层
现成的计数器要看选的哪一种。如果选用同步计数器还好一些,如果是异步计数器(也就是行波计数器),竞争冒险是难以避免的。



小松工程推荐的网站你最好去看看。那里反复提到如何避免亚稳态、竞争冒险的方法。另外,现在的PLD设计基本上都应该是同步的,异步设计很难避免上述问题。



用原理图方式搭建的PLD,比较容易出现上述问题。因为同步设计比较耗费资源(当然也能带来一堆好处),所以用原理图方式设计比较麻烦,为了简化设计,很多人就放弃了同步。

出0入0汤圆

发表于 2008-2-15 10:22:41 | 显示全部楼层
顶!好贴!

出0入0汤圆

发表于 2008-4-8 14:14:04 | 显示全部楼层
好贴!

出0入0汤圆

发表于 2010-8-30 09:55:26 | 显示全部楼层
好贴!

出0入0汤圆

发表于 2010-8-30 10:40:11 | 显示全部楼层
用MAX ii 一个累加器+比较器就行

分辨率可以做到2^32甚至更高
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表