单片机课程设计-压控直流电机系统的设计.doc_第1页
单片机课程设计-压控直流电机系统的设计.doc_第2页
单片机课程设计-压控直流电机系统的设计.doc_第3页
单片机课程设计-压控直流电机系统的设计.doc_第4页
单片机课程设计-压控直流电机系统的设计.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

新型单片机接口器件与技术课程论文(2015-2016学年第二学期)班级: 电子信息工程131 学号: 姓名: 完成时间:2016年6月17 日压控直流电机系统摘 要在工业应用上,直流电机是电能转换装置,无刷直流电机驱动是当前节能领域的研究热点。直流电机控制器的性能决定了电机转换效率,同时也决定了电机工作的稳定性和可靠性。本次实验采用proteus仿真软件对整体仿真。首先,用电位器模拟电压的变化,并用主控芯片对其电压进行采样;示波器显示PWM波形;LED亮度反应PWM的占空比;在1602的第一行上显示当前电压;通过PWM调节直流电机的转速,并在1602上显示转速,并控制LED的亮度;可以按键控制电机的正、反、停;并设置相应的LED指示灯显示电机转动模式;并在此基础上提出了直流电机系统控制总体设计方案。关键词:直流电机;PWM;1602显示;调节转速1 方案设计与论证1.1 元器件的选取1.1.1 主控芯片:ATMEGA328上课实验使用的就是该芯片,程序编写简单易懂,仿真容易实现;并且使用库函数都是开源的,许多传感器的程序模块都可以直接利用。Proteus上的ATMEGA328P和实物的引脚编号不同:图1 proteus引脚图 1.1.2 显示屏:1602液晶屏 1602是16X2点阵的LCD液晶屏,具有价格便宜,功能强大等特点;采用4线接法,可以节省引脚,第一行用于测量电压,第二行用于转速的显示。 1.1.3 直流电机:MOTOR直流电机 Proteus上的直流电机只有MOTOR直流电机,使用方便。并且可以模拟实际的直流电机。1.1.4 直流电机驱动模块 L298模块是典型的直流电机驱动模块,使用广泛,容易实现。 1.1.5 其他 示波器、PNP(2N396)、NPN(2N394)、电感(B82432C1564K000),电阻、LED都是普通但可以满足要求的元器件。1.2 整体设计方案 调节电位器来模拟电压的变化,电位器连接单片机的A0口;用单片机9端口输出PWM波,连接的单片机端口一定是具有PWM波输出的端口(3,5,6,9,10,11);同时9连接LED模块和直流电机的使能端口;LED的亮度表示PWM波的占空比(有滤波电路),并在1602的第一行显示当前电压值;可以通过PWM波调节直流电机的转速,按键可以控制电机的正,反,停转(LED来表示电机转动的模式),并在1602的第二行显示电机的转速;连接的示波器可以直观地反映PWM波的占空比。2 系统总体结构设计 2.1 原理框图图2 原理框图压控直流电机系统由ARDUINO主控芯片、1602显示电压和转速模块、电位器调节电压采集模块、PWM电机驱动模块、PWM驱动LED模块、按键和LED指示灯模块组成,其原理框图如图2所示。 2.2 整体原理图 图3 整体原理图1、1602显示模块通过:2、3、4、5、11、12引脚与主控芯片相连;2、PWM控制LED模块通过:9引脚与主控芯片相连;3、晶振模块通过:x1、x2引脚与主控芯片相连;4、按键模块通过:8、10、13引脚与主控芯片相连;5、指示灯模块通过:A1、A2、A3引脚与主控芯片相连;6、电机模块通过:6、7、9引脚与主控芯片相连;7、电压采样模块通过:A0引脚与主控芯片相连;8、示波器模块通过:9引脚与主控芯片相连;3 各模块电路设计与实现3.1 PWM控制LED亮度 图4 LED模块三极管是放大电流,可以点亮LED;电感是通直流隔交流;极性电容是过滤交流信号,防止在PWM波在占空比过小时LED灯频闪现象。9端口输入PWM连接示波器,DC节点连接示波器;通过9和DC的对比来直观反映PWM3.2 显示模块图5 显示模块Arduino328单片机支持1602的四位总线,可以节省端口;其余端口只要按库函数的定义连接即可。3.3 直流电机控制模块图6 直流电机控制模块直流电机的转速很快,且驱动电压需要很大,单靠单片机的IO口不能驱动电机,必须使用专门的驱动模块和二极管放大链路才行。L298可以外接两个电机,本次实验通过IN1和IN2的0值1来控制电机的正反转。具体通过按键和程序控制。3.4 按键模块图7 按键模块按键通过上拉电阻连接,没按时IO口为高电平,按下时IO口为低电平。相应的LED共阴接法,单片机IO口输出低电平点亮LED。4 软件仿真实验4.1 软件初始化流程图图8 软件初始化流程图各引脚和数值初始设置在setup()函数中只执行一次。主要定义的变量有LED指示灯,按键,电位器采样引脚,PWM输出引脚,以及相应的1602显示初始字符等。4.2 采集电压流程图图9 采集电压流程图当调用analogRead()函数时,采样到的电压是10位数据,必须给一个float变量;由于要转换成05V的电压,所以可以根据公式:当前电压值=采样的电压值/1023*5来计算得到,还要无限循环采样。4.3 计算直流电机转速流程图图10 计算直流电机转速流程图和电压采集流程差不多,在proteus中查看直流电机属性可知:它的最大转速是120r/m,所以可以先得出在05V的电压值,再根据公式:转速=当前电压值*120/5得到对应电压的转速,并且需要无限循环采样。4.4 输出PWM波流程图图11 输出PWM波流程图这里很关键:调用analogRead()函数得到的是01023十位的数值,而analogWrite(,)函数必须写入八位的数值给一个引脚,所以必须把十位转换成八位数值,可以通过采样的电压值直接除以4写入一个引脚(上课的时候使用的是把采样的数值左移两位实现,和除以4的效果一样)4.5 按键模块流程图图12 按键模块流程图按键流程图相应比较简单,只是要注意:当判断按键按下时要用digitalRead(K1)=LOW作为判断条件。还有L298模块只要给IN1和IN2输入不同的高低电平就可以实现正(IN1=1;IN2=0);反(IN1=0;IN2=1);停(IN1=0;IN2=0)。4.6 仿真图图13 正转仿真图(U=2.00v,S=48.09r/m)图14 PWM (U=2.00v,S=48.09r/m)图15 正转仿真图(U=4.00v,S=96.07r/m)图16 PWM(U=4.00v,S=96.07r/m)通过proteus仿真可以直观地看到:当手动调节电位器的阻值时,1602的第一行会显示电位器当前的电压值,并且放置了一个电压表可以清楚地看到电压采样的误差;对于一定的电压值可以看到示波器中PWM波形的占空比和LED的亮度;当相应的按键按下时,可以看到对应的LED指示灯会点亮,此时可以调节电位器可以明显的看到:直流电机会随着电位器对应电压的大小而产生不同的转速,在1602的第二行可以精准地反应当前直流电机的这转速。5 系统测试方案与测试结果分析表1 仿真测试结果电机转向当前电压(V)电机转速(r/m)顺时针Voltage=1VVoltage=2VVoltage=3VVoltage=4VVoltage=5VSpeed:24.05r/mSpeed:48.09r/mSpeed:72.02r/mSpeed:96.07r/mSpeed:120.0r/m逆时针Voltage=1VVoltage=2VVoltage=3VVoltage=4VVoltage=5VSpeed:-24.05r/mSpeed:-48.09r/mSpeed:-72.02r/mSpeed:-96.07r/mSpeed:-120.0r/m停止00从仿真结果可以得出:在仿真中电机的转速和电压成正比,正转和反转只是方向相反,转速在同一电压下相同;在实际情况中一定会有误差,所以还有许多有待改进的地方。6 结论1602可以显示电位器改变的电压,并与直流电压表的误差在0.01v以内;LED直观地反映PWM波的变化,并且过滤了交流分量,并无频闪现象;直流电机的转速也精准地显示在1602上。总体来说,本次设计还算成功,但还有待改进的地方:1、 可以采用电压多点测量来同时控制多个电机;2、 可以在电机上添加散热电路;3、 在切换电机转动模式时可以适当编写缓冲程序,防止电机烧掉随着电子技术不断发展以及直流调速系统的不断完善,本人相信在未来的实际生产中,这种经济性好、可靠性高的直流电机控制系统在不同领域的应用前景将会越来越好。参考文献:1魏再平基于STM32的电动摩托车无刷直流电机控制器西华大学,20112王晓明电动机的单片机控制北京:北京航空航天大学出版社,2002153周利强永磁无刷直流电机驱动的研究浙江大学,20064陈隆昌,阎治安,刘新正控制电机(第三版)西安:西安电子科技大学出版社,2000,1-105夏红光新型电机实验系统设计浙江工业大学,20096刘刚,王志强,房建成永磁无刷直流电机控制技术与应用北京:机械工业出版社,2008,51 17李丹基于CPLD和AVR无刷直流电机控制器的研究大连理工大学,20058孙心华三相无刷直流电机控制系统设计广东工业大学,20089周广铭基于DSP的无刷直流电机控制系统设计大连理工大学,200810王跃龙无刷直流直线电机驱动列车的研究与特性分析太原理工大学. 11李强无位置传感器无刷直流电动机运行理论和控制系统研究东南大学 .附录一 电路图(与之前的原理图一样,在此不再附上,读者可自行查看)附录二 源程序20/任务1:通过按钮控制电机启停和正反转,通过电位计调节电机转速,/并在1602上显示直流电机的转速;/任务2:1602显示当前电压,示波器显示PWM,LED显示亮度。/元器件:1602液晶屏、示波器、ATMEGA328P、L298、MOTOR直流电机、/PNP(2N396)、NPN(2N394)、电感(B82432C1564K000)/ include the library code:#include /申明1602液晶的函数库int potpin = 0; / 申明电位计连在模拟端口0int yled=A1;/正转指示灯int gled=A2;/反转指示灯int bled=A3;/暂停指示灯int PWMpin = 9; / 申明LED灯连在数字端口9;数字端口9输出PWM信号, /控制电机转速int A=6; /数字端口2、3控制电机启停和转向int B=7; int K1=8; /把K1(正转)按钮连在数字端口8int K2=10; /把K2(反转)按钮连在数字端口10int K3=13; /把K3(停止)按钮连在数字端口13int i=0; /标识电机显示的模式 /* LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground * LCD VSS pin to ground * LCD VCC pin to 5V * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3)*/申明1602液晶的11个引脚所连接的Arduino数字端口LiquidCrystal lcd(12, 11, 5, 4, 3, 2); /初始化void setup() pinMode(K1,INPUT);/把数字端口8 10 13设置输入模式 pinMode(K2,INPUT); pinMode(K3,INPUT); pinMode(A,OUTPUT);/把数字端口6 7设置输出模式 pinMode(B,OUTPUT); pinMode(yled,OUTPUT);/指示灯为输出模式 pinMode(gled,OUTPUT);/指示灯为输出模式 pinMode(bled,OUTPUT);/指示灯为输出模式 digitalWrite(yled,HIGH);/默认输出高电平 digitalWrite(gled,HIGH);/默认输出高电平 digitalWrite(bled,HIGH);/默认输出高电平 lcd.begin(16,2); /初始化1602液晶工作模式 /定义1602液晶显示范围为2行16列字符 lcd.setCursor(0,0); /把光标定位在第0行,第0列 lcd.print(Voltage =); /显示“Voltage =” lcd.setCursor(15,0); /把光标定位在第0行,第15列 lcd.print(V); /显示“V” lcd.setCursor(0,1); /把光标定位在第0行,第1列 lcd.print(Speed:00.00); /显示“Speed:00.00” lcd.setCursor(13,1); /把光标定位在第1行,第13列 lcd.print(r/m); /显示“r/m”/黄灯亮,绿灯灭,蓝灯灭void zhengzhuan() digitalWrite(yled,LOW); digitalWrite(gled,HIGH); digitalWrite(bled,HIGH); /黄灯灭,绿灯亮,蓝灯灭 void fanzhuan() digitalWrite(yled,HIGH); digitalWrite(gled,LOW); digitalWrite(bled,HIGH); /黄灯灭,绿灯灭,蓝灯亮 void zhanting() digitalWrite(yled,HIGH); digitalWrite(gled,HIGH); digitalWrite(bled,LOW); /主程序void loop() /把电位计的电压值采集为10位数字量,并赋值给变量sensorValue, /数值范围为01023 float sensorValue = analogRead(potpin); /把数值范围为01023的数字量正比转换为实测电压值(05v) float voltage=sensorValue/1023*5; /proteus中的直流电机最大转速是120r/m, /所以1602显示的实际转速是0120之间的值 float speed=voltage*120/5; /把光标定位在第0行,第10列 lcd.setCursor(10,0); lcd.print(voltage);/显示实测电压值 /把数值范围为01023的数字量正比转换为PWM信号的脉宽等份值0255 sensorValue = (int)sensorValue/4; /输出PWM信号,驱动LED

温馨提示

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

评论

0/150

提交评论