智能小车电控基础部分.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
智能小车 电控基础部分 * 电路原理图 * 硬件部分包括:单片机AT89S52,舵机,直流减速电机,L298电机驱动芯片,光耦TLP521,电阻、电容,稳压器78L05模块。 硬件部分的各个模块都与机械有紧密的联系,它们必须集合机械部分进行设计与调试。 * 程序流程图 首先是主函数的确立,主函数从子函数init0_time和子函数drive子函数,子函数motor_run 中调子运行 控制字函数motor_run和子函数time0_pwm 。然后根据定时器溢出中断程序,判断是否中断,否则继续执行子函数time0_pwm ,是则进行drive部分,drive部分调子进行判断,是则继续进行子函数drive 否则程序结束。 * //***************主函数********************************// void main() { init_time0();//调用初始化函数 drive(1,0,0); delay_flag=1000;//较精确延时100MS,以定时器0中定义的100US为单位 while(delay_flag); while(1) { drive(1,0,0); delay_flag=50000;//直走5S while(delay_flag); motor_run(1,0,0);//车停 while(1);//保持 } } * void time0_pwm() interrupt 1//定时器0中断服务程序 { //********************舵机部分*************************// tt++; if(tt==duoji_pwm)//duoji_pwm=6~26,大约0.5ms~2.5ms duoji=0;//舵机控制线置低电平 else if(tt==200)//大约20ms。 { tt=0; duoji=1;//舵机控制线置高电平 } //**********************直流电机PWM调速部分***************************// pwm++; if(pwm==10)//设置PWM调速周期为1ms。 { pwm=0; P0|=0X30;//P0口进行或运算。 } if(pwm==PWM_L)//PWM_L=0~10; motor_l_en=0; if(pwm==PWM_R)//PWM_R=0~10; motor_r_en=0; * //*******************较精确延时部分*********************************// if(delay_flag) delay_flag--; } void init_time0()//定时器0初始化函数 { TMOD=0X02;//采用定时器模式2,8位精确定时 TH0=164;//定时器赋初值;100US中断一次,这里的晶振是11.0592M;若晶振为12M,则选用156; TL0=164; EA=1;//开总中断 ET0=1;//开定时器中断 TR0=1;//定时器0开始运行 duoji_pwm=11; //舵机初始位置(保证小车前轮摆正) } void motor_run(uchar direct,uchar speed_l,uchar speed_r)//直流电机控制函数,direct代表方向;speed分别控制两个电机速度 { if(direct)//direct==1代表向前 { P0=(P00x30)|0x05;//(P00x30)的作用是停止电机,目的是为了避免切换时产生不规则脉冲。 } else//direct==0代表向后 { P0=(P00x30)|0x0A; } PWM_L=speed_l; PWM_R=speed_r; } * void drive(uchar direct,uchar angle,uchar side)//小车状态控制函数。direct代表方向,angle代表转弯角度,side代表转弯方向 { if(angle6)//起保护作用(相对机械结构而言),angle的范围是0~5; { if(side)//side==1代表向右 { duoji_pwm=(13-angle); motor_run(direct,10,10-angle); } else//side==0代表向左 { duoji_pwm=(angle+13); motor_run(direct,10-angl

文档评论(0)

精品报告 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档