搜档网
当前位置:搜档网 › 智能小车舵机控制精编版

智能小车舵机控制精编版

智能小车舵机控制精编版
智能小车舵机控制精编版

智能小车舵机控制精编

MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】

1

//只利用一个定时器 T0,定时时间为,定义一个角度标识,数值为 1、2、3、4、5,

//实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为 40,实现周期为 20ms。

//每次进入定时中断,判断此时的角度标识,进行

//相应的操作。比如此时为 5,则进入的前 5 次中断期间,信号输出为高电平,即为的

//高电平。剩下的 35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间

//是 20ms,为一个周期。

//用51板上s1和s2按键

//用P1^7输出 PWM信号控制舵机

#include ""

unsigned char count; //次数标识

sbit pwm =P1^7 ; //PWM信号输出

sbit jia =P3^0; //角度增加按键检测IO口

sbit jan =P3^1; //角度减少按键检测IO口

sbit jianwei=P3^4; //按键位

unsigned char jd; //角度标识

sbit dula=P2^6;

sbit wela=P2^7;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e

void delay(unsigned char i)//延时

{

unsigned char j,k;

for(j=i;j>0;j--)

for(k=125;k>0;k--);

}

void Time0_Init() //定时器初始化

{

TMOD = 0x01; //定时器0工作在方式1

IE= 0x82;

TH0= 0xfe;

TL0= 0x33; //晶振,

TR0=1; //定时器开始

}

void Time0_Int() interrupt 1 //中断程序

