有没有朋友有智能车制作PID算法的程序啊,关于智能车制作在两条黑线中行走用PID实现,C程序。

 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
智能车辆控制系统pid算法的设计
下载积分:688
内容提示:智能车辆控制系统pid算法的设计,pid算法,pid算法c语言,pid控制算法,pid算法c程序,增量式pid算法,pid算法视频教程,数字pid控制算法,增量式pid算法公式,增量式pid控制算法
文档格式:PDF|
浏览次数:1|
上传日期: 14:52:21|
文档星级:
该用户还上传了这些文档
下载文档:智能车辆控制系统pid算法的设计.PDF
官方公共微信查看: 413|回复: 4
【2014电赛复赛】E题-智能平衡电动小车-PID算法
本帖最后由 JaceLin 于
23:00 编辑
这里只说寻迹算法,其他功能实现不提,可自行下载源码研究:
注:本程序虽然已经能完成了复赛的所有功能,但不是很完美,仅供参考,,欢迎修改&发布。
一、说明:
1、本程序用到了7个红外对光管
2、本程序适用于任何单片机,自行更换底层硬件接口
3、经测试,本程序能相对稳定、高速控制小车
4、本程序只用到了位式PID算法的P算法,不带ID
5、本程序为开环PID算法,不带测速反馈(电赛只有4天,能省就省)
1、红外部分
红外部分是7个led,为了省事,我们就把led接到连续的地址上(51单片机可以用连续的Px0-6/Px1-7,其他单片机可以自行定义I/O口,只要符合内存地址连续)。
下面是LED读取与处理,目的是取得PID的偏差量:Infrared.c 文件//硬件初始化函数,主要为设置单片机引脚为输入功能,51单片机可以省去这一步
void InfraredInit()
{
&&Select_function(INFRARED_PORT,0,6,ALT1|PULLUP);&&//gpio功能
&&Gpio_Dir(INFRARED_PORT,INFRARED,Input);& && && &//输入
}
//取得IO电平
unsigned char GetInfrared()
{
&&unsigned char data = ptb_input(0);//PTD0-7
&&return (data%128);//去掉第8位
}
//偏差计算,方向PID里面用到
int InfraredValue=0;//偏差值
void InfraredOffset(unsigned char value)
{
&&switch(value)
&&{
&&case 0: //没有黑线时,的小车状态,这里设定为直走,可以改变
& & InfraredValue=0 ;
& &
case 127: //停车用,可以删除
& &if(StopCarTimes)
& &{
& &&&if(GetRoadDistance()&60)
& &&&{
& && & StopFlag=1;
& &&&}
& &}
& &
&&//&&左& &1-2-3-0-3-2-1& &&&右
& &
& &/*---------------右边------------*/
&&case 1: //右边1
& & InfraredValue=6 ;
& &
&&case 2: //右边2
& & InfraredValue=4 ;
& &
&&case 4: //右边3
& & InfraredValue=2 ;
& &
&&case 3:
& & InfraredValue=5 ;
& &
&&case 6:
& & InfraredValue=3 ;
& &&&
&&case 12:
& & InfraredValue=1 ;
& &
&&/*--------------中间--------------*/&&
&&case 8:&&// 中点
& & InfraredValue=0 ;
& &&&
& &
&&/*---------------左边-------------*/&&
&&case 16: //左边 3
& & InfraredValue=-2 ;
& &&&
&&case 32: //左边 2
& & InfraredValue=-4 ;
& &&&
&&case 64: //左边1
& & InfraredValue=-6 ;
& &&&
&&case 24:
& & InfraredValue=-1 ;
& &&&
&&case 48:
& & InfraredValue=-3 ;
& &
&&case 96:
& & InfraredValue=-5 ;
& &
& &
default: //保持
& &
& &
&&}
}复制代码
2、红外方向控制PID处理偏差值:
首先PID用的是位式PID的P算法 ,完整的公式为&&:
Pout = Kp*offset + ∫Ki*offset + Kd*(offset -offset_last)
Pout:PID计算结果,此值会在 速度PID算法中用到 (速度控制用的是闭环,所以本程序不带速度PID)。
offset 为本次偏差,offset_last是上次的偏差
Kp& & :&&比例参数,这个值可以自己估算,这个值非常重要!转弯效果就靠它!!!
Ki& & : 积分参数,这个 ∫Ki*offset& & 可以明显看出,它的输出是与过去偏差有关的,此值具有一定的滞后性!!!
Kd& &: 微分参数
好,再看看本程序中用到的PID算法公式:
Pout = Kp*offset
pout :PID计算结果,此值会在 速度PID算法中用到 (速度控制用的是闭环,所以本程序不带速度PID)。
Kp& &&&: 比例参数,这个值可以自己估算,这个值非常重要!转弯效果就靠它!!!
这里的offset 我们更加具体一点,offset 就是 红外处理函数里面的 InfraredValue
值得一提的是,本程序并不是直接令 offset = IfraredValue,而是 用的偏差二次方!
为什么?因为 pout 和 offset 并不是 一次线性函数关系,正确来讲这个关系很像二次函数!
所以红外方向控制PID程序如下:DirectionControl.c 文件/*--------变量--------*/
//PID参数& && && && && && && && && && && && && && && && && && && && && && && && && &&&
float DirectionControl_P=25; /值大过弯就急
float DirectionControl_I=0;&&//Ki参数,不用
float DirectionControl_D=0;&&//Kd参数,不用
//P控速的输出
float g_fDirectionControlOut=0;
//停车与开车控制标志
int DirectionControlFlag=0;
static int ExpDirValue=0;//方向期望值
extern int InfraredV//红外函数里面声明,偏差值
//偏差值
float offset=0;
void DirectionControl()
{
&&
&&if(DirectionControlFlag==0)//停车函数,可以删除
&&{
& & g_fDirectionControlOut=0;
& &
&&}
&&offset=ExpDirValue-InfraredV//左偏+,右偏-
&&//二次方
&&if(offset&0)
& & offset=offset*(-offset);
&&else
& & offset=offset*
&&g_fDirectionControlOut= DirectionControl_P*& && && && && && &
&&
}复制代码
3,速度控制函数:SpeedControl.c文件
/*-------变量--------*/
/*控制输出限幅*/
#define MOTOR_OUT_MAX& && &&&900
#define MOTOR_OUT_MIN& && & 0//-900&&//由于小车用不到反转轮子,所以最小值定义为0
//P控速的输出,在DirectionControl.c内定义&&
extern float g_fDirectionControlO
//停车与开车控制标志
extern int DirectionControlF
//此值是 速度闭环值,此值很关键!!!它就是控制小车速度快慢的值!!!相当于速度
//本程序用的pwm精度是1000,可以根据自己的单片机修改
float g_fSpeedSet=800;
/*------------------------------------------------------------------
* 函数说明:
& && && && & 方向控制输出g_fDirectionControlOut :左转&0,右转&0
* 函数输入:
* 函数输出:
*
*------------------------------------------------------------------*/
void MotorOutput()
{
&&float Lout,R
&&Lout = g_fSpeedSet-g_fDirectionControlO
&&Rout = g_fSpeedSet+g_fDirectionControlO
&&
&&if(Lout&MOTOR_OUT_MAX) Lout=MOTOR_OUT_MAX;& & //防过冲
&&else if(Lout&MOTOR_OUT_MIN) Lout=MOTOR_OUT_MIN;
&&
&&if(Rout&MOTOR_OUT_MAX) Rout=MOTOR_OUT_MAX;& &//防过冲
&&else if(Rout&MOTOR_OUT_MIN) Rout=MOTOR_OUT_MIN;
&&SetMotorPWM(Lout,Rout);&&
}
/*------------------------------------------------------------------
* 函数说明:把速度控制 与 方向控制结合结果给电机输出
& && && && &小车方向为:安装电池的一边为正转方向,否则为反转方向
*
* 函数输入:
* 函数输出:
*
*------------------------------------------------------------------*/
void SetMotorPWM(float Lout,float Rout)
{
&&//printf(&Lout=%d,Rout=%d \n&,(int)Lout,(int)Rout);
&&if(Lout&=0) //正转
&&{
& &&&L1((uint32)Lout);L2(0);&&
&&}
&&else& && &//反转
&&{
& &&&L1(0);L2((uint32)Lout);
&&}
&&//////右边电机
&&if(Rout&=0) //正转
&&{
& &&&R1((uint32)Rout);R2(0);
& && &
&&}
&&else& && &//反转
&&{
& &&&R1(0);R2((uint32)Rout);
&&}
}复制代码
4、主函数
void main()
{
SystemInit();//硬件初始化
InfraredOffset(GetInfrared());//红外处理,求偏差
DirectionControl();//方向控制,求方向PID值
MotorOutput();&&//方向和速度结合,电机控制
本帖子中包含更多资源
才可以下载或查看,没有帐号?
楼主很厉害。我想请问楼主在题目里面怎么样控制电机的平衡,不会让上面的球掉出来!
楼主很厉害。我想请问楼主在题目里面怎么样控制电机的平衡,不会让上面的球掉出来! ...
程序已经上传了,这里我就不解释了,有空你可以下载自行研究。。。基于间接PID的智能车控制算法研究_徐莺_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
63页免费73页免费5页免费56页2下载券7页免费 11页1下载券4页免费6页免费6页免费3页免费
喜欢此文档的还喜欢1页免费8页免费
基于间接PID的智能车控制算法研究_徐莺|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢飞思卡尔杯全国大学生智能汽车竞赛技术报告,基于PID算法的图像处理智能车控制系..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于PID算法的图像处理智能车控制系统设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于视觉的智能车模糊PID控制算法.pdf
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 智能车制作 的文章

 

随机推荐