新聞中心

        EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 聲音引導(dǎo)系統(tǒng)完整硬件設(shè)計(jì)和源代碼

        聲音引導(dǎo)系統(tǒng)完整硬件設(shè)計(jì)和源代碼

        作者: 時(shí)間:2016-12-08 來源:網(wǎng)絡(luò) 收藏

        電機(jī)進(jìn)行前進(jìn)和后退,因此需采用位置式PID控制。

        本文引用地址:http://www.104case.com/article/201612/327594.htm

        經(jīng)過不斷的測試,比例,積分,微分常數(shù)目前調(diào)出的最佳參數(shù)如下:

        Kp: 1.6 Ki: 2.1 Kd:1.4 具體部分代碼參見附錄。第五章調(diào)試及結(jié)果分析

        5.1音頻信號采集模塊調(diào)試

        次數(shù)

        聲源離接收器的距離/cm

        波形是否有變化

        1

        10

        2

        50

        3

        100

        4

        150

        不定

        5

        200

        5.2路程測量測試

        次數(shù)

        測試距離(cm)

        實(shí)際距離(cm)

        誤差計(jì)算

        1

        45

        47

        4.44%

        2

        50

        51

        2.00%

        3

        55

        57

        5.18%

        4

        60

        59

        1.67%

        調(diào)試儀器:20MHz雙蹤示波器、信號發(fā)生器、數(shù)字萬用表、秒表、米尺等

        5.3結(jié)果分析

        經(jīng)測試,在外界干擾不是太強(qiáng)的情況下,可移動(dòng)聲源能夠通過接收器方傳回的數(shù)據(jù)精確地定位,精度在1—3cm.

        PID調(diào)試部分代碼:

        // define difference : the difference between the latest data and the previous data

        // define U0 : the PWM to send to the moto

        int main (void)

        {

        ······ // Omitted the previous code

        int P = 0 , D = 0 ;

        tcount++ ;

        CarState.E0 = BitNum ;

        if ( CarState.E0 == CarState.E1 ) if ( CarState.E0 == 0 ) FlagD = 0 ;

        else if ( CarState.E0 < CarState.E1 ) FlagD = -1 ;

        else if ( CarState.E0 > CarState.E1 ) FlagD = 1 ;

        P = CarState.E0 * Kp ;

        D = Kd * KdS * ( CarState.E0 + 3*CarState.E1 - 3*CarState.E2 - CarState.E3 ) ;

        if ( D < - 30 * KdS ) D = -30*KdS ;

        else if ( D > 30*KdS ) D = 30*KdS ;

        if ( D != 0 ) D_old = D ;

        if ( D_old < -10 ) D_old++ ;

        else if ( D_old > 10 ) D_old-- ;

        if ( (CarState.E0 > -3)&&(CarState.E0 < 3) ) S = 0 ;

        else if ( ( FlagD == -1) && ( CarState.E0 <= -1 ) )

        if ( S > ( BitNum * BitNum * 20 * KsS ) ) S-- ;

        else if ( ( FlagD == -1) && ( CarState.E0 >= -1 ) ) S = 0 ; //

        else if ( ( FlagD == 1 ) && ( CarState.E0 <= 1 ) ) S = 0 ; //

        else if ( ( FlagD == 1 ) && ( CarState.E0 >= 1 ) )

        if ( S < ( BitNum * BitNum * 20 * KsS) ) S++ ; //

        u8_pwm_a = U0 + P + ( D_old / KdS )+ ( S / KsS ); // ;

        ······ // Omitted the following code

        }


        上一頁 1 2 下一頁

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 基隆市| 延寿县| 林口县| 彭山县| 岳普湖县| 巴南区| 阿拉善盟| 阿合奇县| 涞水县| 郓城县| 永福县| 吉隆县| 高阳县| 邯郸县| 承德市| 大厂| 兰西县| 交城县| 高阳县| 安塞县| 达孜县| 济阳县| 台中市| 南江县| 凌海市| 阿克陶县| 屯昌县| 新绛县| 双峰县| 含山县| 德阳市| 绥化市| 沙坪坝区| 二连浩特市| 罗江县| 砚山县| 图们市| 民县| 大英县| 察隅县| 镇沅|