当前位置: 移动技术网 > 科技>人工智能>嵌入式 > 四轮寻迹智能车的设计(逐飞IMX-RT1064)

四轮寻迹智能车的设计(逐飞IMX-RT1064)

2020年10月24日  | 移动技术网科技  | 我要评论
基于RT1064对于四轮寻迹智能车的设计工作笔记目录基于RT1064对于四轮寻迹智能车的设计工作笔记1.前篇(1)adc (模数/数模转换)(2)pit(定时中断)(3)pwm(波特率)(4)gpio(引脚使用)2.舵机篇3.电机篇4.调试篇参数调整1.前篇1064单片机基础函数(1)adc (模数/数模转换)一般就是芯片的输出和输入,芯片输出信号,要做数模转换。芯片接收的信号,要进行模数转换。( 只要跟CPU打交道的通常是数字量,和控制系统相关的一般是模拟非电量(温度,速度等),模拟量和数字量

四轮寻迹智能车的设计(逐飞IMX-RT1064)

1.前篇

1064单片机基础函数

(1)adc (模数/数模转换)

在这里插入图片描述
一般就是芯片的输出和输入,芯片输出信号,要做数模转换。芯片接收的信号,要进行模数转换。( 只要跟CPU打交道的通常是数字量,和控制系统相关的一般是模拟非电量(温度,速度等),模拟量和数字量之间的通信就需要A/D和D/A转换,A/D和D/A转换起到了桥梁的作用。)
原理:
在这里插入图片描述
重要参数
分辨率:
AD转换器输出的数字量的最低位变化一个数时,对应输入模拟量的变化量,A/D转换器的位数越多,能够分辨的最小模拟电压值就越小,分辨率就越大,STM32的A/D转换器是12位的,假设最大输入电压为5V,所能分辨的最小电压量就是5/(2^12),很多时候我们会直接说一个n位的A/D转换器分辨率为n,这只是一个设计参数,不是实际的测量值。
相对精度:
A/D转换器实际输出数字量与理论值之间的最大差值称为相对精度
转换速度:
A/D转换器完成一次转换所需要的时间,一般是us级别

相关函数(逐飞库为例)
/******************************/
//引脚adc初始化函数
//参数:adc模块(两个),adc通道(B组引脚),通道分辨率(8,10,12位—分辨率越高精度越高)
//ADCN_enum,ADCCH_enum等函数都是枚举类型的
/******************************/
void adc_init(ADCN_enum adcn, ADCCH_enum ch, ADCRES_enum resolution)
//adc采集转换函数
//参数:adc模块,adc通道
uint16 adc_convert(ADCN_enum adcn, ADCCH_enum ch)

(2)pit(定时中断)

对于逐飞库来说其可使用的中断通道数有三个PIT_CH1,PIT_CH2,PIT_CH3,但是三个中断函数是写在同一个函数中,然后初始化要使用的中断通道,在中断触发的时候,会进入中断函数,并进行中断函数类型的判断,并执行对应的操作。

//引脚pit初始化函数
void  pit_init(void );

//pit中断时间设置(时间单位为ms,us,一般使用ms)
void pit_interrupt(PIT_enum pit_ch, uint32 count)

(3)pwm(波特率)

波特率输出,其实就是将电压微分,在部分积分控制,从而输出你想要的电压值,从而控制舵机,电机等,根据电压输出量不同,而输出不同转态的器件。
PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

/******************************/
//1.pwm初始化
//参数:通道号及引脚号,pwm频率,pwm占空比
//第一个参数包含了两个信息,通道号,和引脚号,因为初始化函数中有个字函数void pwm_iomuxc(PWMCH_enum pwmch),内部通过参数一,进行了引脚的判断和初始化引脚pwm状态。
/******************************/
void pwm_init(PWMCH_enum pwmch, uint32 freq, uint32 duty)

/******************************/
//2.pwm占空比设置,通过改变占空比,实现对于输出量的控制
/******************************/
void pwm_duty(PWMCH_enum pwmch, uint32 duty)

/******************************/
//3.pwm频率设置(与初始化操作类似)
/******************************/
void pwm_freq(PWMCH_enum pwmch, uint32 freq, uint32 duty)

(4)gpio(引脚使用)

用于高低电平,以及IO复用外部中断

/******************************/
//GPIO初始化
//参数:选择的引脚,引脚方向(输入或输出),输出高低电平,上下拉电阻
void gpio_init(PIN_enum pin, GPIODIR_enum dir, uint8 dat, uint32 pinconf)

2.舵机篇

(1)模数转换:通过运放和滤波,调制电路将电感采集回来的模拟量转换成数字量
(2)定时中断控制:先将对应的芯片接收电感转换后数字量的引脚 初始化为定时中断功能,再对接收到数据进行转换,保存和处理
(3)数据处理:对于采集回来的电感量使用冒泡法进行排序,再取中间的值的平均数,作为单次采集的数据。在将数据应用于PID算法控制,算出舵机每次的偏差值,由中值和偏差值得出需要输出的正确的舵机控制信号

中断控制部分函数
①电感采集

uint8 i;
    
uint8 left[10]={0};
uint8 right[10]={0};

//左右电感 ad数据采集
for(i=0;i<10;i++)
{
	left[i]=adc_convert(ADC_1,ADC1_CH3_B14);
	right[i]=adc_convert(ADC_1,ADC1_CH4_B15); 
}
left_ad = sort(left);
right_ad = sort(right);
out_ad = left_ad + right_ad;

return;

电感采集后的数据处理使用冒泡排序法

//就是一次中断采集十次电感数据,并排序,取中间三个值的平均值
uint8 sort(uint8 *sum)
{
  uint8 i,j;
  uint8 temp,k;
  for(i=0;i<10;i++)
  {
    for(j=0;j<9-i;j++)
    {
      if(sum[j]>sum[j+1])
      {
        temp=sum[i];
        sum[i]=sum[i+1];
        sum[i+1]=temp;     
      }
    }
  }
  k=(sum[4]+sum[5]+sum[6])/3;
  return k;
}

②差比和

//将上诉采集到的左右两边电感的数据进行差比和计算(归一化处理)
float cha=0;
float he=0;
//差比和
cha = left_ad - right_ad;
he = left_ad + right_ad;
now_abs = cha/he;
now_abs *= beishu;  

③PID算法控制(增量式控制)

 //PID控制
  last_2_abs = now_abs - last_abs;
  result= (P * now_abs + D * last_2_abs);
  last_2_abs = last_abs;
  last_abs = now_abs;
  
  result = 640 - result;

最后舵机pwm的输出写在定时中断函数中

(实际算法只采用前两项,即PD控制)
参数调整:包括舵机中值,舵机左右极限打脚值,PID控制参数,的调整。

3.电机篇

目前电机控制处于开环状态,持续输出一个pwm值,控制电机正向转动。

4.调试篇

IAR工程编译,调试硬件连接过程:
(顺序如下)
将调试器连上芯片
调试器连上电脑
电脑debug将程序写入芯片
打开芯片电源开关
IAR中点击go按钮(跑程序)
通过livewight(实时变量观测窗口)观测目标变量,并可以对目标变量进行修改,从而对得到的结果数据进行观测,实现实时调试参数。
结束时先将程序停止运行,再将USB数据线拔掉,在将芯片电源开关关掉

参数调整

控制系统无非要求稳,准,快(但本次只是用到PD控制)
即最大超调量和上升时间,反应到小车上是舵机打脚的角度大小和打脚的反应速度。在调整的时候可以先调整一个参数,例如P,使另一个参数值零。P调得差不多了,在调整D。

本文地址:https://blog.csdn.net/luyaozhima/article/details/109263612

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网