51單片機PWM控制電機

2020-11-25 電子產品世界

小時候玩的四驅車,給直流馬達接通電源就嗤嗤的跑出去了。電機種類眾多,就屬控制直流電機最簡單,只要對調正負極就能改變電機的轉向。另外,直流電機負載能力強,適合做越野車的驅動電機。為了做可調速的越野車,就有了這篇文章。

電源電壓輸出是固定的,電機的轉速也因此是固定的,為了調節電機的轉速,就得改變電源電壓的輸出(為嘛要改變電機轉速?舉個簡單的列子,雙電機驅動小車-一邊一個電機-如何實現轉向?讓兩邊輪胎上的速度不同即可)。how?用PWM調製的方法,把恆定的直流電源電壓調製成頻率一定寬度可變的脈衝電壓序列,從而可以改變平均輸出電壓的大小,以調節電機的轉速。電源電壓在此處就是51MCU的引腳輸出,4.5-5V,只要在引腳上產生頻率可調的波形即可。假設在一個周期內,就10ms吧,前5ms引腳輸出高電平,後5ms引腳輸出低電平,周而復始,引腳上輸出50%佔空比的穩定方波;再改改,前2ms輸出高電平,後8ms輸出低電平,引腳上輸出20%佔空比的穩定方波。

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

MCU產生周期性事件很簡單,用定時器定時產生中斷即可。一般差不多一下形式:

void Isr01() interrupt 1{static unsigned int cnt;cnt++;if(cnt==40){cnt=0;}}

假設每250us產生一次中斷,以上中斷函數統計40次中斷,即10ms。
為了完成"可改變佔空比的方波"這個命題,來試試給這個函數增加一些統計事件,在一個統計事件中做一些事,另一個統計事件中做其他的事。

unsigned int condition=20;void Isr01() interrupt 1{static unsigned int cnt;cnt++;//一個周期if(cnt==40){cnt=0;}//事件1if(cntcondition就是新增加的統計事件,前半個周期為一個事件,後半個周期為另一個事件。這裡,當cnt小於5ms,輸出高電平,當cnt大於輸出低電平,合在一起生成一個50%佔空比的方波。

unsigned int condition=20;void Isr01() interrupt 1{static unsigned int cnt;cnt++;//一個周期if(cnt==40){cnt=0;}if(cnt為了改變佔空比,只要在ISR外修改condition即可,貼出最終的代碼:

#include    #include   sbit P2_0 = P2^0;  sbit P2_1 = P2^1;#define MakeByte(target, Hi,Lo) \  do{ \  target |= (((Hi)<<4)|(Lo)); \   }while(0); \  #define SetTH(n,val) \  do{ \  TH##n = val; \  }while(0); \  #define SetTL(n,val)  \  do{ \  TL##n = val; \  }while(0); \  #define EnableET(n) \  do{ \  ET##n = 0x01; \  IE |= 0x80; \  }while(0); \ enum KEYSTAT{KEYDOWN=0,KEYUP,};unsigned char iterator = 0x00;void DelayMs(unsigned int ms){int i=0,j=0;for(;i在主函數中,通過判斷按下鍵來改變condition。


結尾部分,貼上仿真圖和仿真結果:

1)佔空比100%:

2)差不多55%佔空比:


3)0%的佔空比,電機休息了:


相關焦點

  • 步進電機控制程序(c語言+51單片機)
    #includereg51.h>本文引用地址:http://www.eepw.com.cn/article/162126.htm#define uint unsigned int
  • PWM控制MOSFET搭建的H橋電路驅動直流電機仿真與單片機源碼
    PIC單片機 proteus H橋驅動直流電機PWM控制MOSFET搭建的H橋電路驅動直流電機運行仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)單片機源程序如下://-----------------------------------------------------------------//  名稱: 用PIC16F690設計的PWM控制器控制
  • 51單片機PWM細分控制步進電機的研究
    因為這樣可以是步進電機運行平穩、減小噪音、增大轉速(MAX的)、增加力矩……為什麼要強調是51單片機呢?因為51單片機沒有硬體PWM模塊,所以只能軟體模擬了……研究這玩意兒,我走了許多彎路,看了許多文獻,最後發現,盡信書不如無書……就用28系列4相5線電機來說吧。
  • 單片機控制的步進電機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單片機的大功率直流有刷電機的PWM調速控制
    本人最近一直想用51單片機來設計製作一個「大功率直流有刷電機PWM調速控制器」。由於平時工作忙,沒時間。 由於這個是大功率的直流有刷電機PWM調速控制器,所以就不能用電晶體來驅動了,必須用MOS管來驅動。MOS管不僅驅動能力強,而且效率高。為了提高系統的穩定性,可靠性,適用範圍廣等特點,本系統,採用雙電源供電。控制電路一組電源,電壓分別為5V和15V。功率輸出部分一組電源,以適應不同電壓的電動機。
  • 51單片機分時控制8路舵機程序
    本程序中用到的頭文件 12c5a.H下載:http://www.51hei.com/f/12c5a.rar//分時控制舵機,採用的單片機是STC12c5a 51增強型單片機,晶振11.0592MHZ
  • 通過51單片機來控制直流電機
    >看不清楚圖的請點保存 或者點開連接地址看大圖 下面是針對上面電路圖的程序(直接複製粘貼進去運行 還是那句話 程序別光是複製粘貼 要一句句看懂 看出核心的那一段代碼是怎麼利用單片機加上一個晶片來控制電機的為以後自己寫其他驅動程序打基礎
  • 51單片機精確控制步進電機(有TB6600驅動)
    設備:51單片機開發板、TB6600驅動器、57BYG250B步進電機(二相)、直流開關電源。直流電源給驅動器供電,單片機給驅動器輸入脈衝,驅動器驅動步進電機。程序使用定時器中斷精確控制電機轉動(不考慮失步)。比如我採用16倍細分,則需給驅動輸入3200個脈衝,驅動才會使電機轉一圈,下面程序中1秒發送200個脈衝,則相應的電機16秒轉一圈。
  • 單片機控制步進電機的原理
    本資料詳細介紹鄧步進電機的工作原理以及單片機控制步進電機的特點。步進電機是數字控制電機,它將脈衝信號轉變成角位移,即給一個脈衝信號,步進電機就轉動一個角度,因此非常適合於單片機控制。    步進電機可分為反應式步進電機、永磁式步進電機和混合式步進電機。
  • 多路舵機控制PWM發生器的設計與Proteus仿真
    以Proteus和Keil軟體為基礎,介紹了在Proteus環境下利用51單片機產生多路PWM脈衝的實現方法。最後以一個典型的應用實例驗證了設計的可行性與可靠性。實驗證明,本系統可在單片機定時器資源有限的情況下同時對多個舵機的輸出轉角進行控制。
  • 51單片機控制四相步進電機
    接觸單片機快兩年了,不過只是非常業餘的興趣,實踐卻不多,到現在還算是個初學者吧。這幾天給自己的任務就是搞定步進電機的單片機控制。以前曾看過有關步進電機原理和控制的資料,畢竟自己沒有做過,對其具體原理還不是很清楚。
  • 51單片機驅動步進電機__終極(完整版)
    在這裡介紹一下用51單片機驅動步進電機的方法。 這款步進電機的驅動電壓12V,步進角為 7.5度 . 一圈 360 度 , 需要 48 個脈衝完成!!! 該步進電機有6根引線,排列次序如下:1:紅色、2:紅色、3:橙色、4:棕色、5:黃色、6:黑色。
  • 用51單片機控制兩相四線步進電機
    最近學習步進電機的驅動原理,照著教材自己實踐了一下用ULN2003驅動28BYJ-48兩相5線步進電機,可以正常轉動。手頭有一個舊光碟機,拆開發現裡面有三個電機,其中有一個控制雷射頭尋跡的兩相四線步進電機,我就用51的單片機讓它也轉起來。一開始照葫蘆畫瓢用ULN2003驅動,結果發現無論如何也不行。
  • 51單片機學習之3-步進電機
    第八集講解用移位和或運算實現流水燈的方法《51單片機複習筆記2》裡面的代碼。用於增強單片機IO口的驅動能力。ULN2003是高耐壓、大電流達林頓陳列,由七個矽NPN達林頓管組成。ULN2003是大電流驅動陣列,多用於單片機、智能儀表、PLC、數字量輸出卡等控制電路中。可直接驅動繼電器等負載。
  • 基於單片機的步進電機開環控制系統
    摘要: 通過ATMEL89C51單片機對步進電機進行控制,主要介紹了步進電機控制器、驅動電路和LED顯示電路的設計,實現了步進電機的開環控制。
  • 51單片機軟體產生PWM驅動直流電機,頻率佔空比可調
    做了一個實例,以前都是用AVR直接硬體生成PWM,方便快捷,幾條語句的問題,驅動能力還強,從來沒仔細想過如何用51單片機軟體方法做一個,現在非要用51單片機做,那就直接開始製作,首先硬體焊接,軟體編程,只說程序部分
  • 基於MCS-51單片機和步進電機實現鍋爐筒壁孔加工控制系統的設計
    基於MCS-51單片機和步進電機實現鍋爐筒壁孔加工控制系統的設計 佚名 發表於 2020-04-15 09:28:34 1、前 言 為實現鍋爐筒壁孔加工自動化而設計的數控系統
  • 51單片機控制步進電機驅動器工作原理
    步進電機在控制系統中具有廣泛的應用。它可以把脈衝信號轉換成角位移,並且可用作電磁製動輪、電磁差分器、或角位移發生器等。有時從一些舊設備上拆下的步進電機(這種電機一般沒有損壞)要改作它用,一般需自己設計驅動器。本文介紹的就是為從一日本產舊式印表機上拆下的步進電機而設計的驅動器。
  • 51單片機驅動步進電機電路及程序
    在這裡介紹一下用51單片機驅動步進電機的方法。本文引用地址:http://www.eepw.com.cn/article/173250.htm  這款步進電機的驅動電壓12V,步進角為 7.5度 .
  • 51單片機與TA8435的步進電機細分控制
    1 步進電機   步進電動機是純粹的數字控制電動機,它將電脈衝信號轉變為角位移,即給一個脈衝,步進電機就轉一個角度,因此非常合適單片機控制,在非超載的情況下,