直流电机调速课设报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于ATMEGA16的直流电机调速
1 设计题目
本次单片机原理与系统课程设计题目是基于ATMEGA16单片机的直流电机调速系统,基本要调节电机转速使之达到指定速度;主要使用了ATMEGA16三个定时器(计数器)分别用来定时,脉冲计数,PWM波产生。利用ATMEGA16自带的160位A/D转换采集电位器电压从而得到目标速度,用pid控制器调节输出pwm波占空比,调节直流电机的电枢电压,并用1602液晶显示器显示当前的速度和目标速度,实现负反馈电机调速。
2 设计目的
直流电机具有良好的启动性能和调速特性,对直流电机的调速在现实中有广泛的应用。这次课程设计也是对本学期学习的单片机原理,电机学,自动控制原理等知识的应用。
3 设计方案及原理
3.1 总体设计方案
本设计是基于ATMEGA16单片机的直流电机调速,通过采集电位器上的电压得到目标速度,通过定时器定时采集脉冲计数器采集的个数得到当前速度,然后通过pid控制器计算出需要输出的占空比,通过MEGA16的16位PWM发生器产生PWM 方波,输入到电机驱动模块,改变电机的电枢电压,从而控制电机的运行。
3.2 系统组成框图
本系统主要包括10位A/D转换,定时器,脉冲计数模块,PWM发生器,LCD 液晶显示模块,电机驱动模块等。系统组成框图如图1所示。
图1 系统组成框图
4 硬件设计
4.1 驱动电路
直流电机的驱动采用L298驱动芯片来驱动电机。L298N是ST公司生产的一种高电压、大电流电机驱动芯片。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。含两个H桥的高电压大电流全桥式驱动器。
图2 l298驱动电路
4.2 LCD液晶显示设计
液晶显示模块:本系统设计的显示电路由液晶显示器LCD1602取代普通的数码管完成密码显示,并伴有提示信息,方便操作。液晶显示模块如图3所示。
图3 LCD液晶显示模块
4.3 速度给定(电位器位移传感器)
用A/D采集电位器电压的方式来判断电位器的位移量百分比。这样就可以随意调节电机转速的给定量,较键盘输入的给定方式,这样更方便调节给定速度,
也更容易实现。此模块如图4所示:
图4 速度给定模块
5 软件设计
这个系统是基于Atmel 公司的AVR MAGA16单片机实现的。ATmega16是8位AVR微控制器具有16KB系统可编程Flash的8位AVR微控制器,基于增强的AVR RISC结构的低功耗CMOS微控制器。系统集成两个具有独立预分频器和比较器功能的8 位定时器/ 计数器,一个具有预分频器、比较功能和捕捉功能的16 位定时器 /计数器,四通道PWM,8路 10 位ADC等模块,正好符合本次课程设计的要求。
5.1 液晶显示程序部分
对LCD1602进行初始化。并同步显示当前速度和目标速度。
5.2 定时模块初始化
采用T/C2定时器模块的CTC模式,产生基准定时时间,作为定时对脉冲数读取和定时更新PWM占空比的控制周期。
5.3 PWM发生模块
采用16位T/C1定时器模块的相位修正PWM模式。这是一种双斜波操作,其对称性十分适合于电机控制。
5.4 脉冲计数模块
采用T/C0计数器模块,通过设置T/C0控制寄存器,使得时钟由TO引脚引入,上升沿触发。
5.5 A/D模块
采用10位A/D转换来获取电位器的电压,从而求出其位移量,得到给定的目标速度。
5.6 PID控制模块
采用增量式PID控制方法。以实现电机能快速响应并能尽量结束静差。其实现代码为:
change=(Kp*(error0-error1)+Ki*error0+Kd*(error0-2*error1+error2)); speed_control=(speed_control+ change);
程序流程图如图5所示:
6 系统仿真及实际调试
此系统软件由IAR编译完成,然后在仿真软件proteus上进行仿真。当改变电位器的位移时,目标速度发生改变,在大约1s的调整时间后,速度达到稳定,静态误差在±1左右。仿真结果如图6所示。
图6 仿真电路图
7 总结
通过这次课程设计,我得到了一次用电子技术知识、单片机知识、C语言知识等知识的一次综合应用的机会,尤其对于软硬件的综合系统控制让我对电子世界的研究建立了浓厚的兴趣,同时我也对这些方面的知识有了更深的理解。本次课程设计我是独立完成,这使我们能锻炼自己各方面的能力,并在以后的生活中加以改善。在课程设计中碰到了很多的问题,感老师的精心指导,使我能够顺利地解决问题,少走了很多弯路,最终让系统趋于完善。同时,在后续的学习过程中我会继续努力争取解决上述问题。当然,通过这次课程设计,我也发现了自身的很多不足,在以后的学习中,我会不断的完善自我,让自己的水平更上一层楼。
参考文献
[1] 王思明,金敏.单片机原理及应用系统设计[M].:科学,2012.
[2]伟.单片机C语言程序设计实训100例[M].:电子工业,1996.
[3] 谭浩强.C程序设计[M].:清华大学,2004.
附录
程序清单:
/* Include I/O definition file */
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define lcd_rs PORTA_PORTA5
#define lcd_rw PORTA_PORTA6
#define lcd_en PORTA_PORTA7
uchar table0[16]="You Set is";
uchar table1[16]="Now Speed is"; uchar table2[16]="Course Design"; uchar table3[16]="Made by huqay";
uint i,count;
uchar bm_count;
uint adc_data;
float set_speed;
float speed_control;
struct { //电机pid
int error0;
int error1;
int error2;
float change;
float Kp,Kd,Ki;
}SpeedPid;
void delay(uint k)
{
unsigned int m,n;
for(m=0;m { for(n=0;n<114;n++); } } void write_(uchar )