国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測

這篇具有很好參考價值的文章主要介紹了Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


臨近期末,學校的單片機課程需要做課程設計,主要內容是基于51單片機的可調速電機,具體要求如下,在此記錄一下具體的一個解題方案。
  1. 要求利用單片機輸出PWM波形,通過改變占空比,改變電樞兩端電壓的平均值,從而改變電動機的轉速
  2. 通過按鍵進行手動速度調整(速度+ 速度-)
  3. 利用串口調試助手或編寫上位機軟件,通過上位機控制直流速度調整
  4. 測量直流電機轉速,并實時顯示

原理圖

首先是繪制原理圖如下,右下角示波器為方便觀察PWM脈沖波形用,可忽略
Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測

驅動電路

由于單片機的輸出功率不足以驅動電機運動,因此這里使用L298芯片搭建一個驅動電路,驅動電壓為12V,用于驅動電機運動。驅動電路如圖。L298芯片的工作電壓為5V(VCC接5V電壓),支持同時驅動兩臺電機,可接驅動電壓范圍為(+5V~+46V),輸出電流高達4A。
Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測
L298芯片控制引腳狀態(tài)與電機對應狀態(tài)如下圖。因此,若要讓電機運動則需要,ENA置1,IN1與IN2引腳所處電平相反。

ENA IN1 IN2 直流電機狀態(tài)
0 X X 停止
1 0 0 制動
1 0 1 正轉
1 1 0 反轉
1 1 1 制動

MOTOR-ENCODER詳解

這里由于需要測量電機轉速,使用需要使用帶有編碼器的電機,Proteus中帶有這樣的一個電機,元件名稱為MOTOR-ENCODER。MOTOR-ENCODER有5根引腳,其中左右兩個接工作電壓。上面三根引腳,左邊與右邊電機每轉一圈就輸出設定的脈沖數(shù)(這里設定每轉一圈輸出360個脈沖),二者脈沖相位相差90°。中間的引腳電機每轉一圈引腳輸出一個脈沖。 電機具體屬性參數(shù)如下,這里設置電機額定電壓為12V(因為驅動電路的驅動電壓為12V),每轉脈沖數(shù)為360(取值范圍為1~360),其余保持默認。
Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測

串口通信

由于需要用到串口通信,因此需要用到Proteus中的虛擬串口COMPIM,將元件端口設置為COM1,波特率設置為9600,數(shù)據(jù)位8位,無校驗位,停止位1位。將虛擬串口的RXD與單片機的RXD相連,TXD與TXD相連(與一般的串口連接不同,一般需要TXD與RXD交叉相連)。
Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測
然后打開VSPD虛擬串口連接軟件(VSPD軟件的下載與使用可參考該文章: 虛擬串口 VSPD 的使用),將COM1與COM2端口進行虛擬鏈接。然后進入串口助手打開COM2端口(一定不能打開COM1口,因為COM1口已被單片機占用) 設置好波特率、校驗位與停止位,即可與單片機成功硬件連接。

電機測速原理

測速原理:單位時間內,根據(jù)該時間段內統(tǒng)計的脈沖數(shù)計算電機實際速度,這里單位時間為50ms。

由于編碼器設置為每圈發(fā)出360個脈沖,則統(tǒng)計在50ms內的脈沖數(shù)即可知道在這50ms內電機轉了多少圈,從而可推算出電機每分鐘的轉速。

設編碼器單圈總脈沖數(shù)為C,在時間T0內,統(tǒng)計到的編碼器脈沖數(shù)為M0,則轉速n的計算公式為:
n = M0/(C*T0)。

PWM

PWM即脈沖寬度調制,在具有慣性的系統(tǒng)中,可以通過對一系列脈沖的寬度進行調制,來等效的獲得所需要的模擬參量。

其實就是通過控制高低電平的時間,來對輸出的波形進行控制。

其中有幾個重要的參數(shù)

PWM的頻率:
是指1秒鐘內信號從高電平到低電平再回到高電平的次數(shù)(一個周期);
也就是說一秒鐘PWM有多少個周期
單位: Hz
表示方式: 50Hz 100Hz

