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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验三 电机驱动及转速测量实验新板子.docx

1、实验三 电机驱动及转速测量实验新板子实验三 电机驱动及转速测量实验1实验目的(1)掌握单片机通用I/O口的使用;(2)掌握使用单片机定时器产生占空比可调的PWM波;(3)掌握使用单片机定时器2的捕获功能实现电机转速测量的方法。2实验电路2.1实验装置硬件说明 电机控制实验箱的原理框图如图1所示。图1 电机控制实验箱原理框图从图1可知,控制电机需要两个信号,分别为方向控制和转速控制,控制信号经过驱动电路后驱动电机运转,在电机的轴上安装有塑料转盘,转盘上装有小磁铁,当电机运动时带动小磁铁运动,每个小磁铁经过安装的霍尔传感器后,霍尔传感器都会输出一个脉冲信号,这个脉冲信号在实验中用于检测电机的转速。

2、电机有两种控制方式,即手动方式和自动方式。在手动方式时,可以通过开关来控制电机方向;通过旋转电位器可以控制电机速度。在自动方式时,通过程序来控制电机的方向和转速。在本实验中,采用信号发生器模拟产生电机转速信号(模拟自动方式),由示波器观察单片机发出的驱动信号(模拟手动方式)。在下一次电机转速控制中会采用电机。2.2实验装置接口说明杜邦线连线单片机IO口模块接口杜邦线数量功能P0J38数码管数据段P2.2J2(B)1段锁存P2.3J2(A)1位锁存P3J248矩阵键盘数据段P1.0示波器1输出PWMP1.1信号发生器1捕获计数GND信号发生器、示波器地端2共地3开发环境 程序开发调试软件为Kei

3、lC,下载软件为S51ISP,关于这两个软件的使用方法请参考“键盘显示实验指导书”。4实验要求(1)通过实验箱上的键盘输入调整PWM波的占空比,具体要求如下: 当按键为0时,其占空比为20%,LED1显示值为0; 当按键为1时,其占空比为40%,LED1显示值为1; 当按键为2时,其占空比为60%,LED1显示值为2; 当按键为3时,其占空比为80%,LED1显示值为3;用示波器观察以上PWM波波形。(2)将测量到的电机转速显示到实验箱的数码管LED3LED6上,转速单位为“转/分”。电机转速信号用信号发生器模拟产生。5例程参考见附录6实验报告(1)绘出硬件原理图(2)给出软件流程图(3)写出

4、实验步骤(4)附上带注释的软件源码,并对各模块进行说明(5)总结实验心得7注意事项(1) 实验四的程序建立在本次实验的基础上,本实验中的两个功能(测速、输出PWM)必须要能够同时实现,并不互相影响。(2) 合理分配好定时器资源。附录:实验参考程序#include uchar PulsNum=0; /脉冲数计数器/unsigned int OverFlow=0; /定时器2溢出次数计数器#define KeyPort P3/unsigned char Speed=0;/unsigned char Time;#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P

5、0 替换sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存#define HIGH (65536-10000)/256#define LOW (65536-10000)%256sbit DCOUT = P14;/定义电机信号输出端口sbit DCIN=P12;unsigned char flag2=0;unsigned char flag1=0; unsigned char PulsNum=0; /脉冲数计数器unsigned int OverFlow=0; unsigned datal=0; /捕捉值的低8位unsigned datah=0;

6、 /捕捉值的高8位 unsigned char PwmL=1500;unsigned char PwmH=1500;unsigned long CountPerMinute=60000000; /每分钟计数值=fosc/12*60=5*fosc=5*11.0592Munsigned int speed=0;unsigned int delay_num = 10; /速度值void CaculateSpeed(unsigned a,unsigned b);unsigned int TargetSpeed=0,SpeedError,SpeedErrorIntg;unsigned char TISi

7、gnal=0;/*- 全局变量-*/unsigned char PWM_ON; /定义速度等级#define CYCLE 10 /周期Unsigned char code DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量/*- 函数声明-*/void DelayUs2x(un

