找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3752|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

寫了一個(gè)單片機(jī)輸出PWM波控制電調(diào)的程序,但電機(jī)無法轉(zhuǎn)動(dòng),請問程序哪里不對呢?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
想用單片機(jī)驅(qū)動(dòng)電調(diào)控制推進(jìn)器轉(zhuǎn)動(dòng),用的電調(diào)不需要設(shè)置行程,但需要進(jìn)行中位啟動(dòng)電調(diào)的頻率是50HZ,那周期就是確定的0.02s即20000us吧,中位啟動(dòng)是指設(shè)置PWM波高電平時(shí)間為1500us嗎?








以下為源程序,占空比7.5%高電平時(shí)間為1500us,但無法啟動(dòng),請問是為什么呢?
#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint  unsigned int
/*用定時(shí)器T0來控制頻率,定時(shí)器T1來控制占空比*/
/*T0中斷讓一個(gè)IO口輸出高電平,T1讓IO口輸出低電平*/
/*改變T0初值就可以改變頻率,改變T1初值就可以改變占空比*/
/*機(jī)器周期為1us,設(shè)定頻率為50HZ,則周期為20ms
要定時(shí)20ms,設(shè)置中斷基準(zhǔn)為0.02ms,中斷1000次為一個(gè)周期
0.02ms/1us=20,初始值65535-20+1=FFEC*/

sbit PWM=P2^1; //P21輸出PWM波   
uchar time;   //占空比

void main()
{
  TMOD=0x01;//打開定時(shí)器0,工作方式1:16位定時(shí)器
        TH0=0xff;       //
  TL0=0xec;
        EA=1;//開總中斷
        ET0=1;//開定時(shí)器0中斷
        TR0=1;//啟動(dòng)定時(shí)器0
        while(1)
        {
        }
}

void time0() interrupt 1
{
  TR0=0;//定時(shí)器關(guān)閉
        TH0=0xff;       //
  TL0=0xec;
  TR0=1;//打開定時(shí)器
         time++;
         if(time>=1000)
                 time=0;
         if(time<=75)//占空比為7.5%,高電平時(shí)間1500us
                 PWM=1;
         else PWM=0;
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:390416 發(fā)表于 2021-1-8 14:35 | 只看該作者
很多小白不明白PWM怎么回事。只能說明你們看的教程沒講。我們?nèi)巳藢W(xué)會(huì)單片機(jī)教程就講過。其實(shí)很簡單的。特分享CPU定時(shí)器模擬PWM輸出給你們
#include "STC89.H"                                        //頭文件包含
#include <intrins.h>                                //頭文件包含
typedef unsigned char u8;                        //重新定義數(shù)據(jù)類型名
typedef unsigned short u16;                        //重新定義數(shù)據(jù)類型名
typedef unsigned long u32;                        //重新定義數(shù)據(jù)類型名
sbit PWM_OUT=P2^1;        
u8 idata PWM_Write_Byte[3]=0;

//****************************祁緒電子 2020年5月***
// 定時(shí)器0初始化  晶振11059200,12T,輸出50Hz的PWM,占空比0~255
// 定時(shí)器初值為:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
void PWM_Init(void)
{
        TMOD &= 0xF0;                                        //配置定時(shí)器工作模式
        TMOD |= 0x02;                                        //配置定時(shí)器工作模式 8位自動(dòng)重裝模式
    TL0 = 0xB8;;                    //定時(shí)器初值
    TH0 = 0xB8;                                //定時(shí)器重裝初值
    TR0 = 1;                        //啟動(dòng)定時(shí)器0
    ET0=1;                                                         //允許定時(shí)器0申請中斷
        EA=1;                                                        //中斷總閘閉合
}
//****************************祁緒電子 2020年5月***
//定時(shí)器0的CPU處理函數(shù),位置任意寫都行
void PWM_Display_timer0() interrupt 1
{
        
        static u8 pwm_t=0;                                 //局部變量,不丟失數(shù)據(jù)
        if(pwm_t<PWM_Write_Byte[0])
        {
                PWM_OUT=1;                                 
        }
        else PWM_OUT=0;
        pwm_t++;
}

//***************************祁緒電子 2020年5月***
// PWM 數(shù)模變換數(shù)據(jù)分配
void PWM_Allot()                                          
{
        static u8 kkk=0;        
        static u8 count=0;
        count++;
        if(count>100)
        {
                count=0;
                kkk++;
                PWM_Write_Byte[0]=kkk;        //kkk為占空比自動(dòng)增加
                PWM_Write_Byte[1]=10;        
                PWM_Write_Byte[2]=10;
        }
}


void main()                                                        //主函數(shù)
{
        PWM_Init();
        while(1)                                                //主函數(shù)大循環(huán)
        {
                PWM_Allot();        
        }
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:844772 發(fā)表于 2021-1-8 16:22 | 只看該作者
首先是:計(jì)時(shí)時(shí)間太短,你的寫法誤差太大,應(yīng)使用自動(dòng)重裝模式,中斷中只有一句:time++;并將判斷放到主程序,它到1000自然是一個(gè)周期嘛。如果能提高主頻就更好了。
其次是:電調(diào)不是你這么用的啊,電調(diào)驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)需要兩個(gè)步驟:1先給電調(diào)最大油門,你會(huì)聽到“嗶嗶”;2“嗶嗶”后你再給電調(diào)最小油門,會(huì)聽到”嗶嗶畢“,然后是一聲較長的”畢“;3這時(shí)電調(diào)就準(zhǔn)備好了,給一個(gè)1~2ms范圍內(nèi)的油門就可以轉(zhuǎn)動(dòng)了。你的程序都沒干這些事,轉(zhuǎn)不了啊。
回復(fù)

使用道具 舉報(bào)

地板
ID:796670 發(fā)表于 2021-1-8 16:48 | 只看該作者
glinfei 發(fā)表于 2021-1-8 16:22
首先是:計(jì)時(shí)時(shí)間太短,你的寫法誤差太大,應(yīng)使用自動(dòng)重裝模式,中斷中只有一句:time++;并將判斷放到主程 ...

這個(gè)最大最小油門就是最大最小行程吧?老板給的說明說不需要,只需要設(shè)置中間啟動(dòng)
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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