单片机课设设计报告1214.docx
- 文档编号:27804568
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:26
- 大小:483.54KB
单片机课设设计报告1214.docx
《单片机课设设计报告1214.docx》由会员分享,可在线阅读,更多相关《单片机课设设计报告1214.docx(26页珍藏版)》请在冰豆网上搜索。
单片机课设设计报告1214
单片机课设设计报告
课题:
单片机控制PWM的直流电机调速系统的设计
班级:
测控1102
小组成员:
李波,丁向友,王迪
指导老师:
潘志康,王艳林
目录
1.课题………………………………………………...…………….…..3
2.选题意义及背景…………..………………………..…………….….3
3.主要任务……………………………..……………………………....3
4.设计原理及方案……………………………………….…...………..4
4.1系统总方案………………………………………..…………….4
4.2具体方案流程…………………………………………..…….....4
4.3电机调速控制模块……………………………………..……….4
4.4PWM调速工作方式………………………………..…………..5
5.设计内容:
硬件设计及软件设计………………………...…….…..5
5.1硬件部分…………………………………………….…………..5
5.2软件部分………………………………………………………..12
6.调试过程............................................................................................15
6.1调试步骤…………………………………………………...…....15
6.2调试中出现的错误……………………..……………………….15
7.还存在的问题及主要解决方法………………………...…………..16
8.实验程序…………………………………………………...………..17
1.课题:
单片机控制PWM的直流电机调速系统的设计
2.选题意义及背景
在国民生产中,随着现代技术的发展,电力电子技术已得到了全面的发展,其技术已应用到各个领域。
在各类机电系统中,由于直流电机具有良好的启动、制动和调速性能,直流电机调速系统已广泛运用于工业、航天领域的各个方面,最常用的直流调速技术是脉宽调制(PWM)直流调速技术,具有调速精度高、响应速度快、调速范围宽和损耗低的特点。
而利用计算机数字控制也成了直流调速的一种手段,数字控制系统硬件电路的标准化程度高,控制软件能够进行复杂运算,可以实现不同于一般线性调节的最优化、自适应、非线性、智能化等控制规律。
因为单片机具有小巧灵活、成本低、易于产品化、可靠性好、适应温度范围宽、易扩展、控制功能强等优点,用单片机取代模拟电路作为电动机的控制器,使电路更简单,模拟电路为了实现控制逻辑需要许多电子元件,使电路复杂,使用单片机微处理器后,绝大多数控制逻辑可通过软件实现,这样可以实现较复杂的控制。
单片机有更强的逻辑功能,运算速度和精度高、有大容量的存储单元,因此有能力实现复杂的控制灵活性和适应性强,单片机的控制方式是由软件完成的,如果需要修改控制规律,一般不必改变系统的硬件电路,只需修改程序即可,在系统调试和升级时,可以不断尝试选择最优参数,非常方便无零点漂移,控制精度高、数字控制不会出现模拟电路中经常遇到的零点漂移问题,无论被控量的大小,都可以保证足够的控制精度可提供人机界面,多机联网工作等优点。
所以在电气传动实时控制系统中受到重视和普遍应用。
利用单片机逻辑功能强和软件灵活的优点,不仅可使很多控制硬件软件化,便于参数的设定和调整,而且可以同时对系统工作中的各种信息数据进行诊断、检测和及时处理,加强了实时维护和提高了控制系统的可靠性。
它的发展趋势将是向大容量、高性能化、外围电路内装化等方面发展。
3.主要任务
1、罗列出各个可行的方案,验证各方案的可行性,确定最终方案
2、根据实验方案确定并采购实验器件
3、查阅相关资料,详细了解各个模块的引脚及其功能
4、设计驱动电路,用仿真软件画出电路图,并进行仿真
5、编写程序,具有单片机的以下主要功能:
1)键盘操作
2)显示
3)中断
4)定时器
5)串行通信
6、搭建电路,搭建完成实验平台,实现实验目的,可根据设定的速度,自动调节直流电机的转速。
4.设计原理及方案
4.1系统总方案
采用ADUC842单片机进行控制。
本设计需要使用的软件资源比较简单,只需要完成键盘控制部分以及显示输出功能。
采用ADUC842进行控制比较简单、易控制、可靠性高、抗干扰能力强、精度高且体积大大减小。
输出速度的调节是通过键盘操作。
图1:
单片机控制PWM的直流电机调速系统原理框图
4.2具体方案流程:
1)完成键盘扫描、数码管显示部分的编程,实现键盘控制数码管显示数值
2)完成PWM控制部分程序编写,通过中断延时函数,实现PWM信号输出
3)调节延时函数的延时时间,实现通过键盘来控制PWM信号的占空比
4)完成驱动电路的设计搭建,
5)调整参数,分析遇到的问题
6)实现设计目的
4.3电机调速控制模块:
电机调速控制模块采用由达林顿管组成的H型PWM电路。
用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。
这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单地实现转速的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。
PWM调速特性优良、调整平滑、调速范围广、过载能力大,实用性强。
4.4PWM调速工作方式:
PWM有单极性和双极性两种工作制,其中单极性工作制应用相对简单,易于实现与操作,所以我们采用了单极性工作制。
单极性工作制是单片机控制口一端置低电平,另一端输出PWM信号,两口的输出切换和对PWM的占空比调节决定电动机的转速。
PWM调脉宽的方式有三种:
定频调宽、定宽调频和调宽调频。
我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在产生PWM脉冲的实现上比较方便。
其方法是通过改变电机电枢电压接通时间与通电周期的比值即占空比来控制电机速度这种方法称为脉冲宽度调制,简称PWM。
调速原理即通过控制脉冲占空比来改变电机的电枢电压。
Vd=Vmax*D
(1)
由公式
(1)可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。
严格地讲,平均速度与占空比Vd并不是严格的线性关系,在一般的应用中,可以将其近似地看成线性关系。
5.设计内容:
硬件设计及软件设计
5.1硬件部分
5.1.1单片机的选型:
ADUC842是全集成的高性能数据采集系统。
芯片内部集成了高性能自校准8通道12位ADC、两个12位DAC转换接口。
它的采样速度达420kb
,以及单周期20MHz、8位与8051指令集全兼容的MCU,采用的是一个被优化的8052内核。
ADUC842在存储器方面做了很大的改进,在片内集成了3个不同的存储器:
62KB非易失性FLASH/EE程序存储器、4KB非易失性FLASH/EE数据存储器、256BRAM及2KB内部扩展RAM。
FLASH/EE存储器保存期为100年,耐久型为100k周期。
除此之外,为了避免产生新的技术瓶颈,ADUC842还针对MOVX数据存储器访问进行了改进。
增加了一个数据指针,为源指针和数据指针分配了专门的寄存器。
由于有了两个数据指针,从而降低了软件的开销。
在数字外围方面,外部通信除最常用的UART外,还装配了SPI、
接口。
ADUC842支持通过RS-232串行接口实现在线系统编程。
系统编程通过将微控制器的PSEN拉“低”来激活引导加载程序。
器件启动后,开始执行驻留在器件内部专用ROM的加载程序,实现PC机与目标系统的通信,将代码下载到目标微型控制器。
图2:
ADUC842芯片管脚图
5.1.2键盘设计
键盘在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人工干预单片机的主要手段.单片机应用系统中,键盘扫描只是CPU的工作内容之一。
CPU在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。
键盘的工作方式的选取应根据实际应用系统中CPU工作的忙、闲情况而定。
其原则是既要保证能及时响应按键操作,又要不过多占用CPU的工作时间。
采用4*2式键盘,如图下表所示。
用来调节给定转速档位,从而控制电机的运行。
1
2
3
4
5
6
7
8
表1:
4*2式键盘
5.1.3键盘显示控制芯片HD7279
HD9279是一种实现键盘输入和段式数码显示控制的专用智能芯片。
采用该芯片,可以大大简化单片机控制系统的软硬件设计,并且减轻CPU的负担。
HD7279A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。
HD7279A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式,此外,还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。
HD7279A具有片选信号,可方便地实现多于8位的显示或多于64键的键盘接口。
HD9279
芯片特点:
1.串行接口,无需外围元件可直接驱动LED
2.各位独立控制译码/不译码及消隐和闪烁属性
3.(循环)左移/(循环)右移指令
4.具有段寻址指令,方便控制独立LED
5.64键键盘控制器,内含去抖动电路
6.有DIP和SOIC两种封装形式供选择
图3:
HD7279管脚图
A-G和DP为显示数据,
分别对应7段LED数码管的各段
当相应的数据位为‘1’时,该段点亮,
否则不亮。
当某一位被赋予了消隐属性后,
HD7279A在扫描时将跳过该位,在这种
情况下无论对该位写入何值,均不会被显示
图4:
数码管各段定义图
HD7279引脚定义:
引脚
名称
说明
1,2
VDD
正电源
3,5
NC
无连接,必须悬空
4
VSS
接地
6
CS
片选输入端,此引脚为低电平时,可向芯片发送指令及读取键盘数据
7
CLK
同步时钟输入端,向芯片发送数据及读取键盘数据时,此引脚电平上升沿表示数据有效
8
DATA
串行数据输入/输出端,当芯片接收指令时,此引脚为输入端;当读取键盘数据时,此引脚在‘读’指令最后一个时钟的下降沿变为输出端
9
KEY
按键有效输出端,平时为高电平,当检测到有效按键时,此引脚变为低电平
10-16
SG—SA
段g——段a驱动输出
17
DP
小数点驱动输出
18-25
DIGO—DIG7
数字0——数字7驱动输出
26
CLKO
振荡输出端
27
RC
RC振荡器连接端
28
RESET
复位端
5.1.4显示器设计
采用共阴极的发光二极管构成可以显示4位十六进制的显示器,运行中显示当前的转速档位。
图5:
显示器图
图6:
HD7279及键盘连接图
5.1.5PWM波形的程序实现
随计算机技术及电力电子技术的发展,PWM波形采用软件方法实现显得非常灵活和实用。
以ADUC842单片机为控制核心,在PO口实现输出高低电平,然后通过一定的延时程序,在PO.1口输出具有一定占空比的PWM信号。
5.1.6驱动芯片ULN2003
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
基于ULN2003是高压大电流达林顿晶体管阵列系列产品。
具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点。
并且输入5VTTL电平,输出可达500mA/5V。
故我们选用ULN2003设计驱动电路。
图7:
ULN2003管脚图
图8:
驱动电路
选用1管脚为输入端,相对应的16管脚为输出端,与直流电机相连。
为驱动ULN2003工作,8管脚接地,9管脚接+5V。
5.2软件部分
5.2.1主程序及系统初始化模块
主程序——完成实时性要求不高的功能,完成系统初始化后,实现键盘处理、刷新显示等功能。
初始化子程序——完成硬件器件工作方式的设定、系统运行参数和变量的初始化等功能。
图9:
主程序流程图图10:
初始化子程序流程图
5.2.2键盘/显示模块设计
键盘/显示模块核心控制器件是HD7279,由软件设置为8字符显示,左端送入,按键操作由终端导入,静态显示方式。
图11:
HD7279子程序流程图
5.2.3软件调试
Keiluv2操作流程的简单说明:
1.NEWPROJECT↙,建一个新的项目,在出现的对话框中选analogdevices/Aduc842芯片型号;或者可以从File/devicesdatabase的对话框中选择芯片型号。
2.FILE/NEW↙,建立一个新文件,在打开的窗口下输入程序,存盘。
3.选中SourceGroup1点击鼠标右键,在出现的菜单中选中AddFilestoGroup`SourceGroup1`,将文件加入到项目中。
4.选中Target1点击鼠标右键,在出现的菜单中选中OptionsforTarget`Target1`,在出现的对话框中打开output项的对话框,选中`GreatHEXFile`,以保证编译时能生成.HEX文件,为后续下载程序做准备。
5.Project/Buildtarget或Rebuildalltargetfiles,编译所输入的程序。
ADUC842用户板操作说明:
先将计算机与实验板的串口联接线连上,再连接USB供电线(顺序一定不要颠倒,否则容易烧毁实验板;断开与计算机的连接时,要先断开USB供电线路,再断开串口连线。
)
实验板复位:
1.先按下实验板的右键,再按下左键。
2.鼠标左键点击软件上的Reset按钮。
3.先松开右键,再松开左键,完成实验板的复位功能。
烧写实验板(下载)程序:
1.在完成板的复位操作后,鼠标左键点击软件上的Download按钮,选择.HEX文件,点击`打开`按钮,下载程序。
2.下载成功后,即可以运行程序。
6.调试过程
6.1调试步骤
1)寻找适当的输出口,即:
分别先设P0=0x01和P0=0x00,观察哪个输出口输出高、低电平,则该口即为所要的输出口。
2)在P0=0x00和P0=0x01后加延时程序,即delay函数。
观察输出的PWM信号。
3)建立键盘与延时程序(主要是延时长度)的关系,从而达到键盘控制延时长度的目的,进而控制PWM信号的占空比,实现键盘对直流电机转速的控制。
6.2调试中出现的错误
1)确定PWM信号的输出口,通过在程序中赋值,发现P1/P2口均无输出,通过小组讨论,决定用其他输出端口,经检测,通过给P0^1口赋值,可以通过示波器检测出高低电平的变化,所以我们决定使用P0口,将程序中的P2口均改成P0口。
2)波形高低电平无法交换,将延时程序写入P0=0x00和P0=0x01后,只能出现高电平或低电平,而不会出现方波。
通过检测,发现是在头文件中,没有将端口做相应的声明引起的。
3)无法用键盘控制方波占空比,出现方波后,发现它的占空比不受键盘控制。
通过检测,发现没有将键盘与延时函数联系起来,因而无法调节占空比。
经过小组讨论,我们想到以下解决办法,就是将中断延时程序的延时时间,设置成一个随着键值线性变化的一个变量,这样就可通过键值来控制PWM信号的占空比了。
4)中断程序中,我们用到外部中断定时器1,但是我们在ADUC842上面没有找到外部中断定时器1的外部接口,通过询问老师,我们知道了教学板上,已经帮我们将P3.2和HD7279连接好了。
5)驱动电路部分,连完电路后,发现电机转着转着突然不转了。
经分析,有两种可能,一是电机坏了,二是驱动电路部分出现了问题。
通过检测,我们排除了电机的问题,基本确定是驱动电路出现了问题,通过万用表,检查电路是否存在短路和芯片各端口是否有输出,检查出ULN2003的16端口,也就是与电机的负极相连的口出现了虚焊的情况。
经过重新焊接后,我们达到了预期结果。
7、还存在的问题及主要解决方法
1)对电路板的了解不够。
单单了解了我们用到的一部分电路,对于那些没有涉及的还不是很了解。
需要通过向老师和同学咨询,达到更加深入的了解。
2)部分程序片段还不是特别清楚,需要更深入地学习,才能掌握最核心的部分,而不是简单地调用程序。
3)转速调到最低档的时候,发现电机转速不够低,还是比较快,我们可以在程序中修改延时时间的表达式,使其更大,这样转速就会降低。
4)本设计虽然可以调节电机转速,但是无法调节单片机的转向,单片机的转向调节也是调速环节的一部分,所以本次课设其实并不完善,初步的解决方法是在PWM输出端加一个带开关的反相器,基本可以实现直流电机的转向调节。
但是我觉得这一定不是最好的方法,最佳方案有待解决。
5)键盘加控制部分数字部分用来输入给定转速,控制部分用来控制电机的运行。
8、实验程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidlong_delay(void);//长延时
voidshort_delay(void);//短延时
voidsend_byte(unsignedchar);//发送一个字节
voidwrite7279(unsignedchar,unsignedchar);//写入7279
ucharreceive_byte(void);//接收一个字节
ucharread7279(unsignedchar);//读7279
voidmid_delay(intlength);
voiddisplay(uint);//显示函数
//********************7279的指令定义***************************//
#defineCMD_RESET0xa4
#defineCMD_TEST0xbf
#defineDECODE00x80
#defineDECODE10xc8
#defineCMD_READ0x15
#defineUNDECODE0x90
#defineRTL_CYCLE0xa3
#defineRTR_CYCLE0xa2
#defineRTL_UNCYL0xa1
#defineRTR_UNCYL0xa0
#defineACTCTL0x98
#defineSEGON0xe0
#defineSEGOFF0xc0
#defineBLINKCTL0x88
//****************************位声明*******************************//
sbitcs=P2^2;//CS连接p2.2
sbitIO1820=P2^3;//dq连接p2.3
sbitclk=P2^1;//clk连接p2.1
sbitdat=P2^0;//date连接p2.0
sbitkey=P3^2;//key连接p3.2
//*****************************定义了一些变量**********************//
unsignedcharkey_number,f;
uchartable[2];
uintn,m,e;
voidmain()
{
send_byte(CMD_RESET);//清除显示
while
(1)
{
m=n*100;
e=1500-m;
P0=0x01;
mid_delay(m);
mid_delay(m);
P0=0x00;
mid_delay(e);
if(!
key)
{
key_number=read7279(CMD_READ);
if(key_number==0x01)
{f=0x01;}
if(key_number==0x02)
{f=0x02;}
if(key_number==0x04)
{f=0x03;}
if(key_number==0x05)
{f=0x04;}
if(key_number==0x00)
{f=0x05;}
if(key_number==0x03)
{f=0x06;}
if(key_number==0x07)
{f=0x07;}
if(key_number==0x06)
{f=0x08;}
table[0]=f/10;
table[1]=f%10;
write7279(DECODE0+1,table[0]);
write7279(DECODE0,table[1]);
if(key_number==0x01)
{
n=1;
}
if(key_number==0x02)
{
n=3;
}
if(key_number==0x04)
{
n=5;
}
if(key_number==0x05)
{
n=7;
}
if(key_number==0x00)
{
n=9;
}if(key_number==0x03)
{
n=11;
}if(key_number==0x07)
{
n=13;
}if(key_number==0x06)
{
n=15;
}
while(!
key);
}
}
}
//**************************写7279的函数**************************//
voidwrite7279(unsignedcharcmd,unsignedchardate)
{
send_byte(cmd);//发送指令
send_byte(date);//发送数据
}
/*发送一个字节函数*/
voidsend_byte(unsignedcharout_byte)
{
unsignedchari;
cs=0;//片选端为低电平
long_delay();//大约35us
for(i=0;i<8;i++)
{
if(out_byte&0x80)
{
dat=1;
}//if指令的目的是将高位保存然后输出高位
else
{
dat=0;
}
clk=1;
short_delay();//约5.6us
clk=0;
short_delay();
out_byte=out_byte*2;//左移一位
}
dat=0;
}
//************************接受一个字节函数*************************//
unsignedcharreceive_byte(void)//receiveabyte
{
unsignedchari;
unsignedchardump=0;
dat=1;
lo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 设计 报告 1214
![提示](https://static.bdocx.com/images/bang_tan.gif)