关键词不能为空

当前您在: 主页 > 英语 >

用51单片机做小车的控制

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 23:54
tags:

-

2021年2月1日发(作者:沭)





51

< p>
做小车的相关思路和程序







51< /p>


小车作为一种入门小车,其基本原理与飞思卡尔比赛的小车相似,共分为硬件和软


件两个部分。其中软件部分可分为传感器数据采集,舵机控制,速度控制等,这里现在对


51


小车的软件进行一个详细的介绍







1.


程序思路概述:



首先


51


单片机需要通过红外传感器监测道路信息,然 后将传感器得到的数据进行转换。最


后将转换后的数据通过某种控制算法,


计算出舵机和电机的控制量,


使小车能够沿着跑道行


驶。主体控制流程可以表示为如下图形:









2.


程序算法



2.1


数据采集


小车传感器为8个红外对管,


经过电压比较器后,


每个红外 对管都有0和1两种状态。


因此,


1



8个红外对管产生的数据刚好为1个字节。因此程序有两种方式将这8位数据读入:


1


、可


以将I


/< /p>


O口数据当做一个字节,直接赋给一个字符变量;


2


、将


8


位数据按位读取,分别赋

给字符变量的每一位。我们的示例程序中采用的就是第二种方法。










2.2


数据处理





由于读入的数据并不方便直接参与 控制计算,


因此先将该数据集分成16类,


分别对应于小


车不同的位置信息,由


-7~+7


表示,其中


+7


表示引导线位于小车最左侧,


0< /p>


表示引导线位


于小车中部,


-7


表示引导线位于小车最右侧,


8


表示未检测到引 导线或其他错误情况。







2.3


控制算法


上面的转换后的数据可以作为控制计算的输入,


即小车与赛道的偏差信息。


方向的控制算法


可以采用位置型


PD

< p>
算法。



其中P为比例环节,

简单的说就是根据当前小车与赛道的偏差直接进行控制,


偏离多少就转


多少,偏离越多,舵机转向越多。


可以通过调节比例系数改变转向的幅度。系 数越大,转向


幅度越大,转向越快。



D称为微分环节



这里的微分信息指上面偏差信息的微分,


可以简单理解为小车偏离赛道的


速率。


可以 简单的将本次的偏差信息与上一次偏差的差值算作微分项。


微分项的控制方法是


说,


小车偏离跑道越快,


方向就要转的越多,< /p>


反之则转向越小。


因此当小车逐渐靠近跑道时,

< br>微分项可以使小车偏转量减小,


使小车不至于偏向另一边。


可以通过改变微分项的系数来改


变这种调节作用的程度。


一般 来讲,


微分系数越大,小车对于弯道的响应就越灵敏,行驶时


也 更稳定。



由于小车在不同的位置时,


可能需要不同的比例系数或微分系数,


因此可以考虑在不同的情


况下,采用不同的系数进行运算。示例程序中采用的就是这种方法。




速度控制也可以采用PD算法进行控制。

为了使程序简单化,


示例程序中采用了匀速的控制


方式。想 要提高成绩的同学可以自行加入速度控制程序











2




.


4生成 PWM



由于


51

单片机没有


PWM


模块,因此需要通过通用


I/O


口进行模拟来输出舵机和电机所需


< p>
PWM


波。



可以分别使 用一个定时器来作为一路


PWM


波的计时器。先将


I/O


口置位,通过高电平时间


确定好定时器的初值 ,当定时器产生中断时,再将


I/O


口清零,并设定低电平时间 ,由此循


环即可产生


PWM


波。其中, 高电平时间由上面的控制计算得出,低电平时间由


PWM


周期< /p>


减去高电平时间得到。




鲫鱼电子工作室开发的


51


智能车是一种入门型智能 小车,基本原理和参加飞思卡尔比赛的


小车相似,


但是其制作要 比正式比赛的小车简单。


目的是为了让大家更快地进入飞思卡尔小


车的制作,对智能小车有个更好的理解。



51


小车分为硬件和软件两个部分,其中硬件又分为三个主要模块,


51


核心板模块,传感器


模块,扩展板模块。软件部分分为传感器数据采集, 舵机控制,速度控制等。






51


核心板



51


核心板包括几个小的部分,下载部分,单片机最小系统部分 ,


led


用户灯,通用


IO

< p>
接口。


这次开发的


51


核 心板的主控芯片为


STC


,选择这块芯片的一个重要原因是他的 下载调试方


便,可以通过串口直接下载,同时又有


51


单片机的所有资源。



下载部分主要使用了一片


PL2303


,它是一片


USB


转串口功能的芯片,由于现在大部分计


算机都不包括串口,但每台计算 机都有


USB


口,于是我们想是否可以通过

USB


下载,最后


在网上找到了一片


USB


转串口的芯片,这样我们下载程序将更简单,不需要再单独购买


51


下载器,极大地方便了同学们的调试。



下载部分具体原理图如下:




#include //


包括一个


52


标准内核的头文件



#include



/*****************


定义数据类型(方便移植)


**************** */


typedef unsigned char UINT8;


typedef char SINT8;


typedef unsigned int UINT16;


typedef int SINT16;


/****************************** ****************************/


< br>/*****************


定义布尔值(增强程序可读性)


*************/


#define HIGH_LEVEL 1


#define LOW_LEVEL 0


/******************************************** ***************/


3




/**********


定义相关常 数


(移植于不同的小车时,


需根据实际情况改变该常数


***********/


#define SERVOMID 1270 //


舵机中值



#define SERVOMOSTLEFT 1680 //


舵机左值



#define SERVOMOSTRIGHT 870 //


舵机右值



#define SERVO_PERIOD 20000 //


舵机


PWM


周期:


20ms


,晶振


12M


公 式:计数值


=


定时时间


*


晶振



//


频率

< p>
/12


,如


20ms


:< /p>



计数值


=0.02 s * 12 000 000 Hz/12 = 20000


#define MOTOR_PERIOD 10000 //


电机


PWM < /p>


周期:


10ms


,晶振

< br>12M


/******************************* *******************************/


< p>
/*****************


输出口定义


*************************/


sbit SevorPort = P0^1;


sbit MotorPort = P0^6;


sbit P20 = P2^0;


sbit P21 = P2^1;


sbit P22 = P2^2;


sbit P23 = P2^3;


sbit P24 = P2^4;


sbit P25 = P2^5;


sbit P26 = P2^6;


sbit P27 = P2^7;


/************************************************ *******/



//**************** *


定义公共变量


********************* *****/


UINT8 KServoD=10; //


舵机


D


参数



UINT8 KServoP[5]={65,40,10,40,65}; //


舵机分段


P


参数



UINT8 SampleData=0; //


采样数据



SINT8 Offset=0; //


当前赛道位置



SINT8 LastOffset[2]={0}; //


上一次赛道位置



UINT16 SevorPWM=0; //


舵机


PWM


高电平时间



UINT16 MotorPWM=0; //


电机


PWM


高电平时间



/********** *********************************************/




/************** ******


初始化函数


***************** ********/


void Init(void)


{




TMOD=0x11; //


定时器


0



16


位工作方式


;


定时器

< br>1



16


位工作方式





TR0=1; //


启动定时器


0




TR1=1; //


启动定时器


1




ET0=1; //


打开定时器


0


中断





ET1=1; //


打开定时器


0


中断





EA=1; //


打开总中断



4


-


-


-


-


-


-


-


-



本文更新与2021-02-01 23:54,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/595955.html

用51单片机做小车的控制的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文