stm32步進(jìn)電機(jī)控制程序系統(tǒng)(步進(jìn)電機(jī)控制程序編寫(xiě))

  • 生活
  • 2023-04-24 12:57

表面

為了實(shí)行步進(jìn)電機(jī)的緩慢啟停以及制止轉(zhuǎn)高轉(zhuǎn)速時(shí)不失步停轉(zhuǎn)。在步進(jìn)電機(jī)啟用、遏止進(jìn)程中,須要沿用加放慢的算法對(duì)啟用進(jìn)程舉行遏制。S弧線是加放慢遏制最理念的計(jì)劃。然而S弧線的公式以及遏制進(jìn)程都比擬攙雜。鑒于單片機(jī)實(shí)行這一算法須要有深沉的數(shù)學(xué)以及單片機(jī)軟硬件安排本領(lǐng)。

本視頻從淺入深引見(jiàn)S弧線加減數(shù)的表面、編制程序與試驗(yàn)。

將S弧線分割化,在所有加放慢進(jìn)程中,以確定的功夫間隙革新頻次,總的革新度數(shù)為2*N,i表白為第i次的革新,則第i次革新的頻次f(i)表白為:

個(gè)中fb為發(fā)端的頻次,fr是最后運(yùn)轉(zhuǎn)的頻次,α是弧線的舒卷系數(shù),普遍不妨取3-5之間的常數(shù)。

比方,啟用加快,發(fā)端頻次為400Hz,運(yùn)轉(zhuǎn)頻次為5KHz。

遏止放慢,發(fā)端頻次為5KHz,遏止頻次為400Hz,

加放慢的功夫均為1s,按10ms的功夫間隙革新頻次,所有革新100次,α取5。

則不妨繪制以次的加放慢弧線:

編制程序

經(jīng)過(guò)以次辦法實(shí)行實(shí)行步進(jìn)電機(jī)的S弧線的加放慢遏制:

擺設(shè)1ms的準(zhǔn)時(shí)器以及1ms的阻礙步調(diào)在阻礙步調(diào)中對(duì)加放慢的頻次革新度數(shù)i舉行計(jì)數(shù)擺設(shè)爆發(fā)步進(jìn)電機(jī)啟動(dòng)旗號(hào)的PWM模塊,樹(shù)立PWM的準(zhǔn)時(shí)阻礙以及阻礙步調(diào)在PWM的準(zhǔn)時(shí)阻礙步調(diào)中,計(jì)劃暫時(shí)革新度數(shù)對(duì)應(yīng)的頻次,并按出來(lái)的頻次革新PWM的頻次以及占空比在PWM的準(zhǔn)時(shí)阻礙步調(diào)中,計(jì)劃步進(jìn)電機(jī)運(yùn)轉(zhuǎn)的步數(shù),即使到達(dá)樹(shù)立的步數(shù)減去遏止的S弧線放慢運(yùn)轉(zhuǎn)所樹(shù)立的步數(shù),則發(fā)端放慢運(yùn)轉(zhuǎn)。同聲檢驗(yàn)和測(cè)定外部輸出,即使有須要遏止運(yùn)轉(zhuǎn)的輸出前提,則發(fā)端放慢運(yùn)轉(zhuǎn)。所有加放慢遏制進(jìn)程的難點(diǎn)在乎:

步進(jìn)電機(jī)的計(jì)步以及頻次革新須要在每一個(gè)PWM阻礙中舉行。步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)頻次最高到40KHz,這種頻次下,PWM的準(zhǔn)時(shí)阻礙周期到達(dá)了25us,PWM準(zhǔn)時(shí)器阻礙步調(diào)運(yùn)轉(zhuǎn)總功夫盡管小,按照體味起碼小于阻礙周期的30%,即7.5us。一旦勝過(guò)這個(gè)數(shù)值,引導(dǎo)一切阻礙步調(diào)(囊括PWM準(zhǔn)時(shí)阻礙步調(diào))漏運(yùn)轉(zhuǎn),基礎(chǔ)主步調(diào)沒(méi)轍運(yùn)轉(zhuǎn),引導(dǎo)所有遏制器佯死局面。按照S弧線的公司是一個(gè)攙雜的非線性的指數(shù)浮點(diǎn)數(shù)演算,須要奢侈洪量的功夫,徑直挪用C談話的庫(kù)因變量計(jì)劃這一數(shù)值大概奢侈幾十上百毫秒。為領(lǐng)會(huì)決S弧線的演算功夫題目,鑒于STM32F103,我沿用了查表法,簡(jiǎn)直辦法如次:

1.將α值設(shè)置5,

的取值范疇為-5~5之間。

2.在所有加放慢進(jìn)程中,表白式

在取值范疇-5~5內(nèi)平均取1024個(gè)數(shù)值,獲得數(shù)值表。

3.設(shè)置一個(gè)unsignedshort型有1024個(gè)元素的const典型的數(shù)組,用來(lái)保存數(shù)值表。

4.Const數(shù)組保存在里面的flash,數(shù)值表共占用2048字節(jié)。

STM32F103RTC6共256K,步調(diào)組和樹(shù)立參數(shù)占用48K,bootloader步調(diào)占用了8K,長(zhǎng)途晉級(jí)空間占用了100K,暫時(shí)運(yùn)用步調(diào)只用到40K安排。

結(jié)余60K安排的空間,騰出2K的空間來(lái)保存數(shù)值表,有空間,即是這么大肆。

