找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2423|回復(fù): 8
收起左側(cè)

關(guān)于單片機(jī)按鍵控制PWM大小的問題?

[復(fù)制鏈接]
ID:687423 發(fā)表于 2020-2-22 10:15 | 顯示全部樓層 |閱讀模式
這兩天學(xué)習(xí)了PWM,想通過按鍵來控制PWM的大小,在網(wǎng)上找了一個(gè)程序,程序沒有問題,但有些地方我沒明白,希望大家?guī)臀宜伎家幌隆?br /> 下面是我的分析和我的疑問,對于分析有錯(cuò)誤的地方希望大家?guī)臀抑刚?br /> 分析:這個(gè)程序我認(rèn)為應(yīng)該是用兩個(gè)定時(shí)器來控制的,定時(shí)器0控制的是周期,定時(shí)器1控制的是占空比,通過改變定時(shí)器1中TH1的大小改變占空比的值。
疑問:單片機(jī)定時(shí)器的方式2不是自動(dòng)重裝嗎,不是該是TH0自動(dòng)把值賦給TL0嗎。我把定時(shí)器0的TH0的初值設(shè)為0,刪掉定時(shí)器0中斷中的TL0=0這句話,為什么led產(chǎn)生的現(xiàn)象就不對了呢(按鍵3無法一直控制占空比增加,按鍵4也無法一直控制占空比減少)。
          主函數(shù)中對占空比增加的控制,為什么TH0<200就可以,我把句子改為TH0<250就不行了呢。
#include <reg52.h>
#define out P2
sbit key3=P3^2;   
sbit key4=P3^3;   
//-----------------------------------------------------------------
void Init(void)
{        
      
        TMOD=0x22;  //T1=T0=??????2??????
        TH1=0;     //??????(0.128ms)
        TL1=0xff;
        TH0=0;      //??????=0??????  
        TL0=0;   
      TR0=1;        //?????T0???
        ET1=1;
        ET0=1;   
        EA=1;       //???ж??
}

void Timer0(void) interrupt 1
{
        out=0xff;      //??led
  TL0=0;
        TR1=1;         //????????
}

void Timer1(void) interrupt 3
{
        out=~out;      //??led
        TR1=0;         //??????????
}   
void delay( unsigned int i)
{
while(i--);
}
void main()
{
    Init();
    while(1)
    {
  key3=1;
  key4=1;
  if(key3==0)
  {
   delay(1000);
            if(key3==0)  
            {
    if(TH1<200)
     TH1++;
            }
        }
        else if (key4==0)
        {
   delay(1000);
            if(key4==0)  
            {
                if(TH1>0)
      TH1--;
            }
          }
     }
   
}


回復(fù)

使用道具 舉報(bào)

ID:342451 發(fā)表于 2020-2-22 12:49 | 顯示全部樓層
PWM輸出用一個(gè)定時(shí)器就ok了,給你一段參考
void Timer1() interrupt 3
{
        static u16 p;
        TH1=0XFC;        //給定時(shí)器賦初值,定時(shí)1ms
        TL1=0X18;
        /****電機(jī)控制****/
        p++;
        if(p<PWM)EN=1;
        if(p>=PWM)EN=0;
        if(p==10)p=0;//周期10*1ms
}
改變PWM只需要用按鍵改變變量PWM的值即可,這樣就可以輸出一個(gè)頻率固定,占空比可調(diào)的PWM波
回復(fù)

使用道具 舉報(bào)

ID:687423 發(fā)表于 2020-2-22 15:39 | 顯示全部樓層
之一知足 發(fā)表于 2020-2-22 12:49
PWM輸出用一個(gè)定時(shí)器就ok了,給你一段參考
void Timer1() interrupt 3
{

能把程序發(fā)完整嗎,你這個(gè)PWM是怎么變化的啊。
回復(fù)

使用道具 舉報(bào)

ID:687423 發(fā)表于 2020-2-22 15:42 | 顯示全部樓層
之一知足 發(fā)表于 2020-2-22 12:49
PWM輸出用一個(gè)定時(shí)器就ok了,給你一段參考
void Timer1() interrupt 3
{

如果PWM只是單純由按鍵控制的話,這個(gè)程序?qū)崿F(xiàn)不了啊
回復(fù)

使用道具 舉報(bào)

ID:342451 發(fā)表于 2020-2-22 18:09 | 顯示全部樓層
。。jj 發(fā)表于 2020-2-22 15:39
能把程序發(fā)完整嗎,你這個(gè)PWM是怎么變化的啊。

你仔細(xì)看下這個(gè)定時(shí)器中斷函數(shù)里代碼什么意思,EN就是隨便定義的一個(gè)IO口,P和PWM是個(gè)變量,假如PWM值是4,p每1ms加一,所以前4ms EN是高電平,后6ms 輸出低電平,這不就是一個(gè)占空比40%的波形么
回復(fù)

使用道具 舉報(bào)

ID:687423 發(fā)表于 2020-2-23 15:29 | 顯示全部樓層
之一知足 發(fā)表于 2020-2-22 18:09
你仔細(xì)看下這個(gè)定時(shí)器中斷函數(shù)里代碼什么意思,EN就是隨便定義的一個(gè)IO口,P和PWM是個(gè)變量,假如PWM值是4 ...

你這個(gè)我試過了啊,根本無法控制。
void delay(ui i)
{
        while(i--);
}
void init()
{
        TMOD=0x01;
        TH0=0XFC;
        TL0=0X18;
        EA=1;
        TR0=1;
        ET0=1;
}
void anjian()
{
        if(key4==0)
        {
                delay(1000);
                if(key4==0)
                {
                        i++;
                }
        }
        while(!key4);
}
void main()
{
        while(1)
        {
                if(p>i)
                {
                        pwm=1;
                }
                else
                        pwm=0;
        }
}
void init1() interrupt 1
{
        TH0=0XFC;
        TL0=0X18;
        p++;
        if(p>10)
                p=0;       
}
回復(fù)

使用道具 舉報(bào)

ID:462827 發(fā)表于 2020-2-23 17:32 | 顯示全部樓層
一個(gè)定時(shí)器就夠了呀
回復(fù)

使用道具 舉報(bào)

ID:342451 發(fā)表于 2020-2-23 18:04 | 顯示全部樓層
。。jj 發(fā)表于 2020-2-23 15:29
你這個(gè)我試過了啊,根本無法控制。
void delay(ui i)
{

。。。你按鍵程序好像沒有放到循環(huán)里面吧
回復(fù)

使用道具 舉報(bào)

ID:679425 發(fā)表于 2020-2-24 10:04 | 顯示全部樓層
PWM只是單純由按鍵控制的話,這個(gè)程序?qū)崿F(xiàn)不了
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表