浅谈自己的电磁智能车调试之路(1 )电磁

        我是一名大一新生,刚接触智能车不久,发表博客的目的是可以通过自我分析和总结来提升自己,这上面也有很多的大佬,内容如有不当之处欢迎各位大佬批评指点。

        我使用的是逐飞的CH32V307VCT6芯片。我使用的是电磁巡迹的方式,采用了6个电感。具体排布方式如下:

bfd42cf5c8884a40a537d2dabe6e5f59.jpeg

电磁代码部分:

//初始化ADC
    adc_init(ADC_IN10_C0);
    adc_init(ADC_IN11_C1);
    adc_init(ADC_IN12_C2);
    adc_init(ADC_IN13_C3);
    adc_init(ADC_IN14_C4);
    adc_init(ADC_IN15_C5);
void Get_adc(void)	//ADC获取并处理
{
	int i = 0;
	float dat[6] = {0};
    int temp[6][10] = {0};
    for( i = 0;i < 10;++i){
        temp[0][i] = adc_convert(ADC_IN11_C1, ADC_12BIT);
        temp[1][i] = adc_convert(ADC_IN10_C0, ADC_12BIT);
        temp[2][i] = adc_convert(ADC_IN13_C3, ADC_12BIT);
        temp[3][i] = adc_convert(ADC_IN12_C2, ADC_12BIT);
        temp[4][i] = adc_convert(ADC_IN15_C5, ADC_12BIT);
        temp[5][i] = adc_convert(ADC_IN14_C4, ADC_12BIT);


    }
    for( i = 0; i < 6; i++)
        {
        dat[i] = MedianFilter( &temp[i][0],10);
        }

	for( i = 0;i < 6;++i)
	    adc[i] = (float)dat[i] / (4096.0f);

}

        电感跟电磁线垂直时采集到的数值理论上是最大的,因此我认为在直线寻迹时横电感起最主要的作用、弯道寻迹时斜电感起主要作用、十字判断时竖电感最容易识别。

        接下来仅为我个人调车时的步骤和方法,能力有限,仅供参考。

         第一步,我会将车模放到赛道的一条直道上,并且让车模尽量在赛道的正中间并将车身摆正,我认为这一点比较重要,若车身有较大的倾斜会对车辆寻迹的路径出现偏移。调整好车模后观察两个横电感以及2个斜电感的数值,将两对电感分别调到一个合适的相同的数值(个人建议靠外的2个电感数值小一些,而靠内的2个电感数值调大一些,这个车可能会好调一点)。

640bd6f8ced74fc58cd78a546061ca48.png

        第二步,将车模放到右转90度角的前面大概3-5cm的地方,同时要保证车模在直道的延长线上不发生偏移,然后记录斜电感对的误差、横电感对的误差以及总误差,误差函数如下。

1aa6d9ff51e84cf2ad2a834a883c41c5.png

//-------------------------------------------------------------------------------------------------------------------
//  @brief      比值法计算error
//  @param      全局数组w_walue[]   0~3从左到右
//  @param      MODE 1~3 1:斜放一对电感   2:垂直一对电感    3:两对电感组合  4:竖放一对电感
//  @return     error
//  Sample usage:               error=Get_Error(void);
//-------------------------------------------------------------------------------------------------------------------
float Get_Error(unsigned char MODE)
{
    float error;
    switch(MODE){
    case 1:
    error=( sqrt(adc[3]) - sqrt(adc[0]) )/(  adc[0] + adc[3] );break;
    case 2:
    error=( sqrt(adc[2]) - sqrt(adc[1]) )/( adc[2] + adc[1] );break;
    case 3:
    error=( (sqrt(adc[3]) + sqrt(adc[2]) - sqrt(adc[1]) - sqrt(adc[0]) )/( adc[0] + adc[3] + adc[2] + adc[1] ));break;
    case 4:
        error=( sqrt(adc[5]) - sqrt(adc[4]) )/(  adc[5] + adc[4] );break;
    }
    return error;
}

 这里是低端版的模糊pid

