单片机课设设计报告1214_第1页
单片机课设设计报告1214_第2页
单片机课设设计报告1214_第3页
单片机课设设计报告1214_第4页
单片机课设设计报告1214_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课设设计报告课 题:单片机控制PWM的直流电机调速系统的设计班 级: 测 控 1102小组成员: 李波,丁向友,王迪指导老师: 潘志康,王艳林目 录1.课题.32.选题意义及背景.33.主要任务.34.设计原理及方案.44.1系统总方案.44.2具体方案流程.44.3电机调速控制模块.44.4 PWM调速工作方式.55.设计内容:硬件设计及软件设计.55.1硬件部分.55.2软件部分.126.调试过程.156.1调试步骤.156.2调试中出现的错误.157.还存在的问题及主要解决方法.168.实验程序.171.课题:单片机控制PWM的直流电机调速系统的设计2.选题意义及背景在国民生产中,

2、随着现代技术的发展,电力电子技术已得到了全面的发展,其技术已应用到各个领域。在各类机电系统中,由于直流电机具有良好的启动、制动和调速性能,直流电机调速系统已广泛运用于工业、航天领域的各个方面,最常用的直流调速技术是脉宽调制(PWM)直流调速技术,具有调速精度高、响应速度快、调速范围宽和损耗低的特点。而利用计算机数字控制也成了直流调速的一种手段,数字控制系统硬件电路的标准化程度高,控制软件能够进行复杂运算,可以实现不同于一般线性调节的最优化、自适应、非线性、智能化等控制规律。 因为单片机具有小巧灵活、成本低、易于产品化、可靠性好、适应温度范围宽、易扩展、控制功能强等优点,用单片机取代模拟电路作为

3、电动机的控制器,使电路更简单,模拟电路为了实现控制逻辑需要许多电子元件,使电路复杂,使用单片机微处理器后,绝大多数控制逻辑可通过软件实现,这样可以实现较复杂的控制。单片机有更强的逻辑功能,运算速度和精度高、有大容量的存储单元,因此有能力实现复杂的控制灵活性和适应性强,单片机的控制方式是由软件完成的,如果需要修改控制规律,一般不必改变系统的硬件电路,只需修改程序即可,在系统调试和升级时,可以不断尝试选择最优参数,非常方便无零点漂移,控制精度高、数字控制不会出现模拟电路中经常遇到的零点漂移问题,无论被控量的大小,都可以保证足够的控制精度可提供人机界面,多机联网工作等优点。所以在电气传动实时控制系统

4、中受到重视和普遍应用。利用单片机逻辑功能强和软件灵活的优点,不仅可使很多控制硬件软件化,便于参数的设定和调整,而且可以同时对系统工作中的各种信息数据进行诊断、检测和及时处理,加强了实时维护和提高了控制系统的可靠性。它的发展趋势将是向大容量、高性能化、外围电路内装化等方面发展。3.主要任务1、 罗列出各个可行的方案,验证各方案的可行性,确定最终方案2、 根据实验方案确定并采购实验器件3、 查阅相关资料,详细了解各个模块的引脚及其功能4、 设计驱动电路,用仿真软件画出电路图,并进行仿真5、 编写程序, 具有单片机的以下主要功能:1) 键盘操作2) 显示3) 中断4) 定时器5) 串行通信6、搭建电

5、路,搭建完成实验平台,实现实验目的,可根据设定的速度,自动调节直流电机的转速。4. 设计原理及方案4.1系统总方案采用ADUC842单片机进行控制。本设计需要使用的软件资源比较简单,只需要完成键盘控制部分以及显示输出功能。采用ADUC842进行控制比较简单、易控制、可靠性高、抗干扰能力强、精度高且体积大大减小。输出速度的调节是通过键盘操作。 接口电路单片机PWM控制驱动电路电动机显示器键盘 图1:单片机控制PWM的直流电机调速系统原理框图4.2具体方案流程:1)完成键盘扫描、数码管显示部分的编程,实现键盘控制数码管显示数值2)完成PWM控制部分程序编写,通过中断延时函数,实现PWM信号输出3)

