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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4715|回復: 3
打印 上一主題 下一主題
收起左側

基于kea128的電磁式智能小車

[復制鏈接]
跳轉到指定樓層
樓主
#include  "includefile.h"


/**********全局變量定義********/
int32 LeftDead = 0;
int32 RighDead = 0;
float Ratio_Encoder_Left = 207/(1175*0.02);// 左輪速度=counter*左輪周長(mm)/(左輪轉一圈對應的脈沖數*程序周期)
float Ratio_Encoder_Righ = 207/(1175*0.02);// 右輪速度=counter*右輪周長(mm)/(右輪轉一圈對應的脈沖數*程序周期)
float g_fRealSpeed = 0;                                //真實速度
float g_fLeftRealSpeed;
float g_fRighRealSpeed;
float g_fSpeedFilter = 0;                        //階梯濾波速度
float g_fExpectSpeed = 2800;                //期望速度
float g_fSpeedError;                                //速度偏差
float g_fSpeedErrorTemp[5] = {0};
float fSpeedErrorInteg = 0;                       
int32 g_nLeftpulse = 0,g_nRighpulse = 0;
float g_PWMOut;
int32 g_nLeftPWM, g_nRighPWM;
//速度控制
float g_speedControl_P = 320;                //速度P
float g_speedControl_I = 100;                //速度I
float g_fSpeedControlOut = 0;                //速度輸出
                                               

/**
* @file                PWM輸出
* @date                2018
*/
void PWMOut(void)
{
        int32 nLeftPWM = 0, nRighPWM = 0;
       
        if(Flag_Speed == OFF)                g_fSpeedControlOut = 0;                //如果Flag_Speed == OFF                不輸出速度
        if(Flag_Direction == OFF)        g_fDirectionControlOut = 0;        //如果Flag_Direction == OFF 不輸出方向
               
        g_nLeftPWM = (int32)(g_fSpeedControlOut - g_fDirectionControlOut);
        g_nRighPWM = (int32)(g_fSpeedControlOut + g_fDirectionControlOut);

//        g_nLeftPWM = g_nLeftPWM*1.05;//電機差異補償
//        g_nRighPWM = g_nRighPWM;
       
        if(Flag_Stop == OFF)                                                                         //如果Flag_Stop == OFF電機輸出0
        {
                  g_nLeftPWM = 0;g_nRighPWM = 0;
        }

          if(g_nLeftPWM < 0)
        {
                nLeftPWM = LeftDead - g_nLeftPWM;
                nLeftPWM = (nLeftPWM > 900? 900: nLeftPWM);
                ftm_pwm_duty(ftm2, ftm_ch2, nLeftPWM);
                ftm_pwm_duty(ftm2, ftm_ch3, 0);
        }
        else
        {
                nLeftPWM = LeftDead + g_nLeftPWM;
                nLeftPWM = (nLeftPWM > 900? 900: nLeftPWM);
                ftm_pwm_duty(ftm2, ftm_ch2, 0);
                ftm_pwm_duty(ftm2, ftm_ch3, nLeftPWM);
        }

        if(g_nRighPWM < 0)
        {
                nRighPWM = RighDead - g_nRighPWM;
                nRighPWM = (nRighPWM > 900? 900: nRighPWM);
                ftm_pwm_duty(ftm2, ftm_ch4, 0);
                ftm_pwm_duty(ftm2, ftm_ch5, nRighPWM);
        }
        else
        {
                nRighPWM = RighDead + g_nRighPWM;
                nRighPWM = (nRighPWM > 900? 900: nRighPWM);
                ftm_pwm_duty(ftm2, ftm_ch4, nRighPWM);
                ftm_pwm_duty(ftm2, ftm_ch5, 0);
        }       
}


