ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:117.89KB ,
资源ID:11773872      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11773872.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(直流电机调速课设报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

直流电机调速课设报告.docx

1、直流电机调速课设报告基于ATMEGA16的直流电机调速1 设计题目本次单片机原理与系统课程设计题目是基于ATMEGA16单片机的直流电机调速系统,根本要求是调节电机转速使之到达指定速度;主要使用了ATMEGA16三个定时器计数器分别用来定时,脉冲计数,PWM波产生。利用ATMEGA16自带的160位A/D转换采集电位器电压从而得到目标速度,用pid控制器调节输出pwm波占空比,调节直流电机的电枢电压,并用1602液晶显示器显示当前的速度和目标速度,实现负反应电机调速。 2 设计目的直流电机具有良好的启动性能和调速特性,对直流电机的调速在现实中有广泛的应用。这次课程设计也是对本学期学习的单片机原

2、理,电机学,自动控制原理等知识的应用。3 设计方案及原理3.1 总体设计方案本设计是基于ATMEGA16单片机的直流电机调速,通过采集电位器上的电压得到目标速度,通过定时器定时采集脉冲计数器采集的个数得到当前速度,然后通过pid控制器计算出需要输出的占空比,通过MEGA16的16位PWM发生器产生PWM方波,输入到电机驱动模块,改变电机的电枢电压,从而控制电机的运行。3.2 系统组成框图本系统主要包括10位A/D转换,定时器,脉冲计数模块,PWM发生器,LCD液晶显示模块,电机驱动模块等。系统组成框图如图1所示。图1 系统组成框图4 硬件设计4.1 驱动电路直流电机的驱动采用L298驱动芯片来

3、驱动电机。L298N是ST公司生产的一种高电压、大电流电机驱动芯片。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器。图2 l298驱动电路4.2 LCD液晶显示设计液晶显示模块:本系统设计的显示电路由液晶显示器LCD1602取代普通的数码管完成密码显示,并伴有提示信息,方便操作。液晶显示模块如图3所示。图3 LCD液晶显示模块4.3 速度给定电位器位移传感器用A/D采集电位器电压的方式来判断电位器的位移量百分比。这样就可以随意调节电机转速的给定量,较键盘输入的给定方式,这样更方便调节给

4、定速度,也更容易实现。此模块如图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

5、定时器模块的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*

6、(error0-2*error1+error2);speed_control=(speed_control+ change);程序流程图如图5所示: 图5 程序流程图6 系统仿真及实际调试此系统软件由IAR编译完成,然后在仿真软件proteus上进行仿真。当改变电位器的位移时,目标速度发生改变,在大约1s的调整时间后,速度到达稳定,静态误差在1左右。仿真结果如图6所示。图6 仿真电路图7 总结通过这次课程设计,我得到了一次用电子技术知识、单片机知识、C语言知识等知识的一次综合应用的时机,尤其对于软硬件的综合系统控制让我对电子世界的研究建立了浓厚的兴趣,同时我也对这些方面的知识有了更深的理解。本

7、次课程设计我是独立完成,这使我们能锻炼自己各方面的能力,并在以后的生活中加以改善。在课程设计中碰到了很多的问题,感谢老师的精心指导,使我能够顺利地解决问题,少走了很多弯路,最终让系统趋于完善。同时,在后续的学习过程中我会继续努力争取解决上述问题。当然,通过这次课程设计,我也发现了自身的很多缺乏,在以后的学习中,我会不断的完善自我,让自己的水平更上一层楼。参考文献1 王思明,张金敏.单片机原理及应用系统设计M.北京:科学出版社,2021.2 彭伟.单片机C语言程序设计实训100例M.北京:电子工业出版社,1996. 3 谭浩强.C程序设计M.北京:清华大学出版社,2004.附录程序清单:/* I

8、nclude 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 table016=You Set is;uchar table116=Now Speed is;uchar table216=Course Design;uchar table316=Made by huqay;uint i

9、,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;mk;m+) for(n=0;n114;n+); void write_com(uchar com) lcd_rs=0; PORTC=com; delay(5); lcd_en=1; del

10、ay(5); lcd_en=0;void write_data(uchar data) lcd_rs=1; PORTC=data; delay(5); lcd_en=1; delay(5); lcd_en=0;void lcd_init() lcd_en=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);void lcd_write(uchar a,uchar b,uchar c,uchar d,uchar e) uchar num=0; if(e=1) table012=a+0; table013=b+

11、0; table014=c+0; table015=d+0; write_com(0x80); for(num=0;num16;num+) write_data(table0num); delay(5); else table112=a+0; table113=b+0; table114=c+0; table115=d+0; write_com(0x80+0x40); for(num=0;num16;num+) write_data(table1num); delay(5); void data_in(int data,uchar e) uchar a,b,c,d; a=data/1000;

12、b=(data/100)%10; c=(data/10)%10; d=data%10; lcd_write(a,b,c,d,e);void first_lcd() uchar num=0; for(num=0;num16;num+) write_data(table2num); delay(5); write_com(0x80+0x40); for(num=0;num16;num+) write_data(table3num); delay(5); for(num=0;num20;num+) delay(100); void speed_pid() SpeedPid.error2=SpeedP

13、id.error1; SpeedPid.error1=SpeedPid.error0; SpeedPid.error0=(int)(set_speed-bm_count); SpeedPid.Kp=10.7; SpeedPid.Ki=0.95; SpeedPid.Kd=0; SpeedPid.change=(SpeedPid.Kp*(SpeedPid.error0-SpeedPid.error1)+SpeedPid.Ki*SpeedPid.error0+SpeedPid.Kd*(SpeedPid.error0-2*SpeedPid.error1+SpeedPid.error2); speed_

14、control=(speed_control+SpeedPid.change); if(speed_control1023) speed_control=1023; void port_init() DDRA=0XFE; PORTA=0X00; DDRB=0XFE; PORTB=0X00; DDRC=0XFF; PORTC=0XFF; DDRD=0XFF; PORTD=0X00;void adc_init() ADMUX=0X40;/ SFIOR=0X00;/连续转换 ADCSRA=0XEE;/单次转换void timer() TCCR2=0X1D;/1024分频,ctc模式 TCNT0=0X

15、00; OCR2=0XFF;/4ms定时 TIMSK=0X80;/比拟中断翻开void pwm_init() TCCR1A=0X83; TCCR1B=0X03;void counter_init() TCCR0=0X07;/t0引脚引入,上升沿触发 TCNT0=0X00; TIMSK|=0X01;void main() port_init(); lcd_init(); adc_init(); timer(); pwm_init(); counter_init(); first_lcd(); SREG=0X80;/开全局中断 while(1) ; #pragma vector = TIMER2_

16、COMP_vect_interrupt void T2_CTC( void ) count+; if(count2) count=0; bm_count=TCNT0; TCNT0=0; speed_pid(); OCR1A=adc_data; data_in(bm_count,2);#pragma vector = TIMER0_OVF_vect_interrupt void T0_OVF( void ) TCNT0=0X00;#pragma vector = ADC_vect_interrupt void ADC_get( void ) adc_data=ADC; set_speed=(float)adc_data/1024)*100; data_in(uint)set_speed,1); ADCSRA_ADSC=1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1