標題: 51單片機+直流電機PWM調速控制Proteus仿真(附Word文檔+C程序+流程圖) [打印本頁]
作者: 交大Boy 時間: 2019-8-8 12:21
標題: 51單片機+直流電機PWM調速控制Proteus仿真(附Word文檔+C程序+流程圖)
設計思路:
直流電機PWM控制系統的主要功能包括:實現對直流電機的加速、減速以及電機的正轉、反轉和急停,并且可以調整電機的轉速,能夠很方便的實現電機的智能控制。
主體電路:即直流電機PWM控制模塊。這部分電路主要由AT89C52單片機的I/O端口、定時計數器、外部中斷擴展等控制直流電機的加速、減速以及電機的正轉和反轉,并且可以調整電機的轉速,能夠很方便的實現電機的智能控制。其間是通過AT89C52單片機產生脈寬可調的脈沖信號并輸入到L298驅動芯片來控制直流電機工作的。該直流電機PWM控制系統由以下電路模塊組成:
設計輸入部分:這一模塊主要是利用帶中斷的獨立式鍵盤來實現對直流電機的加速、減速以及電機的正轉、反轉和急停控制。
設計控制部分:主要由AT89C52單片機的外部中斷擴展電路組成。直流電機PWM控制實現部分主要由一些二極管、電機和L298直流電機驅動模塊組成。
設計顯示部分: LED數碼顯示部分,實現對PWM脈寬調制占空比的實時顯示。
系統框架設計:
1.jpg (13.72 KB, 下載次數: 133)
下載附件
2019-8-8 12:16 上傳
仿真運行:
截圖5.jpg (20.37 KB, 下載次數: 131)
下載附件
2019-8-8 12:18 上傳
程序部分:
*********************************************************************
直流電機PWM調速
功能描述:使用單片機T0定時器產生(xxxHz)脈寬調制信號,輸到L298N的EN_A
實現雙直流電機的速度調控。
修訂日期:2011-5-7
*********************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/**********************************************************************
L298n接口定義
**********************************************************************/
sbit MOTOR_A_2=P3^6;
sbit MOTOR_A_1=P3^7;
sbit EN_MOTOR_A =P3^4;
sbit k1=P1^5;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
uchar T=0;
uchar W=0;
uchar A=0;
uchar k=0;
uchar i=0;
uchar code table1[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table2[]={0xef,0xbf,0xdf,0x7f};
void delayms(uint t);
/**********************************************************************
數碼管顯示
**********************************************************************/
void disp(void)
{
P0=table2[3];
P2=table1[W%10];
delayms(1);
P0=0xff;
P0=table2[2];
P2=table1[W/100];
delayms(1);
P0=0xff;
P0=table2[1];
P2=table1[W/10%10];
delayms(1);
P0=0xff;
P0=table2[0];
P2=table1[A];
delayms(1);
P0=0xff;
}
/**********************************************************************
定時器變量定義
**********************************************************************/
void init(void)
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
//設置定時時間
TH0=0xfd;
TL0=0x17;
}
void timer0() interrupt 1
{
TL0=0x17;
TH0=0xff;
T++;
disp();
if(T>W)
EN_MOTOR_A=1;
else
EN_MOTOR_A=0;
if(T==100)
T=0;
}
/**********************************************************************
延時1ms
**********************************************************************/
void delayms(uint t)
{
ucharj;
while(t--)
{
for(j=0;j<250;j++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
作者: lwy@@ 時間: 2019-9-8 17:36
根本不全,還要關注
作者: NT果凍布丁粉 時間: 2020-5-4 21:00
哭了,樓主能分享一下全部的嘛
作者: 詳細信息 時間: 2020-6-9 09:06
樓主在嗎,需要全部,
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |