RM新时代网站-首页

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

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

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

基于STM32的步進(jìn)電機(jī)速度控制

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:搜狐網(wǎng) ? 作者:搜狐網(wǎng) ? 2020-09-23 10:51 ? 次閱讀

項(xiàng)目需求

在制作一個(gè)使用全向輪的機(jī)器人底盤,對(duì)于全向輪,電機(jī)的精度是影響效果的重要因素。所以使用了步進(jìn)電機(jī),使用步進(jìn)電機(jī)的優(yōu)點(diǎn)是可以不使用編碼器,開(kāi)環(huán)控制即可達(dá)到高精度的效果。

調(diào)整占空比或者調(diào)整周期

眾所周知,PWM有兩個(gè)重要參數(shù),周期與占空比。
步進(jìn)電機(jī)的運(yùn)動(dòng)方式是,每收到一個(gè)脈沖,就旋轉(zhuǎn)指定的角度。因此影響電機(jī)速度的唯一參數(shù)就是PWM的頻率。以下附圖兩張來(lái)說(shuō)明調(diào)整占空比與調(diào)整周期的區(qū)別。

周期固定,調(diào)整占空比


上圖中有4個(gè)PWM,它們的周期是一樣的,不同之處是擁有從80%至20%的占空比??梢钥闯?,無(wú)論占空比為多少,在1s內(nèi),它們產(chǎn)生的高電平的數(shù)量是一樣的,即無(wú)論占空比為多少,PWM的頻率都一致。因此也就無(wú)法調(diào)整步進(jìn)電機(jī)的速度。因?yàn)椴竭M(jìn)電機(jī)的速度僅與PWM的頻率有關(guān)。

占空比固定,調(diào)整周期


上圖中有4個(gè)PWM,它們的占空比都固定為50%,卻擁有不同的周期??梢钥闯觯词拐伎毡裙潭?,只要?jiǎng)討B(tài)調(diào)整周期,PWM就能在相同時(shí)間內(nèi)產(chǎn)生數(shù)量不同的脈沖。因此,固定占空比,動(dòng)態(tài)調(diào)整PWM周期,即可達(dá)到控制步進(jìn)電機(jī)速度的效果。

基于STM32的實(shí)現(xiàn)

在STM32F1中,定時(shí)器具有PWM模式,可以用來(lái)產(chǎn)生PWM。但是,STM32的PWM模式,只要確定了時(shí)基單元(即確定了PWM周期),改變輸出比較寄存器,僅可改變PWM的占空比。

若需要改變PWM周期,需不停地改變定時(shí)器的時(shí)基單元。但時(shí)基單元與硬件相關(guān),不適合頻繁變更。因此,步進(jìn)電機(jī)的調(diào)速,不適合使用STM32下定時(shí)器的PWM模式來(lái)控制。

在多方查找資料后,確定了一種利用輸出比較精確控制PWM周期的方式。

利用輸出比較產(chǎn)生頻率可變的PWM

利用輸出比較產(chǎn)生頻率可變的PWM,原理簡(jiǎn)單介紹如下:

首先配置定時(shí)器時(shí)基單元,確定脈沖最小長(zhǎng)度單位CK。

然后開(kāi)啟定時(shí)器的輸出比較,設(shè)置模式為翻轉(zhuǎn)模式,并開(kāi)啟輸出比較中斷。

將定時(shí)器內(nèi)計(jì)數(shù)器CNT當(dāng)前值,加上脈沖長(zhǎng)度X(單位為CK),寫入輸出比較寄存器。

在X個(gè)CK后,將會(huì)觸發(fā)輸出比較中斷。同時(shí)電平翻轉(zhuǎn)。

在中斷中再次將當(dāng)前計(jì)數(shù)器CNT的值,加上脈沖長(zhǎng)度X,寫入輸出比較寄存器。

在X個(gè)CK后,將會(huì)觸發(fā)輸出比較中斷。同時(shí)電平翻轉(zhuǎn)。

在中斷中再次將當(dāng)前計(jì)數(shù)器CNT的值,加上脈沖長(zhǎng)度X,寫入輸出比較寄存器。

如此往復(fù)……

以此即可得到一個(gè)占空比為50%,周期為2X個(gè)CK的PWM。

確定最小單位CK,配置時(shí)基單元

首先確定一個(gè)最小的間隔CK,規(guī)定PWM的高電平長(zhǎng)度和低電平長(zhǎng)度的單位都是CK。

