1、1单片机原理与应用技术课程设计论文课程名称 单片机原理与应用技术 题目名称 小直流电机调速控制系统 学生学院 信息工程学院 专业班级 测控技术与仪器 (光机电一体化 14 级 1 班) 学 号 3114002498 学生姓名 温玮佳 指导教师 张巧芬 2016 年 12 月 28 日2任 务 书1.课程设计项目小直流电机调速控制系统2.设计内容(1)以 AT89C51 单片机为核心器件组成小直流电机调速控制系统;(2)搭建外围硬件电路;(3)系统程序编制与调试;(4)电路系统的综合调试;(5)撰写课程设计论文;(6)完成课程设计论文答辩。3.设计要求用 ADC0809 采样电位器的值,并在显示
2、器上显示,将此信号值作为方波占空比,通过 0832 输出经放大后控制电机转速。4.设计进度 时间 设计内容第 1-2 天 查阅资料、方案比较、设计与论证第 3-4 天 仿真、程序编写第 5 天 焊接第 6 天 系统调试3目 录1.绪论1.1 课题研究的目的及意义-41.2 国内外电机控制的研究现状及发展-41.3 PWM 变频调速发展前景-41.31PWM 调速-52.方案论证(规划、选定)-53.方案说明(设计)-54.硬件方案设计4.1 电位器采集模块-64.1.1 电位器-641.2 数模转换及显示-64.2 模数转换与单片机的连接-74.3 数模转换模块及放大驱动模块-95.软件方案设
3、计-96.调试6.1 硬件调试-106.2 软件调试-107.技术小结(结束语)-108.参考文献-109.附录(元件清单、电路图、源程序代码、实物图片等)9.1 元件清单-119.2 电路图-119.3 源程序代码-1241.绪论1.1 课题研究的目的及意义直流电机具有良好的启动性能和调速特性,虽然各种类型的电机层出不穷,然而在自动控制系统、电子仪器设备等方面,直流电机的应用还是占有突出地位。直流电机调速平滑,调速范围广,过载能力强,可实现频繁的无级快速起动、制动、加减速和正反转。为了满足生产过程自动化系统化各种不同的特殊要求,从而对直流电机提出了较高的要求,改变电枢回路电阻调速、改变电压调
4、速等技术已远远不能满足现代科技的要求,通过 PWM 方式控制直流电机调速的方法就应用而生。PWM 直流电机调压调速系统拥有需要的功率元件少、线路简单、控制方便、开关频率高、低速性能好。通过学习并熟练掌握这个调速系统,对我们今后的工作有十分重要的意义。 本课题是以单片机为主要控制核心,针对直流电机的调速系统进行设计,通过本次课程设计培养我们综合运用所学的知识和技能解决问题的本领,巩固和加深多所学知识的理解。1. 2 国内外电机控制的研究现状及发展国外主要电气公司如瑞典 ABB 公司、德国的西门子公司、AEG 公司、日本的三菱公司、东芝公司、美国的 GE 公司、西屋公司等,均已经开发出多个数字直流
5、调速装置,有成熟的系列化、标准化、模板化的应用产品。我国从 20 世纪 60 年代初试制成功第一只硅晶管以来,晶闸管直流调速系统也得到迅速的发展和广泛的应用。目前晶闸管供电的直流调速系统在我国各部门得到运用。还有数字直流调速系统的研究,随着 PWM 技术的发展,我国直流电机调速也正向着脉宽调制方向发展。1.3PWM 调速发展前景PWM 调速作为一项新的调速技术,在西方发达国家已得到广泛应用。目前,不论是在同步电机调速方面,还是异步电机调速方面,PWM 调速是较好的。51.31PWM 调速现代的 PWM 调速采用的是脉宽调制技术,具体一点就是应用了采样控制理论中的一个重要理论,冲量相等而形状不同
6、的窄脉冲加在具有惯性环节上时,其效果基本相同,冲量即窄脉冲的面积。2.方案论证(规划、选定)方案一:以两块 AT89C51 单片机进行通信扩展 I/O 口为控制中心,采集电位器的值通过 A/D 转换器(ADC0809),单片机控制将其转换成数字量显示在数码管上;再将这个值作为信号,改变占空比,再通过 D/A 转换器(DAC0832)转换成模拟量,进而通过 LM324 运放和 ULN2003 放大控制直流电机调速。方案二:同样以 AT89C51 单片机为控制中心,但是只用一块单片机。采用两块 595 芯片级联来控制数码管的段选与位选,节省 I/O 口。采集电位器的值通过 A/D 转换器(ADC0
7、809),单片机控制将其转换成数字量显示在数码管上;再将这个值作为信号,改变占空比,再通过 D/A 转换器(DAC0832)转换成模拟量,进而通过 OPAMP 放大控制直流电机调速。经过比较,方案一的硬件电路复杂,而且要用两块单片机比较浪费和麻烦。最终选定了硬件电路简单,需要在程序上进行一定数据处理的方案二。3.方案说明(设计)本设计以 AT89C51 单片机为控制中心,运用电位器采集信号,然后经过ADC0809 进行模拟量到数字量的转换,将此作为占空比并将最终数据传输给单片机,单片机进行进一步处理并将处理的数据传输给 DAC0832 将数字量转换成模拟量再经过 OPAMP 放大输出驱动直流电
8、机,并通过电位器值得改变来改变占空比,从而实现直流电机的调速。整体框图如下:64.硬件方案设计4.1 电位器采集模块4.1.1 电位器电位器的作用调节电压(含直流电压与信号电压)和电流的大小。电位器的电阻体有两个固定端,通过手动调节转轴,改变动触点在电阻体上的位置,则改变了动触点与任一个固定端之间的电阻值,从而改变了电压与电流的大小。电位器是一种可调的电子元件。它是由一个电阻体和一个转动或滑动系统组成。当电阻体的两个固定触电之间外加一个电压时,通过转动或滑动系统改变触点在电阻体上的位置,在动触点与固定触点之间便可得到一个与动触点位置成一定关系的电压。它大多是用作分压器,得到模拟量4.1.2 模
9、数转换及显示 当电位器发生改变时,阻值发生相应的变化,通过下图所示的电路能够使得电位器两端的电压发生相应的改变。此时的输出信号为模拟量,单片机无法直接读取。通过 ADC0809 转换成数字量显示在数码管上(单片机通过 MAX2719控制数码管显示)AT89C51电位器采集信号值ADC0808模数转换MORORDAC0832数模转换 OPAMP 放大驱动模块两个 595 级联控制数码管显示数字值7上图为模数转换模块8上图为数码管显示模块4.2 模数转换与单片机的连接89C51 是一个低功耗,高性能 CMOS 8 位单片机,片内含 4k Bytes ISP(In-system programmab
10、le)的可反复擦写 1000 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术制造,兼容标准 MCS-51 指令系统,芯片内集成了通用 8 位中央处理器和 ISP Flash 存储单元,功能强大的微型计算机的 AT89C51 可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89C51 具有如下特点:40 个引脚,4k Bytes Flash 片内程序存储器,9128bytes 的随机存取数据存储器(RAM),32 个外部双向输入/输出(I/O)口,4 个中断优先级,2 层中断嵌套中断,2 个 16 位可编程定时计数器,2 个全双工串行通信口,内部集成
11、看门狗计时器片内时钟振荡器。其工作电压在 4.55V,一般我们选用5V 电压。ADC0809 是带有 8 位 A/D 转换器、8 路多路开关以及微处理机兼容的控制逻辑的 CMOS 组件。它是逐次逼近式 A/D 转换器,可以和单片机直接接口。ADC0809由一个 8 路模拟开关、一个地址锁存与译码器、一个 A/D 转换器和一个三态输出锁存器组成。多路开关可选通 8 个模拟通道,允许 8 路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁存器用于锁存 A/D 转换完的数字量,当 OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。下面为 ADC0809 与单片机的连接电路:4.3 数
12、模转换模块及放大驱动模块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
13、译码器,及显示测试、移位、锁存器等,输出电流达40mA,外围只需一只亮度调整电阻。1、 引脚功能说明 DIN:串行数据输入端,CLK 的上升沿时数据被载入内部16位移位寄存器中 10CLK:串行时钟输入端,最高工作频率可达10MHz LOAD:片选端,低电平接收 DIN 端的数据,高电平时数据被所存 DIG07:LED 的位控制端 ADP:LED 的端控制端 DOUT: 串行数据输出端,用于芯片的级联 ISET:硬件亮度调整端,在该引脚与 VCC 之间跨接一个电阻,LED 的亮度即可通过该电阻来调节,流过 LED 的段驱动平均电流为流过此电阻电流的100倍,此电阻值范围为:1080K 之间。
14、2、 内部寄存器说明 A、 译码方式选择寄存器 地址:09H 赋值:FFH 表示使用 MAX7219内部的BCD 译码器 00H 表示不使用 MAX7219内部的 BCD 译码器 B、 亮度调节寄存器 地址:0AH 赋值:00H0FH 可改变 MAX7219所驱动的LED 的亮度,其变化范围在1/3231/32之间 C、 扫描位数设定寄存器 地址:0BH 赋值:00H 所有位不显示 01H07H依次对应于18位及前面位全部显示(即需显示的位应为“1”) D、 待机模式开关寄存器 地址:0CH 赋值:00H LED 全灭 01H LED 正常显示 E、 显示器测试寄存器 地址:0FH 赋值:00
15、H LED 为正常显示状态 01H LED 测试状态,即 LED 全亮F、 8位 LED 显示数据寄存器 地址:01H08H 115.软件方案设计首先处理数据的采集程序。其次对数据进行处理。最后完善小直流电机的控制函数。 将数模转换模块作为主要程序,将模数及放大驱动模块等小模块写成头文件的形式置于主程序中,这样程序分模块易理解,易操作。下图为 ADC0809 工作时序,知道后才能依据时序编写程序6.调试 6.1 硬件调试先把程序下载到单片机,通电,开始调试。旋动电位器,改变电位器的值,数码管上显示数值变化,电机转速也有变化,转速的变化与数值大小变化趋势一致。6.2 软件调试12软件调试是通过对
16、用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除的过程。正确无误后加载至硬件电路中的单片机,如果发现不理想的效果,在确保硬件无误的情况下,根据需求修改程序,慢慢调试以实现自己想要的效果。7.技术小结(结束语)从拿到课题的茫然到渐渐学会接受,开始慢慢自己动手查找资料,询问很多单片机学的好的同学及学长,再到查找到电路的设计,从程序的编写到仿真功能的基本实现,最后历经一路坎坷做出实物,效果和功能基本达到。感觉真的很辛苦,但同时也很快乐很充实,毕竟收获了许多。从查资料到确定方案就差不多花了四天时间,在设计过程中不断的发现问题,同时也不断的解决问题,越来越发觉制作实物相比整体设计
17、要难一些,就算仿真完全没错实物运行也会有很多问题。实际制作过程中会遇到多种多样的问题,刚开始仿真效果总是出不来,要通过不断的测试和实验来解决,最后焊接出来的实物没有问题。总之,不能粗心大意,做任何事都要细心,要考虑的周全,不能因为一时的失败而丧失信心,从哪里跌倒了要从哪里爬起来,只有有了这样的精神,才会从问题中学到更多的知识,为我以后更好的发展奠定了基础。谢谢学院和老师给予我们这次锻炼的机会,成长的机会,谢谢!8.参考文献1吴黎明主编单片机原理与接口技术(第二版),科学出版社.2张毅刚主编,基于 Proteus 的单片机课程的基础实验与课程设计,人民邮电出版社.9.附录(元件清单、电路图、源程
18、序代码等)9.1 元件清单元件 用途 数量AT89C51 单片机 1晶振 单片机外围电路需要 1电容(33PF) 单片机外围电路需要 2ADC0809、DAC0832、MAX 模数转换芯片、数模转 各 1137219 换芯片、电子数码管控制需要电位器 采集信号 1电阻(5.1K) MAX7219 芯片使用 1电阻(1K) 数模转换电路需要 1电容(0.1nf) 芯片电路需要 4OPAMP(LM324) 提供运放 1小直流电机 电机 17SEG-MPX4-CC LED 显示模块 19.2 电路图(连接图)14(运行图)9.3 源程序代码/*小直流电机调速控制系统*/#include#includ
19、e#define uchar unsigned char#define uint unsigned int/ADC0808 的控制端口sbit OE=P10; /0808 读取数字量允许,高电平有效sbit EOC=P11;/0808 转换结束标志,结束时为 1sbit START=P12;/下降沿开始转换sbit CLOCK=P13;/0808 的芯片信号/DAC0832 的控制端sbit CS=P16; /0832 的片选sbit WR1=P17;/0832 写入数字量控制信号之一/LED 的控制位15sbit MAXDIN=P20; /数据输入口sbit MAXLOAD=P21;/载入数
20、据,上升沿锁定sbit MAXCLK=P22;/上升沿读取/共阴极段码:123456789 全灭uchar code ledcode=0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00;/延时程序,要写在前面void delay(uchar time)uchar k,l;for(k=0;ktime;k+)for(l=0;l110;l+);/ADC0808 初始化/A,B,C 已经全部接地,选中 IN0 输入void init_adc0808()EA=1; /中断总允许TMOD=0x02;/T0 工作方式 2TH0=216; /定时 40
21、us,CLOCK 周期 80us,TL0=216; /频率 12.5KHzET0=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;i8;i+)/取最高位temp =dat/逐位左移dat=dat1;16if(temp)MAXDIN
22、=1;elseMAXDIN=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);/设置电源工作模
23、式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; /暂停转换17EOC=1; /转换结束START=0;/没有下降沿P1P1 |=0x00;delay(10);/产生一个低脉冲开始转换STA
24、RT=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
25、/10; /千分位init_max7219();clear_max7219();sendword(0x01,ledcodej);sendword(0x02,ledcodek);18sendword(0x03,ledcodel);sendword(0x04,ledcodem | 0x80);/向 DAC0832 输出数据void dasend(uchar v)init_dac0832();P3=v;/定时器中断 T0void timer0(void) interrupt 1/产生供给 0808 的时钟信号CLOCK=CLOCK;void main()/变量要写在最前面uchar input;/初始化 ADC0808init_adc0808();while(1)/获得电压input=adinput();/显示电压led(input);/输出 PWM 调制信号dasend(input);