5.在阻礙步調(diào)中,按照總的革新度數(shù)以及暫時(shí)的革新計(jì)數(shù)值,計(jì)劃

值,再映照到0-1023的數(shù)值有的索引值,經(jīng)過(guò)索引獲得數(shù)值。

6.須要提防的是stm32f103不扶助浮點(diǎn)數(shù)的演算,以是對(duì)于浮點(diǎn)數(shù)的演算,須要折算成乘以一個(gè)數(shù)再除以另一個(gè)數(shù),比方*α,須要變化為*65535/13107。

底下一段代碼是按照革新的計(jì)數(shù)值獲得頻次的因變量:

U16fnMC_GetFreq(U16n,U16halftn,U16alpha,U16minfreq,U16maxfreq){//alpha=alpha*4096signedintudataA;signedshortuiDataA;U16uiRes;U32uwData;udataA=(signedint)alpha*(signedint)n;udataA=(signedint)udataA/halftn;if(udataA>32767){udataA=32767;}uiDataA=(signedshort)alpha-(signedshort)udataA;uiDataA=(signedshort)4*4096-uiDataA;if(uiDataA<0){uiDataA=0;}uiRes=(U16)uiDataA;uiRes=uiRes/32;//*1023/8/4096if(uiRes>1023){uiRes=1023;}udataA=(signedint)(maxfreq-minfreq)*g_mc_uchExp[uiRes];udataA=udataA/65535;uiDataA=(signedint)udataA;uiDataA+=minfreq;if(uiDataA<200){uiDataA=200;}return(uiDataA);}底下一段代碼是爆發(fā)步進(jìn)電機(jī)遏制旗號(hào)的PWM周期阻礙步調(diào):

intdata;U16freq;STRMotorRegs*motor;motor=&g_motor_regs[0];MOTOR_A_CLEARINT();motor->steps++;data=(int)MOTOR_A_STEPS_GET();if(motor->direction==0){data=data+1;}else{data=data-1;}MOTOR_A_STEPS_SET(data);freq=motor->runfrequency;if(motor->runstate==MOTOR_RUN_STATE_INC){if(motor->runtimer>=motor->starttime){motor->runstate=MOTOR_RUN_STATE_IDLE;}else{freq=fnMC_GetFreq(motor->runtimer,motor->halfstarttime,motor->alpha,motor->startfreq,motor->runfrequency);//U16n,U16halftn,U16alpha,U16maxfreq,U16minfreq)}motor->runsnapfreq=freq;}elseif(motor->runstate==MOTOR_RUN_STATE_IDLE){if(motor->totalstep<=(motor->steps+motor->stopremainstep)){motor->runstate=MOTOR_RUN_STATE_DEC;motor->runtimer=0;}motor->runsnapfreq=freq;}else{if(motor->runtimer>=motor->stoptime){freq=motor->stopfreq;}else{freq=fnMC_GetFreq(motor->runtimer,motor->halfstoptime,motor->alpha,motor->runsnapfreq,motor->stopfreq);//U16n,U16halftn,U16alpha,U16maxfreq,U16minfreq)}}if(motor->steps>=motor->totalstep){motor->starting=FALSE;}if(FALSE==motor->starting){MOTOR_A_DISABLE();}else{motor->curfrequency=freq;fnMT_Cal_MotorA_TimeConf();}試驗(yàn)

底下是天生S弧線數(shù)值表、遏制步進(jìn)電機(jī)啟用、遏止的視頻,從視頻上不妨鮮明看到啟用時(shí)慢加快->快加快->慢加快的進(jìn)程,以及遏止時(shí)慢放慢->快放慢->慢放慢的進(jìn)程。

猜你喜歡

主站蜘蛛池模板: 久久久久亚洲精品无码网址| MM1313亚洲精品无码久久| 免费无码又爽又刺激高潮视频| 潮喷大喷水系列无码久久精品| 亚洲精品无码AV人在线播放| 久久久无码精品亚洲日韩蜜臀浪潮| 人妻少妇看A偷人无码电影| 亚洲AV无码一区二区三区牲色| 国产精品无码久久久久久久久久 | 亚洲熟妇无码一区二区三区| 无码人妻丰满熟妇区毛片18| 国产精品无码久久久久| 久久久久亚洲AV无码麻豆| 国产成人无码精品久久久露脸| 日韩免费无码一区二区三区| 少妇人妻av无码专区| 无码爆乳护士让我爽| 中文字幕精品无码一区二区三区| 在线观看无码AV网址| 亚洲色中文字幕无码AV| 免费无遮挡无码视频在线观看 | 日韩aⅴ人妻无码一区二区| 亚洲国产精品无码av| 亚洲AV无码乱码精品国产| 久久精品aⅴ无码中文字字幕重口| 精品无码黑人又粗又大又长| 久久青青草原亚洲av无码app| 曰韩精品无码一区二区三区| 九九无码人妻一区二区三区| AA区一区二区三无码精片| 无码人妻品一区二区三区精99| 潮喷失禁大喷水aⅴ无码| 少妇人妻av无码专区| 永久免费AV无码网站在线观看| JAVA性无码HD中文| 无码人妻精品中文字幕免费东京热| 国产成A人亚洲精V品无码 | 亚洲精品无码专区2| 无码精品人妻一区二区三区免费| 久久亚洲中文字幕无码| 午夜无码熟熟妇丰满人妻|