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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(基于自由摆的平板控制系统.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于自由摆的平板控制系统.docx

1、基于自由摆的平板控制系统2011年全国大学生电子设计竞赛设计(论文)报告基于自由摆的平板控制系统(日 期)摘 要摘 要:本自由摆的平板控制系统采用STC12C5A60S2单片机作为主控系统,L298N作为电机驱动模块,STC12C5A60S2单片机通过L298N驱动模块驱PK545-NAC-C29步进机,使步进机上的平板随着摆杆的摆动而旋转。硬件部分主要包括STC12C5A60S2单片机最小系统,L298N电机驱动电路,N1000060倾角传感器,电源模块等。本设计主要运用STC12C5A60S2单片机控制4相6线步进电机,由单片机产生脉冲信号精确控制步进机的转速和角度,使步进电机上的平板能够

2、随着摆杆摆动而保持水平平衡。关键词:STC单片机;L298N电机驱动芯片;传感器 目 录摘 要 1目 录 i1 设计任务与要求 11.1 设计任务 11.2 设计要求 12 方案比较与论证 22.1 主控器的选择与论证 22.2 电机的选择与论证 22.3 驱动模块的选择与论证 33 系统硬件设计 33.1 总体电路框图 33.2 单元电路设计 43.3 整体电路图 74 系统软件设计 74.1 总体软件框图 74.2 各模块软件设计 84.3 总程序 105 系统调试与测试 105.1 测试仪器 105.2 测试指标 105.3 测试结果分析 116 设计总结 11参考文献 11附录 12附

3、录A:电路图 12附录B:电路板图 13附录C:元器件清单 13附录D:总程序 14设计题目1 设计任务与要求设计任务1、设计并制作一个自由摆上的平板系统,其结构如图1-1所示。摆杆的一端通过转轴固定在一支架上,另一端固定安装一台电机,平板固在电机转轴上;当摆杆如图1-2所示摆动时,驱动电机可以控制平板转动。 图1-1 图1-2设计要求1、控制电机使平板可以随着摆杆的摆动而旋转(35周) ,摆杆摆一个周期,平板旋转一周(360) ,偏差绝对值不可大于 45。2、在平板上粘贴一张画有一组间距为1cm平行线的打印纸。用手推动摆杆至一个角度(在 3045间) ,调整平板角度,在平板中心稳定放置一枚

4、1 元硬币(人民币) ;启动后放开摆杆让其自由摆动。在摆杆摆动过程中,要求控制平板状态,使硬币在 5 个摆动周期中不从平板上滑落,并尽量少滑离平板的中心位置。3、用手推动摆杆至一个角度(在 4560间) ,调整平板角度,在平板中心稳定叠放 8 枚 1 元硬币,见图 1-2;启动后放开摆杆让其自由摆动。在摆杆摆动过程中,要求控制平板状态使硬币在摆杆的 5 个摆动周期中不从平板上滑落,并保持叠放状态。根据平板上非保持叠放状态及滑落的硬币数计算成绩。2 方案比较与论证主控器的选择与论证方案一:采用STC12C5A60S2方案二:采用STC89C52方案三:采用AT89C52方案论证:方案一,STC1

5、2C5A60S2芯片价格便宜,应用范围广,功能强大,高速运转,低功耗,强抗静电,强抗干扰,内部集成双串口、8路10bitADC和两路八位PWM;方案二,STC89C52芯片价格便宜,应用范围广,运转速度慢,抗静电抗干扰弱,内部无ADC;方案三,AT89C52芯片价格便宜,应用范围广,运转速度慢,抗静电抗干扰弱,内部无ADC。鉴于设计要求,故采用方案一。电机的选择与论证方案一:采用步进电机方案二:采用直流电机方案三:舵机方案论证:方案一,步进电机价格便宜,容易控制,旋转角度于脉冲成正比,每步的旋转角度精确度高,不会将一步的误差积累到下一步,且具有优秀的起停和反转响应;方案二,直流电机价格低,调速

6、范围广,易于平滑调节,过载、起动、制动转矩大,难于控制转轴的角度和转速;方案三,舵机价格偏高,性能易受电压影响,控制旋转的角度精确度不高。鉴于设计要求,故采用方案一。驱动模块的选择与论证方案一:采用L298N芯片方案二:采用ULN2803芯片方案三:采用三极管方案论证:方案一,L298N芯片价格便宜,电路设计简单,驱动电流大,足以驱动大功率的步进电机;方案二,ULN2803芯片价格便宜,电路设计简单,驱动电流小,不能驱动大功率的步进电机;方案三,三极管价格便宜,驱动电路设计复杂,不稳定,出问题难于查询。本设计采用PK545-NAC-C29步进电机,故采用方案一。3 系统硬件设计总体电路框图为了

7、使系统能够实现各种复杂的控制功能,本设计采用一种功能强大的、高速低功耗性价比高的单片机STC12C5A60S2完成对其他部分控制。本设计采用N1000060倾角传感器对摆杆的倾斜角度的采集数据,通过STC12C5A60S2单片机内部自带的A/D转换将数据送给单片机,单片机通过数据分析控制L298N驱动电路,使步进机旋转保持平板的水平平衡,用1602液晶显示A/D的数据。总体框图如图3-1所示。图3-1 总体框图单元电路设计1、 STC12C5A60S2单片机最小系统STC12C5A60S2单片机最小系统P11口、P12口、P13、P14口接L298驱动电流的输入口,单片机通过对L298N的控制

8、,使L298发出脉冲控制步进机;P23口、P24口、P25口接1602液晶,控制液晶显示A/D采集N1000060倾角传感器的数据,A/D转换是用STC12C5A60S2内部自带的A/D。单片机最小系统如图3-2、3-3所示。图3-2 最小系统图3-3 串口部分2、L298N电机驱动L298N是一种二相四相步电机的专用驱动器,内含两个H-Bridge的高电压、大电流双桥式驱动器,接收标准;OUT1、OUT2、OUT3、OUT4之间分别接两个步进机;INPUT1、INPUT2、INPUT3、INPUT4接单片机I/O,接收输入控制电位来控制电机旋转。L298N驱动电路如图3-4所示。图3-4 L

9、298N驱动3、供电电源供电电源采用集成稳压器7805,电路图中,稳压器7805输入端的电容为输入端滤波电容,输出端的电容为输出端滤波电容;家用电220V经过变压器接入供电电源模块,能输出直流电压-12V、-5V、5V、12V。供电电源如图3-5所示。图3-5供电电源整体电路图见附录A4 系统软件设计总体软件框图 1、总体软件框图如图4-1所示。 图4-1 总体软件框图各模块软件设计1、步进电机右转函数void l_turn(uint i)/步进电机右转函数 AA; delay_ms(i); AB; delay_ms(i); BB; delay_ms(i); BC; delay_ms(i);

10、CC; delay_ms(i); CD; delay_ms(i); DD; delay_ms(i); DA; delay_ms(i);2、步进电机左转函数void r_turn(uint i)/步进电机左转函数 DA; delay_ms(i); DD; delay_ms(i); CD; delay_ms(i); CC; delay_ms(i); BC; delay_ms(i); BB; delay_ms(i); AB; delay_ms(i); AA; delay_ms(i);3、STC12C5A60S2内部AD BYTE get_ad0() /AD读取传感器1的值 ADC_CONTR=ADC

11、_POWER|ADC_SPEEDLL|ch0|ADC_START; _nop_(); _nop_(); _nop_(); _nop_(); while(!(ADC_CONTR&ADC_FLAG); return ADC_RES;BYTE get_ad5() /AD读取传感器2的值 ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch5|ADC_START; _nop_(); _nop_(); _nop_(); _nop_(); while(!(ADC_CONTR&ADC_FLAG); return ADC_RES;总程序 见附录D5 系统调试与测试测试仪器1、 数字万用表2、

12、量角器 测试指标当N100060倾角传感器与水平方向有角度时,N100060倾角传感器会产生一个一压,STC12C5A60S2单片机通过内部自带AD转换采集N100060反馈的电压值。每个电压值对应一个角度,通过量角器测出角度,列出表格。如表格5-1所示。表 5-1 角度-90-60-45-30030456090AD值102.4239.0307.2377.5512648.6716.8784.9921.6倾角传感器0.5V1.167V1.5V1.843V2.5V3.167V3.5V3.833V4.5V测试结果分析从表格5-1可得:倾角传感器与水平方向平行时,输出电压是2.5V;向左右与水平方向倾

13、斜90度时,其电压的变化量为2V。由此可得(误差允许范围内)倾角传感器与水平方向的角度a与倾角传感器的电压变化量v的数学关系为:v=a(1/45)本设计采用4相6线PK545-NAC-C29步进电机,4相8拍运行方式A-AB-B-BC-C-CD-D-DA-A,对应一个脉冲信号,步距角为=360度/(50*8)=0.9度(俗称半步)。 本设计把N100060倾角传感器固定在步进电机上,与水平方向平行,当摆杆有一个角度时,STC12C5A60S2单片机内部自带AD读取N1000060倾角传感器电压值,就能精确控制步进电机的转动角度,使步进电机上的平板保持平衡。如:当STC12C5A60S2单片机内

14、部自带AD读取N1000060倾角传感器电压值为3.5V时,其N1000060倾角传感器电压变化量为v=1V,通过上式计算得N100060倾角传感器与水平方向的角度a为45度,从而就能控制步进电机旋转45度,使步进电机上的平板保持平衡。6 设计总结经过四天三夜的辛勤努力,本设计实现了题目的全部要求。但由于时间紧,任务重,系统还存在许多可以改进的地方,比如电路布局、抗干扰性等方面还有很大的提升空间,经过改进,相信性能还会有进一步的提升。在软件编程方面,成功的通过软件编程消除了步进电机的抖动问题,采用的方法是:通过A/D转换采集倾角传感器的数据,10个数据一组,然后取平均值。本次竞赛极大的锻炼了我

15、们各方面的能力,虽然我们遇到了很多困难和障碍,但总体上成功与挫折交替,困难与希望并存,我们将继续努力争取更大的进步。参考文献1 毛礼锐,沈灌群.中国教育通史M.济南:山东教育出版社,1988.20-22.2 王英杰,高益民.高等教育的国际化J.清华大学教育研究,2000(2):13-16.3 中华人民共和国国务院.计算机软件保护条例J/0L.东方网,2001.12.28附录附录A:电路图 附录A-1附录A-2附录B:电路板图附录B-1附录C:元器件清单电阻6个瓷片电容12个电解电容4个键盘6个单片机1个开关2个L298N1个稳压78051个稳压78121个N10000602个步进电机1个MS2

16、321个串口1个电位器1个整流桥1个变压器1个发光二极管4个二极管8个 附录D:总程序#include #include#define uint unsigned int#define uchar unsigned chartypedef unsigned char BYTE;typedef unsigned int WORD;sfr ADC_CONTR=0xBC;sfr ADC_RES=0xBD;sfr ADC_RESL=0xBE;sfr ADC_LOW2=0xBE;sfr P1ASF=0x9D;#define ADC_POWER 0x80#define ADC_FLAG 0x10#defi

17、ne ADC_START 0x08#define ADC_SPEEDLL 0x00#define ADC_SPEEDL 0x20#define ADC_SPEEDH 0x40#define ADC_SPEEDHH 0x60sbit en=P25;/使能sbit rs=P23;/数据命令sbit rw=P24;/读写/定义步进电机连接端口sbit A1=P11;/转三周sbit B1=P12;/转四周sbit C1=P13;/转五周sbit D1=P14;/来回摆动/定义要用到按键的管脚sbit k1=P34;sbit k2=P35;sbit k3=P36;sbit k4=P37;/定义全局变量

18、uint su=20;/8最大uint j=0;uint jian_zhi=0;uint temp1=0;uchar shu=0,1,2,3,4,5,6,7,8,9,-,:, ;uint i=6;uint chong1=0;uint su1=20;/8最大uint su2=20;uint m=0;uint ad=0;uint ad0=0;uint j1=0;uint j2=0;uint ad5=0;BYTE ch0=0; /模拟通道选择BYTE ch5=5;uint er_flag=0;/使用1-2相驱动#define AA A1=1;B1=0;C1=0;D1=0;#define BB A1=

19、0;B1=1;C1=0;D1=0;#define CC A1=0;B1=0;C1=1;D1=0;#define DD A1=0;B1=0;C1=0;D1=1;#define AB A1=1;B1=1;C1=0;D1=0;#define BC A1=0;B1=1;C1=1;D1=0;#define CD A1=0;B1=0;C1=1;D1=1;#define DA A1=1;B1=0;C1=0;D1=1;/函数声明void delay_ms(uint x);void r_turn(uint i);void l_turn(uint i);void delay(WORD n) WORD x; whi

20、le(n-) x=110; while(x-); void delay_ms(uint x)/延时函数 uint y,z; for(y=x;y0;y-) for(z=130;z0;z-);void l_turn(uint i)/步进电机右转函数 AA; delay_ms(i); AB; delay_ms(i); BB; delay_ms(i); BC; delay_ms(i); CC; delay_ms(i); CD; delay_ms(i); DD; delay_ms(i); DA; delay_ms(i);void r_turn(uint i)/步进电机左转函数 DA; delay_ms(

21、i); DD; delay_ms(i); CD; delay_ms(i); CC; delay_ms(i); BC; delay_ms(i); BB; delay_ms(i); AB; delay_ms(i); AA; delay_ms(i);void l_dan() switch(m) case 0:AA;m+;break; case 1:AB;m+;break; case 2:BB;m+;break; case 3:BC;m+;break; case 4:CC;m+;break; case 5:CD;m+;break; case 6:DD;m+;break; case 7:DA;m+;br

22、eak; case 8:m=0;break; default :break; void r_dan() switch(m) case 0:DA;m+;break; case 1:DD;m+;break; case 2:CD;m+;break; case 3:CC;m+;break; case 4:BC;m+;break; case 5:BB;m+;break; case 6:AB;m+;break; case 7:AA;m+;break; case 8:m=0;break; default :break; void ting_zhi() A1=0; B1=0; C1=0; D1=0;/LCD1

23、602初始化void write_com(uchar com) rs=0; P0=com; delay(1); en=1; delay(1); en=0;void write_data(uchar datae) rs=1; P0=datae; delay(5); en=1; delay(5); en=0;void display_shu(uchar hang,uchar add,uchar num)/在1602显示数据的函数,hang为第几行,add为位置,num为数据 uchar shi; shi=num; if(hang=1) write_com(0x80+add); write_data

24、(0x30+shi); if(hang=2) write_com(0x80+0x40+add); write_data(0x30+num); void init_LCD()/初始化 en=0; rw=0; write_com(0x38);/显示模式控制 write_com(0x0c);/显示开关及光标控制 write_com(0x06);/数据指针设置 write_com(0x01);/清零 write_com(0x80);void InitADC() P1ASF=0x21; /输入通道选择与CH相配合使用,选择P12 ADC_RES=0; /转化的数据存储所在,高八位 ADC_CONTR=A

25、DC_POWER|ADC_SPEEDLL; /内部AD主要的控制寄存器ADC_CONTR,选择P12; delay(100);BYTE get_ad0() /AD读取传感器1的值 ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch0|ADC_START; _nop_(); _nop_(); _nop_(); _nop_(); while(!(ADC_CONTR&ADC_FLAG); return ADC_RES;BYTE get_ad5() /AD读取传感器2的值 ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch5|ADC_START; _nop_();

26、_nop_(); _nop_(); _nop_(); while(!(ADC_CONTR&ADC_FLAG); return ADC_RES;void keyscan() if(k1=0) delay(5); if(k1=0) while(!k1); display_shu(1,1,1); su=32; j=150; while(j-) r_turn(su);/8最快 su=0; if(k2=0) delay(5); if(k2=0) while(!k2); display_shu(1,1,2); su=32; j=200; while(j-) l_turn(su);/8最快 su=0; if

27、(k3=0) delay(5); if(k3=0) while(!k3); display_shu(1,1,3); su=32; j=250; while(j-) l_turn(su);/8最快 su=0; if(k4=0) delay(5); if(k4=0) while(!k4); display_shu(1,1,4); er_flag=1; void main() uint shu1=0,shu2=0; init_LCD(); InitADC(); ting_zhi(); su=32; su1=32; su2=32; j1=20; j2=30; delay_ms(1000); while(1) keyscan(); ad=get_ad0(); ad=2; ad+=ADC_RESL; delay_ms(1); ad5=get_ad5(); ad5=2; ad5+=ADC_RESL;/ display_shu(1,1,ad/1000);/ display_shu(1,2,ad%1000/100);/ display_shu(1,3,ad%100/10);/ display_shu(1,4,ad%10);/ display_shu(2,1

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2