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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

K60 CCD小車LDPY_V5(臥式舵機(jī))源碼與調(diào)試文檔

[復(fù)制鏈接]
ID:423787 發(fā)表于 2018-11-9 20:47 | 顯示全部樓層 |閱讀模式
國賽光電組源碼
0.png

203824rpzefy8ttcpoeee4.jpg
2014-05-09
    首次將兩個程序融合。
2014-05-11
    上位機(jī)成功移植。
2014-05-13
    底層基本完工。
2014-05-20
    //調(diào)試舵機(jī)中心值語句(放在主循環(huán))
    //FTM2->CONTROLS[0].CnV = (uint32)(1.5625*((float)Steer1_info.Steer_PWMOutputDuty));
    //調(diào)試舵機(jī)左右極限值的語句(放在主循環(huán))
    //    if(1 == CCD1_info.CCDGetDataOK_Flag)
    //    {
    //        CCD1_info.CCDGetDataOK_Flag = 0;
    //        if(0 == xx)
    //            Steer1_info.Steer_PWMOutputDuty -= 1;
    //        else   
    //            Steer1_info.Steer_PWMOutputDuty += 1;
    //        
    //        if(Steer1_info.Steer_PWMOutputDuty >= Steer1_info.Steer_RightMAX)
    //            xx = 0;
    //        else if(Steer1_info.Steer_PWMOutputDuty <= Steer1_info.Steer_LeftMAX)
    //            xx = 1;
    //        FTM2->CONTROLS[0].CnV = (uint32)(1.5625*((float)Steer1_info.Steer_PWMOutputDuty));
    //    }
2014-05-22
    改變了巡線方式。
2014-05-28
    舵機(jī)KP = 1.1/1.2,KD >= 1.6(1.8),電機(jī)KP = 340,KI = 3。偏差D步長10
2014-06-03
    舵機(jī)KP = 1.06,KD = 2.5,電機(jī)KP = 480,KI = 80
2014-06-11
    //計時,調(diào)試停車
    if(Stop != Car_state)//計算行駛的時間
                Parameter_info.Time += 0.003;
            
    #ifdef DebugTime_Enable
   
    //若調(diào)試時間為零則進(jìn)入正常行駛狀態(tài),不進(jìn)行調(diào)試
    if((0 != Parameter_info.DebugTime) && (Parameter_info.Time >= Parameter_info.DebugTime))//調(diào)試時間到,停車
    {
        if(Stop != Car_state)
        {
            Car_state_Pre = Car_state;
            Car_state = Stop;
            
            Parameter_info.StartEndLine_Flag = 1;
        }
    }
    #endif
    //end of DebugTime_Enable
2014-06-12
    同時采集CCD1,CCD2,CCD3的數(shù)據(jù)和求3個CCD的偏差。
    CCD1當(dāng)兩邊都不丟為有效,CCD2當(dāng)兩邊不全丟為有效,CCD3當(dāng)兩邊都不丟為有效.
    當(dāng) CCD1_Ready_Num >= 5,CCD2_Ready_Num >= 6,CCD3_Ready_Num >= 10時是直道。
    當(dāng) CCD1_Ready_Num >= 5,CCD2_Ready_Num >= 6,CCD3_Ready_Num  = 0時是直道入彎道。
    當(dāng) CCD1_Ready_Num >= 5;CCD2_Ready_Num  = 0;CCD3_Ready_Num  = 0時是彎道。
    當(dāng) CCD1_Ready_Num = 0;CCD2_Ready_Num  = 0;CCD3_Ready_Num  = 0時是急彎。
2014-06-13
    搖頭舵機(jī)控制的時候在十字路口會有全白的時候,此時將搖頭舵機(jī)逐漸回正,以保證再次尋到正確的邊界。
2014-06-20
    限制搖頭舵機(jī)補(bǔ)線時的中線位置,防止在十字路口由于補(bǔ)線錯誤出現(xiàn)的抖動。
2014-06-21
    根據(jù)華為標(biāo)準(zhǔn)規(guī)范了代碼風(fēng)格。
2014-06-22
    經(jīng)測試,用Keil生成的K60代碼中的右移位運算( >> )為算數(shù)右移,即負(fù)數(shù)也可用右移運算。
2014-06-26
    myOLED_Dec4(7,10,CCD3_info.LeftLine[0]);
    myOLED_Dec4(7,50,CCD3_info.CentralLine[0]);
    myOLED_Dec4(7,90,CCD3_info.RightLine[0]);
   
    myOLED_Dec4(6,10,CCD2_info.LeftLine[0]);
    myOLED_Dec4(6,50,CCD2_info.CentralLine[0]);
    myOLED_Dec4(6,90,CCD2_info.RightLine[0]);
   
    myOLED_Dec4(5,10,CCD1_info.LeftLine[0]);
    myOLED_Dec4(5,50,CCD1_info.CentralLine[0]);
    myOLED_Dec4(5,90,CCD1_info.RightLine[0]);