if(xie_error > 1.2 &&(chuizhi_error>=0.23||chuizhi_error<=-0.23))          //识别为右转
        {
           Steer_pid.Kp = xie_error*lstcs1+lstcs2  ;
        }
        else if(xie_error < -1.2&&(chuizhi_error>=0.26||chuizhi_error<=-0.26) )    //识别为左转
        {
          
           Steer_pid.Kp = -xie_error*lstcs01+lstcs02  ;
        }
        else          //识别为直道
        {                                                                               
           Steer_pid.Kp = 50;
        }

        第三步,按照第二步的方法测出并记录左转时的3个误差值。

        第四步,通过记录的数值修改代码中的参数。

        最后实现了上述步骤就可以基本实现寻迹功能,如果要完善车辆运行时的路径则需要调pid的参数、电感误差值等,这些部分后面再说。

         我最近建了一个嵌入式的QQ交流群,感兴趣的可以进群了解一下,我会在群里分享一些常用的代码封装,以及一些项目的源码。QQ群讨论也是完全开放,只要不打广告大家可以就嵌入式尽情的沟通和交流,大家对文章中的内容有疑问也可以在群中提出,有空会尽我所能给大家一些帮助。QQ群号:643408467

  • 10
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PID电机控制目录 第1 章 数字PID 控制 1.1 PID 控制原理 1.2 连续系统的模拟PID 仿真 1.3 数字PID 控制 1.3.1 位置式PID 控制算法 1.3.2 连续系统的数字PID 控制仿真 1.3.3 离散系统的数字PID 控制仿真 1.3.4 增量式PID 控制算法及仿真 1.3.5 积分分离PID 控制算法及仿真 1.3.6 抗积分饱和PID 控制算法及仿真 1.3.7 梯形积分PID 控制算法 1.3.8 变速积分PID 算法及仿真 1.3.9 带滤波器的PID 控制仿真 1.3.10 不完全微分PID 控制算法及仿真 1.3.11 微分先行PID 控制算法及仿真 1.3.12 带死区的PID 控制算法及仿真 1.3.13 基于前馈补偿的PID 控制算法及仿真 1.3.14 步进式PID 控制算法及仿真 第2 章 常用的PID 控制系统 2.1 单回PID 控制系统 2.2 串级PID 控制 2.2.1 串级PID 控制原理 2.2.2 仿真程序及分析 2.3 纯滞后系统的大林控制算法 2.3.1 大林控制算法原理 2.3.2 仿真程序及分析 2.4 纯滞后系统的Smith 控制算法 2.4.1 连续Smith 预估控制 2.4.2 仿真程序及分析 2.4.3 数字Smith 预估控制 2.4.4 仿真程序及分析 第3 章 专家PID 控制和模糊PID 控制 3.1 专家PID 控制 3.1.1 专家PID 控制原理 3.1.2 仿真程序及分析 3.2 模糊自适应整定PID 控制 3.2.1 模糊自适应整定PID 控制原理 3.2.2 仿真程序及分析 3.3 模糊免疫PID 控制算法 3.3.1 模糊免疫PID 控制算法原理 3.3.2 仿真程序及分析 第4 章 神经PID 控制 4.1 基于单神经元网络的PID 智能控制 4.1.1 几种典型的学习规则 4.1.2 单神经元自适应PID 控制 4.1.3 改进的单神经元自适应PID 控制 4.1.4 仿真程序及分析 4.1.5 基于二次型性能指标学习算法的单神经元自适应PID 控制 4.1.6 仿真程序及分析 4.2 基于BP 神经网络整定的PID 控制 4.2.1 基于BP 神经网络的PID 整定原理 4.2.2 仿真程序及分析 4.3 基于RBF 神经网络整定的PID 控制 4.3.1 RBF 神经网络模型 4.3.2 RBF 网络PID 整定原理 4.3.3 仿真程序及分析 4.4 基于RBF 神经网络辨识的单神经元PID 模型参考自适应控制 4.4.1 神经网络模型参考自适应控制原理 4.4.2 仿真程序及分析 4.5 基于CMAC(神经网络)与PID 的并行控制 4.5.1 CMAC 概述 4.5.2 CMAC 与PID 复合控制算法 4.5.3 仿真程序及分析 4.6 CMAC 与PID 并行控制的Simulink 仿真 4.6.1 Simulink 仿真方法 4.6.2 仿真程序及分析 第5 章 基于遗传算法整定的PID 控制 5.1 遗传算法的基本原理 5.2 遗传算法的优化设计 5.2.1 遗传算法的构成要素 5.2.2 遗传算法的应用步骤 5.3 遗传算法求函数极大值 5.3.1 遗传算法求函数极大值实例 5.3.2 仿真程序 5.4 基于遗传算法的PID 整定 5.4.1 基于遗传算法的PID 整定原理 5.4.2 基于实数编码遗传算法的PID 整定 5.4.3 仿真程序 5.4.4 基于二进制编码遗传算法的PID 整定 5.4.5 仿真程序 5.5 基于遗传算法摩擦模型参数辨识的PID 控制 5.5.1 仿真实例 5.5.2 仿真程序 第6 章 先进PID 多变量解耦控制 6.1 PID 多变量解耦控制 6.1.1 PID 解耦控制原理 6.1.2 仿真程序及分析 6.2 单神经元PID 解耦控制 6.2.1 单神经元PID 解耦控制原理 6.2.2 仿真程序及分析 6.3 基于DRNN 神经网络整定的PID 解耦控制 6.3.1 基于DRNN 神经网络参数自学习PID 解耦控制原理 6.3.2 DRNN 神经网络的Jacobian 信息辨识 6.3.3 仿真程序及分析 第7 章 几种先进PID 控制方法 7.1 基于干扰观测器的PID 控制 7.1.1 干扰观测器设计原理 7.1.2 连续系统的控制仿真 7.1.3 离散系统的控制仿真 7.2 非线性系统的PID 鲁棒控制 7.2.1 基于NCD 优化的非线性优化PID 控制 7.2.2 基于NCD 与优化函数结合的非线性优化PID 控制 7.3 一类非线性PID 控制器设计 7.3.1 非线性控制器设计原理 7.3.2 仿真程序及分析 7.4 基于重复控制补偿的高精度PID 控制 7.4.1 重复控制原理 7.4.2 基于重复控制补偿的PID 控制 7.4.3 仿真程序及分析 7.5 基于零相差前馈补偿的PID 控制 7.5.1 零相差控制原理 7.5.2 基于零相差前馈补偿的PID 控制 7.5.3 仿真程序及分析 7.6 基于卡尔曼滤波器的PID 控制 7.6.1 卡尔曼滤波器原理 7.6.2 仿真程序及分析 7.6.3 基于卡尔曼滤波器的PID 控制 7.6.4 仿真程序及分析 7.7 单级倒立摆的PID 控制 7.7.1 单级倒立摆建模 7.7.2 单级倒立摆控制 7.7.3 仿真程序及分析 7.8 吊-双摆系统的控制 7.8.1 吊-双摆系统的建模 7.8.2 吊-双摆系统的仿真 第8 章 灰色PID 控制 8.1 灰色控制原理 8.1.1 生成数列 8.1.2 GM 灰色模型 8.2 灰色PID 控制 8.2.1 灰色PID 控制的理论基础 8.2.2 连续系统灰色PID 控制 8.2.3 仿真程序及分析 8.2.4 离散系统灰色PID 控制 8.2.5 仿真程序及分析 8.3 灰色PID 的位置跟踪 8.3.1 连续系统灰色PID 位置跟踪 8.3.2 仿真程序及分析 8.3.3 离散系统灰色PID 位置跟踪 8.3.4 仿真程序及分析 第9 章 伺服系统PID 控制 9.1 伺服系统低速摩擦条件下PID 控制 9.1.1 Stribeck 摩擦模型描述 9.1.2 一个典型伺服系统描述 9.1.3 仿真程序及分析 9.2 伺服系统三环的PID 控制 9.2.1 伺服系统三环的PID 控制原理 9.2.2 仿真程序及分析 9.3 二质量伺服系统的PID 控制 9.3.1 二质量伺服系统的PID 控制原理 9.3.2 仿真程序及分析 第10 章 PID 实时控制的C++语言设计及应用 10.1 M 语言的C++转化 10.2 基于C++的三轴飞行模拟转台伺服系统PID 实时控制 10.2.1 控制系统构成 10.2.2 系统各部分功能的软件设计 10.2.3 仿真程序及分析 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值