打印
[技术问答]

关于PWM问题,想请教老手!!

[复制链接]
1176|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小S咯|  楼主 | 2017-7-13 10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小S咯 于 2017-7-13 10:58 编辑

// 1/16M * 1000 = 62.5  
#define TH0_INIT        (65536-1000)/256
#define TL0_INIT        (65536-1000)%256
u8 dat1=0;
void Timer0_Init(void)
{
        TIMER0_MODE1_ENABLE;                        //Timer0 mode1 configuration
   
        set_T0M;  
        
        TH0 = TH0_INIT;
        TL0 = TL0_INIT;
   
        set_ET0;                                    //enable Timer0 interrupt
        set_EA;                                     //enable interrupts
        
        set_TR0;                                    //Timer0 run

}
void Timer0_ISR (void) interrupt 1          //interrupt address is 0x000B
{
     static u8 Count=0;
        
        clr_TR0;   //
        TH0 = TH0_INIT;
        TL0 = TL0_INIT;   
        set_TR0;
  if(++Count>=120)
    Count=0;

  if(dat1>Count)
    P05=0;
  else
    P05=1;
}


void main()
{
    int i=1;
    while(1)
    {        dat1=dat1+i;
        if(dat1>=120)
            i=-1;
        if(dat1<=0)
            i=1;
    }
}


问题:
1.中断里Count加到120,是不是说明PWM斜率为1/120?
2.dat1加到120是什么意思,改变会不会有什么影响
3.PWM频率?
沙发
a_ziliu| | 2017-7-13 14:10 | 只看该作者
這個程式是用timer 計數到一個時間點,把io 作反向
這個波型看去來是頻率會變動的
直接拿個示波器量就應該知道流程

使用特权

评论回复
板凳
小S咯|  楼主 | 2017-7-13 15:06 | 只看该作者
a_ziliu 发表于 2017-7-13 14:10
這個程式是用timer 計數到一個時間點,把io 作反向
這個波型看去來是頻率會變動的
直接拿個示波器量就應該 ...

一切作为理想状态,PWM周期是不是就是timer中断的时间62.5US,然后分成120占空比?

使用特权

评论回复
地板
dongnanxibei| | 2017-7-13 22:56 | 只看该作者
定时器做PWM,那要找个例子好好研究一下了。

使用特权

评论回复
5
huangcunxiake| | 2017-7-15 22:04 | 只看该作者
定时器做的精度不是很高,想做好的,用M051,这个自带PWM发生器。

使用特权

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

本版积分规则

19

主题

178

帖子

4

粉丝