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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于逐飛科技STC32G單片機開源庫寫的電磁巡跡差速方案 源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1032245 發(fā)表于 2023-4-30 11:15 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
給你們看看我家哥哥戰(zhàn)車:

/******************************************************************************
* COPYRIGHT NOTICE
* Copyright (c) 2020,逐飛科技
* All rights reserved.
* 以下所有內(nèi)容版權(quán)均屬逐飛科技所有,未經(jīng)允許不得用于商業(yè)用途,
* 歡迎各位使用并傳播本程序,修改內(nèi)容時必須保留逐飛科技的版權(quán)聲明。
* @author  逐飛科技
********************************************************************************/

#include "headfile.h"
/*
* 系統(tǒng)頻率,可查看board.h中的 FOSC 宏定義修改。
* board.h文件中FOSC的值設(shè)置為0,則程序自動設(shè)置系統(tǒng)頻率為33.1776MHZ
* 在board_init中,已經(jīng)將P54引腳設(shè)置為復(fù)位
* 如果需要使用P54引腳,可以在board.c文件中的board_init()函數(shù)中刪除SET_P54_RESRT即可
*/

#include "LED.H"
uint16 adc_data[3];
#define a 14.5
#define tingche P45//停車觸發(fā)
int16 x,y;
uint16 av0,av1,av2,av3;
uint16 max1,min1;
uint16 k;//數(shù)字代表小車運行模式
uint16 count;

