打印

2007年9月专题讨论----PWM的讨论

[复制链接]
楼主: 救火车
手机看帖
扫描二维码
随时随地手机跟帖
61
hsw_21| | 2007-9-6 13:39 | 只看该作者 回帖奖励 |倒序浏览

没实际应用过。PWM很有意思,但感觉也很深奥!

农民讲习所 发表于 2007-9-1 09:26 侃单片机 ←返回版面    

15楼: PWM实现方式用很多种,下面是从网上找来的 

几种PWM控制方法 
 
看了“农民讲习所”老师的这个帖子,发表如题感慨!^_^

使用特权

评论回复
62
hq_y| | 2007-9-6 13:51 | 只看该作者

目前俺只对用DSP生成SPWM做逆变电源感兴趣……

使用特权

评论回复
63
新好男孩| | 2007-9-6 17:29 | 只看该作者

用单片机做降压型开关电源!

用单片机做降压型开关电源!
目前在用单片机做锂电充电器,用PWM控制MOS管恒流给电池充电,从100mA到1A可调,很好用.8位的ADC电流精度可以控制在20mA.

使用特权

评论回复
64
eraychen| | 2007-9-9 22:46 | 只看该作者

re:

pwm在电机调速上用的比较多,通过控制mos管的导通时间,调节电机的电压,从而达到控制电机速度,不过控制曲线不是怎么平滑。

使用特权

评论回复
65
古道热肠| | 2007-9-10 10:41 | 只看该作者

PWM电机调速的缺点

 速度是调下来了,力矩也损失不少,大家有何良策,我们现在都用大功率电机和机械减速器来补偿这种损失。

使用特权

评论回复
66
zhlking| | 2007-9-10 17:36 | 只看该作者

用PWM做步进电机细分可以改善电机转动的平滑性

用PWM做步进电机细分可以改善电机转动的平滑性,且做上细分力矩反而会增大的,网上很多相关的资料,但如何生成一份好的细分及调速表很很重要~

使用特权

评论回复
67
甄蔡组合| | 2007-9-10 20:30 | 只看该作者

求学

小弟,也在自己实验PWM 希望能得到高人的指点。
十分感谢!!
如有相关的资料请给小弟发一些zhenyongan2008@163.com
十分感谢

使用特权

评论回复
68
kukucat| | 2007-9-10 21:09 | 只看该作者

点刹式如何?

如:全通或**十%的PWM情况下,先正通5ms,再反通2ms等等

使用特权

评论回复
69
conwh| | 2007-9-12 20:57 | 只看该作者

力矩的损失可以通过闭环来解决

使用特权

评论回复
70
xieguangye| | 2007-9-13 08:56 | 只看该作者

MCU的PWM

1。直接应用PWM模块,不同MCU有数种PWM波形,按模式应用简单,而且PWM模块
   一般都带RC处理部分。
2。使用I/O口模式,任意定义自己需要是的占空比。
数字信号直接驱动其实效果还是看等效面积,这与积分后的信号是一个原理。。
在频率较大情况小可以等效于积分的效果,比如PWM信号控制LED的亮度,周期10MS左右的PWM信号控制外部不需要加积分电路

使用特权

评论回复
71
coko| | 2007-9-13 19:09 | 只看该作者

走南闯北

三,省电功能
  曾经做过一个产品,带红外接收,不过要求低功耗,大家知道红外接受头静态电流很大的,为了解决这个问题,我当时的办法是用一个IO控制红外接收头,比如打开红外接收头50ms,关闭450ms ,这样耗电就会变为原来的十分之一

这么做不会错过按键吗?

使用特权

评论回复
72
白话| | 2007-9-13 19:58 | 只看该作者

好东西!!

好啊!!!

使用特权

评论回复
73
longtoo| | 2007-9-13 21:14 | 只看该作者

模拟PWM输出控制LED灯的10个亮度级别(C51)

/********************************************************************************************
* 文 件 名:test017.c
* 功    能:模拟PWM输出控制LED灯的10个亮度级别。 
* 硬件条件:1.CPU型号:AT89S52
*           2.晶振:12.000MHz
*           3.用跳线帽短接LED11__P1.7
*             用跳线帽短接LED10__P1.6
*             用跳线帽短接LED9__P1.5
* 说    明:要改变LED灯的显示亮度,可以使用PWM输出控制。在一定频率的方波中,调整高电平和低电平
*           的占空比,即可实现。例如用低电平点亮一个LED灯,假设把一个周期分为10个时间等份,如果
*           方波中的高低电平占空比是9:1,这时就是一个比较暗的亮度,如果占空比是5:5,就是一个中间
*           亮度,如果高低电平占空比是1:9,这时就是一个比较亮的亮度,高低电平占空比为10:0时,灯
*           是灭的,高低电平占空比为0:10时,灯最亮。
*           在本实验中,我们将定时器2的溢出定为1/2000秒,每10次脉冲输出一个200Hz频率。这每10次
*           脉冲再用来控制高低电平的10个比值。这样,在每个1/200秒的方波周期中,我们都可以改变
*           方波的输出占空比,从而控制LED灯的10个亮度级别。
*           注意:为什么输出方波的频率我们选择200Hz这么高呢?因为如果频率太低,人眼就会看到闪烁
*                 感觉。一般起码要在60Hz以上感觉才好点,120Hz基本上看不到闪烁,因此我们选择200Hz,
*                 人眼将看不到闪烁,只能看到亮度变化。
* 作    者:POWER
* 日    期:2006年12月12号
* 斯凯科技主页:www.armsky.net
* 龙图开发网:http://www.longtoo.com
*********************************************************************************************/
#include "reg52.h"                               // 包含头文件    

