避障机器人电机运动程序设计与调试_第1页
避障机器人电机运动程序设计与调试_第2页
避障机器人电机运动程序设计与调试_第3页
避障机器人电机运动程序设计与调试_第4页
避障机器人电机运动程序设计与调试_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、避障机器人电机运动程序设计与调试实训目的1. 了解直流电机的相关知识;2. 理解基于机器人项目驱动的嵌入式教学实训平台中直流电机的工作原理。实训设备1. For pers onal use only in study and research; not for commercial use2.2. 硬件:HOST机一台、基于机器人项目驱动的嵌入式教学实训平台一套3. 软件:Siliconlab IDE开发环境、调试器。实训原理For pers onal use only in study and research; not for commercial use通过脉宽调制来调整转动速度。twT

2、PWM 是“ Pulse-Width Modulation ”的缩写,意为“脉冲宽度调制” 。PWM是一项功 能强大的技术,是一种能够对模拟信号电平进行数字化编码的方法。C8051F360系列的PWM模块功能非常丰富,可以产生很多种不同类型的数字脉冲信号,以满足不同的需要。PWM信号通过H桥电路可以实现电机的正、反转以及调整电机的转动速度。H桥驱动电路工作原理+如图所示,H桥式电机驱动电路包括 4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。 根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。因此,要控制电机的正、反转只需要控制Q1、Q2、

3、 Q3、Q4的通断,控制它们同样也可以实现调速。控制Q1和Q4导通,正向电流流过电机控制Q2和Q3导通,反向电流流过电机8位脉宽调制器方式PWM输出的频率取决于PCA计数器/定时器的时基。使用模块的捕捉 /比较寄存器PCAOCPLn改变PWM输出信号的占空比。当 PCA计数器/定时器的低字节(PCA0L )与PCAOCPLn中的值相等时,CEXn引脚上的输出被置1;当PCA0L中的计数值溢出时, CEXn 输出被复位。当计数器/定时器的低字节PCA0L溢出时(从OxFF到0x00),保存在PCAOCPHn 中的值被自动装入到 PCAOCPLn。8位PWM方式的占空比由下式方程给出。占空比 _-

4、 PCAOCPHn 256机器人主控器对电机的控制使用12路输入/输出口,可控制6个直流电机。PWM实训的总体流程图系统初始化电机驱动所使用的函数有:Motornit(void),此函数功能是对 12个I/O 口初始化,以及定时器初始化。使这些I/O口设置为PWM状态或输出状态。Dc_Motor( un sig ned long PwmPo int, un sig ned char Director, un sig ned long Speed) ,此函数 的功能是设置直流电机的参数。函数的第一个参数表示直流电机的位置信息(16);第二个参数是直流电机的转动状态信息(0:正转;1 :停止;2:

5、反转);第三个参数是直流电机转动速度(0100 )。void PWMnit() ,PWM 初始化。void PWM_Port_Init() ,PWM 端口配置。void DC_Motor(uc motor_num,uc direction, uc motor_speed),改变 PWM 占空比。四、实训步骤1、 正确连接PC机、调试器和51实验平台;2、打开电源,打开 Siliconlab IDE ;3、打开工程,编译、链接、进入调试、运行程序,观察小车的运动状态;#includepwm h.h* 茶 未*/! 函数名: void PWM_Init()/! 函数功能: PWM 初始化*/voi

6、d PWM_Init()unsigned char SFRPAGE_save = SFRPAGE; PWM_Port_Init();/ 采用系统时钟/8 PWM 模式,比较器功能使能, PWM 使能SFRPAGE = CONFIG_PAGE; PCA0MD = 0x08;PCA0CPM0 = 0x42;PCA0CPM1 = 0x42;PCA0CPM2 = 0x42;PCA0CPM3 = 0x42;PCA0CPM4 = 0x42;PCA0CPM5 = 0x42;PCA0CPH0 = 0xFE;PCA0CPH1 = 0xFE;PCA0CPH2 = 0xFE;PCA0CPH3 = 0xFE;PCA0

