久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)程序兩個(gè)問題,給A1A2高電平時(shí),LO會(huì)隨著HO的導(dǎo)通逐漸關(guān)閉,而不是一直關(guān)閉...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:980756 發(fā)表于 2022-6-26 17:31 來(lái)自手機(jī) | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
求各位大佬幫幫忙指點(diǎn)一下
現(xiàn)在有兩個(gè)問題,給A1A2高電平時(shí),LO會(huì)隨著HO的導(dǎo)通逐漸關(guān)閉,而不是一直關(guān)閉的狀態(tài),給A1A2低電平時(shí),LO不導(dǎo)通,不知道是什么原因求各位大佬幫忙看看什么問題

單片機(jī)源程序如下:
#include<reg51.h>
#include<intrins.h>  
#define u8 unsigned char
#define u16 unsigned int

//----------------------------------------------------------
//STC15寄存器聲明

sfr P1M1=0x83;
sfr P1M0=0xE3;
sfr P3M1=0xB1;
sfr P3M0=0xB2;
sfr AUXR=0x8e;
sfr T2H=0xd6;
sfr T2L=0xd7;
sfr IE2=0xaf;


//----------------------------------------------------------
//引腳定義

sbit A1=P3^2;
sbit A2=P3^6;
sbit AK=P3^3;

sbit B1=P1^2;
sbit B2=P1^4;
sbit BK=P1^3;

sbit IN1=P1^0;
sbit IN2=P1^1;


//----------------------------------------------------------
//軟件PWM

u8 PWM_count;
u8 PWM_duty_A;
u8 PWM_duty_B;

u8 PWM_value;

//----------------------------------------------------------
//控制

u16 timer1,timer2;

u16 pulse;

u16 IN1_H_time,IN2_H_time;
bit IN1_last,IN2_last;

bit get_pulse1,get_pulse2;
bit get_new;

int mix_x,mix_y;

bit Direction_A,Direction_B;


int pulse1=150,pulse2=150;
u8 lose_A=20,lose_B=20;  //更新:上電默認(rèn)處于失控狀態(tài),防止第一次信號(hào)檢測(cè)錯(cuò)誤


//----------------------------------------------------------
//混控設(shè)置
bit mix_en=0;  //關(guān)閉混控,兩路獨(dú)立
//bit mix_en=1;  //開啟混控






void delay_ms(u16 ms)                //STC15 @12.000MHz
{
        u16 i;

        do{
            i = 12000000 / 13022;
               
                        _nop_(),_nop_(),_nop_();
                  while(--i)        ;   
     }while(--ms);        
}

void delay_us(u8 us)                //@12.000MHz
{

        while(--us)
                _nop_(),_nop_();

}

void shock( u8 n)    //震動(dòng)發(fā)聲
{
        u8 i;
        for(i=0;i<250;i++)
        {
                A1=0,A2=0;
                B1=0,B2=0;               
                delay_us(n);
               
                A1=1;B1=1;
          A2=0;B2=0;
                delay_us(n);
               
                A1=0;B1=0;               
                A2=0;B2=0;
                delay_us(n);
                                
                A2=1;B2=1;
                A1=0;B1=0;
                delay_us(n);        
        }
        A1=0,A2=0;
        B1=0,B2=0;
        delay_us(n);
}


