这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » junchuang的两轮自平衡小车DIY进行时

共18条 2/2 1 2 跳转至
助工
2015-05-31 17:20:41     打赏
11楼

陀螺仪和加速度MPU6050

蓝牙模块

 超声波模块

1、模块接线原理图:主要应用的是TIM2的ch3和ch4通道,即PA2、PA3

 

   PA2设置为推挽式输出,PA2输出高电平,延迟15us,然后设置为低电平,完成一次信号发射,PA3设置为输入,从接收到高电平开始计时,直到接收到低电平停止计数,然后根据接收的脉冲数和定时器的频率计算出高电平时间,也就是声音往返的时间,根据声音在空气中的传播速度340米/秒,计算出距离。

2、实物展示:

3、模块参数

 

无线传输模块NRL2401

  

 


助工
2015-05-31 20:52:09     打赏
12楼

2、软件篇

 

   PID控制

      平衡车的直立、行走、转弯

      PID口诀:

参数整定找最佳,从小到大顺序查,先是比例后积分,最后再把微分加,曲线振荡很频繁,

比例度盘要放大,曲线漂浮绕大湾,比例度盘往小扳,曲线偏离回复慢,积分时间往下降,

曲线波动周期长,积分时间再加长,曲线振荡频率快,先把微分降下来,动差大来波动慢,

微分时间应加长,理想曲线两个波,前高后低4比1,

从口诀查找整定PID参数

 

 

  三种比较简单的PID控制算法,分别是:增量式算法,位置式算法,微分先行。 这三种PID算法虽然简单,但各有特点.

  PID增量式算法 离散化公式: △u(k)= u(k)- u(k-1) △u(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)] 进一步可以改写成 △u(k)=Ae(k)-Be(k-1)+Ce(k-2): 微分作用可以改善动态特性,Td偏大时,超调量较大,调节时间较短。Td偏小时,超调量也较大,调节时间也较长。只有Td合适,才能使超调量较小,减短调节时间。  
视频地址:http://player.youku.com/player.php/sid/XMTI1ODczNjkyOA==/v.swf

助工
2015-06-07 09:35:01     打赏
13楼

stm32编码器接口模式(寄存器)

   stm32的编码器接口模式在STM32中文参考手册中有详细的说明,在手册273页,14.3.12节。程序是完全按照 下图方式,设置寄存器的。  请到本文尾下载STM32中文参考手册

编码器1使用TIM2的CH1和CH2通道采集,占用PA0与PA1对应TI1和TI2

 

编码器2使用TIM4的CH1和CH2通道采集,占用PB6与PB7对应TI1和TI2

与官方的程序核对了下,TIM2与TIM4中的IC1F应该是0011,输入8个电平,定时器计数加1的方式


助工
2015-06-07 13:44:31     打赏
14楼

PWM脉冲输出

         TB6612FNG的逻辑真值表如表1所示。该器件工作时STBY引脚置为高电平;IN1IN2不变,调整PWM引脚的输入信号可进行电机单向速度控制;PWM引脚为高电平,并调整IN1IN2的输入信号可进行电机双向速度控制。表中AB两通道的控制逻辑相同

  

在官方的程序的试验中,发现ARPE使能位为bit7,应该是0X80,做了修改0X0080


助工
2015-06-07 14:55:49     打赏
15楼

定时器中断

  平衡车中,使用TIM1产生5ms的中断,5ms内完成电池电压的读取、按键扫描、编码器值得读取、LED灯的控制、PID控制(平衡、速度、转向)、电机异常处理等。

Tout=((ARR+1)*(PSC+1))/Tclk

arr:自动重装值  

psc:时钟预分频数 

Tclk:输入时钟频率 HZ

Tout: 中断溢出时间

 

主函数中初始化如下:

Timer1_Init(49,7199);           //=====5MS进一次中断

子函数初始化如下:

 TIM1的中断服务程序如下:

 


助工
2015-06-08 20:43:17     打赏
16楼

超声波模块试验:

 

u8 Flag_Bizhang=1;                          //避障标志0:不避障,1:避障 

u32 Distance;                               //超声波测距

主函数main()

if(Flag_Bizhang==1)TIM2_Cap_Init(0XFFFF,72-1); //由于TIM2 编码器与超声波共用一个定时器,两者之间初始化频率不一样,要区别使用。

实物测试展示

 

 使用串口助手测的超声波模块测试的距离

单位为毫米

 


视频地址:http://player.youku.com/player.php/sid/XMTI2Mjc3NDg1Mg==/v.swf

助工
2015-06-20 12:02:37     打赏
17楼
超声波避障试验

 u8 Flag_Bizhang=1;       

 if(Flag_Bizhang==1)TIM2_Cap_Init(0XFFFF,72-1); //

while(1)
  {
     if(Flag_Bizhang==1)Read_Distane();//读取超声波测距程序

 

TIM1定时器中加入以下程序

if(Flag_Bizhang==1)
   { 
    if(Distance<100)Flag_Hou=1;  else Flag_Hou=0;          //距离小余10CM后退  

 }


 

 


视频地址:http://player.youku.com/player.php/sid/XMTI2NjUzNDA2NA==/v.swf

助工
2015-06-20 13:03:57     打赏
18楼

无线控制试验:

 

 采用原子的开发板,接NRL2401,使用按键发射无线信号,控制小车的前进、后退、向左、向右

自平衡车接NRL2401作为无线接收端

 

发射控制程序如下:

key=KEY_Scan(1);
   if(key)
  {        
   switch(key)
   { 
     case WKUP_PRES: //前进

      LCD_ShowString(30,170,239,32,16,"Sended DATA1:"); 
   
      NRF24L01_TX_Mode(); 
      for(t=0;t<32;t++)
      {
       tmp_buf[t]='Q'; 
      }
      tmp_buf[32]=0;//¼ÓÈë½áÊø·û  
     if(NRF24L01_TxPacket(tmp_buf)==TX_OK) 
     {
       LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf);
       delay_ms(100); 
        }
      tmp_buf[1]='X';
      if(NRF24L01_TxPacket(tmp_buf)==TX_OK) 
     {
      LCD_ShowString(0,230,lcddev.width-1,32,16,tmp_buf);
       delay_ms(10);
     }
     break;

 其它程序类似

小车的接收程序如下:

  

 


视频地址:http://player.youku.com/player.php/sid/XMTI2NzEzNTM4NA==/v.swf

共18条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]