PWM的周期:
T=1/f
周期=1/頻率
50Hz = 20ms 一個周期
如果頻率為50Hz ,也就是說一個周期是20ms 那么一秒鐘就有 50次PWM周期

占空比:
是一個脈沖周期內,高電平的時間與整個周期時間的比例
單位: % (0%-100%)
表示方式:20%

一個簡單的生成PWM的方法: 利用定時器進行定時中斷,分別設置兩個變量counter和compare。其中compare表示占空比。假設每100us定時器產生一次中斷,則每進一次中斷counter++,中斷100次為一個周期,即T=10ms。

假設設置compare為60,即占空比為60%

每次定時器進入中斷后,將當前counter值與compare進行判斷,若counter<compare則置引腳為高電平,否則置低電平。這樣在一個周期中,counter從1至100計數(shù),counter為1~60時引腳均為高電平,即在一個周期內有60%的時間引腳都處于高電平。

這樣我們就可以通過調整compare變量的值來控制PWM的占空比,從而達到控制電機轉速的目的。

有關PWM的詳細知識可參考以下文章

51單片機-PWM調速(直流電機,智能小車的電機調速)
PWM原理 PWM頻率與占空比詳解

軟件部分

#include <REG51.H>
#define K 21/8
void UartInit(void);
void UART_SendByte(unsigned char Byte);
void Timer0Init(void);

