这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机如何控制占空比呢

共12条 1/2 1 2 跳转至

单片机如何控制占空比呢

助工
2011-07-22 16:55:30     打赏

在鼓捣直流电机用L298控制的这是我的程序,请大侠指教
unsigned char DUTY;
unsigned char CYCLE;

main()
{
      TMOD|=0x01;
      TH0=(65536-1000)/256;
      TL0=(65536-1000)%256;
      EA=1;
      ET0=1;
     TR0=1;
      while(1)
            {
                   DUTY=7;
                  CYCLE=10;
                   IN1=1;   
                   IN2=0;   
                   ENA=0; 
                   IN3=1;   
                   IN4=0;   
                   ENB=0; 
             }
}
void timer0()  interrupt 1
     {  
             static unsigned char Cnt=0;
             TH0=(65536-1000)/256;
             TL0=(65536-1000)%256;
              Cnt++;
          if(Cnt==DUTY)
         {
                ENA=0;
                ENB=0;
         }
         if(Cnt==CYCLE)
        {
                 ENA=1;
                 ENB=1;
                Cnt=0;
         }
         }
这样可以控制占空比达到减速的目的吗




关键词: 单片机     如何     控制     占空     比呢    

高工
2011-07-23 19:03:25     打赏
2楼
stc12c5410ad的手册上面有很详细的PWM模块的示例程序,汇编和C都有

菜鸟
2011-07-29 21:56:34     打赏
3楼
好像以前编程的时候用到过 在定时器中用到一个参数

高工
2011-08-03 07:11:46     打赏
4楼
查一下定时器的应用

高工
2011-08-03 07:20:27     打赏
5楼

用定时可以做,也可以用延时去做
思路:用定时器去改变它高低电平定时的长短


助工
2012-02-15 08:00:42     打赏
6楼
可以通过adc的值控制PWM的比值,这实现起来也不难,课程设计用过,效果很不错。。。

菜鸟
2012-02-15 08:28:59     打赏
7楼
1\ 了解一下单片机输出 PWM 的原理 。最简单的方式是固定一个T,通过改变T1(T1<T)来改变占空比。比如说P1.0 = 1 ,当 T1时间到了时候 P1.0 = 0。当T时间到的时候,重复上述。
2、看你是用来调速电机的。应该是想通过调压来实现调速,这就需要你电机的两端是一个用PWM来控制的输出电压。(也叫开关电源)。自己可以了解一下。

菜鸟
2012-02-15 08:30:47     打赏
8楼

定时器的值是根据你的需求变化的,比如按键输入,电阻调节。还有就是频率变化的话得用两个定时器。


助工
2012-02-19 21:53:10     打赏
9楼

/*定时中断例子,方波输出*/
#include <reg51.h>

/***************/
sbit led = P2^0; //管脚定义
unsigned char count=0; //定义变量


/***************/
void main(void)
{
 
     TMOD=0x01;   //T0 工作在方式1 16位计数器
     TH0=(65536-10000)/256;  // 预先 设定定时器 初值
     TL0=(65536-10000)%256;
     EA=1;    //开启 总中断
     ET0=1;    //开启定时器 0
     TR0=1;    //定时器 0 启动计数 
       
     while(1)   //死循环
     {     //程序在这不作任何处理
    
     }
}
/**********************************/
void time0(void)  interrupt 1 using 1  //产生50MS定时中断

 TH0=(65536-50000)/256; //重新设置定时器 初值
 TL0=(65536-50000)%256;
 count++;   //50ms太短,闪烁频率太快
 if(count==200)  //用变量 count 延长到100ms,根据自己的需要,调整参数或者定时器初始值来改成时间量
 {
  count=0;  //计数器清零
  led=~led;  //取反
 }
}

 


菜鸟
2012-02-20 18:58:50     打赏
10楼
51就用改变的定时器的重装的值就可以实现,不过简单的51单片机如AT89S51并没有硬件的PWM功能,你要软件计算,使得改变占空比时频率不变。SG3525就只要一个时钟就行了,占空比的改变是靠一个模拟的电压来实现的,要非用51和话可用DA或IO加低通滤波(一般是RC型)通过实现简单的DA功能

共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]