void main()
{
        WTST=0;
        board_init();                        // 初始化寄存器,勿刪除此句代碼。
        WTST=0;
        DisableGlobalIRQ();
        sys_clk=3500000;
        
        //不斷電下載
        EAXFR = 1;                                 //使能訪問 XFR
        CKCON = 0x00;                 //設(shè)置外部數(shù)據(jù)總線速度為最快
        WTST = 0x00;                         //設(shè)置程序代碼等待參數(shù),                                         
        P3M0 = 0x00;      //賦值為 0可將 CPU執(zhí)行程序的速度設(shè)置為最快
        P3M1 = 0x00;      //將P3口設(shè)置為準雙向口
        P32 = 1;


        
        adc_init(ADC_P00, ADC_SYSclk_DIV_2);        //adc電壓采集
        adc_init(ADC_P01, ADC_SYSclk_DIV_2);        
        adc_init(ADC_P02, ADC_SYSclk_DIV_2);        
        adc_init(ADC_P03, ADC_SYSclk_DIV_2);

        oled_init();
        
        pwm_init(PWMA_CH1P_P10, 10000, 0);  //初始化PWMA  使用引腳P6.0  輸出PWM頻率10000HZ   占空比為百分之 pwm_duty / PWM_DUTY_MAX * 100
  pwm_init(PWMA_CH2N_P13, 10000, 0);
        pwm_init(PWMA_CH3P_P14, 10000, 0);
        pwm_init(PWMA_CH4N_P17, 10000, 0);
        EnableGlobalIRQ();
  tingche=1;
        k=3;//開始正常循跡
        count=0;
        
        while(1)        
                {
                        if(!P32) IAP_CONTR = 0x60;//當檢測到P3.2的電平為低時,軟件復(fù)位到系統(tǒng)區(qū)
                        
                        adc_data[0] = adc_once(ADC_P00, ADC_12BIT);        
                        adc_data[1] = adc_once(ADC_P01, ADC_12BIT);        
                        adc_data[2] = adc_once(ADC_P02, ADC_12BIT);               
                        adc_data[3] = adc_once(ADC_P03, ADC_12BIT);
                        
                        av0=adc_data[0];
                        av1=adc_data[1];
                        av2=adc_data[2];
                        av3=adc_data[3];

                        
//oled顯示屏顯示
                        oled_p6x8str(0,1,"ADCcollect");
                        oled_int16(0,2,av0);
                        oled_int16(84,2,av3);
                        oled_int16(20,3,av1);
                        oled_int16(56,3,av2);

                        oled_p6x8str(2,5,"k");
                        oled_int16(38,5,k);
                        oled_p6x8str(2,6,"count");
                        oled_int16(38,6,count);
                        delay_ms(1);
                        
                        //小車模式判斷 temp        
      if(av1>1900||av2>1900)//入環(huán)
                        {
                                k=1;
                        }
                        else if(tingche==0)
                        {
                                k=0;//干簧管停車觸發(fā)
                        }
                        else if(av0<170||av3<170)
                        {
                                k=4;//極限拉扯
                        }
                        else
                        {
                                k=3;//正常巡跡
                        }               
                                
                                //*****小車運行模式
                                                switch(k)
                                                {
                                                        case 0://停車觸發(fā)
                                                                pwm_duty(PWMA_CH1P_P10, 0);     //right
                                                                pwm_duty(PWMA_CH2N_P13, 0);
                                                                pwm_duty(PWMA_CH3P_P14, 0);     //left
                                                                pwm_duty(PWMA_CH4N_P17, 0);
                                                          while(1)
                                                                {
                                                                        LED();
                                                                }
                                                                break;

                                                        case 1://入環(huán)島轉(zhuǎn)向//檢測特征值然后微調(diào)直線行駛距離和入環(huán)差值和持續(xù)時間,從而達到準確入環(huán)
                                                                if(count==1)
                                                                {
                                                                        pwm_duty(PWMA_CH1P_P10, 9999);     //right
                                                                  pwm_duty(PWMA_CH2N_P13, 0);
                                                                  pwm_duty(PWMA_CH3P_P14, 9999);     //left
                                                                  pwm_duty(PWMA_CH4N_P17, 0);        
                                                                        delay_ms(100);
                                                                        pwm_duty(PWMA_CH1P_P10, 4600);     //right
                                                                  pwm_duty(PWMA_CH2N_P13, 0);
                                                                        pwm_duty(PWMA_CH3P_P14, 9700);     //left
                                                                        pwm_duty(PWMA_CH4N_P17, 0);
                                                                        delay_ms(500);
                                                                        count++;
                                                                }
                                                                break;
                                                        
//                                                        case 2://出環(huán)島轉(zhuǎn)向
//                                                                delay_ms(1000);
//                                                                pwm_duty(PWMA_CH1P_P10, 9000);     //right
//                                                                pwm_duty(PWMA_CH2N_P13, 0);
//                                                                pwm_duty(PWMA_CH3P_P14, 9860);     //left
//                                                                pwm_duty(PWMA_CH4N_P17, 0);
//                                                                delay_ms(1000);
//                                                                k=3;
//                                                                delay_ms(1);
//                                                                break;
                                                
                                                        case 3://正常循跡
                                                          if(av0>av3)
                                                                        {
                                                                         x=9800-a*(av0-av3);
                                                                         y=9800+a*(av0-av3);
                                                                        }
                                                                if(av0<av3)
                                                                {
                                                                                x=10000+a*(av3-av0);
                                                                                y=10000-a*(av3-av0);
                                                                }
                                                                  if(x>10000)
                                                                        x=10000;
                                                                  if(y>10000)
                                                                        y=10000;
                                                                        if(x<0)
                                                                        {
                                                                                x=0;
                                                                        }
                                                                        if(y<0)
                                                                        {
                                                                                y=0;
                                                                        }
                                                                pwm_duty(PWMA_CH1P_P10, y);     //right
                                                                pwm_duty(PWMA_CH2N_P13, 0);
                                                                pwm_duty(PWMA_CH3P_P14, x);     //left
                                                                pwm_duty(PWMA_CH4N_P17, 0);        
                                                                break;
                                                                        
                                                        case 4://極限拉扯,如果遇到小車抽風(fēng)沒轉(zhuǎn)過來,還可以靠出軌跡后的微弱電磁差進行修正
                                                                        if(av0>av3)
                                                                                {
                                                                                  y=10000;
                                                                                        //delay_ms(5);
                                                                                  x=4600;
                                                                                }
                                                                        if(av0<av3)
                                                                                {
                                                                                  y=4600;
                                                                                        //delay_ms(5);
                                                                                  x=9999;
                                                                                }
                                                                        
                                                                pwm_duty(PWMA_CH1P_P10, y);     //right
                                                                pwm_duty(PWMA_CH2N_P13, 0);
                                                                pwm_duty(PWMA_CH3P_P14, x);     //left
                                                                pwm_duty(PWMA_CH4N_P17, 0);        
                                                                break;
                                                         
                                                  case 5:
                                                                pwm_duty(PWMA_CH1P_P10, 9999);     //right
                                                                pwm_duty(PWMA_CH2N_P13, 0);
                                                                pwm_duty(PWMA_CH3P_P14, 9999);     //left
                                                                pwm_duty(PWMA_CH4N_P17, 0);        
                 break;               
                                                 }        //switch選擇結(jié)束                                                

                                                                oled_p6x8str(0,4,"X");
                                                                oled_int16(10,4,x);
                                                                oled_p6x8str(50,4,"Y");
                                                                oled_int16(56,4,y);                                                        
                                                                //delay_ms(1);        

                }
                        
}

給你們看看我家哥哥戰(zhàn)車:
游客,本帖隱藏的內(nèi)容需要積分高于 1 才可瀏覽,您當前積分為 0


Keil代碼下載: Keil代碼.7z (131.51 KB, 下載次數(shù): 15)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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