sbit motor1_IN1=P0^0;
sbit motor1_IN2=P0^1;
sbit motor1_ENA1=P0^2;
sbit ADD=P0^3;
sbit SUBTRACT=P0^4;
unsigned char led_mod[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽極字模
unsigned char led_point[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//帶小數(shù)點字模
unsigned char counter,compare;//compare為占空比
unsigned int n,m,rad;//n為脈沖數(shù)
void delay(unsigned char time)		//1ms@11.0592MHz
{
	unsigned char i, j;
	i = 15*time;
	j = 90;
	do
	{
		while (--j);
	} while (--i);
}

void Display()	//LED顯示
{
    P2=(0x01);
    P1=led_mod[(rad/100)%10];
	delay(1);
    P2=(0x01<<1);
    P1=led_mod[(rad/10)%10];
	delay(1);
    P2=(0x01<<2);
    P1=led_point[rad%10];
	delay(1);
	P2=(0x01<<3);
    P1=led_mod[(rad%10)];
	delay(1);
}
void move(void)	//啟動電機
{
	motor1_IN1=1;
	motor1_IN2=0;	
}
void UartInit(void)		//9600bps@11.0592MHz
{
	SCON = 0x50;		//8位數(shù)據(jù),可變波特率
	TMOD &= 0x0F;		//設置定時器模式
	TMOD |= 0x20;		//設置定時器模式
	TL1 = 0xFD;		//設置定時初始值
	TH1 = 0xFD;		//設置定時初始值
	ET1 = 0;		//禁止定時器1中斷
	TR1 = 1;		//定時器1開始計時
	ES=1;			//開啟中斷
	EA=1;			//開啟中斷
	PS=1;			//設置優(yōu)先級
}

void Timer0Init(void)		//100微秒@11.0592MHz
{
	TMOD &= 0xF0;		//設置定時器模式
	TMOD |= 0x02;		//設置定時器模式
	TL0 = 0xA4;		//設置定時初始值
	TH0 = 0xA4;		//設置定時重載值
	TF0 = 0;		//清除TF0標志
	TR0 = 1;		//定時器0開始計時
	ET0=1;			//定時器0中斷開啟
	EA=1;			//EA開啟
	PT0=0;			//定時器0開始計時
}
void UART_Routine(void) interrupt 4	//串口接收中斷
{	
	if(RI==1)
	{	
		compare=SBUF;	//接收串口傳輸來的數(shù)據(jù)
		SBUF=compare;	//將當前占空比發(fā)送回上位機
		while(!TI);		//等待發(fā)送完畢
		TI=0;			//標志位復位
		RI=0;			//標志位復位
	}
}
void Timer0_Routine(void) interrupt 1	//定時器0中斷,用于PWM生成
{
	TL0 = 0xA4;		//設置定時初始值
	TH0 = 0xA4;		//設置定時初始值
	counter++;
	m++;	
	counter%=100;
	if(counter<compare)	//PWM生成
		motor1_ENA1=1;	
	else
		motor1_ENA1=0;
	if(m==500)	//50ms后計算一次轉速
	{
		rad=n*K;//計算轉速,若結果與實際有較大誤差則調整比例系數(shù)K
		m=0;	
		n=0;
	}
}

void interrupt0_int()	//電機編碼器脈沖中斷初始化
{
	IT0=1;
	EX0=1;
	EA=1;
	PX0=0;
}

void motor_Routine(void) interrupt 0	//編碼器脈沖中斷函數(shù)
{
	n++;	//脈沖數(shù)+1
}

void main()
{
	Timer0Init(); //定時器0初始化
	interrupt0_int();  //電機編碼器中斷初始化
	UartInit();	//串口中斷初始化
	compare=70;	//初始占空比70%
	n=0;	//電機旋轉圈數(shù)初始化
	m=0;	//計時次數(shù)初始化
    move();	//啟動電機
	while(1)
	{
		if(ADD==0)	
		{
			compare=compare+10;	//按下按鍵占空比+10
			if(compare>100)
				compare=100;
			while(!ADD)	//等待松開
				Display();
		}
		if(SUBTRACT==0)
		{
			compare=compare-10;	//按下按鍵占空比-10
			if(compare<0)
				compare=0;
			while(!SUBTRACT)	//等待松開
				Display();
		}
		Display();
	}		
}

成果

電機正常轉動,同時數(shù)碼管顯示當前轉速,可通過ADD按鍵和SUBTRACT按鍵對轉速進行加減速 。

Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測
可通過串口對轉速大小進行調整。
Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測文章來源地址http://www.zghlxwxcb.cn/news/detail-412962.html

到了這里,關于Proteus基于51單片機通過PWM脈沖調制控制電機轉速_按鍵與串口控制轉速_電機轉速可測的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于51單片機和proteus的溫室大棚系統(tǒng)

    基于51單片機和proteus的溫室大棚系統(tǒng)

    此系統(tǒng)是基于51單片機和proteus的仿真設計,功能如下: 1. LCD1602實時顯示光照/土壤濕度/溫度值及設定值。 2. 按鍵可增減光照/土壤濕度/溫度設定閾值。 3. 獲取到的溫度低于設定溫度則打開加熱設備。 4. 獲取到的光照值低于設定光照值則打開補光燈。 5. 獲取到的土壤濕度低于

    2024年02月16日
    瀏覽(21)
  • 基于51單片機的倒計時秒表proteus仿真設計

    基于51單片機的倒計時秒表proteus仿真設計

    目錄 一、設計背景 二、實現(xiàn)功能 三、仿真演示 四、源程序 ? ? ? ? 近年來隨著科技的飛速發(fā)展,單片機的應用正在不斷的走向深入。本文闡述了基于單片機的數(shù)字電子秒表倒計時設計,倒計時精度達0.05s了,解決了傳統(tǒng)的由于倒計時精度不夠造成的誤差和不公平性,是各種

    2024年02月02日
    瀏覽(42)
  • 基于51單片機的紅外密碼鎖設計[proteus仿真]

    基于51單片機的紅外密碼鎖設計[proteus仿真]

    密碼鎖檢測系統(tǒng)這個題目算是課程設計和畢業(yè)設計中常見的題目了,本期是一個基于51單片機的紅外密碼鎖設計 需要的源文件和程序的小伙伴可以關注公眾號【阿目分享嵌入式】,贊賞任意文章 2¥,私信阿目【112基于51單片機的紅外密碼鎖設計】即可獲?。吹较谝粫r

    2024年02月21日
    瀏覽(25)
  • 基于51單片機手機電話撥號盤模擬proteus仿真

    基于51單片機手機電話撥號盤模擬proteus仿真

    功能簡介: 1.采用4X4矩陣鍵盤實現(xiàn)號碼輸入,并在LCD液晶上顯示 2.按下enter鍵,顯示calling…,并且蜂鳴器模擬電話撥號發(fā)聲 3.按下*鍵,退格,按下#鍵,清楚電話號碼 4.撥號過程中,長按#取消撥號

    2024年02月14日
    瀏覽(52)
  • 【Proteus仿真】【51單片機】基于電阻應變片電子秤設計

    【Proteus仿真】【51單片機】基于電阻應變片電子秤設計

    本項目使用Proteus8仿真51單片機控制器,使用LCD1602、壓電傳感器、信號放大電路、ADC模塊等。 系統(tǒng)運行后,LCD1602顯示采集壓力值。 B站演示視頻:https://space.bilibili.com/444388619 B站演示視頻:https://space.bilibili.com/444388619 專注于51單片機、STM32、國產32、DSP、Proteus、ardunio、ESP32、物

    2024年01月19日
    瀏覽(32)
  • 基于51單片機控制的BUCK開關電源Proteus仿真

    基于51單片機控制的BUCK開關電源Proteus仿真

    這里是給出的參考電路(如下圖)使用了兩路L293D的輸出OUT1和OUT2,那么就會很疑惑。。。。 關于兩路L293D的輸出呢? 因為程序控制的時候,IN2始終由單片機輸出0,所以底下這樣也不像是差分,很難理解是為什么。 理想的狀態(tài):當out1 =1,二極管不導通,上方電感充電,經過

    2024年02月06日
    瀏覽(106)
  • 基于51單片機的555定時器測電容proteus仿真

    基于51單片機的555定時器測電容proteus仿真

    一、555定時器構成多諧振蕩器 由555定時器構成的多諧振蕩器如下圖所示, ? 工作原理:電路沒有穩(wěn)態(tài),只有兩個暫穩(wěn)態(tài),也不需要外加觸發(fā)信號,利用電源VCC通過R1和R2向電容器C充電,使Uc逐漸升高,升到2VCC/3時,Uo跳變到低電平,放電端D導通,這時,電容器C通過電阻R2和

    2024年02月06日
    瀏覽(23)
  • 基于51單片機的手機電話撥號盤模擬proteus仿真

    基于51單片機的手機電話撥號盤模擬proteus仿真

    功能: 0.本項目采用STC89C52作為單片機系統(tǒng)的控制MCU 1.采用4X4矩陣鍵盤實現(xiàn)號碼輸入,并在LCD液晶上顯示 2.按下enter鍵,顯示calling…,并且蜂鳴器模擬電話撥號發(fā)聲 3.按下*鍵,退格,按下#鍵,清楚電話號碼 4.撥號過程中,長按#取消撥號 5.采用DC002作為電源接口可直接輸入5V給

    2024年02月11日
    瀏覽(27)
  • 基于STM32單片機的直流電機PWM調速(數(shù)碼管顯示)(Proteus仿真+程序)

    基于STM32單片機的直流電機PWM調速(數(shù)碼管顯示)(Proteus仿真+程序)

    ? ? ? 由 STM32單片機+數(shù)碼管顯示模塊+鍵盤模塊+L298N電機驅動模塊+直流電機 1、采用STM32F103單片機為主控制器 2、四個按鍵,分別為啟動/暫停、方向切換、加速、減速功能 3、數(shù)碼管顯示PWM占空比和電機轉動方向(0正轉,1反轉) 注意:proteus8.11版本才能打開 ? 24、基于STM32單

    2024年02月11日
    瀏覽(19)
  • Proteus基于51單片機利用虛擬串口實現(xiàn)主從機的通信

    Proteus基于51單片機利用虛擬串口實現(xiàn)主從機的通信

    最近在學校做單片機課程實驗時,需要在Proteus上實現(xiàn)串口的通信,具體要求如下: 在此記錄一下本人的解題方案,首先Proteus中的原理圖繪制如下 其中虛擬串口可在元件庫中搜索COMPIM獲得。 將原件按上圖連接完畢后,將各個虛擬串口的收發(fā)波特率設置為19200,并分別賦予CO

    2024年02月08日
    瀏覽(49)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包