main()
{
        P1=0xE3;
         P3=0xB0;              //上電關(guān)閉輸出

        P3M0=0x4C;      //IO推挽輸出
        P1M0=0x1C;
        //P5M0=0x0F;
        
        delay_ms(400);
        
        shock(200);        //新增 上電音樂,表明正常工作
        shock(150);
        shock(100);
        
        
        IE=0x80;
        IE2=0x04;
        T2L=0xF6;T2H=0xFF;  //開啟軟件PWM
        AUXR=0x10;
        
        
        
        while(1)
        {
               
                if(get_pulse1)
                {
                        get_pulse1=0;
                        
                        pulse =IN1_H_time;                        
                        IN1_H_time=0;
                        
                        if(pulse >85 && pulse <215) //只受理合理舵量范圍
                        {
                                timer1=0;
                                
                                if(pulse <105)pulse =105;
                                if(pulse >195)pulse =195;
                                
                                if(lose_A)lose_A--;  //丟信號(hào)重連保護(hù)
                                else get_new=1,pulse1=pulse;
                        }
                        
                }
               
                if(get_pulse2)
                {
                        get_pulse2=0;
                        
                        pulse =IN2_H_time;                        
                        IN2_H_time=0;
                        
                        if(pulse >85 && pulse <215)
                        {
                                timer2=0;
                                
                                if(pulse <105)pulse =105;
                                if(pulse >195)pulse =195;                //舵量限幅 1050~1950        

                                if(lose_B)lose_B--;  //丟信號(hào)重連保護(hù)
                                else get_new=1,pulse2=pulse;
                        }                        
                        
                }
               
               
                if(get_new)
                {
                        get_new=0;
                        
                        if(mix_en)  //引腳高電平 使能混控
                        {
                                if(pulse2>152 || pulse2<148) //通道2為差向輸入,中位死區(qū)
                                {
                                        mix_x=pulse1 + pulse2 -150;  
                                        mix_y=pulse1 - pulse2 +150;        
                                }
                                else
                                {
                                        mix_x=pulse1;   //通道1為同向輸入,
                                        mix_y=pulse1;
                                }
                                                        
                        }
                        else        //引腳低電平 兩通道獨(dú)立
                        {
                                mix_x=pulse1;
                                mix_y=pulse2;                                
                        }
                        
                        
                        if(mix_x<105)mix_x=105;
                        if(mix_x>195)mix_x=195;
                        
                        if(mix_y<105)mix_y=105;
                        if(mix_y>195)mix_y=195;
                        
                        
                        
                        if(mix_x>=153 )       //正轉(zhuǎn)
                        {
                                AK=1;
                                A2=0;
                                PWM_duty_A= (mix_x-151)*100/44; //補(bǔ)償摩擦力
                                Direction_A=0;
                        }
                        else if(mix_x<=147 )  //反轉(zhuǎn)
                        {
                                AK=1;
                                A1=0;
                                PWM_duty_A= (149-mix_x)*100/44;
                                Direction_A=1;
                        }
                        else                  //停止
                        {
                                PWM_duty_A=0;
                                AK=0;
                        }
                        
                        if(mix_y>=153 )       //正轉(zhuǎn)
                        {
                                BK=1;
                                B2=0;
                                PWM_duty_B= (mix_y-151)*100/44; //補(bǔ)償摩擦力
                                Direction_B=0;
                        }
                        else if(mix_y<=147 )  //反轉(zhuǎn)
                        {
                                BK=1;
                                B1=0;
                                PWM_duty_B= (149-mix_y)*100/44;
                                Direction_B=1;
                        }
                        else                  //停止
                        {
                                PWM_duty_B=0;
                                BK=0;
                        }
                        
                }
               
               
        }
        
}


void T2_isr()interrupt 12//軟件PWM 1Khz
{

        
        if(IN1)                                        //通道1脈寬檢測(cè)
        {
                IN1_last=1;
                IN1_H_time++;
        }
        else
        {
                if(IN1_last)get_pulse1=1;
                IN1_last=0;
        }
        
        if(IN2)                                        //通道2脈寬檢測(cè)
        {
                IN2_last=1;
                IN2_H_time++;
        }
        else
        {
                if(IN2_last)get_pulse2=1;
                IN2_last=0;
        }        
        
        
        PWM_count++;
        if(PWM_count==100) //100級(jí)分辨率
        {
                PWM_count=0;
               
                timer1++;
                if(timer1>500)//0.5S無(wú)信號(hào)保護(hù)
                {
                        timer1=0; lose_A=30;
                        
                        pulse1=150,get_new=1;                        
                }
               
                timer2++;
                if(timer2>500)//0.5S無(wú)信號(hào)保護(hù)
                {
                        timer2=0; lose_B=30;
                        
                        pulse2=150,get_new=1;                        
                }
        }
        
        
        if(PWM_duty_A > PWM_count)
        {
                if(Direction_A)
                        A1=1;
                else A2=1;
        }
        else A1=0,A2=0;
        
        if(PWM_duty_B > PWM_count)
        {
                if(Direction_B)
                        B1=1;
                else B2=1;
        }
        else B1=0,B2=0;

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

使用道具 舉報(bào)

沙發(fā)
ID:301191 發(fā)表于 2022-6-27 16:31 | 只看該作者
頂一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品99 | 精品视频一区二区 | 国产精品日韩欧美一区二区三区 | 999精品在线观看 | 日本不卡一区二区三区 | 91精品久久久久 | 成人一级黄色毛片 | 久久久一| 国产婷婷综合 | 国产资源在线视频 | 国产一区精品 | 又黑又粗又长的欧美一区 | 狠狠色综合久久丁香婷婷 | 国产精品久久久久久吹潮 | 国家aaa的一级看片 h片在线看 | 亚洲高清在线观看 | 蜜桃在线视频 | 精品国产成人 | 黄色一级片在线播放 | 亚洲国产成人精品女人久久久 | 欧美一级欧美一级在线播放 | 99色在线 | 久久国产精品精品国产色婷婷 | 午夜看看 | 精品国产精品三级精品av网址 | 日本精品一区二区三区视频 | 91精品一区二区三区久久久久 | 日韩精品视频在线 | xnxx 日本免费| 999久久精品| 国产在线精品一区二区三区 | 欧美专区在线 | 国产精品99久久久久久久久 | 综合伊人 | 精品国产欧美一区二区 | 99精品久久 | 精品国产一区二区久久 | 亚洲精品成人免费 | 在线观看亚洲一区二区 | 久久久久精| 精品国产久 |