{

TH0 = 0xfe; //重新赋值

TL0 = 0x33;

if(count

pwm=1; //确实小于,PWM输出高电平

else

pwm=0; //大于则输出低电平

count=(count+1); //次数加1

count=count%40; //次数始终保持为40 即保持周期为20ms

}

void keyscan() //按键扫描

{

if(jia==0) //角度增加按键是否按下

{

delay(10); //按下延时,消抖

if(jia==0) //确实按下

{

jd++; //角度标识加1

count=0; //按键按下则20ms周期从新开始

if(jd==6)

jd=5; //已经是180度,则保持

while(jia==0); //等待按键放开

}

}

if(jan==0) //角度减小按键是否按下,

{

delay(10);

if(jan==0)

{

jd--; //角度标识减1

count=0;

if(jd==0)

jd=1; //已经是0度,则保持

while(jan==0);

}

}

}

void display() //数码管显示函数

{

unsigned char bai,shi,ge;

switch(jd) //根据角度标识显示相应的数值

{

case 1: //为1,角度为0,前3个数码管显示000 bai=0;

shi=0;

ge=0;

break;

case 2:

bai=0;

shi=4;

ge=5;

break;

case 3:

bai=0;

shi=9;

ge=0;

break;

case 4:

bai=1;

shi=3;

ge=5;

break;

case 5: //为5,角度为180,前3个数码管显示180 bai=1;

shi=8;

ge=0;

break;

}

dula=0;

P0=table[bai];

dula=1;

dula=0;

wela=0;

P0=0xfe;

wela=1;

wela=0;

delay(5);

P0=table[shi];

dula=1;

dula=0;

P0=0xfd;

wela=1;

wela=0;

delay(5);

P0=table[ge];

dula=1;

dula=0;

P0=0xfb;

wela=1;

wela=0;

delay(5);

}

void main()

{

jd=1;

jianwei=0;

count=0;

Time0_Init();

while(1)

{

keyscan(); //按键扫描

display();

}

}

2

#include<>

#define uint unsigned int

#define uchar unsigned char

uint count;

uchar jd;

sbit le1=P1^0; //*光电传感器*//

sbit PWM=P3^5; //舵机pwm//

init()

{

TMOD=0x01;//设定定时器

TH0 = 0xFE;

TL0 = 0x0c;//设定定时初始值

EA=1;

ET0=1;

TR0=1;

}

void delay(uint z) //延时

{

uint x,y;

for(x=z;x>0;x--)

for(y=125;y>0;y--);

}

void timer0() interrupt 1 //产生pwm信号控制舵机,周期20ms {

TH0 = 0xFE;

TL0 = 0x0c; //设定定时初始值

if(count

{

PWM=1; //确定小于,pwm输出高电平

// delay(180); //延时一会,可以减慢舵机转速

}

else

PWM=0; //大于则输出低电平

count=count+1; //次数加1

count=count%40; //次数始终保持为40即保持周期为20ms

}

void xunji() //循迹函数,读取光电管状态

{

if(le1!=0)

{

delay(10);

if(le1==0)

{

jd++;

count=0;

while(le1==0);

}

} //分析光电管状态,看你的电路检测到黑线输出1或者是0

else

{

count=0;

jd=3; //舵机归中

}

}

void main()

{

jd=3; //角度初始化90°: 1= 舵机为0° 2=1ms 舵机为45°3、4、5、同上count=0; //初始化赋值零

init(); //定时器初始化

while(1)

{

xunji(); //舵机检测

}

}

智能小车舵机控制精编版

智能小车舵机控制精编 版 MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】

1 //只利用一个定时器 T0,定时时间为,定义一个角度标识,数值为 1、2、3、4、5, //实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为 40,实现周期为 20ms。 //每次进入定时中断,判断此时的角度标识,进行 //相应的操作。比如此时为 5,则进入的前 5 次中断期间,信号输出为高电平,即为的 //高电平。剩下的 35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间 //是 20ms,为一个周期。 //用51板上s1和s2按键 //用P1^7输出 PWM信号控制舵机 #include "" unsigned char count; //次数标识 sbit pwm =P1^7 ; //PWM信号输出 sbit jia =P3^0; //角度增加按键检测IO口 sbit jan =P3^1; //角度减少按键检测IO口 sbit jianwei=P3^4; //按键位 unsigned char jd; //角度标识 sbit dula=P2^6; sbit wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE= 0x82; TH0= 0xfe; TL0= 0x33; //晶振, TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count

智能车舵机PD运算

/**********************舵机增量式PID算法*********************** double ref = 0;//设置参数设定值 double feb = 0;//采样反馈过程值 int pwm_var = 0; //PID调整量 int PWM_out = 0; //PWM输出量 double Uo = 0; double Ek = 0; double Ei = 0; double Ed = 0; #define Kp 8 //PID调节的比例常数 #define Ti 0.05 //PID调节的积分常数 #define Td 0.02 //PID调节的微分时间常数 #define T 0.02 //采样周期 #define Kpp Kp * ( 1 + (T / Ti) + (Td / T) ) #define Ki (-Kp) * ( 1 + (2 * Td / T ) ) #define Kd Kp * Td / T //#define Kpp 4 //#define Ki 0.8 //#define Kd 20 //误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡 #define Emin 3 //调整值限幅,防止积分饱和 #define Umax 100 #define Umin -100 //输出值限幅 #define Pmax 15500 #define Pmin 200 /////////////////////////////////////////////////////////////////// ////// PID运算 ///////

智能车中的舵机入门

单片机控制舵机 修改浏览权限 | 删除.什么是舵机: 舵机如下所示: 有三根线,一般依次是地,电源(5V左右),信号(信号的幅值>=3.3V),不清楚各个脚打开舵机一测量就知道了。 2.其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏 置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3.舵机的控制: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关 系是这样的: 0.5ms--------------0度;

1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 重要说明: 1:上面部分还是成线形关系的,Y=90X-45(X单位是ms,Y单位是度数:) 2:上面所说的0度45度等是指度45度位置(什么意思呢:我说明一下就知道了,就拿45度位置来说,若舵机停在0度位置,下载45度位置程序后则舵机停在45度,即顺时针走了45度,若当时舵机在135度位置,则反转90度到45度位置。所以舵机不存在正转反转问题。这点非常重要。 3:若想转动到45度位置,要一直产生1.0ms的高电平(即PA0=1; Delay(1ms);PA0=0;Delay(20ms);要不停的产生这个高低电平,产生PWM脉冲 请看下形象描述吧: 下面是我在ATMEGA32上的测试程序,开发软件:ICC AVR #include typedef struct BYTE_BIT { unsigned BIT0:1; unsigned BIT1:1; unsigned BIT2:1;

51红外循迹小车报告(舵机版)最终版

简易教程

前言 往届全国大学生电子设计竞赛曾多次出现了集光、机、电于一体的简易智能小车题目,此次,笔者在通过多次论证、比较与实验之后,制作出了简易小车的寻迹电路系统。 整个系统基于普通玩具小车的机械结构,利用小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。系统分为检测、控制、驱动三个模块。首先利用光电对接收管和路面信号进行检测,然后经过比较器处理,对软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。 智能小车能在画有黑线的白纸“路面”上行驶,这是由于黑线和白纸对光线的反射系数不同,小车可根据接收到的反射光的强弱来判断“道路”---黑线,最终实现简单的循迹运动。 个人水平有限,有错误不足之处,还望各位前辈同学多多包含,指出修正,完善。谢谢! 李学云王维 2016年7月27号

目录 前言 (1) 第一部分硬件设计 (1) 1.1 车模选择 (1) 1.2传感器选择 (1) 1.3 控制模块选择 (2) 第二部分软件设计及调试 (3) 2.1 开发环境 (3) 2.2总体框架 (3) 2.3 舵机程序设计与调试 (3) 2.3.1 程序设计 (3) 2.3.2 调试 (3) 2.3.3 程序代码 (4) 2.4 传感器调试 (5) 2.4.1 传感器好坏的检测 (5) 2.4.2 单片机能否识别信号并输出信号 (5) 2.5 综合调试 (7) 附录1 (9) 第一篇舵机(舵机及转向控制原理) (9) 1.1概述 (9) 1.2舵机的组成 (10) 1.3舵机工作原理 (11) 1.4舵机使用中应注意的事项 (12) 1.5如何利用程序实现转向 (12) 1.6舵机测试程序 (13) 附录2 (14) 第二篇光电红外传感器 (14) 2.1传感器的原理 (14) 2.2红外光电传感器ST188 结构图 (15) 2.3传感器的选择 (15) 2.4传感器的安装 (16) 2.5使用方法 (16) 2.7红外传感器输入输出调试程序 (17)

飞思卡尔--智能车舵机讲解

飞思卡尔--智能车舵机讲解

2.2 舵机的安装 完成了玩具车的拆卸之后要做的第二步就是安装舵机,现在市场上卖的玩具车虽然也具有转向 功能,但是前轮的转向多是依靠直流电机来驱动,无论向哪个方向转都是一下打到底,无法控制转 过固定的角度,因此根据我们的设计需求,需要将原有的转向部分替换成现有的舵机,以实现固定 转角的转向。舵机的实物图如图 2.1所示。 需要说明的是由于小车系玩具车改装,在安装舵机是需要合理的利用小车的结构,将舵机安装 牢固,同时还需注意合理利用购买舵机是附赠的齿轮,从而将舵机固定在合适的位置。舵机的安装 方式有俯式、卧式多种,不同的安装方法力臂长短、响应速度都有所不同,这一点请自己根据实际 情况合理选择,图 2.2 为舵机的安装图。 5

图 2.1 舵机实物图图 2.2 舵机安装图 舵机安装过程中有一点需要尤其注意,由于舵机不是360°可转的,因此必须保证车轮左右转 的极限在舵机的转角范围之内。 舵机安装完毕之后就可以对小车的转角进行控制了,但是由于玩具车的车体设计往往限制了小 车的转角,因此可以对小车进行局部的“破坏”来增大前轮的转角,要知道在比赛中追求速度的同 时一个大的转角对小车的可控性会有一个很大的提升,如图2.3 所示,就是对增加小车转角的一个 改造,这是我在去年小车比赛中的用法。将阻碍前轮转角的一部分用烙铁直接烫掉。 但是这种做法也有风险,由于你的改造会破坏小车的整体 7

结构,有可能会对小车的硬件结构造 成破坏,因此如果你的小车在改造之后显得过于脆弱的话那你就要对你的小车采取些加固措施了。 3.4 舵机转向模块设计 舵机是小车转向的控制机构,具有体积小、力矩大、外部机械设计简单、稳定性高等特 点,无论是在硬件还是软件舵机设计是小车控制部分的重要组成部分,舵机的主要工作流程 为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。图 3.11 为舵机的实物图。 7

飞思卡尔 智能车舵机控制

智能车的制作中,看经验来说,舵机的控制是个关键.相比驱动电机的调速,舵机的控制对于智能车的整体速度来说要重要的多. PID算法是个经典的算法,一定要将舵机的PID调好,这样来说即使不进行驱动电机的调速(匀速),也能跑出一个很好的成绩. 机械方面: 从我们的测试上来看,舵机的力矩比较大,完全足以驱动前轮的转向.因此舵机的相应速度就成了关键.怎么增加舵机的响应速度呢?更改舵机的电路?不行,组委会不允许.一个非常有效的办法是更改舵机连接件的长度.我们来看看示意图: 从上图我们能看到,当舵机转动时,左右轮子就发生偏转.很明显,连接件长度增加,就会使舵机转动更小的转角而达到同样的效果.舵机的特点是转动一定的角度需要一定的时间.不如说(只是比喻,没有数据),舵机转动10度需要2ms,那么要使轮子转动同样的角度,增长连接件后就只需要转动5度,那么时间是1ms,就能反应更快了.据经验,这个舵机的连接件还有必要修改.大约增长0.5倍~2倍. 在今年中,有人使用了两个舵机分别控制两个轮子.想法很好.但今年不允许使用了.

接下来就是软件上面的问题了. 这里的软件问题不单单是软件上的问题,因为我们要牵涉到传感器的布局问题.其实,没有人说自己的传感器布局是最好的,但是肯定有最适合你的算法的.比如说,常规的传感器布局是如下图: 这里好像说到了传感器,我们只是略微的一提.上图只是个示意图,意思就是在中心的地方传感器比较的密集,在两边的地方传感器比较的稀疏.这样做是有好处的,大家看车辆在行驶到转弯处的情况: 相信看到这里,大家应该是一目了然了,在转弯的时候,车是偏离跑道的,所以两边比较稀疏还是比较科学的,关于这个,我们将在传感器中在仔细讨论。 在说到接下来的舵机的控制问题,方法比较的多,有人是根据传感器的状态,运用查表法差出舵机应该的转角,这个做法简单,而且具有较好的滤波"效果",能够将错误的传感器状态滤掉;还有人根据计算出来的传感器的中心点(比

机器人智能小车电机选择直流电机 步进电机 舵机

常用于机器人的电机有直流电机,步进电机,伺服电机。 直流电机:用于驱动机器人的移动,加上电源后,电机将一直转动,颠倒电机的电源和地线就会改变电机的转动方向。价格便宜,适用于大多数机器人应用。 点击参见:直流电机的H桥驱动原理和驱动电路选择 步进电机:也是直流电机的一种,步进电机内部有多个线圈,同时给一个或两个线圈加电,电机将转过一定的角度,要想电机连续转动,就要依次给给个线圈加电,加电的过程就是给电机施加 脉冲电流的过程。改变脉冲的频率就改变了电机的转速,改变施加脉冲的顺序就改变了电 机的转动方向。用于机器人需要位置控制的场合,如机械臂。 点击参见:步进电机的驱动原理和驱动电路 步进电机分类和选择 伺服电机:一个连续转动的直流电机,加一个闭环反馈控制的回路,以实现精确的位置控制。舵机即是伺服电机的一种,常用于飞机模型中用于转向控制。可用于驱动机器人的腿,手臂,头部和 其他肢体。 点击参见:数码舵机的原理与故障分析 点击参见:舵机的原理与单片机的控制

电机的技术参数 1、电机的电压 电压是选择直流电机的一个重要参数,小型的趣味机器人用的直流电机一般为1.5v-6v, 在这个电压范围内电机都可以工作,电压越高,转速越高。也有采用固定电压的高质量的电 机,如12V,24V直流电机。一般情况下电机都可以在高于或低于其工作电压的情况下 运行,如12V电机,可以在8v下工作,但转速降低,输出转矩变小,电机无力。如果长 时间在高于其工作电压30%-40%的电压下工作,电机线圈会发热,可能使电机永久 损坏。 2、电机的电流 空载电流:指电机不加轮胎及其他任何负载的情况下的电流。 负载电流:指加上轮胎,和其他重物下电机工作的电流。 通常空载的电流很小,负载电流是其实际工作的电流,是选择驱动电路的依据。当电机的负 载超过了电机所能承受的最大值时,电机将停止转动,电流不再增加,这就是堵转。 3、电机的转速 指的是电机的主轴每分钟转过的转数。单位为转数/分钟(r/min),机器人需要的电机转速 一般在100-200转每分钟,甚至更低的转数,而一般的直流电机的转速在4000~7000转每 分钟,无法直接在机器人上使用,必须经过降速。可以自己设计齿轮比来降速,也可以采用 现成的减速齿轮箱。 4、转矩 就是电机能够带动多大的负载,转矩越大电机越有劲。额定转矩:电机在正常工作下能够驱动负载的大小。测量方法是在电机轴上固定一个杠杆,杠杆上挂上重物,让电机带动重物旋转。 单位为g/cm,单位厘米所能带动的重物克数越大,转矩也就越大。 文章网址: https://www.sodocs.net/doc/0e3834829.html,/wqb_lmkj/blog/item/41249a100292d2195aaf5394.html?timeStamp=1316176239437

智能小车舵机控制

// 只利用一个定时器T0 ,定时时间为,定义一个角度标识,数值为1 、2、3、4、5,// 实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为40 ,实现周期为// 每次进入定时中断,判断此时的角度标识,进行 // 相应的操作。比如此时为5 ,则进入的前5 次中断期间,信号输出为高电平,即为 // 高电平。剩下的35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间// 是 20ms,为一个周期。 // 用51 板上s1 和s2 按键 // 用P1^7 输出PWM信号控制舵机 #include "" sbit dula=P2^6; sbit wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e void delay(unsigned char i)// { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() // { TMOD = 0x01; // IE= 0x82; TH0= 0xfe; TL0= 0x33; // TR0=1; // } void Time0_Int() interrupt 1 // { TH0 = 0xfe; // TL0 = 0x33; if(count

智能小车循迹(舵机版)

#include #include #define uchar unsigned char #define uint unsigned int void scan(); void init_time0(); void Direction(uchar jd); void DELAY(uint xms); void pwm_ENA(uchar k); sbit l_1=P1^0; sbit l_2=P1^1; sbit l_3=P1^2; sbit cen=P1^3; sbit r_1=P1^6; sbit r_2=P1^5; sbit r_3=P1^4; sbit duoji=P2^7; sbit pwm1=P2^0; sbit pwm2=P2^1; uchar count,cycle,jd; uchar flag=0; void main() { DELAY(3000); P1=0x00; cycle=0; count=0; jd=12; init_time0(); while(1) { scan(); } } void scan() { if(cen==0) //中 { flag=0; } else if(r_1==0) //右1

{ flag=1; } else if(r_2==0) //右2 { flag=2; } else if(r_3==0) //右3 P14 { flag=3; } else if(l_1==0) //左1 { flag=4; } else if(l_2==0) //左2 P11 { flag=5; } else if(l_3==0) //左3 P12 { flag=6; } switch(flag) { case 0: {Direction(12);pwm_ENA(5);break;} // P13 case 1: {Direction(15);pwm_ENA(3);break;} // delay(1);;pwm_ENA1(1) P16 case 2: {Direction(14);pwm_ENA(3);break;} // P15 case 3: {Direction(13);pwm_ENA(4);break;} //run()run() P14 case 4: {Direction(9);pwm_ENA(3);break;} // delay(1) pwm_ENA1(1); P10 case 5: {Direction(10);pwm_ENA(3);break;} // P11

智能小车控制系统设计报告

智能小车控制系统 一、方案论证比较…………………………………………………… 1.车体模型的比较与选择……………………………………………… 2.驱动电机的比较与选择……………………………………………… 3.传感器的比较与选择………………………………………………… 4.电源的比较与选择…………………………………………………… 二、系统设计…………………………………………………… 三、系统调试………………………………………………………… 四、系统功能…………………………………………………… 五、设计总结………………………………………………… 六、小车程序………………………………………………………… 摘要:本系统采用AT89S52作为核心芯片,控制智能车的一系列动作。小车采用ULN2803A芯片驱动两步进电机,能精确控制小车的转弯,前进,后退等动作;结合两个红外对射管,对边界黑线进行检测,从而判断小车的位置,然后对红外对管输出的信号处理后控制小车做出各种动作。 关键词:超声波传感器红外线传感器

一、方案论证比较 1.车体模型的比较与选择 方案一、购买玩具电动车: 购买的玩具电动车具有组装完整的车架车轮。依靠电机与相关齿轮一起驱动,装配紧凑,使得各种所需电路的安装十分方便,看起来也比较美观,但是市面上多是用于飞思卡尔之类的车,较难找到完全符合比赛要求,在大小,前轮可转向以及价格方面都兼顾的车。 方案二、自己组装车: 一般的说来,自己制作的车体比较粗糙简陋,主要由几块基板组成,但胜在适合改造,基板表面对称着钻有许多孔,方便安装电路板、电源、车轮以及固定电机,还可以根据需要进行钻孔、拼接,而且价格比较便宜。 通过比较,选用方案二。 2.驱动电机的比较与选择 方案一、直流电机+转向舵机: 直流电机应用了“通电导体在磁场中受力的作用”的原理,励磁线圈两个端线同有相反方向的电流,使整个线圈产生绕轴的扭力,使线圈转动。直流电动机的调速范围宽广,调速特性平滑。起动力矩大。可以均匀而经济地实现转速调节。但是由于使用直流电机难以控制左右速度差实现转弯,必须加上转向舵机使小车实现转弯,这使小车的结构制造复杂,价格较高。 方案二、步进电机+万向轮: 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。由于每步的精度在3%-5%,而且不会将一步的误差积累到下一步因而有较好的位置精度和运动的重复性;优秀的起停和反转响应;仅仅将负载直接连接到电机的转轴上也可以极低速的同步旋转。由于速度正比于脉冲频率,因

wifi智能小车控制程序

#include #include #include #define uchar unsigned char #define uint unsigned int uchar Buffer =0; //从串口接收的数据 uint URTAReceivedCount=0,n=1; uchar data Tempdatatable[5],CommandDatatable[5];//数据包 uchar serVal[2]; uint pwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; //初始90度,(实际是1382.4,取整得1382) uchar pwm_flag=0; uint code ms0_5Con=461; //0.5ms计数(实际是460.8,取整得461) uint code ms2_5Con=2304; //2.5ms计数 bit key_stime_ok; sbit StatusLight=P2^0; //状态灯 sbit MainLight=P2^1; //主大灯 sbit servo0=P0^0; //舵机控制 sbit servo1=P0^1; sbit servo2=P0^2; sbit servo3=P0^3; sbit servo4=P0^4; sbit servo5=P0^5; sbit servo6=P0^6; sbit servo7=P0^7; //定义智能小车驱动模块输入IO sbit IN1 = P1^0; // 高电平1 后退(反转) sbit IN2 = P1^1; // 高电平1 前进(正转) sbit IN3 = P1^2; // 高电平1 前进(正转) sbit IN4 = P1^3; // 高电平1 后退(反转) sbit EN1 = P1^4; // 高电平使能 sbit EN2 = P1^5; // 高电平使能 /******************************************************************** * 名称: Delay_1ms() * 功能: 延时子程序,延时时间为1ms * x * 输入: x (延时一毫秒的个数) * 输出: 无

智能小车舵机控制

智能小车舵机控制 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

1 //只利用一个定时器 T0,定时时间为,定义一个角度标识,数值为 1、2、3、4、5, //实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为 40,实现周期为 20ms。 //每次进入定时中断,判断此时的角度标识,进行 //相应的操作。比如此时为 5,则进入的前 5 次中断期间,信号输出为高电平,即为的 //高电平。剩下的 35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间 //是 20ms,为一个周期。 //用51板上s1和s2按键 //用P1^7输出 PWM信号控制舵机 #include "" unsigned char count; //次数标识 sbit pwm =P1^7 ; //PWM信号输出 sbit jia =P3^0; //角度增加按键检测IO口 sbit jan =P3^1; //角度减少按键检测IO口 sbit jianwei=P3^4; //按键位 unsigned char jd; //角度标识 sbit dula=P2^6; sbit wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE= 0x82; TH0= 0xfe; TL0= 0x33; //晶振, TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count

智能小车PID运动控制系统设计

智能小车PID运动控制系统设计 学生姓名: 学生学号: 院(系):电气信息工程学院 年级专业:电子信息工程 指导教师: 助理指导教师: 二〇一五年五月

摘要 本文主要介绍了智能小车控制系统的软硬件设计及开发过程。车模系统的简单工作原理是单片机收集红外传感器返回来的赛道信息,通过相应运算后,软件判断其有效性,结合控制算法控制随动舵机给出合理舵值,控制前轮舵机转向,单片机再给出合适的PWM波占空比以控制电机转速。 小车设计主要包括硬件电路设计和软件控制设计两大部分。此智能车系统采用模块化设计思想,完成了系统硬件电路的设计,其主要包括核心控制模块、电源管理模块、电机驱动模块、舵机控制模块、车速检测模块、路径识别模块等。本系统以16位的微处理器AT89S52为控制核心,AT89S52微控制器是M68CHS12系列16位单片机中一种,其内部结构主要有单片机的基本部分和CAN 的功能块部分组成。 为了提高系统性能的运行,对控制策略转向、行驶速度策略控制及后轮驱动闭环PID算法控制策略等进行了详细的分析与详细设计。在此基础上,完成了该系统软件的具体方案设计和实现。 关键词模块化PID 单片机PWM

ABSTRACT This paper mainly introduces the hardware and software of the control system of intelligent car design and development process. The simple models system working principle is to collect infrared sensor mcu return circuit information, through the corresponding operation, the software judge its effectiveness, combining control algorithm with dynamic steering gear control, reasonable front wheel steering gear control rudder values steering,mcu and then presents the right PWM waves occupies emptiescompared to control motor speed. Car design includes hardware circuit and software control design of two parts. The smart car system adopts the idea of modular design, complete the hardware circuit design, and its main including core control module, power management module, motor driver module, steering gear control module, speed detection module, path recognition module, etc.This system to MC9S12DG128 as control core, M68HC12 series MC9S12DG128 microcontroller is one of 16 bit mcu, its internal structure is mainly a mcu basic parts and CAN function blocks parts. In order to improve the operation of the system performance, the steering control strategy and speed closed-loop control strategies and rear wheel drive strategy of PID control algorithm is a detailed analysis and design. On this basis, completed the specific software system design and implementation. Keywords modular PID MCU PWM

舵机及转向控制原理

舵机及转向控制原理 1、概述 2、舵机的组成 3、舵机工作原理 4、舵机选购 5、舵机使用中应注意的事项 6、辉盛S90舵机简介 7、如何利用程序实现转向 8、51单片机舵机测试程序 1、概述 舵机也叫伺服电机,最早用于船舶上实现其转向功能,由于可以通过程序连续控制其转角,因而被广泛应用智能小车以实现转向以及机器人各类关节运动中,如图1 、图2 所示。 图1 舵机用于机器人

图2 舵机用于智能小车中 舵机是小车转向的控制机构,具有体积小、力矩大、外部机械设计简单、稳定性高等特点,无论是在硬件设计还是软件设计,舵机设计是小车控制部分重要的组成部分,图3为舵机的外形图。 图3 舵机外形图 2、舵机的组成 一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路等,如图4、图5所示。

图4 舵机的组成示意图 图5 舵机组成 舵机的输入线共有三条,如图6所示,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会搞错。

图6 舵机的输出线 3、舵机工作原理 控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机转动的方向和速度,从而达到目标停止。其工作流程为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。 流,才可发挥舵机应有的性能。 舵机的控制信号周期为20MS的脉宽调制(PWM)信号,其中脉冲宽度从0.5-2.5MS,相对应的舵盘位置为0-180度,呈线性变化。也就是说,给他提供一定的脉宽,它的输出轴就会保持一定对应角度上,无论外界转矩怎么改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应位置上如图7所求。舵机内部有一个基准电路,产生周期为20MS,宽度1.5MS的基准信号,有一个比出较器,将外加信号与基准信号相比较,判断出方向和大小,从而生产电机的转动信号。由此可见,舵机是一种位置伺服驱动器,转动范围不能超过180度,适用于那些需要不断变化并可以保持的驱动器中,比如说机器人的关节、飞机的舵面等。

舵机工作原理详解及智能车单片机(飞思卡尔)控制的实现(程序)

舵机工作原理详解及单片机(飞思卡尔和51)控制的实现(程序) 1、概述 舵机最早出现在航模运动中。在航空模型中,飞行机的飞行姿态是通过调节发动机和各个控制舵面来实现的。举个简单的四通飞机来说,飞机上有以下几个地方需要控制: 1.发动机进气量,来控制发动机的拉力(或推力); 2.副翼舵面(安装在飞机机翼后缘),用来控制飞机的横滚运动; 3.水平尾舵面,用来控制飞机的俯仰角; 4.垂直尾舵面,用来控制飞机的偏航角; 遥控器有四个通道,分别对应四个舵机,而舵机又通过连杆等传动元件带动舵面的转动,从而改变飞机的运动状态。舵机因此得名:控制舵面的伺服电机。 不仅在航模飞机中,在其他的模型运动中都可以看到它的应用:船模上用来控制尾舵,车模中用来转向等等。由此可见,凡是需要操作性动作时都可以用舵机来实现。 2、结构和控制 一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等。 工作原理:控制电路板接受来自信号线的控制信号(具体信号待会再讲),控制电机转 动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。舵机的基本结构是这样,但实现起来有很多种。例如电机就有有刷和无刷之分,齿轮有塑料和金属之分,输出轴有滑动和滚动之分,壳体有塑料和铝合金之分,速度有快速和慢速之分,体积有大中小三种之分等等,组合不同,价格也千差万别。例如,其中小舵机一般称作微舵,同种材料的条件下是中型的一倍多,金属齿轮是塑料齿轮的一倍多。需要根据需要选用不同类型。

智能小车舵机控制

1 //只利用一个定时器 T0,定时时间为,定义一个角度标识,数值为 1、2、3、4、5, //实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为 40,实现周期为 20ms。//每次进入定时中断,判断此时的角度标识,进行 //相应的操作。比如此时为 5,则进入的前 5 次中断期间,信号输出为高电平,即为的 //高电平。剩下的 35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间 //是 20ms,为一个周期。 //用51板上s1和s2按键 //用P1^7输出 PWM信号控制舵机 #include "" unsigned char count; //次数标识 sbit pwm =P1^7 ; //PWM信号输出 sbit jia =P3^0; //角度增加按键检测IO口 sbit jan =P3^1; //角度减少按键检测IO口 sbit jianwei=P3^4; //按键位 unsigned char jd; //角度标识 sbit dula=P2^6; sbit wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE= 0x82; TH0= 0xfe; TL0= 0x33; //晶振, TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count

飞思卡尔智能车制作全过程---舵机篇

飞思卡尔智能车制作全过程---舵机篇 智能车的制作中,看经验来说,舵机的控制是个关键.相比驱动电机的调速,舵机的控制对于智能车的整体速度来说要重要的多. PID算法是个经典的算法,一定要将舵机的PID调好,这样来说即使不进行驱动电机的调速(匀速),也能跑出一个很好的成绩. 机械方面: 从我们的测试上来看,舵机的力矩比较大,完全足以驱动前轮的转向.因此舵机的相应速度就成了关键.怎么增加舵机的响应速度呢?更改舵机的电路?不行,组委会不允许.一个非常有效的办法是更改舵机连接件的长度.我们来看看示意图: 从上图我们能看到,当舵机转动时,左右轮子就发生偏转.很明显,连接件长度增加,就会使舵机转动更小的转角而达到同样的效果.舵机的特点是转动一定的角度需要一定的时间.不如说(只是比喻,没有数据),舵机转动10度需要2ms,那么要使轮子转动同样的角度,增长连接件后就只需要转动5度,那么时间是1ms,就能反应更快了.据经验,这个舵机的连接件还有必要修改.大约增长0.5倍~2倍. 在今年中,有人使用了两个舵机分别控制两个轮子.想法很好.但今年不允许使用了.

接下来就是软件上面的问题了. 这里的软件问题不单单是软件上的问题,因为我们要牵涉到传感器的布局问题.其实,没有人说自己的传感器布局是最好的,但是肯定有最适合你的算法的.比如说,常规的传感器布局是如下图: 这里好像说到了传感器,我们只是略微的一提.上图只是个示意图,意思就是在中心的地方传感器比较的密集,在两边的地方传感器比较的稀疏.这样做是有好处的,大家看车辆在行驶到转弯处的情况: 相信看到这里,大家应该是一目了然了,在转弯的时候,车是偏离跑道的,所以两边比较稀疏还是比较科学的,关于这个,我们将在传感器中在仔细讨论。 在说到接下来的舵机的控制问题,方法比较的多,有人是根据传感器的状态,运用查表法差出舵机应该的转角,这个做法简单,而且具有较好的滤波"效果",能够将错误的传感器状态滤掉;还有人根据计算出来的传感器的中心点(比

相关主题