基於單片機的直流電機控制PWM調速代碼開源(含仿真)

基於單片機的直流電機控制與仿真
在這裏插入圖片描述
(PWM)脈衝寬度調製

脈衝寬度調製是一種模擬控制方式,根據相應載荷的變化來調製晶體管基極或MOS管柵極的偏置,來實現晶體管或MOS管導通時間的改變,從而實現開關穩壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時保持恆定,是利用微處理器的數字信號對模擬電路進行控制的一種非常有效的技術。脈衝寬度調製是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。

所謂PWM,就是脈衝寬度調製技術,其具有兩個很重要的參數:頻率和佔空比。頻率,就是週期的倒數;佔空比,就是高電平在一個週期內所佔的比例。
在這裏插入圖片描述

本次使用了電機驅動模塊是L298N
在這裏插入圖片描述
實物圖如下,改模塊常用直流電機的驅動
在這裏插入圖片描述
其內部結構圖如下圖所示
在這裏插入圖片描述
續流二極管(flyback diode),有時也稱爲飛輪二極管或是snubber二極管,是一種配合電感性負載使用的二極管,當電感性負載的電流有突然的變化或減少時,電感二端會產生突變電壓,可能會破壞其他元件。配合續流二極管時,其電流可以較平緩地變化,避免突波電壓的發生。
我們通常所說的“續流二極管”由於在電路中起到續流的作用而得名,一般選擇快速恢復二極管或者肖特基二極管來作爲“續流二極管”,它在電路中一般用來保護元件不被感應電壓擊穿或燒壞,以並聯的方式接到產生感應電動勢的元件兩端,並與其形成迴路,使其產生的高電動勢在迴路以續電流方式消耗,從而起到保護電路中的元件不被損壞的作用 [1] 。
在這裏插入圖片描述
本次程序實現原理通過單片機IO口輸出高低電平驅動電機的正反轉,然後再通過定時器產生PWM信號進而調速
定時器初始化

void motor_Init()
{
		EA=1;//打開總中斷	
		TMOD=0x01; //定時器工作方式
		TH0=(65535-1000)/256; //初值約1ms
		TL0=(65535-1000)%256; 
		ET0=1;	//打開定時器中斷
		TR0=1;	//打開定時器
}

定時器中斷函數

/*
 * @description	: 定時器中斷函數,利用定時器產生PWM調速信號
 * @param 		:無
 * @return 		: 無
 */
void Time() 	interrupt 1
{
			
	
		static unsigned char count=0; 
		TH0=(65535-1000)/256;  //重裝初值
		TL0=(65535-1000)%256;	 //重裝初值
		count++;
		if(count==20)count=0;
		if(count>=speedA)
		{
				ENA=1;
		}
		else{
				ENA=0;
		}
		if(count>=speedB)
		{
				ENB=1;
		}
		else{
				ENB=0;
		}

}

控制電機方向

/*
 * @description	: 電機轉向
 * @param 		: 0-A正 1 F反  2-B正 3-B反
 * @return 		: 無
 */
void motor(unsigned char status)
{
		if(status==0)
		{
				IN1=0;
				IN2=1;
		}
		if(status==1)
		{
			IN1=1;
			IN2=0;
		}
		if(status==3)
		{
				IN3=0;
				IN4=1;
		}
		
		if(status==4)
		{
				IN3=1;
				IN4=0;
		}
}

通過PWM信號佔空比調節AB的速度
單片機定時器產生1ms一次中斷,並且通過調節speedA與speedB調節速度
PWM
兩個重要的概念,頻率、佔空比
  頻率是指每秒鐘信號從高電平到低電平再回到高電平的次數,爲一個PWM波週期的倒數。上圖中頻率=1/(0.003+0.001)=250 HZ
  佔空比是指高電平持續時間比一個週期持續的時間。上圖中佔空比=1/(1+3)=25%,所以可以通過控制佔空比,來控制輸出的等效電壓。
  所以對於方波的話,頻率和佔空比就確定了一個波。

怎麼能產生一個PWM波?
  方法1:利用芯片內部模塊輸出PWM信號,STM32 的定時器除了 TIM6 和 7。其他的定時器都可以用來產生 PWM 輸出。其中高級定時器 TIM1 和 TIM8 可以同時產生多達 7 路的 PWM 輸出。而通用定時器也能同時產生多達 4路的 PWM 輸出,這樣, STM32 最多可以同時產生 30 路 PWM 輸出! 但是!!!同一個定時器TIM只能產生一個頻率的PWM波,你只能改變佔空比。 具體例程見一下實戰篇STM32部分。
  方法2:利用IO口高低電平轉變輸出PWM信號,比如上圖中先把電平置1,維持1ms,然後將電平拉低,維持3ms,再將電平置高,如此循環往復下去,就可以產生一個週期4毫秒佔空比爲25%的PWM波了。具體方法就是給IO口加一個定時器,用定時器中斷來實現及時切換高低電平。 具體歷程見以下51單片機部分。

定時器
  要想使用51單片機來產生一路PWM,根據上述的方法2,首先你應該知道什麼是定時器?定時器是怎麼工作的?

定時器:和計數器說的是一個東西,因爲它既能計時也能計數。定時器的實質是,由機器頻率向一個16位寄存器累加,累加滿溢出時觸發中斷。爲了產生一個我們想要的時間間隔。比如說1s,所以我們要在這個寄存器裏設定一個初值,以至於讓它在這個初值上累加可以產生一個1s的倍數。這樣我們就得到了穩定的時間間隔。
  這個寄存器分爲TH(高八位)和TL(低八位)。所以我們需要把計算好的初值分成兩部分分別放入TH和TL。

需要的可以自己去下載哦!
需要該源碼的可以關注公衆號:智慧小巷
回覆:PWM電機調速
即可!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章