/* 与编译器无关的数据类型定义 */
/********************************************************************************************/
typedef unsigned char      uint8;                // 无符号8位整型变量
typedef signed   char      int8;                 // 有符号8位整型变量
typedef unsigned short     uint16;               // 无符号16位整型变量
typedef signed   short     int16;                // 有符号16位整型变量
typedef unsigned int       uint32;               // 无符号32位整型变量
typedef signed   int       int32;                // 有符号32位整型变量
typedef float              fp32;                 // 单精度浮点数(32位长度)
typedef double             fp64;                 // 双精度浮点数(64位长度)
/********************************************************************************************/

/* 定义位变量 */
sbit P1_7 = P1 ^ 7;                              // 控制LED11               
sbit P1_6 = P1 ^ 6;                              // 控制LED10
sbit P1_5 = P1 ^ 5;                              // 控制LED9
sbit P1_2 = P1 ^ 2;                              // PWMDAC输出,用户可以在PWM测试点上用万用表测量

uint8 scale_0;                                   // 用于保存占空比中输出0的时间份额,总共10份
 
/********************************************************************************************
* 函数名称:Timer2_Server()
* 功    能:定时器2溢出中断服务程序。1/2000 秒中断1次。
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Timer2_Server(void) interrupt 5  
{
  static uint8 tt;                               // tt用来保存当前时间在1秒中的比例位置
  
  TF2=0;
  
  tt++;
  if(tt==10)                                     // 每1/200秒整开始输出低电平
   {
     tt=0;

  if(scale_0!=0)                              // 加入该句的目的是避免灭灯时发生闪烁
   {
     P1_7=0;
       P1_6=0;
  P1_5=0;
  P1_2=0;
   }
   }
  if(scale_0==tt)                                // 按照当前占空比切换输出高电平
   {
     P1_7=1;
    P1_6=1;
  P1_5=1;
  P1_2=1;
   }
}

/********************************************************************************************
* 函数名称:main()
* 功    能:模拟PWM输出控制LED灯的10个亮度级别。LED9~LED11将同时依次产生10个级别的亮度。与此
*           同时,用户可以用万用表在ARMSKY-51Easy教学实验开发板上的PWM测试点进行测量观察。
*********************************************************************************************/    
void main (void)                
{
  uint16 n;
  
  RCAP2H =0xFE;                                  // 赋T2的预置值,溢出1次是1/2000秒钟
  RCAP2L =0x0C; 
  TR2=1;                                      // 启动定时器2
  ET2=1;                                         // 打开定时器2中断
  EA=1;                                          // 打开总中断 

  while(1)                                       // 死循环
   {
     for(n=0;n<50000;n++);                    // 每过一会儿就自动加一个档次的亮度
  scale_0++;
  if(scale_0==10) scale_0=0;              // 当档次达到10后,归0
   }
}


相关链接:http://www.longtoo.com

使用特权

评论回复
74
走南闯北| | 2007-9-14 12:49 | 只看该作者

回73楼

省电功能
  曾经做过一个产品,带红外接收,不过要求低功耗,大家知道红外接受头静态电流很大的,为了解决这个问题,我当时的办法是用一个IO控制红外接收头,比如打开红外接收头50ms,关闭450ms ,这样耗电就会变为原来的十分之一

这么做不会错过按键吗?

   红外接收头周期性高电平,周期做的要小一些,必须比遥控器发码周期小很多,这样当有红外线发过来的时候就不会漏掉,如果发现有红外线,单片机就使接收头全部有效,当全部接收完毕,再使红外接受头处于省电状态就可以了

使用特权

评论回复
75
雨夜屠夫| | 2007-9-14 15:51 | 只看该作者

学习再学习~

使用特权

评论回复
76
coko| | 2007-9-15 11:44 | 只看该作者

哦,多谢走南闯北

使用特权

评论回复
77
525133174| | 2007-9-15 15:45 | 只看该作者

有计数器的单片机都可以产生不同的PWM

使用特权

评论回复
78
szlhw888| | 2007-9-15 22:39 | 只看该作者

还好啊

频率,分辨率呢?

使用特权

评论回复
79
锵锵人行| | 2007-9-16 14:49 | 只看该作者

对75楼的提问

对你的程序小弟有几处不明白,还望指点
1.if(scale_0==tt)                                // 按照当前占空比切换输出高电平    ???????


2.static uint8 tt;                               // tt用来保存当前时间在1秒中的比例位置          1秒是怎么回事

3.scale_0 怎么没有初值


4.在每个1/200秒的方波周期中,我们都可以改变方波的输出占空比,那占空比是怎么改变的呢
                            

使用特权

评论回复
80
太阳之母| | 2007-9-19 15:31 | 只看该作者

嘿嘿

PWM方式发人声似乎是大家热烈讨论的话题,而且似乎一致在说这个办法不行。在下切以为讨论套笼统,结论太粗率啊!

PWM能不能发声?显然是没有任何问题的,而且是可以达到Hi-Fi指标的。

使用特权

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

本版积分规则