2014-06-29
    由于當(dāng)搖頭舵機(jī)打到最大后不再利用偏差減速,則速度會有突變導(dǎo)致在急彎的時候不穩(wěn)定。
2014-07-01
    十字道雖然用了CCD2和CCD3來輔助檢測前面的邊界,但是一旦近處的CCD1再次尋到邊界(不管是單邊還是雙邊)都會退出十字道的處理。
    這樣產(chǎn)生的影響就是就算前面的CCD2,CCD3糾正正確了,一旦近處CCD1搜到單邊界(有可能不是正確的邊界),則會退出十字處理,可能導(dǎo)致錯誤。
   
    長直道進(jìn)入坡道的時候車可能由于速度太大減速不及時會跳動,可以利用3個CCD來預(yù)判坡道。即3個CCD都有雙邊界,并且中心值在63附近,
    一旦3個CCD的道路寬度都呈現(xiàn)逐漸加大的情況,則可以認(rèn)為是坡道。處理方法為由3檔或者2檔減速到1檔,并且開始減速。
2014-07-06
    彎道加速
    //清零出彎道加速標(biāo)記
    //    if(fabs(Steer_info->Steer_PWMOutputDuty - Steer_info->Steer_Center) < 50)
    //    {
    //        Speed_info->CurSpeedAcc_Flag = 0;    //清零出彎道加速標(biāo)記
    //        Speed_info->CurSpeedAcc = 0;        //直道上清零出彎道速度增加值
    //    }
    //    else
    //    {
    //        if(1 == Speed_info->CurSpeedAcc_Flag)//已經(jīng)在進(jìn)行彎道加速
    //        {
    //            if(Speed_info->CurSpeedAcc < 5000)//限制上限,防止越界
    //            {
    //                Speed_info->CurSpeedAcc += 1;        //每個周期增加1個脈沖
    //            }
    //        }
    //        else if((1 != Speed_info->CurSpeedAcc_Flag)
    //                && ((Steer_info->Steer_PWMOutputDuty >= Steer_info->Steer_RightMAX - 100)
    //                || (Steer_info->Steer_PWMOutputDuty <= Steer_info->Steer_LeftMAX + 100)))//彎道中轉(zhuǎn)向舵機(jī)打到極限的時候開始出彎道加速
    //        {
    //            Speed_info->CurSpeedAcc_Flag = 1;    //開始出彎道加速
    //            
    //            Speed_info->CurSpeedAcc += 1;        //增加1個脈沖
    //        }
    //    }
        
    //    if((1 == Parameter_info.RampReady_FLag) && (Ramp_Up != Road_condition))//長直道進(jìn)入坡道預(yù)判成功
    //    {
    //        Speed_info->TargetSpeed = Speed_info->RampUp_Speed;//設(shè)定為上坡道速度來急減速
    //    }
    //    else
    //    {
    //        Speed_info->TargetSpeed += sqrt(Speed_info->CurSpeedAcc);//如果在彎道中則加速
    //    }
2014-07-11
    舵機(jī)調(diào)試
    //轉(zhuǎn)向舵機(jī)輸出
    FTM2->CONTROLS[0].CnV = Steer_info.Steer_PWMOutputDuty;
   
    myOLED_Dec(4,50,Steer_info.Steer_PWMOutputDuty);
   
    速度控制
    //根據(jù)搖頭舵機(jī)打角,偏差,搖頭舵機(jī)打角偏差率來計算速度,并根據(jù)檔位的不同來改變直道最高速度
//    if((3 == Speed_info->LastSpeedMode) && (2 == Speed_info->SpeedMode))//由3檔換到2檔,應(yīng)該急減速
//    {
//        Speed_info->TargetSpeed =   Speed_info->Straight_Speed + Speed_info->SpeedAcc[Speed_info->SpeedMode - 1]
//                                 - (Speed_info->Straight_Speed + Speed_info->SpeedAcc[Speed_info->SpeedMode - 1] - Speed_info->Cur_Speed)*HeadSteerPWMError_MAX/Speed_info->HeadSteerPWMError_K
//                                 - (Speed_info->Straight_Speed + Speed_info->SpeedAcc[Speed_info->SpeedMode - 1] - Speed_info->Snake_Speed)*HeadSteerPWMError_D_MAX/Speed_info->HeadSteerPWMError_D_K
//                                 - (Speed_info->Straight_Speed + Speed_info->SpeedAcc[Speed_info->SpeedMode - 1] - Speed_info->Cur_Speed)*LineError_MAX/Speed_info->Error_K;
//        
//    }
//    else if((1 == Speed_info->LastSpeedMode) && (2 == Speed_info->SpeedMode))//由1檔換到2檔,應(yīng)該加速
//    {
//        Speed_info->TargetSpeed =   Speed_info->Straight_Speed
//                                 - (Speed_info->Straight_Speed - Speed_info->Cur_Speed)*HeadSteerPWMError_MAX/Speed_info->HeadSteerPWMError_K;
//    }
//    else
//    {
//        Speed_info->TargetSpeed =   Speed_info->Straight_Speed + Speed_info->SpeedAcc[Speed_info->SpeedMode - 1]
//                                 - (Speed_info->Straight_Speed + Speed_info->SpeedAcc[Speed_info->SpeedMode - 1] - Speed_info->Cur_Speed)*HeadSteerPWMError_MAX/Speed_info->HeadSteerPWMError_K
//                                 - (Speed_info->Straight_Speed + Speed_info->SpeedAcc[Speed_info->SpeedMode - 1] - Speed_info->Snake_Speed)*HeadSteerPWMError_D_MAX/Speed_info->HeadSteerPWMError_D_K;
//    }

    調(diào)試前瞻
