资源描述
《单片机原理与应用技术》
课程设计论文
课程名称 单片机原理与应用技术
题目名称 小直流电机调速控制系统
学生学院 信息工程学院
专业班级 测控技术与仪器
(光机电一体化14级1班)
学 号
学生姓名 温玮佳
指引教师 张巧芬
12 月 28 日
任 务 书
1.课程设计项目
小直流电机调速控制系统
2.设计内容
(1)以AT89C51单片机为核心器件构成小直流电机调速控制系统;
(2)搭建外围硬件电路;
(3)系统程序编制与调试;
(4)电路系统综合调试;
(5)撰写课程设计论文;
(6)完毕课程设计论文答辩。
3.设计规定
用ADC0809采样电位器值,并在显示屏上显示,将此信号值作为方波占空比,通过0832输出经放大后控制电机转速。
4.设计进度
时间
设计内容
第1-2天
查阅资料、方案比较、设计与论证
第3-4天
仿真、程序编写
第5天
焊接
第6天
系统调试
目 录
1.绪论
1.1课题研究目及意义----------------------------------------4
1.2国内外电机控制研究现状及发展--------------------------------4
1.3 PWM变频调速发展前景-----------------------------------------4
1.3.1PWM调速-------------------------------------------5
2.方案论证(规划、选定)------------------------------------5
3.方案阐明(设计)-------------------------------------------5
4.硬件方案设计
4.1电位器采集模块----------------------------------------------6
4.1.1电位器-------------------------------------------------6
4.1.2数模转换及显示----------------------------------------6
4.2模数转换与单片机连接--------------------------------------7
4.3数模转换模块及放大驱动模块----------------------------------9
5.软件方案设计------------------------------------------------9
6.调试
6.1硬件调试---------------------------------------------------10
6.2软件调试---------------------------------------------------10
7.技术小结(结束语)----------------------------------------10
8.参照文献----------------------------------------------------10
9.附录(元件清单、电路图、源程序代码、实物图片等)
9.1元件清单----------------------------------------------------11
9.2电路图------------------------------------------------------11
9.3源程序代码--------------------------------------------------12
1.绪论
1.1 课题研究目及意义
直流电机具备良好启动性能和调速特性,虽然各种类型电机层出不穷,然而在自动控制系统、电子仪器设备等方面,直流电机应用还是占有突出地位。直流电机调速平滑,调速范畴广,过载能力强,可实现频繁无级迅速起动、制动、加减速和正反转。为了满足生产过程自动化系统化各种不同特殊规定,从而对直流电机提出了较高规定,变化电枢回路电阻调速、变化电压调速等技术已远远不能满足当代科技规定,通过PWM方式控制直流电机调速办法就应用而生。
PWM直流电机调压调速系统拥有需要功率元件少、线路简朴、控制以便、开关频率高、低速性能好。通过学习并纯熟掌握这个调速系统,对咱们此后工作有十分重要意义。
本课题是以单片机为重要控制核心,针对直流电机调速系统进行设计,通过本次课程设计培养咱们综合运用所学知识和技能解决问题本领,巩固和加深多所学知识理解。
1. 2 国内外电机控制研究现状及发展
国外重要电气公司如瑞典ABB公司、德国西门子公司、AEG公司、日本三菱公司、东芝公司、美国GE公司、西屋公司等,均已经开发出各种数字直流调速装置,有成熟系列化、原则化、模板化应用产品。
国内从20世纪60年代初试制成功第一只硅晶管以来,晶闸管直流调速系统也得到迅速发展和广泛应用。当前晶闸管供电直流调速系统在国内各部门得到运用。尚有数字直流调速系统研究,随着PWM技术发展,国内直流电机调速也正向着脉宽调制方向发展。
1.3PWM调速发展前景
PWM调速作为一项新调速技术,在西方发达国家已得到广泛应用。当前,无论是在同步电机调速方面,还是异步电机调速方面,PWM调速是较好。
1.3.1PWM调速
当代PWM调速采用是脉宽调制技术,详细一点就是应用了采样控制理论中一种重要理论,冲量相等而形状不同窄脉冲加在具备惯性环节上时,其效果基本相似,冲量即窄脉冲面积。
2. 方案论证(规划、选定)
方案一:以两块AT89C51单片机进行通信扩展I/O口为控制中心,采集电位器值通过A/D转换器(ADC0809),单片机控制将其转换成数字量显示在数码管上;再将这个值作为信号,变化占空比,再通过D/A转换器(DAC0832)转换成模仿量,进而通过LM324运放和ULN放大控制直流电机调速。
方案二:同样以AT89C51单片机为控制中心,但是只用一块单片机。采用两块595芯片级联来控制数码管段选与位选,节约I/O口。采集电位器值通过A/D转换器(ADC0809),单片机控制将其转换成数字量显示在数码管上;再将这个值作为信号,变化占空比,再通过D/A转换器(DAC0832)转换成模仿量,进而通过OPAMP放大控制直流电机调速。
通过比较,方案一硬件电路复杂,并且要用两块单片机比较挥霍和麻烦。最后选定了硬件电路简朴,需要在程序上进行一定数据解决方案二。
3.方案阐明(设计)
本设计以AT89C51单片机为控制中心,运用电位器采集信号,然后通过ADC0809进行模仿量到数字量转换,将此作为占空比并将最后数据传播给单片机,单片机进行进一步解决并将解决数据传播给DAC0832将数字量转换成模仿量再通过OPAMP放大输出驱动直流电机,并通过电位器值得变化来变化占空比,从而实现直流电机调速。整体框图如下:
ADC0808模数转换
两个595级联控制数码管显示数字值
电位器采集信号值
AT89C51
MOROR
OPAMP放大驱动模块
DAC0832数模转换
4.硬件方案设计
4.1电位器采集模块
4.1.1电位器
电位器作用——调节电压(含直流电压与信号电压)和电流大小。电位器电阻体有两个固定端,通过手动调节转轴,变化动触点在电阻体上位置,则变化了动触点与任一种固定端之间电阻值,从而变化了电压与电流大小。电位器是一种可调电子元件。它是由一种电阻体和一种转动或滑动系统构成。当电阻体两个固定触电之间外加一种电压时,通过转动或滑动系统变化触点在电阻体上位置,在动触点与固定触点之间便可得到一种与动触点位置成一定关系电压。它大多是用作分压器,得到模仿量
4.1.2模数转换及显示
当电位器发生变化时,阻值发生相应变化,通过下图所示电路可以使得电位器两端电压发生相应变化。此时输出信号为模仿量,单片机无法直接读取。通过ADC0809转换成数字量显示在数码管上(单片机通过MAX2719控制数码管显示)
上图为模数转换模块
上图为数码管显示模块
4.2模数转换与单片机连接
89C51是一种低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)可重复擦写1000次Flash只读程序存储器,器件采用ATMEL公司高密度、非易失性存储技术制造,兼容原则MCS-51指令系统,芯片内集成了通用8位中央解决器和ISP Flash存储单元,功能强大微型计算机AT89C51可为许多嵌入式控制应用系统提供高性价比解决方案。 AT89C51具备如下特点:40个引脚,4k Bytes Flash片内程序存储器,128bytes随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,4个中断优先级,2层中断嵌套中断,2个16位可编程定期计数器,2个全双工串行通信口,内部集成看门狗计时器片内时钟振荡器。其工作电压在4.5-5V,普通咱们选用+5V电压。
ADC0809是带有8位A/D转换器、8路多路开关以及微解决机兼容控制逻辑CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。ADC0809
由一种8路模仿开关、一种地址锁存与译码器、一种A/D转换器和一种三态输出锁存器构成。多路开关可选通8个模仿通道,容许8路模仿量分时输入,共用
A/D转换器进行转换。三态输出锁存器用于锁存A/D转换完数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完数据。下面为ADC0809与单片机连接电路:
4.3数模转换模块及放大驱动模块
DAC0832是8辨别率D/A转换集成芯片。与微解决器完全兼容。这个DA芯片以其价格低廉、接口简朴、转换控制容易等长处,在单片机应用系统中得到广泛应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
OPAMP(LM324)系列由四个独立,高增益,内部频率补偿运算放大器,其中专为从单电源供电电压范畴经营
连接图如下:
4.4 MAX2719 LED驱动显示模块
MAX7219是一种串入、并出共阴极LED数码管显示驱动器,每片可驱动8位LED数码管显示,与单片机接口只需3根线,内带BCD译码器,及显示测试、移位、锁存器等,输出电流达40mA,外围只需一只亮度调节电阻。
1、 引脚功能阐明
DIN:串行数据输入端,CLK上升沿时数据被载入内部16位移位寄存器中
CLK:串行时钟输入端,最高工作频率可达10MHz
LOAD:片选端,低电平接受DIN端数据,高电平时数据被所存
DIG0~7:LED位控制端
A~DP:LED端控制端
DOUT: 串行数据输出端,用于芯片级联
ISET:硬件亮度调节端,在该引脚与VCC之间跨接一种电阻,LED亮度即可通过该电阻来调节,流过LED段驱动平均电流为流过此电阻电流100倍,此电阻值范畴为:10~80K之间。
2、 内部寄存器阐明
A、 译码方式选取寄存器 地址:09H 赋值:FFH 表达使用MAX7219内部BCD译码器 00H 表达不使用MAX7219内部BCD译码器
B、 亮度调节寄存器 地址:0AH 赋值:00H~0FH 可变化MAX7219所驱动LED亮度,其变化范畴在1/32~31/32之间
C、 扫描位数设定寄存器 地址:0BH 赋值:00H 所有位不显示 01H~07H 依次相应于1~8位及前面位所有显示(即需显示位应为“1”)
D、 待机模式开关寄存器 地址:0CH 赋值:00H LED全灭 01H LED正常显示
E、 显示屏测试寄存器 地址:0FH
赋值:00H LED为正常显示状态 01H LED测试状态,即LED全亮
F、 8位LED显示数据寄存器 地址:01H~08H
5.软件方案设计
一方面解决数据采集程序。另一方面对数据进行解决。最后完善小直流电机控制函数。 将数模转换模块作为重要程序,将模数及放大驱动模块等小模块写成头文献形式置于主程序中,这样程序分模块易理解,易操作。
下图为ADC0809工作时序,懂得后才干根据时序编写程序
6.调试
6.1硬件调试
先把程序下载到单片机,通电,开始调试。旋动电位器,变化电位器值,数码管上显示数值变化,电机转速也有变化,转速变化与数值大小变化趋势一致。
6.2软件调试
软件调试是通过对顾客程序汇编、连接、执行来发现程序中存在语法错误与逻辑错误并加以排除过程。对的无误后加载至硬件电路中单片机,如果发现不抱负效果,在保证硬件无误状况下,依照需求修改程序,慢慢调试以实现自己想要效果。
7.技术小结(结束语)
从拿到课题茫然到徐徐学会接受,开始慢慢自己动手查找资料,询问诸多单片机学好同窗及学长,再到查找到电路设计,从程序编写到仿真功能基本实现,最后历经一路坎坷做出实物,效果和功能基本达到。感觉真很辛苦,但同步也不久乐很充实,毕竟收获了许多。从查资料到拟定方案就差不多花了四天时间,在设计过程中不断发现问题,同步也不断解决问题,越来越发现制作实物相比整体设计要难某些,就算仿真完全没错实物运营也会有诸多问题。实际制作过程中会遇到各种各样问题,刚开始仿真效果总是出不来,要通过不断测试和实验来解决,最后焊接出来实物没有问题。总之,不能粗心大意,做任何事都要细心,要考虑周全,不能由于一时失败而丧失信心,从哪里跌倒了要从哪里爬起来,只有有了这样精神,才会从问题中学到更多知识,为我后来更好发展奠定了基本。谢谢学院和教师予以咱们这次锻炼机会,成长机会,谢谢!
8.参照文献
[1]吴黎明主编.单片机原理与接口技术(第二版),科学出版社.
[2]张毅刚主编,基于Proteus单片机课程基本实验与课程设计,人民邮电出版社.
9. 附录(元件清单、电路图、源程序代码等)
9.1元件清单
元件
用途
数量
AT89C51
单片机
1
晶振
单片机外围电路需要
1
电容(33PF)
单片机外围电路需要
2
ADC0809、DAC0832、MAX7219
模数转换芯片、数模转换芯片、电子数码管控制需要
各1
电位器
采集信号
1
电阻(5.1K)
MAX7219芯片使用
1
电阻(1K)
数模转换电路需要
1
电容(0.1nf)
芯片电路需要
4
OPAMP(LM324)
提供运放
1
小直流电机
电机
1
7SEG-MPX4-CC
LED显示模块
1
9.2电路图
(连接图)
(运营图)
9.3源程序代码
/********************************************************
小直流电机调速控制系统
********************************************************/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//ADC0808控制端口
sbit OE=P1^0;//0808读取数字量容许,高电平有效
sbit EOC=P1^1;//0808转换结束标志,结束时为1
sbit START=P1^2;//下降沿开始转换
sbit CLOCK=P1^3;//0808芯片信号
//DAC0832控制端
sbit CS=P1^6;//0832片选
sbit WR1=P1^7;//0832写入数字量控制信号之一
//LED控制位
sbit MAXDIN=P2^0;//数据输入口
sbit MAXLOAD=P2^1;//载入数据,上升沿锁定
sbit MAXCLK=P2^2;//上升沿读取
//共阴极段码:全灭
uchar code ledcode[]={0x7e,0x30,0x6d,
0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00};
//延时程序,要写在前面
void delay(uchar time){
uchar k,l;
for(k=0;k<time;k++){
for(l=0;l<110;l++){
;
}
}
}
//ADC0808初始化
//A,B,C已经所有接地,选中IN0输入
void init_adc0808(){
EA=1;//中断总容许
TMOD=0x02;//T0工作方式2
TH0=216; //定期40us,CLOCK周期80us,
TL0=216; //频率12.5KHz
ET0=1;//定期器1中断容许
TR0=1;//启动定期器
START=0;//下降沿开始进行下一轮A/D转换
OE=0; //高电平时容许读取数字数据
P1=0x30;
}
//DAC0832初始化
void init_dac0832(){
CS=0; //选中
WR1=0;//使其开始转换
}
//向MAX7219写入字节(8bit)
void sendbyte(uchar dat){
uchar i,temp;
_nop_();
for(i=0;i<8;i++){
//取最高位
temp =dat&0x80;
//逐位左移
dat=dat<<1;
if(temp){
MAXDIN=1;
}else{
MAXDIN=0;
}
MAXCLK=0;
_nop_();
MAXCLK=1;
}
}
//向MAX7219写入地址和控制字
void sendword(uchar addr,uchar dat){
//载入数据,持续数据后16位在LOAD上升沿
//时被锁定,第16个上升沿之后,必要把MAXDIN
//置高,否则数据从DOUT流失
MAXLOAD=0;
_nop_();
sendbyte(addr);
_nop_();
sendbyte(dat);
_nop_();
MAXLOAD=1;
}
//MAX7219初始化
void init_max7219(){
sendword(0x0c,0x01);//设立电源工作模式
sendword(0x0a,0x09);//设立亮度
sendword(0x0b,0x03);//设立扫描界限
sendword(0x09,0x00);//设立译码模式
sendword(0x0f,0x00);//显示测试
}
//MAX7219清空
void clear_max7219(){
uchar i;
for(i=1;i<=8;i++){
sendword(i,0x00);
}
}
//获取电压输入值数字量
uchar adinput(){
uchar value;
//停止转换4部曲
OE=0;//暂停转换
EOC=1;//转换结束
START=0;//没有下降沿
P1&=0x8f;
P1 |=0x00;
delay(10);
//产生一种低脉冲开始转换
START=1;
delay(10);
START=0;
//等待转换结束,结束时EOC=1,跳过下面循环
while(!EOC);
delay(10);
//OE=1时容许读取转换成果
OE=1;
delay(1);
value=P0;
//关掉读取
OE=0;
return value;
}
//将滑动变阻器电压值显示在LED上
void led(uchar v){
//量程缩小后值
//放大10000倍,提高精度
unsigned int vv=(int)196*v;
//位数操作
uchar j,k,l,m;
m=vv/10000; //个位
l=vv%10000/1000;//十分位
k=vv%1000/100; //百分位
j=vv%100/10; //千分位
init_max7219();
clear_max7219();
sendword(0x01,ledcode[j]);
sendword(0x02,ledcode[k]);
sendword(0x03,ledcode[l]);
sendword(0x04,ledcode[m] | 0x80);
}
//向DAC0832输出数据
void dasend(uchar v){
init_dac0832();
P3=v;
}
//定期器中断T0
void timer0(void) interrupt 1{
//产生供应0808时钟信号
CLOCK=~CLOCK;
}
void main(){
//变量要写在最前面
uchar input;
//初始化ADC0808
init_adc0808();
while(1){
//获得电压
input=adinput();
//显示电压
led(input);
//输出PWM调制信号
dasend(input);
}
}
展开阅读全文