基於Arduino與LabVIEW的直流電機轉速控制系統

2021-01-08 電子產品世界
多數的Arduino控制器都是基於Atmel公司的AVR系列單片機的,AVR單片機的片內資源非常的豐富,有ADC、定時器、外部中斷、SPI、IIC、PWM等功能,且Arduino控制器的PWM採用的是定時器相位修正PWM(頻率約為490Hz)和快速PWM(頻率約為980Hz,Uno的5、6和Leonardo的3、11),這也就導致了全部的定時器都被被佔用了,從而不能很方便的使用定時器設置一個中斷來實現一個周期的任務,而一般需要通過讀取系統已運行時間來判斷定時時間是否已經達到。例如,通過增量式編碼器來測量電機的轉速,常規的單片機的程序架構是通過定時器來實現精確的時間定時,並利用外部中斷來實現對脈衝數目的計數,然後計算出一定時間內脈衝的數目,從而得到轉速數值並輸出。

直流電機是Arduino機器人製作中的主要動力來源,但是由於電機的參數一致性有所差別,即使是相同型號的電機在相同電壓下的轉速都不完全相同,而且在帶負載或負載不同的情況下,更加會導致電機轉速發生變化,這就會導致製作的Arduino輪式機器人不能實現直線行走,因為這是一個開環控制,沒有任何反饋信號返回。如果給直流電機加上編碼器作為反饋器件,也就可以測量得到電機的當前轉速,如果將其與設定值計算差值,並通過PID算法計算得到新的控制信號,從而可以動態的測量和控制電機的轉速,形成一個閉環控制系統。

本文引用地址:http://www.eepw.com.cn/article/201701/337030.htm

下面我們利用帶有編碼器的直流電機、Arduino控制器、直流電機驅動板和LabVIEW上位機軟體以實驗探索的形式來設計一個直流電機轉速比例控制實驗。

1.TimerOne定時器庫

1.1下載及使用方法

TimerOne定時器庫使用AVR單片機內部的定時器1實現定時中斷的功能,其下載地址為:https://code.google.com/p/arduino-timerone/,只需要更改幾個參數即可使用定時器中斷來實現周期性執行的任務。需要注意的是,如果使用了TimerOne定時器庫,也就不能在相應的引腳輸出PWM電壓,Uno上的定時器與PWM引腳的關係如表1所示。

表1定時器與PWM引腳的關係

定時器

OC0A

OC0B

OC1A

OC1B

OC2A

OC2B

PWM引腳

6

5

9

10

11

3

TimerOne定時器庫函數庫中自帶的ISRBlink程序如程序代碼1所示,可以實現13號管腳上LED的5Hz頻率的閃爍。

程序代碼1:ISRBlink示例程序

#include

void setup() {

pinMode(13, OUTPUT);

Timer1.initialize(100000); //設置定時器中斷時間,基本單位為微秒,如設置為100000,則定時時間為0.1秒,頻率為10Hz。

Timer1.attachInterrupt( timerIsr ); //設置用戶自定義的定時器中斷服務函數,每發生一次定時器中斷,均會執行一次定時器中斷服務函數。

}

void loop(){

//主函數,用於執行非周期性任務

}

void timerIsr(){

//反轉I/O口電平

digitalWrite( 13, digitalRead( 13 ) ^ 1 );

}

1.2評估定時時間的準確性

僅僅憑靠眼睛不能判斷定時時間是否準確,下面我們設計一個實驗來評估定時時間的準確性。我們需要將上面示例代碼中的Timer1.initialize(100000)更改為Timer1.initialize(1000),digitalWrite( 13, digitalRead( 13 ) ^ 1 )更改為digitalWrite(2, digitalRead( 2) ^ 1 ),通過反轉I/O的電平實現數字埠2輸出500Hz的近似方波。

同時,我們使用NI USB-6009可攜式數據採集卡和LabVIEW 2012軟體實現一個簡易的模擬量採集器,將Arduino控制器上的數字埠2和GND分別與NI USB-6009可攜式數據採集卡上的AI0/AI0+和AI4/AI0-相連接,NI USB-6009可攜式數據採集卡接口示意圖如圖1所示,Arduino Uno控制器與USB-6009可攜式數據採集卡的連接圖如圖2所示。然後使用10kps的採樣率,5秒的採樣時間的參數採集Arduino控制器上的數字埠2輸出的方波信號,取其前20ms的波形如圖3所示,通過波形頻率分析工具測量得到其頻率為499.901Hz。

