一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用HAL庫(kù)進(jìn)行電機(jī)測(cè)速濾波

麥辣雞腿堡 ? 來(lái)源:CSDN博客 ? 作者:駭客小狗 ? 2023-11-10 15:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

如果將測(cè)得的速度值用VOFA+上位機(jī)畫(huà)出來(lái),我們可能會(huì)看到這樣的曲線

圖片

從圖中我們可以看到,速度值在目標(biāo)速度附近來(lái)回小幅度震蕩,始終不穩(wěn)定。這是因?yàn)?a href="http://www.www27dydycom.cn/tags/編碼器/" target="_blank">編碼器測(cè)速得到的速度值是離散的,如果電機(jī)的速度值剛好卡在兩個(gè)離散值中間,我們測(cè)得的速度值就會(huì)在這兩個(gè)離散值中間來(lái)回震蕩。如果我們想要解決這個(gè)問(wèn)題,最好先對(duì)測(cè)速的精度進(jìn)行分析。

對(duì)于M法測(cè)速來(lái)說(shuō),測(cè)速的公式如下,其中,k是將速度換算成rpm的比例系數(shù)

圖片

由于除號(hào)后面的都是定值,所以我們只要分析每次采樣的脈沖數(shù)對(duì)速度的影響即可。

我們假設(shè)現(xiàn)在測(cè)速頻率是50Hz,減速比為30,編碼器線數(shù)為13,那么脈沖數(shù)每變化1,速度的變化為

圖片

所以我們測(cè)得的速度只能是1.923rpm的整數(shù)倍。如果想要提高精度,在電機(jī)不變的情況下,我們可以使用500線的GMR編碼器或者降低測(cè)速頻率。

在VOFA+中,我們可以測(cè)得震蕩時(shí)波峰和波谷的差值為1.92左右,和我們的計(jì)算相符。

為了改善這一現(xiàn)象,我們可以對(duì)速度采樣值使用平均濾波,即將最近幾次的速度采樣值存放到數(shù)組中,每測(cè)得一個(gè)新的速度,就將新速度存入數(shù)組,將最早測(cè)得的速度值從數(shù)組中刪除,我們使用的速度值是數(shù)組中所有速度的平均值。實(shí)現(xiàn)代碼如下

#define SPEED_RECORD_NUM 20 // 經(jīng)測(cè)試,50Hz個(gè)采樣值進(jìn)行濾波的效果比較好


float speed_Record[SPEED_RECORD_NUM]={0};


/*
 * 進(jìn)行速度的平均濾波
 * 輸入新采樣到的速度,存放速度的數(shù)組,
 * 返回濾波后的速度
 */
float Speed_Low_Filter(float new_Spe,float *speed_Record)
{
    float sum = 0.0f;
    test_Speed = new_Spe;
    for(uint8_t i=SPEED_RECORD_NUM-1;i >0;i--)//將現(xiàn)有數(shù)據(jù)后移一位
    {
        speed_Record[i] = speed_Record[i-1];
        sum += speed_Record[i-1];
    }
    speed_Record[0] = new_Spe;//第一位是新的數(shù)據(jù)
    sum += new_Spe;
    test_Speed = sum/SPEED_RECORD_NUM;
    return sum/SPEED_RECORD_NUM;//返回均值
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//定時(shí)器回調(diào)函數(shù),用于計(jì)算速度
{  
    if(htim- >Instance==GAP_TIM.Instance)//間隔定時(shí)器中斷,是時(shí)候計(jì)算速度了
    {
        motor1.direct = __HAL_TIM_IS_TIM_COUNTING_DOWN(&ENCODER_TIM);//如果向上計(jì)數(shù)(正轉(zhuǎn)),返回值為0,否則返回值為1
        motor1.totalCount = COUNTERNUM_1 + motor1.overflowNum * RELOADVALUE_1;//一個(gè)周期內(nèi)的總計(jì)數(shù)值等于目前計(jì)數(shù)值加上溢出的計(jì)數(shù)值
        
        if(motor1.lastCount - motor1.totalCount > 19000) // 在計(jì)數(shù)值溢出時(shí)進(jìn)行防溢出處理
        {
            motor1.overflowNum++;
            motor1.totalCount = COUNTERNUM_1 + motor1.overflowNum * RELOADVALUE_1;//一個(gè)周期內(nèi)的總計(jì)數(shù)值等于目前計(jì)數(shù)值加上溢出的計(jì)數(shù)值
        }
        else if(motor1.totalCount - motor1.lastCount > 19000) // 在計(jì)數(shù)值溢出時(shí)進(jìn)行防溢出處理
        {
            motor1.overflowNum--;
            motor1.totalCount = COUNTERNUM_1 + motor1.overflowNum * RELOADVALUE_1;//一個(gè)周期內(nèi)的總計(jì)數(shù)值等于目前計(jì)數(shù)值加上溢出的計(jì)數(shù)值
        }
        
        motor1.speed = (float)(motor1.totalCount - motor1.lastCount) / (4 * MOTOR_SPEED_RERATIO * PULSE_PRE_ROUND) * 3000;//算得每秒多少轉(zhuǎn),除以4是因?yàn)?倍頻
        /*******************在這里添加濾波函數(shù)************************/
        motor1.speed = Speed_Low_Filter(motor1.speed,speed_Record);
        /**********************************************************/
        motor1.lastCount = motor1.totalCount; //記錄這一次的計(jì)數(shù)值
}

經(jīng)過(guò)濾波后的速度曲線如下。

圖片

綠線是原始速度,紅線是目標(biāo)速度,粉線是濾波后的速度。可以看到,濾波后的速度值明顯要平滑很多,這對(duì)我們后期的PID調(diào)試是很有利的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3811

    瀏覽量

    138136
  • 濾波
    +關(guān)注

    關(guān)注

    10

    文章

    681

    瀏覽量

    57327
  • 測(cè)速
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    14419
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用STM32 HAL庫(kù)進(jìn)行GPIO控制的實(shí)例

    在基于STM32微控制器的嵌入式系統(tǒng)開(kāi)發(fā)中,GPIO(GeneralPurposeInput/Output)控制是其中最基本、最常見(jiàn)的操作之一。通過(guò)使用STM32的HAL庫(kù),可以輕松地對(duì)GPIO進(jìn)行配置和控制。本文將演示如何使用
    的頭像 發(fā)表于 12-21 15:22 ?5040次閱讀

    HAL庫(kù)每天一例】第113例:?jiǎn)屋S25GA370直流電機(jī)編碼測(cè)速(L298N驅(qū)動(dòng))

    的,我們還程序發(fā)布基于HAL庫(kù)的指導(dǎo)文檔和視頻教程,歡迎持續(xù)關(guān)注,并提出改進(jìn)意見(jiàn)。參考文檔見(jiàn):硬石電機(jī)控制專題指導(dǎo)手冊(cè)例程下載:資料包括程序、相關(guān)說(shuō)明資料以及軟件使用截圖百度云盤(pán):https
    發(fā)表于 09-05 08:45

    STM32標(biāo)準(zhǔn)庫(kù)改為HAL庫(kù)的程序?qū)崿F(xiàn)

    標(biāo)準(zhǔn)庫(kù)占絕大多數(shù),自己買(mǎi)的板子跟的資料也一般是標(biāo)準(zhǔn)庫(kù)HAL庫(kù)很少,不過(guò)要是使用STM32CubeMx配置,那么就是使用的HAL
    發(fā)表于 11-22 11:23 ?3.6w次閱讀

    測(cè)速發(fā)電機(jī)的使用范圍 測(cè)速電機(jī)的特點(diǎn)

    元件 (3)用做解算元件 測(cè)速電機(jī)的特點(diǎn): 1、 測(cè)速發(fā)電機(jī)的輸出電壓信號(hào),電壓量程可在10幾伏到幾百伏之間; 2、 測(cè)速
    的頭像 發(fā)表于 07-20 17:49 ?6011次閱讀

    仿標(biāo)準(zhǔn)庫(kù),對(duì)HAL庫(kù)的補(bǔ)充代碼

    前言: ST官方從2017年下半年開(kāi)始就不再維護(hù)升級(jí)標(biāo)準(zhǔn)庫(kù),轉(zhuǎn)而推廣HAL庫(kù)。到2019年,HAL庫(kù)仍不夠成熟,其原因有以下: 1.
    發(fā)表于 11-29 11:36 ?30次下載
    仿標(biāo)準(zhǔn)<b class='flag-5'>庫(kù)</b>,對(duì)<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>的補(bǔ)充代碼

    HAL庫(kù)結(jié)構(gòu)

    HAL庫(kù)結(jié)構(gòu)
    發(fā)表于 12-09 13:36 ?32次下載
    <b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>結(jié)構(gòu)

    HAL庫(kù)】串口通信

    HAL庫(kù)入門(mén)之串口通信學(xué)習(xí)經(jīng)驗(yàn)分享
    發(fā)表于 12-16 16:58 ?5次下載
    【<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>】串口通信

    stm32F103 基于HAL庫(kù)的直流電機(jī)驅(qū)動(dòng)(一)

    stm32F103 基于HAL庫(kù)的直流電機(jī)驅(qū)動(dòng)目錄stm32F103 基于HAL庫(kù)的直流電機(jī)驅(qū)動(dòng)
    發(fā)表于 01-12 19:48 ?38次下載
    stm32F103 基于<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>的直流<b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)(一)

    【STM32】HAL庫(kù) PWM控制電機(jī)轉(zhuǎn)速與編碼器讀取(超詳解)

    ??大家好,我是小政。本篇文章我將針對(duì)PWM控制電機(jī)與編碼器讀取電機(jī)轉(zhuǎn)速的STM32CubeMX配置過(guò)程進(jìn)行詳細(xì)的講解,讓準(zhǔn)備學(xué)習(xí)HAL庫(kù)
    發(fā)表于 01-14 12:39 ?96次下載
    【STM32】<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b> PWM控制<b class='flag-5'>電機(jī)</b>轉(zhuǎn)速與編碼器讀?。ǔ斀猓? />    </a>