6、调节延时函数的延时时间,实现通过键盘来控制PWM信号的占空比4) 完成驱动电路的设计搭建,5)调整参数,分析遇到的问题6)实现设计目的4.3电机调速控制模块:电机调速控制模块采用由达林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单地实现转速的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。PWM调速特性优良、调整平滑、调速范围广、过载能力大,实用性强。4.4 PWM调速工作方式:PWM有单极性和双极性两种工作制,其中单极性工作制应用相对简单,易于

7、实现与操作,所以我们采用了单极性工作制。单极性工作制是单片机控制口一端置低电平,另一端输出PWM信号,两口的输出切换和对PWM的占空比调节决定电动机的转速。PWM调脉宽的方式有三种:定频调宽、定宽调频和调宽调频。我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在产生PWM脉冲的实现上比较方便。其方法是通过改变电机电枢电压接通时间与通电周期的比值即占空比来控制电机速度这种方法称为脉冲宽度调制,简称PWM。调速原理即通过控制脉冲占空比来改变电机的电枢电压。Vd=Vmax*D (1)由公式(1)可见,当我们改变占空比D=t1T时,就可以得到不同的电机平均速度Vd,从而达到调速的

8、目的。严格地讲,平均速度与占空比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内部扩展R

9、AM。FLASH/EE存储器保存期为100年,耐久型为100k周期。除此之外,为了避免产生新的技术瓶颈,ADUC842还针对MOVX数据存储器访问进行了改进。增加了一个数据指针,为源指针和数据指针分配了专门的寄存器。由于有了两个数据指针,从而降低了软件的开销。在数字外围方面,外部通信除最常用的UART外,还装配了SPI、接口。ADUC842支持通过RS-232串行接口实现在线系统编程。系统编程通过将微控制器的PSEN拉“低”来激活引导加载程序。器件启动后,开始执行驻留在器件内部专用ROM的加载程序,实现PC机与目标系统的通信,将代码下载到目标微型控制器。图2:ADUC842芯片管脚图5.1.2

10、 键盘设计键盘在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人工干预单片机的主要手段.单片机应用系统中,键盘扫描只是CPU的工作内容之一。CPU在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。键盘的工作方式的选取应根据实际应用系统中CPU工作的忙、闲情况而定。其原则是既要保证能及时响应按键操作,又要不过多占用CPU的工作时间。采用4*2式键盘,如图下表所示。用来调节给定转速档位,从而控制电机的运行。12345678表1:4*2式键盘5.1.3键盘显示控制芯片HD7279HD9279是一种实现键盘输入和段式数码显示控制的专用智能芯片。采用该芯片,可以大大简化单片机控

11、制系统的软硬件设计,并且减轻CPU的负担。HD7279A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。HD7279A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式,此外,还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。 HD7279A具有片选信号,可方便地实现多于8位的显示或多于64键的键盘接口。HD9279芯片特点:1. 串行接口,无需外围元件可直接驱动LED2. 各位独立控制译码/不译码及消隐和闪烁属性3. (循环)左移/(循环)右

12、移指令4. 具有段寻址指令,方便控制独立LED5. 64键键盘控制器,内含去抖动电路 6. 有DIP和SOIC两种封装形式供选择 图3:HD7279管脚图A-G和DP为显示数据,分别对应7段LED数码管的各段当相应的数据位为 1时,该段点亮,否则不亮。当某一位被赋予了消隐属性后,HD7279A在扫描时将跳过该位,在这种 情况下无论对该位写入何值,均不会被显示图4:数码管各段定义图HD7279引脚定义:引脚名称说明1,2VDD正电源3,5NC无连接,必须悬空4VSS接地6CS片选输入端,此引脚为低电平时,可向芯片发送指令及读取键盘数据7CLK同步时钟输入端,向芯片发送数据及读取键盘数据时 ,此引

