欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2729|回復: 1
收起左側

在寫一個控制電機L298的正反轉及調速問題,但是調速實現不了,請大佬能不能幫我看....

[復制鏈接]
ID:467518 發表于 2019-1-20 15:06 | 顯示全部樓層 |閱讀模式

在寫一個控制電機L298的正反轉及調速問題,但是調速實現不了,請大佬能不能幫我看下這個程序呢,可能是和我不會用調速有關,這個電機能實現正反轉,但是不能去調速,請問能不能幫我一下呢


#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int

sbit IN1=P1^0;
sbit IN2=P1^4;
sbit  PWMA=P1^2;
sbit  STBY=P1^3;
sbit  FM=P2^3;
sbit  key=P3^2;   //按鍵串口
void delay(uint z)
{
  uint x,y;
    for(x=z;x>0;x--)
      for(y=125;y>0;y--);
}



void Int0Init()
{
        //設置INT0
        IT0=1;//跳變沿出發方式(下降沿)
        EX0=1;//打開INT0的中斷允許。       
        EA=1;//打開總中斷       
}
void main()
{
//  P1=0X00;    //程序初始化
//  P1=0XFF;    //P1口置1
  Int0Init();
  PWMA=1;
  STBY=1;
  IN1=1;   
  IN2=0;       //初始化電機正轉
  while(1)
  {

    //delay(500);
//    keyscan();
    //Timer0Init();   
  }

}

void Int0()        interrupt 0                //外部中斷0的中斷函數
{
    IN1=0;
    IN2=1;
        delay(2000);         //延時消抖
        IN1=0;
    IN2=0;
       
}

回復

使用道具 舉報

ID:164602 發表于 2019-1-21 08:35 | 顯示全部樓層
其實論壇中有很多這樣的程序,一看你的程序,行數就不夠嘛——根本沒有調速的內容。
在智能小車板塊中去找。
/**********************亞博智能小車黑線循跡例程************************
*  學習建議:進行智能小車程序學習前,可先看51單片機開發板配套28課視頻教程

******************************************************************/
//按下K4按鍵,1秒左右啟電小車
//按下復位健可以停止小車       
//注意程序只做參考之用,要達到最理想的尋跡效果,還需要同學們細心調試。

#include <reg52.h>             //包含52系統頭文件
#include "bst_car.h"         //包含bst_car.h智能小車頭文件

unsigned char pwm_val_left  =0;//變量定義
unsigned char pwm_val_right =0;
unsigned char push_val_left =5;// 左電機占空比N/20 //速度調節變量 0-20。。。0最小,20最大
unsigned char push_val_right=5;// 右電機占空比N/20
                                                           // 大家可以根據循跡效果修改以上兩個數值
bit Right_PWM_ON=1;                   //右電機PWM開關
bit Left_PWM_ON =1;                           //左電機PWM開關


//延時函數       
void delay(unsigned int xms)                               
{
    unsigned int i,j;
        for(i=xms;i>0;i--)                      //i=xms即延時約xms毫秒
    for(j=112;j>0;j--);
}

//前進
void run(void)
{
    push_val_left=6;         //速度調節變量 0-20。。。0最小,20最大
        push_val_right=6;
        Left_moto_go ;   //左電機往前走
        Right_moto_go ;  //右電機往前走
}

//左轉
void leftrun(void)
{         
     push_val_left=5;
         push_val_right=5;
         Right_moto_go ;  //右電機往前走
     Left_moto_Stop ;  //左電機停止
}

//右轉
void  rightrun(void)
{
         push_val_left=5;
         push_val_right=5;
     Left_moto_go  ;   //左電機往前走
         Right_moto_Stop   ;  //右電機往前走       
}

//停止
void  stop(void)
{
         Left_moto_Stop ;
         Right_moto_Stop   ;
}

/************************************************************************/
//                   PWM調制電機轉速                                   

//                   左電機調速                                       
/*調節push_val_left的值改變電機轉速,占空比*/
void pwm_out_left_moto(void)
{  
     if(Left_PWM_ON)
     {
          if(pwm_val_left<=push_val_left)
              {
                   EN1=1;
              }
              else
              {
                   EN1=0;
          }
          if(pwm_val_left>=20)
              pwm_val_left=0;
     }
     else   
     {
          EN1=0;   //若未開啟PWM則EN1=0 左電機 停止
     }
}
/******************************************************************/
/*                    右電機調速                                  */  
void pwm_out_right_moto(void)
{
    if(Right_PWM_ON)
    {
        if(pwm_val_right<=push_val_right)        //20ms內電平信號 111 111 0000 0000 0000 00
            {
                EN2=1;                                                         //占空比6:20
        }
            else
            {
                EN2=0;
        }
            if(pwm_val_right>=20)
            pwm_val_right=0;
    }
    else   
    {
        EN2=0;          //若未開啟PWM則EN2=0 右電機 停止
    }
}
      
      
//TIMER0中斷服務子函數產生PWM信號
void timer0()interrupt 1 using 2
{
     TH0=0XFC;          //1Ms定時
         TL0=0X66;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();
}       

void keyscan(void)              //按鍵掃描函數
{
    A:    if(K4==0)                        //判斷是否有按下信號
                {
                    delay(10);                  //延時10ms
                        if(K4==0)                        //再次判斷是否按下
                         {
                            FM=0;               //蜂鳴器響                 
                            while(K4==0);        //判斷是否松開按鍵
                            FM=1;               //蜂鳴器停止  
                          }
                    else
                     {
                       goto A;        //跳轉到A重新檢測
                      }
                }
                else
                {
                  goto A;             //跳轉到A重新檢測
                }
}


//主函數
void main(void)
{       
    P1=0X00;    //關電機       
    keyscan();        //按鍵啟動檢測
        delay(1000);//1s后啟動

        TMOD=0X01;
    TH0= 0XFC;  //1ms定時
    TL0= 0X66;
    TR0= 1;
    ET0= 1;
        EA = 1;            //開總中斷


        while(1)        //無限循環
        {
            //有信號為0  沒有信號為1
        if(Left_1_led==0&&Right_1_led==0)
            run();   //調用前進函數
        else if(Left_1_led==1&&Right_1_led==0)            //左邊檢測到黑線
                        {
                             leftrun();                       //調用小車左轉函數
                        }                          
                else if(Right_1_led==1&&Left_1_led==0)                //右邊檢測到黑線
                        {          
                                 rightrun();                   //調用小車右轉函數
                    }
                else
                        stop();         
         }
}
   

這個程序是由程序固定調速的,你可以看懂后,通過按鍵等改變相關的值,達到電機動態調速。
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表