即高電平的長(zhǎng)度一定是CK的整數(shù)倍。低電平亦然。

然后配置定時(shí)器的時(shí)基單元,通過(guò)CK的長(zhǎng)度確定預(yù)分頻系數(shù)。

已知STM32F103的主頻為72MHZ,則時(shí)基單元中預(yù)分頻系數(shù)為

PSC = 72M / (1/CK)

例如,rtz所確定的CK長(zhǎng)度為10us(0.00001s)。即可得出方程

PSC = 72M / (1/0.00001)=72000000/100000=720

預(yù)分頻系數(shù)確定為720后,由高速晶振產(chǎn)生的72MHZ的時(shí)鐘信號(hào)被720分頻,得到100000HZ的時(shí)鐘信號(hào)。即時(shí)鐘信號(hào)每秒變動(dòng)100000次。每次10us。同時(shí)可將重裝載值設(shè)定為0XFFFF(16位定時(shí)器的最大值)。因?yàn)楸敬问褂玫妮敵霰容^模式不使用更新中斷,該值可隨意設(shè)置。

TIM_TimeBaseStructure.TIM_Period = 0XFFFF;TIM_TimeBaseStructure.TIM_Prescaler =720;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

開(kāi)啟輸出比較通道,設(shè)置輸出比較模式為翻轉(zhuǎn)模式,并配置NVIC,開(kāi)啟輸出比較中斷,配置輸出比較通道:

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;TIM_OCInitStructure.TIM_Pulse = 500;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;TIM_OC1Init(TIM2, &TIM_OCInitStructure);

開(kāi)啟輸出比較中斷,配置NVIC優(yōu)先級(jí):

TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);

編寫中斷服務(wù)函數(shù)

在輸出比較中斷中,唯一要做的事情就是把當(dāng)前CNT的值取出,加上脈沖長(zhǎng)度X,寫入輸出比較寄存器。

當(dāng)計(jì)數(shù)器達(dá)到0XFFFF(之前設(shè)定的重裝載值)后,再加一會(huì)自動(dòng)變?yōu)?.

例如,當(dāng)前CNT值為0XFFFF,脈沖長(zhǎng)度為5,很明顯,輸出比較寄存器應(yīng)設(shè)置為0X0004才可觸發(fā)下一次中斷,而不是0X10004,這樣會(huì)造成溢出。

因此將CNT的值與脈沖長(zhǎng)度相加后,需要取0XFFFF的余數(shù)后,再寫入輸出比較寄存器。

int t_m=5;//低電平和高電平的長(zhǎng)度void TIM2_IRQHandler(void){ if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) { TIM_SetCompare1(TIM2,(TIM2-》CNT+t_m)%0XFFFF); TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); }}

動(dòng)態(tài)調(diào)整中斷服務(wù)函數(shù)中的變量t_m,即可達(dá)到修改PWM頻率的效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355728
  • 步進(jìn)電機(jī)
    +關(guān)注

    關(guān)注

    150

    文章

    3109

    瀏覽量

    147443