7、CPH4 = 0xFE;PCA0CPH5 = 0xFE;CR = 1;/允许 PCA 计数,定时SFRPAGE = SFRPAGE_save; DC_Motor(1,1,0); DC_Motor(2,1,0); DC_Motor(3,1,0);DC_Motor(4,1,0);DC_Motor(5,1,0); /* /! 电机控制线连接状况:/! CPP0 P0.6 CPP1 P0.7 CPP2 P1.0/! CPP4 P1.2*/ void PWM_Port_Init()unsigned char SFRPAGE_save = SFRPAGE; SFRPAGE = CONFIG_PAGE;XB

8、R1 |= 0x46; / 使能交叉开关, CEX0-3 连接到管脚 P0SKIP |= 0x0F;P0MDOUT |= 0xC0;P1MDOUT |= 0x7F;P3MDOUT |= 0x60;SFRPAGE = SFRPAGE_save;/! 函数名: void DC_Motor(uc motor_num,uc direction, uc motor_speed)/! 函数功能:改变 PWM 占空比 */ voidDC_Motor(unsigned char motor_num,unsigned char direction, unsigned char motor_speed)/*uns

9、igned char SFRPAGE_save = SFRPAGE;SFRPAGE = CONFIG_PAGE; if(!motor_speed)switch(motor_num)case 1:PCA0CPH0 = 255; break;case 2:PCA0CPH1 = 255; break;case 3:PCA0CPH2 = 255; break;case 4:PCA0CPH3 = 255; break;case 5:PCA0CPH4 = 255; break;case 6:PCA0CPH5 = 255; break;default: break; elseswitch(motor_num

10、)case 1:PCA0CPH0 = 255 - (motor_speed+116); break;case 2:PCA0CPH1 = 255 - (motor_speed+116); break;case 3:PCA0CPH2 = 255 - (motor_speed+116); break;case 4:PCA0CPH3 = 255 - (motor_speed+116); break;case 5:PCA0CPH4 = 255 - (motor_speed+116); break;case 6:PCA0CPH5 = 255 - (motor_speed+116); break;defau

11、lt: break; switch(direction) case 0:if(motor_num=1) P3 &= 0x20; /P1.3 = 0, 即 DIR0 置 0 if(motor_num=2) P1 &= 0x10; /P1.4 = 0, 即 DIR1 置 0 if(motor_num=3) P1 &= 0x20; /P1.5 = 0, 即 DIR2 置 0 if(motor_num=4) P1 &= 0x40; /P1.6 = 0, 即 DIR3 置 0 if(motor_num=5) P3 &= 0x40; /P3.6 = 0, 即 DIR4 置 0 break;case 1:

12、if(motor_num=1) PCA0CPH0 = 255; if(motor_num=2) PCA0CPH1 = 255; if(motor_num=3) PCA0CPH2 = 255; if(motor_num=4) PCA0CPH3 = 255; if(motor_num=5) PCA0CPH4 = 255; if(motor_num=6) PCA0CPH5 = 255; break;SFRPAGE = SFRPAGE_save;void main()PCA0MD &= 0x40;OSCICN |= 0x83;/选择内部时钟,四分频RSTSRC = 0x04;/丢失时钟检测PWM_In

13、it();while(1)DC_Motor(1,2,50);DC_Motor(2,2,50);DC_Motor(3,2,50);DC_Motor(4,2,50);DC_Motor(5,2,50);DC_Motor(6,2,50);case 2:if(motor_num=1) P3 |= 0x20;/P3.5 =1, 即DIR0置if(motor_num=2) P1 |= 0x10;/P1.4 =1, 即DIR1置if(motor_num=3) P1 |= 0x20;/P1.5 =1, 即DIR2置if(motor_num=4) P1 |= 0x40;/P1.6 =1, 即DIR3置if(motor_num=5) P3 |= 0x40;/P3.6 =1, 即DIR4置break;default: break;仅供个人用于学习、研究;不得用于商业用途For personal use only in study and research; not for commercial use.Nur f u r den pers?nlichen f u r Studien, Forschung, zu kommerzi

温馨提示

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

评论

0/150

提交评论