另外,我們又將定時時間設置為100微秒、50微秒和25微秒,並使用NI USB-6009可攜式數據採集卡和LabVIEW 2012軟體以45kps的採樣率和2秒的採樣時間分別採集了數字埠2輸出的波形數據並進行頻率分析,得到其頻率分別為4999.01Hz,9998.03Hz,19996Hz。從以上數據對比分析可知,定時器的定時時間非常準確,頻率測量誤差主要來自於I/O反轉操作延時導致的。

最後,我們還測試了OCROBOT MEGA 2560控制器、Arduino Uno控制器山寨版輸出的500Hz的方波信號頻率,分別為500.435Hz和499.764Hz。

圖1 NI USB-6009接口示意圖

圖2 NI USB-6009與Arduino連接示意圖

圖3定時器中斷產生的500Hz方波信號

2.轉速測量

2.1測量轉速方法

測量轉速方法有3種,分別為測頻法(M法)、測周法(T法)及混合法(M/T法)。

測頻法是在一定時間內,通過測量旋轉引起的單位時間內的脈衝數,實現對旋轉軸轉速測量的一種方法,適用於高、中轉速的測量。該法本質上屬於定時測角法,為提高測量的準確度,有時採用多標記或開齒的方法,其不確定度主要取決於時間測量和計數量化。

測周法是在轉速脈衝的間隔內,用時鐘脈衝來測量轉速的一種方法,適合於低轉速測量。該法實際上就是定角測量法,即用時標填充的方法來測量相當於某一旋轉角度的時間間隔。在高、中轉速時,可採用多周期平均來提高測量準確度,其不確定度主要取決於時間測量、計數量化及觸發的不確定度。

混合法是在測頻法的基礎上,吸取測周法的優點匯集而成的一種轉速測量方法。它是在轉速傳感器輸出脈衝啟動定時脈衝的同時,計取傳感器輸出脈衝個數和時鐘脈衝個數,而當到達測量時間時,先停止對傳感器輸出脈衝的計數,在下一個定時脈衝啟動之前再停止時鐘脈衝的計數。因此,該種方法可在較寬的範圍內使用。

此處,我們選擇測頻法來測量轉速,其工作原理為:當被測信號在特定時間段T內的周期個數為N時,則被測信號的頻率f=N/T。

2.2轉速測量程序設計

利用TimerOne定時器庫來實現定時,通過外部中斷對電機編碼器輸出的脈衝進行計數,計數值除以定時時間即為一定時間內的轉速。實現1秒內轉速測量的程序如程序代碼2所示。

程序代碼2:轉速測量程序

#include

long counter_val[2] = {0,0};//定義數組,用於存放外部中斷計數值

byte CurCnt = 0;//定義當前計數器標誌,用於判斷當前正在計數的數組

int j=0;//定義定時器中斷標誌,用於判斷是否發生中斷

void setup() {

delay(2000);

Serial.begin(115200);//初始化波特率為115200

attachInterrupt(0, counter, RISING);//設置中斷方式為上升沿

Timer1.initialize(1000000); //設置定時器中斷時間,單位微秒,此處為1秒

Timer1.attachInterrupt( timerIsr ); //打開定時器中斷

interrupts();//打開外部中斷

}

void loop()

{

long lTemp = 0; //定義臨時存儲數據變量

if(j==1)//判斷是否發生定時器中斷,即定時時間是否到達

{

j=0; //清除定時器中斷標誌位

if((CurCnt&0x01) == 0) //當前使用的是偶數計數器,則上次頻率值存放在第二個元素中

{

lTemp = counter_val[1];//讀取數組第二個元素中的數值

counter_val[1]=0;//讀完清除原來的數值,以便下次使用

}

else//當前使用的是奇數計數器,則上次頻率值存放在第一個元素中

{

lTemp = counter_val[0];//讀取數組第二個元素中的數值

counter_val[0]=0;//讀完清除原來的數值,以便下次使用

}

Serial.print("S");//發送幀頭大寫S

Serial.print( lTemp);//發送頻率數據,並回車換行

}

}

//外部中斷處理函數

void counter()

{

//通過當前計數器來實現對外部中斷計數值存儲的切換

counter_val[CurCnt& 0x01] += 1;//發生一次中斷則加1

}

//定時器中斷處理函數

void timerIsr()

{

j=1;//置位定時器中斷標誌位

CurCnt++; //當前計數器的值加1,實現另一個計數值切換

}

2.3驗證頻率測量的準確性

前面提到了Arduino的模擬輸出(PWM)的頻率約為490Hz,且轉速測量採用的是測頻法,此時用來正好來驗證一下程序設計的正確性。在上面的轉速測量程序中的void setup()裡面delay(2000)之前增加如下代碼,以產生方波。串口輸出的頻率測量結果如圖4所示。

相關焦點

  • 基於DSP的兩相無刷直流電機轉速控制系統
    ,廣泛應用於航空航天、精密儀器和工業控制自動化等領域。無刷直流電機採用電子換相裝置,沒有機械電刷;採用永磁體轉子,沒有激磁損耗;發熱的電樞繞組置於外圍的定子上,散熱性好,效率高,過載能力強,無換相火花,在高轉速領域尤為適合,是高速電機的一個重點發展方向。
  • 基於MCS-51單片機的直流電機轉速測控系統設計
    摘要:給出了一種基於89C51單片機以及PWM控制思想的高精度、高穩定、多任務直流電機轉速測控系統實驗結果表明該系統能實時、有效地對直流電機轉速進行監測與控制,而且輸出轉速精度高、穩定性好。
  • 基於無刷直流電機的驅動及各種控制系統實現
    上電自檢、電機啟動軟體控制,PWM電機轉速控制以及電路保護功能。基於TMS320F2812無刷直流電機控制系統設計以TMS320F2812為核心的全數字電機控制系統極大地簡化了硬體設計,提高了系統的可靠性,降低了成本,並對無刷直流電機的普及應用具有良好的前景。為此,提出了一種基於TMS320F2812的全數字永磁無刷直流電機控制方案。
  • 基於ATmega8的無刷直流電機調速控制系統
    但目前市場上的電動自行車還存在著一些不夠完善的地方,尤其是電機控制方面有待於進一步提高。本文根據無刷直流電機的原理,利用美國Atmel公司2002年推出的一款新型AVR高檔單片機ATmega8作為主控晶片設計了一種無刷直流電機調速控制系統,該系統具有硬體結構簡單、軟體設計靈活、適用面廣、價格低廉等優點?具有一定的實用價值。
  • 基於Proteus和AVR單片機的無刷直流電機控制系統仿真
    無刷直流電機的控制系統,並進行了仿真實驗。在仿真實驗中利用Proteus軟體的仿真功能,進行了電機轉速控制的實驗,控制系統的可行性以及轉速控制效果得到了驗證。實驗過程中能直觀地看到實驗結果,所設計的系統滿足了無刷直流電機轉速控制的要求,電機運行穩定,在硬體電路和軟體設計都有一定的輔助作用。
  • 基於直流電機調速與測速系統設計方案
    本文以AT89S51單片機為核心,提出了基於直流電機調速與測速系統的設計方案,然後給出了系統的主電路結構,以及驅動電路設計和系統軟體設計。
  • dsPIC30F6010的直流無刷電機控制系統
    摘要:基於dsPIC30F6010微處理器設計了無刷直流電動機有位置傳感器法和反電勢過零檢測法的調速系統。根據無刷直流電動機的特點和所用控制晶片的功能,分別提出了有位置傳感器法和無位置傳感器法的控制方案。從試驗測試結果來看,電機啟動穩定快速、正常,運轉良好,具有較寬的調速範圍等,反電動勢過零檢測法補償圖形符合要求。
  • TL494推挽式輸出的電路設計(基於TL494的H橋直流電機控制系統)
    摘要:介紹了以TL494為核心,採用PWM技術的直流電機控制系統。基於TL494的H橋直流電機控制系統可簡化電路結構、驅動能力強、功耗低並且控制方便,性能穩定。   由於直流電機具有良好的起動、制動和調速性能,已廣泛應用於工業、航天領域等各個方面。
  • 中大萊德:解析直流電機的特點以及怎樣控制轉速
    直流電機具有低速大扭矩的特點,是交流電機無法替代的。因此,直流電機調速設備具有廣泛的應用領域。直流電機分為兩類:換向器和無換向器。那麼如何調整它的速度呢? 20世紀30年代後期,電機電機系統的開發,使得具有優良調速功能的直流電機得到了廣泛應用。
  • 直流伺服電機速度控制單元解析,直流伺服電機的調速控制
    為調節電機轉速和方向,需對直流電壓的大小和方向進行控制,如何控制?  直流伺服電機速度控制單元的作用:將轉速指令信號轉換成電樞的電壓值,達到速度調節的目的。  直流電機速度控制單元常採用的調速方法:晶閘管(可控矽)調速系統;電晶體脈寬調製(PWM)調速系統。
  • 基於STM32的直流電機PID調速系統設計與實現
    直流調速系統廣泛應用於低轉速、高精度等各領域,如精密辦公設備(噴墨印表機、雷射印表機),自動售貨機,家用電器、機器人和玩具設備等。其發展得力於微電子技術、電力電子技術、傳感器技術、永磁材料技術、自動控制技術和微機應用技術的最新發展成就。
  • 一文看懂arduino驅動uln2003操作步進電機的方法
    arduino驅動uln2003操作步進電機的方法   1、網上買的步進電機,很多接線順序都不對。   2、ULN2003步進電機驅動板可以讓你方便的用Arduino控制28BYJ-48步進電機。
  • 基於單片機STC12C52系列直流電機調速系統
    單片機的直流電機的調速控制系統。該系統選用宏晶科技公司的高速/低功耗/超強抗幹擾的新一代單片機STC12C5206AD晶片作為主要部分,輔以上位機、電機驅動系統等設備對直流電動機進行不同速度的控制。脈寬調製是一種使用程序來控制波形佔空比、周期、相位波形的技術,在電機驅動、D/A轉換等場合有廣泛的應用。這種控制方式已作為直流電動機數字控制的基礎。在直流調速控制中,可以採用各種控制器,單片機是其中一種選擇。
  • 直流無刷電機及其控制方法在光伏水泵系統中的應用
    本文引用地址:http://www.eepw.com.cn/article/159968.htm關鍵詞:光伏水泵系統;直流無刷電機;反電勢;過零點識別電路;三段式起動   0 引言 近年來,隨著電力電子器件及控制理論的迅速發展,永磁直流無刷電機以其高效性,
  • 用單片機控制直流電機
    本設計以AT89C51單片機為核心,以4*4矩陣鍵盤做為輸入達到控制直流電機的啟停、速度和方向在設計中,採用了PWM技術對電機進行控制,通過對佔空比的計算達到精確調速的目的。
  • 減速電機可以降低直流電機的轉速,舵機也可以,兩者的區別有哪些
    微型電機在一些產品應用中,如需要低轉速、大扭力的參數就會需要用到齒輪減速機,齒輪減速機有行星減速機等結構,舵機也可以實現減速效果,那麼微型減速電機和舵機都是減速傳動設備,為何不只用減速電機就可以了呢?下面天孚微電機來為大家講解,微型減速電機與舵機之間的區別。
  • 基於MSK4226的直流有刷電機四象限控制
    控制器以單片機MSP430F169作為控制核心,利用單片機的PWM功能,可發生多通道佔空比可調的PWM信號;PWM信號通過電機驅動晶片MSK4226將電機兩端的電壓調製成頻率一定、寬度可變的脈衝電壓序列,控制電機轉速與轉向;單片機實時監測驅動晶片上的電機電流,發生過流時採取保護;在文章的最後比較了電機四象限控制與單像控制,總結出了四象限控制的優缺點
  • 利用電子仿真軟體Saber對無刷直流電機控制系統進行仿真分析
    利用電子仿真軟體Saber對無刷直流電機控制系統進行仿真分析 電子設計 發表於 2019-04-29 08:26:00 無刷直流電機是在有刷直流電機的基礎上發展起來。
  • 基於PLC的機器人伺服控制系統
    1 引 言   目前,工業機器人關節主要是採用交流伺服系統進行控制,本研究將技術成熟、編程方便、可靠性高、體積小的SIEMENS S-200可編程控制器 ,應用於可控環流可逆調系統,研製出機器人關節直流伺服系統,用以對工業機器人關節進行伺服控制。
  • 直流伺服電機、交流伺服電機和步進電機的優缺點
    ⑵需要精確控制恆定轉速或需要精確控制轉速變化曲線的動力驅動。這些電機具有一個共同的特點:轉速高、工作電流低,其中直流伺服電機J40SY272A的性能參數見表1。經過方案調研和審核,選取Magtrol的測功機HD510、HD710、測功機控制器DSP6001、三相電力分析儀6530,2臺安捷倫HP6673A大功率直流電源組建系統。  系統的機械部分是測試設備同被測電機連接的裝置,如聯軸器及法蘭盤支架。