课程设计报告之直流电机控制(C语言版).doc
- 文档编号:2496991
- 上传时间:2022-10-30
- 格式:DOC
- 页数:13
- 大小:306KB
课程设计报告之直流电机控制(C语言版).doc
《课程设计报告之直流电机控制(C语言版).doc》由会员分享,可在线阅读,更多相关《课程设计报告之直流电机控制(C语言版).doc(13页珍藏版)》请在冰豆网上搜索。
湖南大学电气院
单片机课程设计
学院:
电气与信息工程学院
班级:
07级电气工程及其自动化3班
设计者:
设计名称:
直流电机调速
指导老师:
张志文教授
目录
一.课程设计题目及其实现目标……………………3
二.设计原理图…………………………………4
三.设计原理及其实现方法…………………………5
四.流程图…………………………………6
五.程序清单…………………………………7
六.课程设计心得…………………………………13
一.课程设计题目及其实现目标
课程设计题目:
直流电机调速
实现的目标
1).通过键盘改变脉冲的占空比从而达到改变转速使得电机转速从高到低,从低到高
2).通过改变pwm的极性从而改变电机的转向,实现正反转
3).能够通过数码显示管显示电机的转速和电机的转向
4).通过启动键唯一启动电机,从而达到防止电机误启动的目的
5).能够通过键盘快速达到电机预先设定的速度和转向
备注:
由于没有传感器,所以本课程设计中没有设计测速模块,所显示的速度为理论速度,并非电机的实际转速
二.设计原理图
注:
本原理图采用proteus绘制
三.设计原理及其实现方法
1.速度调节的实现
通过控制L298的使能端“允许”或者“禁止”,通过改变a
(脉冲宽度)的值,从而达到控制PWM脉冲宽度调节电机转速的目的
2.转向的控制
通过L298中的H桥,从AT89C51中的P1_6和P1_7输出控制信号控制BJT的基极电压,控制L298中H桥的BJT通断,从而达到控制电机转向的目的
附:
A.L298的原理图
B.本设计所需要芯片以及作用
AT89C51:
单片机
L298:
控制电机驱动和转向
74L408:
四与门芯片
8255A:
用于扩展51端口,作显示用
2803:
显示缓冲用
MAX239:
串口通讯芯片
四.流程图
入口
启动
NY
P1_5=1,P1_4=1
停止
P1_5=0
Y
加速
N
a=a+n,P1_4=0
Y
a>150
N
a=150
Y
a=a-n,P1_4=0
减速
Y
P1_6=0,P1_7=1,P1_4=1
Or
P1_6=1,P1_7=0,P1_4=1
a<10
NN
反转/正传
Y
a=10
N
进入预先设定的值
预设速度
YN
电机停转
五.程序清单
#include
#include
#include
#include
#include
#definePAXBYTE[0x1FFF]//A口地址;
#definePBXBYTE[0x3FFF]//B口地址;
#definePCXBYTE[0x5FFF]//C口地址;
#defineCONXBYTE[0x7FFF]//*控制字地*/;
ucharkey=0; //定义key为全局变量
uinta=100;
ucharn=5;//单次增加的步长,用于输出脉冲占空比控制
uintk1=0,mn=10;//设置mn为转向标志位
ucharbai,shi,ge;
uintseg_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff};//0~9的七段显示代码;
/*THEMAINPROCESS*/
voidmain()
{
CON=0x80;
P1_5=0; //使电机停转;
TMOD=0x15; //定时器1工作在模式1
TH1=0xFF;//定时器1的溢出中断时间为50ms;
TL1=0xb0;
ET1=1;
TR1=1;
while
(1)
{
key=GetKey();
/*case1~case9是预先设定的速度,方便电机直接调节到该速度,避免通过’+’键调节*/
switch(key)
{case'1':
{a=10;break;}
case'2':
{a=25;break;}
case'3':
{a=40;break;}
case'4':
{a=55;break;}
case'5':
{a=70;break;}
case'6':
{a=90;break;}
case'7':
{a=110;break;}
case'8':
{a=130;break;}
case'9':
{a=150;break;}
case'+':
{P1_4=0;control();break;} //电机加速
case'-':
{control();break;} //’-‘代表减速
case'=':
{P1_7=0;P1_6=1;mn=0;control();break;}//电机顺时针转
case'c':
{P1_7=1;P1_6=0;mn=1;control();break;} //逆时针转
case'/':
{control();} //‘/‘键按下时,电机开始转动
default:
break; //不影响电机运行
}
}
}
/*THEENDOFMAINPROCESS*/
/*THEINTERRUPTIONFUNCTION*/
voidtime()interrupt3//中断号为3,即是定时器1溢出中断
{//此处是计时50ms中断一次
TR1=0; //此函数用于显示速度
k1+=TL0;
display(a/100,a%100/10,a%10,mn);
/*if(count==51)
{
sprintf(s,"%04d",k1%1000); //注意sprintf的用法; //确保有四位输出
count=1;
k1=0;
}
display(a,bai,shi,ge); */
TH1=0x3c;
TL1=0xb0;
TH0=0x00;
TL0=0x00;
TR1=1;
}
/*THEINTERRUPTIONFUNCTION*/
/*THEGETKEYFUNCTIONWHICHWASUSEDTOGETTHEINFORMATIONFROMTHEKEY*/
/*行信号从P1口的低四位读进,列信号从P2口的高四位读进*/
ucharGetKey()
{
P1_0=0;
P1_1=1;
P1_2=1;
P1_3=1;
P2_0=1;
P2_1=1;
P2_2=1;
P2_3=1;
_nop_();_nop_();//适当的延时以便消除抖动
if(!
P2_0)return'7';
if(!
P2_1)return'8';
if(!
P2_2)return'9';
if(!
P2_3)return'/';
P1_0=1;
P1_1=0;
P1_2=1;
P1_3=1;
_nop_();_nop_();
if(!
P2_0)return'4';
if(!
P2_1)return'5';
if(!
P2_2)return'6';
if(!
P2_3){P1_4=0;return'*';}
P1_0=1;
P1_1=1;
P1_2=0;
P1_3=1;
_nop_();_nop_();
if(!
P2_0)return'1';
if(!
P2_1)return'2';
if(!
P2_2)return'3';
if(!
P2_3)return'-';
P1_0=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 直流电机 控制 语言版