在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:駭客小狗 ? 2023-11-10 15:48 ? 次閱讀

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

圖片

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

對(duì)于M法測(cè)速來說,測(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)過濾波后的速度曲線如下。

圖片

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

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

    關(guān)注

    45

    文章

    3673

    瀏覽量

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

    關(guān)注

    10

    文章

    669

    瀏覽量

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

    關(guān)注

    0

    文章

    39

    瀏覽量

    14235
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

    的,我們還程序發(fā)布基于HAL庫(kù)的指導(dǎo)文檔和視頻教程,歡迎持續(xù)關(guān)注,并提出改進(jìn)意見。參考文檔見:硬石電機(jī)控制專題指導(dǎo)手冊(cè)例程下載:資料包括程序、相關(guā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ù),自己買的板子跟的資料也一般是標(biāo)準(zhǔn)庫(kù)HAL庫(kù)很少,不過要是使用STM32CubeMx配置,那么就是使用的HAL
    發(fā)表于 11-22 11:23 ?3.5w次閱讀

    測(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 ?5639次閱讀

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

    前言: ST官方從2017年下半年開始就不再維護(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ù)入門之串口通信學(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配置過程進(jìn)行詳細(xì)的講解,讓準(zhǔn)備學(xué)習(xí)HAL庫(kù)
    發(fā)表于 01-14 12:39 ?95次下載
    【STM32】<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b> PWM控制<b class='flag-5'>電機(jī)</b>轉(zhuǎn)速與編碼器讀取(超詳解)

    stm32 hal庫(kù)資料分享

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

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

    測(cè)速電機(jī)是什么?測(cè)速電機(jī)是一種用于檢測(cè)和控制電機(jī)運(yùn)行速度的重要設(shè)備。它由能夠感知和測(cè)量電機(jī)運(yùn)行速
    的頭像 發(fā)表于 06-14 09:14 ?1276次閱讀
    <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 ?1000次閱讀

    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è)備訪問,提高代碼
    發(fā)表于 08-08 18:21 ?4821次閱讀

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

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

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

    如何快速入門HAL庫(kù)編程 要快速入門HAL庫(kù)編程,可以遵循以下步驟: 了解基礎(chǔ)知識(shí) : 掌握C語言編程基礎(chǔ),包括變量、數(shù)據(jù)類型、函數(shù)、指針等。 了解嵌入式系統(tǒng)的基本概念,如微控制器、中
    的頭像 發(fā)表于 12-02 11:39 ?463次閱讀
    主站蜘蛛池模板: 亚洲人成亚洲人成在线观看 | 欧美人与动性行为网站免费 | 狠狠狠狠狠操 | 亚洲免费mv| 又粗又大撑满了好爽 | 人人九九精| 四虎精品成人免费观看 | 女bbbbxxxx毛片视频丶 | japanese色系国产在线高清 | 日本xxxx69日本 | 美女被啪到哭网站在线观看 | 免费一级大毛片a一观看不卡 | 天天干天天澡 | 免费人成动漫在线播放r18 | 人人艹在线观看 | 天天澡天天摸天天添视频 | 男女视频免费观看 | 婷婷五月情 | 性大特级毛片视频 | 美国bj69| 日本拍拍 | 18女人毛片水真多免费 | 天天看毛片 | 黄色的视频网站在线观看 | 女bbbbxxxx毛片视频0 | 免费精品视频在线 | 精品国产成人三级在线观看 | 国产一级特黄高清在线大片 | 亚1州区2区3区4区产品乱码 | 亚色在线观看 | 欧美黄色片免费观看 | 在线观看黄色网 | 中文字幕一区二区三区视频在线 | 久久久国产精品网站 | 在线免费看黄的网站 | 色先锋av资源中文字幕 | 久久观看 | 一二三区乱码一区二区三区码 | 同性同男小说肉黄 | 闲人综合 | 日日操夜夜骑 |