原文標(biāo)題:STM32實(shí)例-步進(jìn)電機(jī)的速度控制

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    步進(jìn)電機(jī)速度控制

    步進(jìn)電機(jī)速度控制方法步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開(kāi)環(huán)
    發(fā)表于 01-11 15:02

    基于Stm32F407的多路步進(jìn)電機(jī)速度控制函數(shù)

    應(yīng)學(xué)弟們的要求特意將步進(jìn)電機(jī)速度控制函數(shù)完善。重點(diǎn): 這里只是速度控制函數(shù), 沒(méi)有加減速曲線!
    發(fā)表于 06-29 06:52

    stm32控制步進(jìn)電機(jī)速度

    stm32控制步進(jìn)電機(jī)速度,利用stm32控制
    發(fā)表于 07-08 07:29

    步進(jìn)電機(jī)速度控制及運(yùn)動(dòng)規(guī)律

    步進(jìn)電機(jī)速度控制及運(yùn)動(dòng)規(guī)律 步進(jìn)電機(jī)區(qū)別于其他控制
    發(fā)表于 09-17 15:07 ?9566次閱讀
    <b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>的<b class='flag-5'>速度</b><b class='flag-5'>控制</b>及運(yùn)動(dòng)規(guī)律

    基于STM32步進(jìn)電機(jī)轉(zhuǎn)速控制實(shí)驗(yàn)設(shè)計(jì)

    基于STM32步進(jìn)電機(jī)轉(zhuǎn)速控制實(shí)驗(yàn)設(shè)計(jì)
    發(fā)表于 09-28 16:00 ?79次下載
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>轉(zhuǎn)速<b class='flag-5'>控制</b>實(shí)驗(yàn)設(shè)計(jì)

    基于STM32步進(jìn)電機(jī)控制系統(tǒng)

    摘 要 本文的主要工作是基于STM32步進(jìn)電機(jī)控制系統(tǒng)的設(shè)計(jì)。隨著越來(lái)越多的高科技產(chǎn)品逐漸融入了日常生活中,步進(jìn)
    發(fā)表于 11-27 18:49 ?93次下載

    步進(jìn)電機(jī)如何控制速度

    工業(yè)控制上用到的步進(jìn)電機(jī)有多種控制方式。對(duì)于空調(diào)使用的步進(jìn)電機(jī)并不太了解,但從它
    的頭像 發(fā)表于 10-07 16:39 ?1.6w次閱讀
    <b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>如何<b class='flag-5'>控制</b><b class='flag-5'>速度</b>

    使用PLC如何控制步進(jìn)電機(jī)速度與方向

    步進(jìn)電機(jī)是一種很常見(jiàn)的動(dòng)力元件,步進(jìn)電機(jī)可以很方便的由控制系統(tǒng)控制速度與轉(zhuǎn)動(dòng)方向。那么使用PL
    的頭像 發(fā)表于 02-16 22:37 ?2.2w次閱讀
    使用PLC如何<b class='flag-5'>控制</b><b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>的<b class='flag-5'>速度</b>與方向

    基于DSP的步進(jìn)電機(jī)速度控制系統(tǒng)

    本文步進(jìn)電機(jī)原理及DSP控制方法,進(jìn)行了步進(jìn)電機(jī)速度控制
    發(fā)表于 06-07 09:11 ?29次下載

    STM32控制啟動(dòng)步進(jìn)電機(jī)

    STM32控制啟動(dòng)步進(jìn)電機(jī)概述正在做的項(xiàng)目需要用STM32控制
    發(fā)表于 12-24 19:30 ?87次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>控制</b>啟動(dòng)<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>

    硬盤步進(jìn)電機(jī)速度控制

    電子發(fā)燒友網(wǎng)站提供《硬盤步進(jìn)電機(jī)速度控制器.zip》資料免費(fèi)下載
    發(fā)表于 07-22 11:29 ?2次下載
    硬盤<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b><b class='flag-5'>速度</b><b class='flag-5'>控制</b>器

    基于STM32步進(jìn)電機(jī)驅(qū)動(dòng)設(shè)計(jì)

    固定的角度(及步進(jìn)角)??梢酝ㄟ^(guò)控制脈沖個(gè)來(lái)控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)可以通過(guò)控制脈沖頻率來(lái)控制
    發(fā)表于 03-16 10:29 ?21次下載
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)設(shè)計(jì)

    STM32實(shí)例之步進(jìn)電機(jī)速度控制

    在制作一個(gè)使用全向輪的機(jī)器人底盤,對(duì)于全向輪,電機(jī)的精度是影響效果的重要因素。所以使用了步進(jìn)電機(jī),使用步進(jìn)電機(jī) 的優(yōu)點(diǎn)是可以不使用編碼器,開(kāi)
    發(fā)表于 03-22 09:42 ?3次下載
    <b class='flag-5'>STM32</b>實(shí)例之<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>的<b class='flag-5'>速度</b><b class='flag-5'>控制</b>

    plc如何控制步進(jìn)電機(jī)速度和方向?

    plc作為一種工業(yè)控制計(jì)算機(jī),具有模塊化結(jié)構(gòu)、配置靈活、高速的處理速度、精確的數(shù)據(jù)處理能力、PLC對(duì)步進(jìn)電機(jī)也具有良好的控制能力,利用其高速
    的頭像 發(fā)表于 08-07 08:09 ?2312次閱讀
    plc如何<b class='flag-5'>控制</b><b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>的<b class='flag-5'>速度</b>和方向?

    步進(jìn)電機(jī)控制器怎么調(diào)速度

    引言 步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換為角位移的電機(jī),具有控制精度高、響應(yīng)速度快、結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn)。在自動(dòng)化設(shè)備、機(jī)器人、數(shù)控機(jī)床等領(lǐng)域得到了廣
    的頭像 發(fā)表于 06-12 09:17 ?1974次閱讀
    RM新时代网站-首页