8、signed char t);/us级延时函数声明 void DelayMs(unsigned char t); /ms级延时void Display(unsigned char FirstBit,unsigned char Num);/数码管显示函数unsigned char KeyScan(void);/键盘扫描void Init_Timer0(void);/定时器初始化/*- 主函数-*/void main (void)unsigned char num; PWM_ON=0;Init_Timer0(); /初始化定时器0,主要用于数码管动态扫描/TempData0=0x5E; /d/Te

9、mpData1=0x39; /Cwhile (1) /主循环 num=KeyScan(); /循环调用按键扫描 if(num=1)/第一个按键,速度等级增加 PWM_ON=1; PwmH=600; PwmL=2400; else if(num=2)/第二个按键,速度等级减小 PWM_ON=3; PwmH=1200; PwmL=1800; else if(num=3)/第二个按键,速度等级减小 PWM_ON=5; PwmH=1800; PwmL=1200; else if(num=4)/第二个按键,速度等级减小 PWM_ON=7; PwmH=2400; PwmL=600; if(flag2=1)

10、 unsigned k,b,s,g; /k,b,s,g分别代表千位、百位、十位、各位 unsigned int middle=0;/定义中间变量,代表计算的余数 if(speed=0)&(speed8;/计数值赋为低电平时间值 TL0=(65536-PwmH); / %256 DCOUT=0; /输出低电平 Display(0,8); else if(DCOUT=0) /当前为低电平 TH0=(65536-PwmL)8;/计数值赋为高电平时间值 TL0=(65536-PwmL); / %256 DCOUT=1; /输出高电平 Display(0,8); /* static unsigned c

11、har count; TH0=(65536-1000)/256; /重新赋值 2ms TL0=(65536-1000)%256; /Display(0,8); / 调用数码管扫描 if (count=PWM_ON) DCOUT = 0; /如果定时等于on的时间, /说明作用时间结束,输出低电平 count+;if(count = CYCLE) /反之低电平时间结束后返回高电平 count=0; if(PWM_ON!=0) /如果开启时间是0 保持原来状态 DCOUT = 1; */ /*-按键扫描函数,返回扫描键值-*/unsigned char KeyScan(void) unsigned

12、 char keyvalue; if(KeyPort!=0xff) flag1=1; DelayMs(10); if(KeyPort!=0xff) keyvalue=KeyPort; while(KeyPort!=0xff); switch(keyvalue) case 0xfe:return 1;break; case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; case 0xef:return 5;break; case 0xdf:return 6;break; case 0xbf:ret

13、urn 7;break; case 0x7f:return 8;break; default:return 0;break; return 0;void time2() interrupt 5 if(EXF2=1) /捕捉引起的中断 PulsNum+; /脉冲个数加1 if(PulsNum=1) /定时器清零 OverFlow=0; /定时器2溢出次数计数器清零 TH2=0; TL2=0; else if(PulsNum=9) /电机转一圈后计算转速 TR2=0; datal=RCAP2L; /读取捕捉值 datah=RCAP2H; CaculateSpeed(datah,datal);/计算

14、转速 TR2=1; PulsNum=0; /脉冲个数清零 EXF2=0; /清中断标志 else if(TF2) /计数溢出引起的中断 OverFlow+; /溢出次数加1 TF2=0; /清中断标志 /*-定时器1 中断服务函数-*/static int time=0;void time1() interrupt 3 /TH1=(65536-1000)/256; /重新赋值 2ms /TL1=(65536-1000)%256; /Display(0,8); / 调用数码管扫描 /*TH1=0;TL1=0;time+; /每1ms,time 加1if(time=200) /time 加满200 次后,1s 时间到 time=0; /time 清零,重新计数 /speedTISignal= TISignal; */*转速计算函数*/void CaculateSpeed(unsigned a,unsigned b) /速度=TIMER2每分钟计数值/(溢出计数值+电机转一圈的计数值) speed=CountPerMinute/(65536*OverFlow+256*a+b); flag2=1;/电机转速计算完成标志置1

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

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