/**
* @file                計算速度偏差
* @note              產生全局變量g_fSpeedError
* @date                2017
*/
void CalSpeedError(void)
{
        static float fSpeedOld = 0, fSpeedNew = 0;
       
        g_nLeftpulse = (gpio_get(Coder_dir_left) ==1?ftm_count_get(ftm0):-ftm_count_get(ftm0));//讀取左輪脈沖
        ftm_count_clean(ftm0);
        g_nRighpulse = (gpio_get(Coder_dir_right)==0?ftm_count_get(ftm1):-ftm_count_get(ftm1));//讀取右輪脈沖
        ftm_count_clean(ftm1);       
       
        g_fLeftRealSpeed = g_nLeftpulse*Ratio_Encoder_Left;
        g_fLeftRealSpeed = (g_fLeftRealSpeed>3400?3400:g_fLeftRealSpeed);                //濾左編碼器的噪聲
        g_fRighRealSpeed = g_nRighpulse*Ratio_Encoder_Righ;
        g_fRighRealSpeed = (g_fRighRealSpeed>3400?3400:g_fRighRealSpeed);                //濾右編碼器的噪聲
       
        g_fRealSpeed = (g_fLeftRealSpeed + g_fRighRealSpeed)*0.5;                                //真實速度
       
        //速度采集梯度平滑,每次采集最大變化200
        fSpeedOld = g_fSpeedFilter;
        fSpeedNew = g_fRealSpeed;
       
        if(fSpeedNew>=fSpeedOld)
                g_fSpeedFilter = ((fSpeedNew-fSpeedOld)>300?(fSpeedOld+300):fSpeedNew);
        else
                g_fSpeedFilter = ((fSpeedNew-fSpeedOld)<-300?(fSpeedOld-300):fSpeedNew);
       
        //flash中參數
//        g_fExpectSpeed = float05;  //2800
       
        g_fSpeedError =  g_fExpectSpeed - g_fSpeedFilter;
        g_fSpeedErrorTemp[4] = g_fSpeedErrorTemp[3];
        g_fSpeedErrorTemp[3] = g_fSpeedErrorTemp[2];
        g_fSpeedErrorTemp[2] = g_fSpeedErrorTemp[1];
        g_fSpeedErrorTemp[1] = g_fSpeedErrorTemp[0];
        g_fSpeedErrorTemp[0] = g_fSpeedError;
       
}


/**
* @file                速度控制
* @note              速度梯度平滑
* @date                2017
*/
void SpeedControl(void)
{
        int8 index=1;

        CalSpeedError();        //計算速度偏差
        g_fSpeedError = (g_fSpeedError>800?800:g_fSpeedError);//速度偏差限幅
        //flash中參數
//        g_speedControl_P = float06;        //320
//        g_speedControl_I = float07;        //100
       
        //積分分離
        if((g_fSpeedError<=300)&&(g_fSpeedError>=-300))
        index=1;
        else
        index=0;       
        fSpeedErrorInteg = index *float08 * g_fSpeedError * 0.00001;
       
        if(Flag_Stop==OFF|Flag_Speed==OFF)
        {
                fSpeedErrorInteg = 0;        //停車積分清零
        }       
        //fSpeedErrorInteg = (fSpeedErrorInteg < 0.0? 0.0: fSpeedErrorInteg);//積分下限
        //fSpeedErrorInteg = (fSpeedErrorInteg > 400.0? 400.0: fSpeedErrorInteg);//積分上限
        //速度控制算法(增量式PI)
        g_fSpeedControlOut += g_speedControl_P*0.005*(g_fSpeedErrorTemp[0]-g_fSpeedErrorTemp[1]) + fSpeedErrorInteg;
        g_fSpeedControlOut = (g_fSpeedControlOut>=6000?6000:g_fSpeedControlOut);
       
}








QQ圖片20180702165758.png (7.76 KB, 下載次數: 133)

QQ圖片20180702165758.png

QQ圖片20180702165846.png (111.55 KB, 下載次數: 139)

QQ圖片20180702165846.png

電磁三輪車.zip

4.76 MB, 下載次數: 38, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:363252 發表于 2018-7-2 17:03 | 只看該作者
供大家學習參考
回復

使用道具 舉報

板凳
ID:339618 發表于 2018-7-6 10:09 | 只看該作者
比賽可以用嗎
回復

使用道具 舉報

地板
ID:282650 發表于 2019-12-8 10:59 | 只看該作者
感謝!不過還是有些看不懂
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品福利视频 | 伊人狠狠干 | 国产精品毛片一区二区三区 | 成人精品一区亚洲午夜久久久 | 日韩午夜一区二区三区 | 欧美精品成人一区二区三区四区 | 欧美精品久久久 | 中文字字幕在线中文乱码范文 | 国产一区二区三区在线 | 久久综合久久综合久久综合 | 久久天堂 | 自拍偷拍亚洲视频 | 国产色视频网站 | 一区二区三区亚洲 | 一区二区三区高清 | jlzzjlzz国产精品久久 | 亚洲视频中文字幕 | 国产色播av在线 | 欧美日韩不卡在线 | 亚洲精品欧美 | 污污的网站在线观看 | 91视频免费黄 | 久久久久久综合 | 91社区在线观看高清 | 看片91| 视频一区二区在线观看 | 午夜影院污 | 国产欧美一区二区精品忘忧草 | 亚洲黄色在线 | 国产精品久久国产精品 | 亚洲精品视频在线 | 天啪| 国产精品久久久久久中文字 | 91久久精品一区二区二区 | 国产欧美日韩一区二区三区在线 | 97伊人| 人人人干| 亚洲高清视频在线观看 | 高清国产一区二区 | 日韩精品一区二区三区 | 国产99久久 |