13、脚电平上升沿表示数据有效8DATA串行数据输入/输出端,当芯片接收指令时,此引脚为 输入端;当读取键盘数据时,此引脚在读指令最 后一个时钟的下降沿变为输出端9KEY按键有效输出端,平时为高电平,当检测到有效按键 时,此引脚变为低电平10-16SGSA段g段a驱动输出17DP小数点驱动输出18-25DIGODIG7数字0数字7驱动输出26CLKO振荡输出端27RCRC振荡器连接端28RESET复位端5.1.4显示器设计 采用共阴极的发光二极管构成可以显示4位十六进制的显示器,运行中显示当前的转速档位。图5:显示器图图6:HD7279及键盘连接图5.1.5PWM波形的程序实现随计算机技术及电力电子

14、技术的发展,PWM波形采用软件方法实现显得非常灵活和实用。以ADUC842单片机为控制核心,在PO口实现输出高低电平,然后通过一定的延时程序,在PO.1口输出具有一定占空比的PWM信号。5.1.6驱动芯片 ULN2003ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。基于ULN2003是高压大电流达林顿晶体管阵列系列产品。具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点。并且输入5VTTL电平,输出可达5

15、00mA/5V。故我们选用ULN2003设计驱动电路。图7:ULN2003管脚图 图8:驱动电路选用管脚为输入端,相对应的管脚为输出端,与直流电机相连。为驱动ULN2003工作,管脚接地,管脚 接。5.2软件部分5.2.1主程序及系统初始化模块主程序完成实时性要求不高的功能,完成系统初始化后,实现键盘处理、刷新显示等功能。初始化子程序完成硬件器件工作方式的设定、系统运行参数和变量的初始化等功能。 系统初始化设定定时器、PWM设定键盘工作方式参数及变量初始化返回主程序系统初始化按键按下键值处理刷新显示数据通信YN 图9:主程序流程图 图10:初始化子程序流程图 5.2.2键盘/显示模块设计键盘/

16、显示模块核心控制器件是HD7279,由软件设置为8字符显示,左端送入,按键操作由终端导入,静态显示方式。返回开始初始化键值显示键值输入显示完毕NNYY图11:HD7279子程序流程图5.2.3软件调试Keil uv2 操作流程的简单说明:1 NEW PROJECT ,建一个新的项目,在出现的对话框中选analog devices/Aduc842 芯片型号;或者可以从File/ devices database 的对话框中选择芯片型号。2 FILE/ NEW ,建立一个新文件,在打开的窗口下输入程序,存盘。3 选中Source Group1点击鼠标右键,在出现的菜单中选中 Add Files t

17、o Group Source Group1,将文件加入到项目中。4 选中Target1点击鼠标右键,在出现的菜单中选中Options for Target Target1, 在出现的对话框中打开output项的对话框,选中Great HEX File,以保证编译时能生成.HEX文件,为后续下载程序做准备。5 Project/Build target或Rebuild all target files, 编译所输入的程序。ADUC842用户板操作说明:先将计算机与实验板的串口联接线连上,再连接USB供电线(顺序一定不要颠倒,否则容易烧毁实验板;断开与计算机的连接时,要先断开USB供电线路,再断开串

18、口连线。) 实验板复位:1. 先按下实验板的右键,再按下左键。2. 鼠标左键点击软件上的Reset按钮。3. 先松开右键,再松开左键,完成实验板的复位功能。烧写实验板(下载)程序:1. 在完成板的复位操作后,鼠标左键点击软件上的Download按钮,选择.HEX文件,点击 打开 按钮,下载程序。2. 下载成功后,即可以运行程序。6.调试过程6.1调试步骤1)寻找适当的输出口,即:分别先设P0=0x01和P0=0x00,观察哪个输出口输出高、低电平,则该口即为所要的输出口。2)在P0=0x00和P0=0x01后加延时程序,即delay函数。观察输出的PWM信号。3)建立键盘与延时程序(主要是延时

19、长度)的关系,从而达到键盘控制延时长度的目的,进而控制PWM信号的占空比,实现键盘对直流电机转速的控制。6.2调试中出现的错误 1) 确定PWM信号的输出口,通过在程序中赋值,发现P1/P2口均无输出,通过小组讨论,决定用其他输出端口,经检测,通过给P01口赋值,可以通过示波器检测出高低电平的变化,所以我们决定使用P0口,将程序中的P2口均改成P0口。2)波形高低电平无法交换,将延时程序写入P0=0x00和P0=0x01后,只能出现高电平或低电平,而不会出现方波。通过检测,发现是在头文件中,没有将端口做相应的声明引起的。3)无法用键盘控制方波占空比,出现方波后,发现它的占空比不受键盘控制。通过

