基于某ATMega16控制直流电动机.docx
《基于某ATMega16控制直流电动机.docx》由会员分享,可在线阅读,更多相关《基于某ATMega16控制直流电动机.docx(12页珍藏版)》请在冰豆网上搜索。
![基于某ATMega16控制直流电动机.docx](https://file1.bdocx.com/fileroot1/2023-1/28/dc18f2fd-2909-478f-a509-8c0fbe83353a/dc18f2fd-2909-478f-a509-8c0fbe83353a1.gif)
基于某ATMega16控制直流电动机
电动机控制期末论文
论文题目:
基于ATMega16-控制直流电动机
摘要
本文主要介绍基于ATMega16单片机的直流电动机控制,众所周知的,直流电动机在控制上较于步进电机有一定的优势的,其具有良好的起动、制动和调速性能,因此使得直流电动机得到广泛的应用。
关键词:
ATMega16单片机直流电动机正反转控制原理
Abstract
ThispaperdescribestheDCmotorcontrolbasedonATMega16microcontroller,thewell-known,DCmotorcontrolthaninthesteppermotorhassomeadvantages,ithasagoodstart,brakingandspeedcontrolperformance,theDCmotorhasbeenwidelyusedinhigh-performanceelectricdrivesystem.
Keywords:
ATMegamicrocontrollerDCmotorControlprinciple
摘要II
AbstractII
第一章绪论1
1.1直流电机发展1
1.2直流电机的应用前景2
1.3直流电动机特点与构造2
1.4设计容3
第二章ATMage16单片机介绍4
2.1Atmega16主要功能4
第三章硬件系统设计6
3.1直流电动机的控制原理6
3.2电机控制原理图8
参考文献10
附录:
11
第一章绪论
1.1直流电机发展
1840年Wheatsone开始提出和制作了略具雏形的直线电机。
从那时至今,在160多年的历史中,直线电机经历了三个时期。
(1)1840~1955年为探索实验时期;
从1840年到1955年的116年期间,直线电机从设想到实验到部分实验性应用,经历了一个不断探索,屡遭失败的过程。
自从Wheatsone提出和试制了直线电机以后,最早明确地提到直线电机文章的是1890年美国匹兹堡市的市长,在他所写的一篇文章中,首先明确地提到了直线电机以及它的专利。
然而,由于当时的制造技术、工程材料以及控制技术的水平,在经过断断续续20多年的顽强努力后,最终却未能获得成功。
在1840~1955年期间,是直线电机探索实验和部分实验应用时期,在直线电机与旋转电机的相互竞争中,由于直线电机的成本和效率方面没有能够战胜旋转电机,或者说,直线电机还没能找到唯独它能解决问题的领域,以及直线电机在设计方面也没有突破性的成功,所以直线电机在这一时期始终未能得到真正的应用。
(2)1956~1970年为开发应用时期;
自1955年以来,直线电机进入了全面的开发阶段,特别是该时期的控制技术和材料的惊人发展,更加助长了这种势头。
在这段时期,申请直线机的专利件数也开始急速增加,该时期直线电机专利的增长率超过了所有其他技术领域的平均增长率。
到1965年以后,随着控制技术和材料性能的显著提高,应用直线电机的实用设备被逐步开发出来,例如采用直线电机的MHD泵、自动绘图仪、磁头定位驱动装置、电唱机、缝纫机、空气压缩机、输送装置等。
(3)1971年至今为实用商品时期;
从1971年开始到目前的这个阶段,直线电机终于进入了独立的应用时代,在这个时代,各类直线电机的应用得到了迅速的推广,制成了许多具有实用价值的装置和产品,例如直线电机驱动的钢管输送机、运煤机、起重机、空压机、冲压机、拉伸机、各种电动门、电动窗、电动纺织机等等。
特别可喜的是利用直线电机驱动的磁悬浮列车,其速度已超500km/h,接近了航空的飞行速度,且试验行程累计已达数十万千米。
1.2直流电机的应用前景
直流电机(无刷直流电机)是近几年来小电机行业发展最快的品种之一,随着视听产品小、轻、薄化和家电产品的静音节能化以及豪华型轿车需求量增多,直流电动机需要量迅速增加;直流电机用电子换向替代了电刷和换向器,具有高可靠、高效率、寿命长、调速方便、低噪音等优点。
直流电机具有体积小、重量轻、效率高、调速性能好、转动惯量小、没有励磁损耗等问题,因此在各个领域具有广泛的应用前景。
国近年来在直流电机的设计及控制方面有很多的研究,但与国外成熟的产品相比还有很多地方值得提高,并且很多无刷直流电机生产商都没有给出具体的控制方案,因此在无刷直流电机控制方面的研究是非常有必要的。
一方面,直流电机与其他异步电机相比具有明显的优势如反馈装置更简单、功率密度更高、输出转矩更大、并且电机和逆变器各自的潜力得到充分的发挥,因此无刷直流电机的应用和研究得到了前所未有的重视。
据资料统计表明直流电机的使用每年以较高比例增长。
另一方面无刷直流电机与有刷直流电机相比有更多的优点如电机本体结构简单、运行时无火花、电磁干扰小,无噪声等,因此具备广泛应用前景。
1.3直流电动机特点与构造
直流电动机特点:
(1)调速性能好。
所谓“调速性能”,是指电动机在一定负载的条件下,根据需要,人为地改变电动机的转速。
直流电动机可以在重负载条件下,实现均匀、平滑的无级调速,而且调速围较宽。
(2)起动力矩大。
可以均匀而经济地实现转速调节。
因此,凡是在重负载下起动或要求均匀调节转速的机械,例如大型可逆轧钢机、卷扬机、电力机车、电车等,都用直流电动机拖动。
直流电动机构造:
直流电动机分为两部分:
定子与转子。
记住定子与转子都是由那几部分构成的,注意:
不要把换向极与换向器弄混淆了,记住他们两个的作用。
定子包括:
主磁极,机座,换向极,电刷装置等。
转子包括:
电枢铁芯,电枢绕组,换向器,轴和风扇等。
1.4设计容
本文设计主要对电机实现正反转功能,通过按键开关来控制电机正反转。
以达到设计要求。
第二章ATMage16单片机介绍
2.1Atmega16主要功能
AVR单片机主要有ATtiny、AT90和ATmega三种系列,其结构和基本原理都相类似。
本次设计所用到的Atmega16L芯片,在这里作为电机控制的核心部件。
它是一种具有40引脚的高性能、低功耗的8位微处理器。
其功能特性如下[4]:
(1)8位CPU;
(2)先进的RISC结构:
131条指令–大多数指令执行时间为单个时钟周期,32个8位通用工作寄存器,全静态工作;
(3)非易失性数据和程序存储器:
16K字节的系统可编程Flash,擦写寿命可达到10,000次以上。
具有独立锁定位的可选Boot代码区,通过片上Boot程序实现系统编程;
(4)可通过JTAG接口实现对FLASH、EEPROM的编程;
(5)32个可编程的I/O引线,40引脚PDIP封装;
(6)两个具有独立预分频器和比较器功能的8位定时器/计数器,一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器;
(7)片/片外中断源;
(8)具有一个10位的AD转换器,能对来自端口A的8位单端输入电压进行采样。
(9)工作电压:
2.7-5.5V。
速度等级:
0-8MHz;
AVR单片机的主要特点如下:
1.片集成可擦写10000次以上的Flash程序存储器。
由于AVR采用16位的指令,所以一个程序存储器的存储单元为16位,AVR的数据存储器还是以8个Bit(位)为一个单元,因此AVR还是属于8位单片机。
2.高度(LOCK)。
可多次擦写的FLASH具有多重密码保护锁死(LOCK)功能,因此可低成本高速度地完成产品商品化,并且可多次更改程序(产品升级)而不必浪费1C或电路板,大大提高了产品的质量及竞争力。
3.超功能精简指令。
具有32个通用作寄存器(相当于8051中的32个累加器),克服了单一累加器数据处理造成的瓶须现象,128~4K字节SRAM可灵活使用指令计算,并可用功能很强的C语言编程,易学、易写、易移植。
4.程序写入器件可以并行写入(用编程器写入),也可使用串行在线编程(ISP)方法下载写入,也就是说不必将单片机芯片从系统上拆下,拿到万用编程器上烧写,而可直接在电路板上进行程序的修改、烧写等操作,方便产品升级,尤其是采用SMD封装,更利于产品微型化。
图2-1
2.2Atmega16引脚功能
Atmega16L双列直插式(PDIP)引脚如图2-1
引脚功能简述如下:
A/VCC:
模拟/数字电源;
AREF:
A/D转换参考电压;
XTAL1/2:
晶振;
RESET:
复位;
AREF:
A/D转换参考电压;
PA~PD:
双向I/O口;
TXD:
USART输出引脚;
RXD:
USART输入引脚;
OC1A:
PWM波形输出端;
综合以上所述,正因为ATMEGA16单片机的先进性,本设计选用该型号的单片机。
第三章硬件系统设计
经过对ATmega16等的总体了解和掌握以及对各种元器件和电路图的分析和比较后,现在就进入硬件电路的设计。
图3-1直流电动机模型
3.1直流电动机的控制原理
图3-1是一个最简单的直流电动机模型。
在一对静止的磁极N和S之间,
装设一个可以绕Z-Z'轴而转动的圆柱形铁芯,在它上面装有矩形的线圈abcd。
这个转动的部分通常叫做电枢。
线圈的两端a和d分别接到叫做换向片的两个半圆形铜环1和2上。
换向片1和2之间是彼此绝缘的,它们和电枢装在同一根轴上,可随电枢一起转动。
A和B是两个固定不动的碳质电刷,它们和换向片之间是滑动接触的。
来自直流电源的电流就是通过电刷和换向片流到电枢的线圈里。
当电刷A和B分别与直流电源的正极和负极接通时,电流从电刷A流入,而从电刷B流出。
这时线圈中的电流方向是从a流向b,再从c流向d。
我们知道,载流导体在
图3-2换向器在直流电机中的作用
磁场中要受到电磁力,其方向由左手定则来决定。
当电枢在图3-2(a)所示的位置时,线圈ab边的电流从a流向b,用表示,cd边的电流从c流向d,用⊙表示。
根据左手定则可以判断出,ab边受力的方向是从右向左,而cd边受力的方向是从左向右。
这样,在电枢上就产生了反时针方向的转矩,因此电枢就将沿着反时针方向转动起来。
当电枢转到使线圈的ab边从N极下面进入S极,而cd边从S极下面进入N极时,与线圈a端联接的换向片1跟电刷B接触,而与线圈d端联接的换向片2跟电刷A接触,如图7-5(b)所示。
这样,线圈的电流方向变为从d流向c,再从b流向a,从而保持在N极下面的导体中的电流方向不变。
因此转矩的方向也不改变,电枢仍然按照原来的反时针方向继续旋转。
由此可以看出,换向片和电刷在直流电机中起着改换电枢线圈中电流方向的作用。
3.2电机控制原理图
电机通过ATMega16单片机进行控制,其控制框图如图3-3示:
图3-3
具体如下图示:
结束语
通过本次课程设计,让我明白了许多在课本之外的东西,也让我更加深刻的体会到知识只有运用到生活,结合了生活才有无限的创造力,才能实现知识的价值。
我在设计之初所遇到的问题应该也会是大部分初学者都会遇到了问题,我通过查阅书籍资料,请教同学而逐一解决问题的过程学会了很多东西。
因此我对帮助我的同学表示万分的感谢!
同时论文中的很多材料取于相关书籍和互联网,也向相关资料的作者表示衷心的感谢。
由于我的能力有限,所以有的地方会存在错误,恳请老师批评指正,感谢老师!
参考文献
[1]王晓明电动机的单片机控制[M],:
航空航天大学,2002
[2]文AVR单片机C语言入门指导,:
清华大学,2003
[3]丁化成等AVR单片机应用设计[M],:
航空航天大学出版,2002.
[4]谭浩强C语言程序设计(第五版),:
清华大学,2009.1
[5]《ATMega16用户手册》
附录:
程序设计框图:
程序:
/*********************************************************************************
K1键为开始,K2键为电机正转,K3键为电机反转
********************************************************************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/**********************************************
1ms延时函数
计算方法:
计数个数(y)=延时时间*晶振频率/6-1
***********************************************/
voiddelay(uintx)//3.6864M晶振为1ms
{
uinty;
while(x--)
for(y=0;y<613;y++);
}
/*********************************************
IO口初始化
************************************************/
voidinit_IO(void)
{
DDRA=0x00;
PORTA=0xff;//PORTA做输入上拉电阻
DDRD|=BIT(6);
PORTD&=~BIT(6);
DDRD|=BIT(7);
PORTD&=~BIT(7);
DDRD|=BIT(4);
PORTD&=~BIT(4);//PORTD的4,6,7口做输出
DDRD&=~BIT
(2);
PORTD|=BIT
(2);
}
/******************************************
键盘扫描程序
快速PWM模式下TOP值的计算方法
输出频率=晶振频率/分频数*(1+TOP)
********************************************/
voidkeyscan(void)
{
ucharkey;
key=PINA;//从PINA读取数据
if(key==0xef)//按下K1键,电机全速正转
{
TCCR1B=0x00;
TCCR1A=0x00;//关闭定时器1
PORTD|=BIT(4);//把电机使能位置一
PORTD|=BIT(6);
PORTD&=~BIT(7);//电机正转A=1,B=0
while(PINA==0xef);//等待松开按键
}
if(key==0xdf)//按下K2键电机正转
{
TCCR1B=0x00;
TCCR1A=0x00;//关闭定时器1
PORTD|=BIT(4);
PORTD|=BIT(6);
PORTD&=~BIT(7);//A=1,B=0电机正转
while(PINA==0xdf);
}
if(key==0xbf)//按下K3键电机全速反转
{
TCCR1B=0x00;
TCCR1A=0x00;//关闭定时器1
PORTD|=BIT(4);
PORTD|=BIT(7);
PORTD&=~BIT(6);//A=0,B=1电机反转
while(PINA==0xbf);
}
}
/***********************************************************
主函数
************************************************************/
voidmain(void)//主函数
{
init_IO();//IO口初始化
while
(1)
{
keyscan();//按键扫描
}
}