</div>                              <div   id=

    stm32 hal庫(kù)資料分享

    stm32 hal庫(kù)資料分享
    發(fā)表于 11-03 16:17 ?132次下載

    測(cè)速電機(jī)是什么?

    測(cè)速電機(jī)是什么?測(cè)速電機(jī)是一種用于檢測(cè)和控制電機(jī)運(yùn)行速度的重要設(shè)備。它由能夠感知和測(cè)量電機(jī)運(yùn)行速
    的頭像 發(fā)表于 06-14 09:14 ?1483次閱讀
    <b class='flag-5'>測(cè)速</b><b class='flag-5'>電機(jī)</b>是什么?

    測(cè)速電機(jī)的分類與測(cè)速電機(jī)的應(yīng)用

    測(cè)速電機(jī)的分類與測(cè)速電機(jī)的應(yīng)用:測(cè)速電機(jī)是一種用于檢測(cè)和控制
    的頭像 發(fā)表于 07-19 16:45 ?1202次閱讀

    STM32 HAL庫(kù)的功能和使用方法 STM32 HAL庫(kù)和標(biāo)準(zhǔn)庫(kù)的區(qū)別

    HAL(Hardware Abstraction Layer)是指硬件抽象層,是一種封裝底層硬件接口驅(qū)動(dòng)的編程庫(kù)。在嵌入式系統(tǒng)中,HAL庫(kù)可以更加方便地實(shí)現(xiàn)硬件控制和設(shè)備訪問(wèn),提高代碼
    發(fā)表于 08-08 18:21 ?6378次閱讀

    STM32 HAL庫(kù)串口收發(fā)是如何使用的?

    的一種庫(kù),它提供了一種簡(jiǎn)單易用的方法來(lái)使用STM32的各種外設(shè)。 本文將詳細(xì)介紹如何使用STM32 HAL庫(kù)來(lái)進(jìn)行串口通信,包括初始化、發(fā)送數(shù)據(jù)和接收數(shù)據(jù)等方面。 1. 初始化串口 首
    的頭像 發(fā)表于 10-26 17:42 ?1890次閱讀

    如何快速入門(mén)HAL庫(kù)編程 HAL庫(kù)與裸機(jī)編程的比較

    如何快速入門(mén)HAL庫(kù)編程 要快速入門(mén)HAL庫(kù)編程,可以遵循以下步驟: 了解基礎(chǔ)知識(shí) : 掌握C語(yǔ)言編程基礎(chǔ),包括變量、數(shù)據(jù)類型、函數(shù)、指針等。 了解嵌入式系統(tǒng)的基本概念,如微控制器、中
    的頭像 發(fā)表于 12-02 11:39 ?1148次閱讀