//            myOLED_Dec(7,10,CCD3_info.LeftLine[0]);
//            myOLED_Dec(7,50,CCD3_info.CentralLine[0]);
//            myOLED_Dec(7,90,CCD3_info.RightLine[0]);
//            
//            myOLED_Dec(6,10,CCD2_info.LeftLine[0]);
//            myOLED_Dec(6,50,CCD2_info.CentralLine[0]);
//            myOLED_Dec(6,90,CCD2_info.RightLine[0]);
//            
//            myOLED_Dec(5,10,CCD1_info.LeftLine[0]);
//            myOLED_Dec(5,50,CCD1_info.CentralLine[0]);
//            myOLED_Dec(5,90,CCD1_info.RightLine[0]);

//            myOLED_CCDwave(&CCD1_info,&CCD2_info,&CCD3_info);

2014-07-11
    發(fā)現(xiàn)一旦同時采集CCD數(shù)據(jù)和陀螺儀數(shù)據(jù)并且用液晶顯示東西過多就會出現(xiàn)死機(jī)的現(xiàn)象,初步懷疑是陀螺儀與CCD采集公用了一個AD模塊,導(dǎo)致陀螺儀
    正在進(jìn)行AD轉(zhuǎn)換時被CCD采集中斷打斷而入堆棧,而陀螺儀AD轉(zhuǎn)換尚未完成,若被打斷則繼續(xù)等待轉(zhuǎn)換完成,CCD進(jìn)入采集程序后需要該AD模塊進(jìn)行數(shù)據(jù)轉(zhuǎn)換
    ,若此時該AD正在等待,則有可能繼續(xù)等待,導(dǎo)致最終死機(jī)。
   
2014-08-05
    發(fā)現(xiàn)十字道抖動的原因為CCD1進(jìn)入十字道,CCD2搜到邊界,控制搖頭舵機(jī)的量由CCD3切換至CCD2時發(fā)生抖動。
2014-08-09
    if(((1 == Speed_info->LastSpeedMode) && (2 == Speed_info->SpeedMode)) || (1 == Speed_info->CurSpeedAcc_Flag))
    {
        Speed_info->TargetSpeed[0] =  Speed_info->Straight_Speed
                                   - (Speed_info->Straight_Speed - Speed_info->Cur_Speed)*1/Speed_info->HeadSteerPWMError_K;
   
        if(1 == Speed_info->CurSpeedAcc_Flag)
        {
            if(Speed_info->Speed_Now < Speed_info->Straight_Speed)
            {
                Speed_info->CurSpeedAcc += 1.5;//每個周期增加1.5個脈沖
            }
            
            Speed_info->TargetSpeed[0] += sqrt(fabsf(Speed_info->CurSpeedAcc));
        }
    }

全部資料51hei下載地址:
LDPY_V5(臥式舵機(jī)).rar (6.74 MB, 下載次數(shù): 9)

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费网站黄 | 久久精品6 | 日本高清www| 亚洲三级网站 | 日本午夜视频 | 九九天堂 | 成年免费视频黄网站在线观看 | 麻豆三级视频 | 国产网址| 欧美日韩免费视频 | www.日日夜夜 | 欧美日韩在线免费观看 | 91久久精品视频 | 国产在线视频一区 | 亚洲欧美成人 | 欧美精品综合 | 成人午夜 | 婷婷综合五月天 | 青青草免费在线视频 | 成人免费在线播放 | 日韩中文视频 | 欧美黄色片在线观看 | 欧美8888| 免费在线a| 亚洲一区二区欧美 | 狠狠做| 国产一区二区在线免费 | 亚洲国产精品自拍 | a视频在线免费观看 | 看黄色大片 | 日日夜夜精品 | 国产中文字幕在线观看 | 一级片免费在线观看 | 亚洲av毛片成人精品 | 玖玖视频 | 久操伊人 | 欧美vieox另类极品 | 久久av片| 欧美不卡一区二区三区 | 五月天婷婷基地 | 亚洲视频在线观看一区 |