设计基于单片机的洗衣机控制器_第1页
设计基于单片机的洗衣机控制器_第2页
设计基于单片机的洗衣机控制器_第3页
设计基于单片机的洗衣机控制器_第4页
设计基于单片机的洗衣机控制器_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、摘要:本设计是以AT128作为核心元件,由于洗衣机的基本功能是对衣物的洗涤,所以,关键在于进行洗衣程序的控制。从这一角度出发,对洗衣机的功能进行分析,设计的洗衣机的主要功能有一下四项:进水,电机正反转动洗衣工作程序,排水和电机单向转动脱水关键字:AT128、洗衣机、控制电路 设计基于单片机的洗衣机控制器1 电路原理分析1.1 单片机ATmega128引脚图本设计采用的是ATmega128单片机,此单片机内部带有128KB的系统内可编程Flash程序存储器,具有在写的过程中还可以读的能力,即同时读写(RWW);4KB的EEPROM;4KB的SRAM;53个通用的I/O端口线;32个通用工作寄存器

2、;实时时钟(RTC);4个灵活的具有比较模式和PWM功能的定时/计数器(T/C);2个USART;面向字节的两线端口(TWI);8通道10位ADC;可选的可编程增益;片内振荡器的可编程看门狗定时;串行外围设备接口(SPI);与IEEE1149.1规范兼容的JTAG测试口,此接口同时还可以用于片上调试;6种可以通过软件选择的省电模式。可以用于本设计,其引脚图如图1-1所示。图1-1 ATmega128的引脚图1.2进排水显示电路 采用2个LED分别作进水,排水,黄灯表示进水,绿灯表示排水。通过单片机的PE口的PE6,PE7输出电平来控制。其电路图如图1-2所示。 图1-21.3洗衣时间显示电路

3、通过PD的低四位的扫描来选择时间显示用的位数码管,通过PF口来来扫描每个数码管的七段显示码,该程序设计运用到定时器来控制时间。如图1-3图1-31.4电机驱动洗衣脱水电路 采用专用芯片L298N作为电机驱动芯片。L298N是内含两个H桥的高电压大电流双全桥式驱动器,是性能优越的小型直流电机驱动芯片之一 。接受标准TTL逻辑电平信号,可驱动电压46 V、每相2.5 A及以下的减速电机或者是步进电机,在4-46V的电压下,可以提供2A的驱动电流。它具有两个使能输入端, 在不受输入信号影响的情况下允许或禁止器件工作,每个桥对的下部三极管的发射极接在一起并引出,用以外接检测电阻,它设置了一附加电源输入

4、端使逻辑部分在低电压下工作。L298还有过热自动关断功能,并有反馈电流检测功能,符合电机驱动的需要。单片及通过控制其IN1,IN2引脚来控制电机的转动方向,PWM波从ENA引脚输入。试验中主要用到L298功能如下EN A(B) IN1(IN3) IN2(IN4) 电机运行情况 H H L 正转 H L H 反转 H 同IN2(IN4) 同IN1(IN3) 快速停止 L X X 停止其接线如图1-4图1-42软件流程分析该流程经历了两个洗衣和一个脱水过程,通过两个定时器控制,一个控制洗衣时间,一个控制电机转动。其流程如下如图2图23调试分析先设计通过单片机控制一个电机运行来进行洗衣动作,开始设计

5、时未在程序中加入延时程序,造成了一些干扰,后经过调试预分析加入了延时程序,使步进电机在变速时可以稳定工作。后经过观察,可以充分利用L298N的引脚,于是我们设计了两个电机的对称工作模式,即两个电机对称工作。调试主要分为软件调试仿真和硬件验证。,定时器初始化以及端口初始化通过其:ToolsàApplicastion Builder 生成,4 仿真运行电路图经调试编译后,加载到protues仿真电路图中,其结果如图4-1所示。图4-15 小结与体会通过此课程设计使我们对AVR单片机系列中的ATmega128单片机有了更深一步的了解,在吸收了老师课堂讲的理论知识的同时,更进一步达到了学以致

