51單片機PWM細分控制步進電機的研究

2020-11-25 電子產品世界

為什麼要PWM細分呢?因為這樣可以是步進電機運行平穩、減小噪音、增大轉速(MAX的)、增加力矩……
為什麼要強調是51單片機呢?因為51單片機沒有硬體PWM模塊,所以只能軟體模擬了……
研究這玩意兒,我走了許多彎路,看了許多文獻,最後發現,盡信書不如無書……
就用28系列4相5線電機來說吧。

整步驅動(四相四拍)時序為:
A相 B相 C相 D相
1拍 1 0 0 0
2拍 0 1 0 0
3拍 0 0 1 0
4拍 0 0 0 1
我想沒人用這樣的方式來驅動吧,這震動也太大了。
2細分驅動(四相八拍)時序為:
A相 B相 C相 D相
1拍 1 0 0 0
2拍 1 1 0 0
3拍 0 1 0 0
4拍 0 1 1 0
5拍 0 0 1 0
6拍 0 0 1 1
7拍 0 0 0 1
8拍 1 0 0 1
不需要PWM,我想用著方式驅動的人最多吧。
PWM6細分驅動(四相24拍)時序為:

其中的0.97、0.87、0.70、0.50、0.26分別是COS15°、COS30°、COS45°、COS60°和COS75°的近似值。
根據我參看的那些專門研究步進電機的大佬們的論文,他們說步進電機中所有線圈中同一時間電流和為0,就是說我上面的那個時序圖中凡是數值為0的地方,其實是應該有相應的負值或零值存在的,使得每一拍四相線圈數值加起來為0,但我就想不通了,要是這樣,那怎麼使得每相線圈中電流既能正著流,又能反著流?好像我的ULN2003驅動板沒這功能吧!所以我採用笨辦法,把凡是負數的地方全改為了0,管他的!可能這也是使我用此時序驅動電機不理想的原因吧……最後通過不斷試驗發現,以此時序驅動電機,震動大、噪音強、轉速慢還外加力矩小,一無是處,連4相8拍都不如,真是欲哭無淚……
通過分析4相24拍和4相8拍的時序圖,我發現,4相8拍方式下磁力矩的大小的和最小為1,最大為1.414,在半步處!而4相24拍的磁力矩的大小的和最小為1,最大為1.183,也在半步處,難怪了,半步時,轉子的小齒離兩通電線圈是最遠的,此時磁力矩大小和不如4相8拍,那麼力矩肯定也就沒4相8拍的大了 ……
所以我重新更新後的時序為:

使用這一時序後,終於讓我體會到了細分的優越,和4相8拍比起來振動小了,力矩大了。
在PWM的每個周期中,肯定是時序圖中數值大的線圈先通電,然後才是小的,一個周期結束後,所有線圈斷電。所以得建立一個描述每拍中是哪一個相(線圈)先通電,哪一個相後通電的數組,以上面的時序圖為準,建立的數組為:
djsx[2][24]={0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,0,0,3,1,1,1,0,0,0,2,2,2,1,1,1,3,3,3,2,2,

2,0,0,0,3,3}; //djsx[2][24]中的第一維儲存的的就是先通電的線圈的相數,第二維是拍數
時序圖中每一相後的眾多數字,可以看成是其在某一拍中需要通電的時間,分析發現,其是有規律的,每隔6拍重複出現一次,由於先通電的都是在每一拍中要一直通電,所以用數組表式剩下某相在某一拍中通電起始時間和通電的時間:
ys[2][5]={1-0.27,1-0.57,1-1,1-0.57,1-0.27,0.27,0.57,1,0.57,0.27}={0.73,0.43,0,0.43,0.73,0.27,0.57,1,0.57,0.27};
51單片機工作在65.536MHz時,每微秒5.461個機器周期,PWM頻率為5000Hz時,每周期200微秒,也就是說每周期1092個機器周期,所以ys數組變換為:
ys[2][5]={797,470,0,470,797,295,622,1092,622,295};
由於51的定時器分為TH和TL,並且是每機器周期加1,直到溢出中斷,所以ys數組得再加一維,分別用來貯存TL和TH,所以變換為:
ys[2][5][2]={224,252,47,254,255,255,47,254,224,252,218,254,137,253,187,251,137,253,

218,254};
程序原始碼為:

#includereg52.h>#define uchar unsigned char#define uint unsigned intuchar code djsx[2][24]={0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,0,0,

3,1,1,1,0,0,0,2,2,2,1,1,1,3,3,3,2,2,2,0,0,0,3,3};uchar code ys[2][5][2]={224,252,47,254,255,255,47,254,224,252,218,254,

137,253,187,251,137,253,218,254};uchar code pout[4]={1,2,4,8};char count,count_x,count_b,bs=0;char xzbs=1; //正轉為1,倒轉為-1uchar xzsd=6; //我的28電機測試最小為6,此數值越小,轉速越快

相關焦點

  • 步進電機控制程序(c語言+51單片機)
    = 0; /* 播碼盤設置 步進電機 正向速度 */bit one_round_flg = 0;sbit led_1000 = P0^7; //use for displaysbit led_100 = P0^6; //use for displaysbit led_10 = P0^5; //use for display
  • 51單片機與TA8435的步進電機細分控制
    1 步進電機   步進電動機是純粹的數字控制電動機,它將電脈衝信號轉變為角位移,即給一個脈衝,步進電機就轉一個角度,因此非常合適單片機控制,在非超載的情況下,
  • 單片機對儀表步進電機的細分控制
    是將電脈衝信號轉變為角位移或線位移的開環控制元件。在非超載的情況下,電機轉速、停止的位置只取決於脈衝信號的頻率和脈衝數,而不受負載變化的影響,即給電機某相線圈加一脈衝信號,電機則轉過一個步距角。這一線性關係的存在,加上步進電機只有周期性的誤差而無累積誤差等特點,使得在速度、位置等控制領域用步進電機來控制變得非常簡單。雖然步進電機已被廣泛地應用,但步進電機並不像普通的直流電機、交流電機那樣在常規下使用。
  • 單片機與TA8435的步進電機細分控制
    1 步進電機 步進電動機是純粹的數字控制電動機,它將電脈衝信號轉變為角位移,即給一個脈衝,步進電機就轉一個角度,因此非常合適單片機控制,在非超載的情況下,電機的轉速、停止的位置只取決於脈衝信號的頻率和脈衝數
  • 51單片機精確控制步進電機(有TB6600驅動)
    設備:51單片機開發板、TB6600驅動器、57BYG250B步進電機(二相)、直流開關電源。直流電源給驅動器供電,單片機給驅動器輸入脈衝,驅動器驅動步進電機。程序使用定時器中斷精確控制電機轉動(不考慮失步)。比如我採用16倍細分,則需給驅動輸入3200個脈衝,驅動才會使電機轉一圈,下面程序中1秒發送200個脈衝,則相應的電機16秒轉一圈。
  • 基於ATMEGA48單片機的儀表步進電機的細分控制
    儀表步進電機本文引用地址:http://www.eepw.com.cn/article/162587.htm  步進電機是將電脈衝信號轉變為角位移或線位移的開環控制元件。
  • 單片機控制步進電機的原理
    本資料詳細介紹鄧步進電機的工作原理以及單片機控制步進電機的特點。步進電機是數字控制電機,它將脈衝信號轉變成角位移,即給一個脈衝信號,步進電機就轉動一個角度,因此非常適合於單片機控制。    步進電機可分為反應式步進電機、永磁式步進電機和混合式步進電機。
  • 單片機控制的步進電機PWM控制程序
    8051單片機控制步進電機的C51語言編寫的PWM控制程序#include #include >#include #include "UPSD3200.H"#include "upsd_pwm.h"#define uint unsigned int#define uchar unsigned charPSD_REGS PSD8xx_reg _at_ csiop;#define KEYIO (~(PSD8xx_reg.DATAIN_A
  • 步進電機細分控制
    >控制電動機,它將電脈衝信號轉變為角位移,即給一個脈衝,步進電機就轉一個角度,因此非常合適單片機控制,在非超載的情況下,電機的轉速、停止的位置只取決於脈衝信號的頻率和脈衝數,而不受負載變化的影響,電機則轉過一個步距角,同時步進電機只有周期性的無累積誤差,精度高。
  • 51單片機控制四相步進電機
    接觸單片機快兩年了,不過只是非常業餘的興趣,實踐卻不多,到現在還算是個初學者吧。這幾天給自己的任務就是搞定步進電機的單片機控制。以前曾看過有關步進電機原理和控制的資料,畢竟自己沒有做過,對其具體原理還不是很清楚。
  • 51單片機驅動步進電機__終極(完整版)
    在這裡介紹一下用51單片機驅動步進電機的方法。 這款步進電機的驅動電壓12V,步進角為 7.5度 . 一圈 360 度 , 需要 48 個脈衝完成!!! 該步進電機有6根引線,排列次序如下:1:紅色、2:紅色、3:橙色、4:棕色、5:黃色、6:黑色。
  • 基於單片機的步進電機開環控制系統
    摘要: 通過ATMEL89C51單片機對步進電機進行控制,主要介紹了步進電機控制器、驅動電路和LED顯示電路的設計,實現了步進電機的開環控制。
  • 51單片機學習之3-步進電機
    用於增強單片機IO口的驅動能力。ULN2003是高耐壓、大電流達林頓陳列,由七個矽NPN達林頓管組成。ULN2003是大電流驅動陣列,多用於單片機、智能儀表、PLC、數字量輸出卡等控制電路中。可直接驅動繼電器等負載。
  • 用51單片機控制兩相四線步進電機
    最近學習步進電機的驅動原理,照著教材自己實踐了一下用ULN2003驅動28BYJ-48兩相5線步進電機,可以正常轉動。手頭有一個舊光碟機,拆開發現裡面有三個電機,其中有一個控制雷射頭尋跡的兩相四線步進電機,我就用51的單片機讓它也轉起來。一開始照葫蘆畫瓢用ULN2003驅動,結果發現無論如何也不行。
  • 單片機與TA8435聯接控制步進電機原理圖
    單片機與TA8435聯接控制步進電機原理圖圖4是單片機與TA8435相連控制步進電機的原理圖,引腳M1和M2決定電機的轉動方式:M1=0、M2=0,電機按整步方式運轉;M1=1、M2=0,電機按半步方式運轉;M1=0、M2=1,
  • 以單片機為核心的步進電機控制系統驅動設計
    步進電機精度高,慣性小,在不失步的情況下沒有步距誤差積累,特別適用於數字控制的定位系統。傳統的細分驅動電路由細分環行分配器、放大器和合成器等部分組成。這種電路應用複雜,靈活性差。本文利用A3967SLB作為步進電機微控晶片,簡化了步進電機的控制實現。由於單片機資源沒有PC豐富,人機界面也沒有PC友好,因此,本文採用了主從式結構,即PC用於管理,單片機用於執行。
  • 51單片機控制步進電機驅動器工作原理
    步進電機在控制系統中具有廣泛的應用。它可以把脈衝信號轉換成角位移,並且可用作電磁製動輪、電磁差分器、或角位移發生器等。有時從一些舊設備上拆下的步進電機(這種電機一般沒有損壞)要改作它用,一般需自己設計驅動器。本文介紹的就是為從一日本產舊式印表機上拆下的步進電機而設計的驅動器。
  • 51單片機驅動步進電機電路及程序
    在這裡介紹一下用51單片機驅動步進電機的方法。本文引用地址:http://www.eepw.com.cn/article/173250.htm  這款步進電機的驅動電壓12V,步進角為 7.5度 .
  • PSoC3 雙軸步進電機細分控制
    本文給出了一種使用PSoC3 CY8C3866AXI-040晶片和L298雙全橋功率晶片對兩軸步進電機控制的方法,該方案電路簡單,控制方便,實驗結果表明,控制系統運行正常,可靠性較高。  1,概述步進電機是一種把電脈衝信號變成直線位移或角位移的控制電機。
  • 步進電機細分驅動電路及原理
    在國外,對於步進系統,主要採用二相混合式步進電機及相應的細分驅動器。但在國內,廣大用戶對「細分」還不是特別了解,有的只是認為,細分是為了提高精度,其實不然,細分主要是改善電機的運行性能。由於細分驅動器要精確控制電機的相電流,所以對驅動器要有相當高的技術要求和工藝要求,成本亦會較高。