20、检测,发现没有将键盘与延时函数联系起来,因而无法调节占空比。经过小组讨论,我们想到以下解决办法,就是将中断延时程序的延时时间,设置成一个随着键值线性变化的一个变量,这样就可通过键值来控制PWM 信号的占空比了。 4)中断程序中,我们用到外部中断定时器1,但是我们在ADUC842上面没有找到外部中断定时器1的外部接口,通过询问老师,我们知道了教学板上,已经帮我们将P3.2和HD7279连接好了。5)驱动电路部分,连完电路后,发现电机转着转着突然不转了。经分析,有两种可能,一是电机坏了,二是驱动电路部分出现了问题。通过检测,我们排除了电机的问题,基本确定是驱动电路出现了问题,通过万用表,检查电路是

21、否存在短路和芯片各端口是否有输出,检查出ULN2003的16端口,也就是与电机的负极相连的口出现了虚焊的情况。经过重新焊接后,我们达到了预期结果。7、还存在的问题及主要解决方法1)对电路板的了解不够。单单了解了我们用到的一部分电路,对于那些没有涉及的还不是很了解。需要通过向老师和同学咨询,达到更加深入的了解。2)部分程序片段还不是特别清楚,需要更深入地学习,才能掌握最核心的部分,而不是简单地调用程序。 3)转速调到最低档的时候,发现电机转速不够低,还是比较快,我们可以在程序中修改延时时间的表达式,使其更大,这样转速就会降低。 4)本设计虽然可以调节电机转速,但是无法调节单片机的转向,单片机的转

22、向调节也是调速环节的一部分,所以本次课设其实并不完善,初步的解决方法是在PWM输出端加一个带开关的反相器,基本可以实现直流电机的转向调节。但是我觉得这一定不是最好的方法,最佳方案有待解决。 5)键盘加控制部分数字部分用来输入给定转速,控制部分用来控制电机的运行。8、实验程序#include#include #define uchar unsigned char#define uint unsigned intvoid long_delay(void);/长延时void short_delay(void);/短延时void send_byte(unsigned char ); /发送一个字节vo

23、id write7279(unsigned char,unsigned char);/写入7279uchar receive_byte(void); /接收一个字节uchar read7279(unsigned char); /读7279void mid_delay(int length);void display(uint);/显示函数 /*7279的指令定义*/#define CMD_RESET 0xa4#define CMD_TEST 0xbf#define DECODE0 0x80#define DECODE1 0xc8#define CMD_READ 0x15#define UNDE

24、CODE 0x90#define RTL_CYCLE 0xa3#define RTR_CYCLE 0xa2#define RTL_UNCYL 0xa1#define RTR_UNCYL 0xa0#define ACTCTL 0x98#define SEGON 0xe0#define SEGOFF 0xc0#define BLINKCTL 0x88/*位声明*/sbit cs=P22;/CS连接p2.2sbit IO1820=P23;/dq连接p2.3sbit clk=P21;/clk连接p2.1sbit dat=P20;/date连接p2.0sbit key=P32; /key连接p3.2/*

25、定义了一些变量*/unsigned char key_number,f;uchar table2;uint n,m,e;void main() 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)

26、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; table0=f/10; table1=f%10; write7279(DECODE0+1,table0); write7279(DECODE0,table1); 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的函数*/void write7279(unsigned char cmd,unsigned char date) send_byte(cmd);/发送指令 send_byte(date);/发送数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论