6、用的目的,将课本所学的知识用到了实践上,充分锻炼了自己的动手能力,。在编程时遇到困难也学会了如何利用编译软件进行调试,达到最终期望的结果。同时,也达到了相互合作的目的,增进了同学间的合作友谊。 附录程序/ICC-AVR application builder : 2009-4-16 下午 07:44:53/ Target : M128/ Crystal: 4.0000Mhz#include <iom128v.h>#include <macros.h>unsigned char seven_seg10=0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,

7、0X07,0X7f,0X6f;/*0-9的字符表,送PF口显示*/unsigned char scan4=0Xf7,0Xfb,0Xfd,0Xfe;/*选择扫描显示数码管,送PD口选数码管*/unsigned char turn4=0x01,0x00,0x02,0x00;typedef struct char minute;char second; time; /定义时钟变量time now;typedef struct char control; cos; /定义时钟变量cos now1;unsigned char k=0;void port_init(void) PORTA = 0xFF;

8、DDRA = 0x00; PORTB = 0xFF; DDRB = 0xFF; PORTC = 0xFF; /m103 output only DDRC = 0x00; PORTD = 0xFF; DDRD = 0xFF; PORTE = 0xFF; DDRE = 0xFF; PORTF = 0xFF; DDRF = 0xFF; PORTG = 0x1F; DDRG = 0x00;/TIMER0 initialisation - prescale:256/ WGM: CTC/ desired value: 100Hz/ actual value: 99.522Hz (-0.5%)void ti

9、mer0_init(void) TCCR0 = 0x00; /stop ASSR = 0x00; /set async mode TCNT0 = 0x64; /set count OCR0 = 0x9C; TCCR0 = 0x0E; /start timerunsigned char timer0_tick;#pragma interrupt_handler timer0_comp_isr:16void timer0_comp_isr(void) /compare occured TCNT0=OCR0 TCNT0 = 0x64; /set count OCR0 = 0x9C; timer0_t

10、ick+; /*正常计时*/ if(timer0_tick=100) /PORTD=PORTD; timer0_tick=0;now.second+;if(now.second=60) now.minute+;now.second=0;if(now.minute=1) now.minute=0;TCCR0 = 0x00; /TIMER2 initialisation - prescale:256/ WGM: Normal/ desired value: 100Hz/ actual value: 100.160Hz (0.2%)void timer2_init(void) TCCR2 = 0x0

11、0; /stop TCNT2 = 0x64; /setup OCR2 = 0x9C; TCCR2 = 0x04; /startunsigned char fast=0;#pragma interrupt_handler timer2_comp_isr:10void timer2_comp_isr(void) /compare occured TCNT2=OCR2 TCNT2 = 0x64; /setup OCR2 = 0x9C; fast+; if(fast=100) fast=0; now1.control+; if(now1.control<=5) PORTE=0x80;else P

12、ORTE=0x00;if(now1.control>5&&now1.control<20)PORTE=turnnow1.control%4;if(now1.control>=20&&now1.control<=25)PORTE=0x40;if(now1.control>=25&&now1.control<=30) PORTE=0x80;if(now1.control>30&&now1.control<45)PORTE=turnnow1.control%4;if(now1.contro

13、l>=45&&now1.control<60)PORTE=0x41;if(now1.control=60) PORTE=0x00; TCCR2 = 0x00; /call this routine to initialise all peripheralsvoid init_devices(void) /stop errant interrupts until set up CLI(); /disable all interrupts XDIV = 0x00; /xtal divider XMCRA = 0x00; /external memory port_ini

14、t(); timer0_init(); timer2_init(); MCUCR = 0x00; EICRA = 0x00; /extended ext ints EICRB = 0x00; /extended ext ints EIMSK = 0x00; TIMSK = 0x82; /timer interrupt sources ETIMSK = 0x00; /extended timer interrupt sources SEI(); /re-enable interrupts /all peripherals are now initialisedvoid display(void)

15、 PORTD=scank; switch(k) case 0 : PORTF=seven_segnow.second%10; break; case 1 : PORTF=seven_segnow.second/10; break; case 2 : PORTF=seven_segnow.minute%10; break; case 3 : PORTF=seven_segnow.minute/10; break; k+;if(k=4) k=0;delay(20000,10000);void delay(int d1,int d2) unsigned char i,j;i=d1;while(i-) j=d2; while(j-); void main(void) now.second=00,now.minute=00; timer0_tick

温馨提示

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

评论

0/150

提交评论