这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » xxJian智能车DIY进程贴

共34条 1/4 1 2 3 4 跳转至

xxJian智能车DIY进程贴

菜鸟
2015-05-21 14:22:37     打赏

索引  Contents



实验一、Visual Scope使用体验............................................第2楼

[开发进程]平衡小车开箱、组装、测试.................................................................................第4楼

实验二、串口通信.........................................................................................................................第6楼

[开发进程]制作蓝牙遥控器之阶段一.....................................................................................第7楼

[开发进程]制作蓝牙遥控器之阶段二.....................................................................................第8楼

[开发进程]实验三、通过Usart1显示小车角度、左右编码器、电池电压并分析.......第11楼

[开发进程]实验四、通过蓝牙通信显示传感器数据并分析.............................................第12楼

[开发进程]实验五、蓝牙调试PID参数................................................................................第13楼

[开发进程]实验六、绕圈圈与绕8字走................................................................................第17楼

[开发进程]实验七、超声波实验...........................................................................................第19楼

[开发进程]实验八、通过编码器采样数据得到前进距离试验.........................................第23楼

[开发进程]实验九、移动中避障自平衡小车实验................................................................第24楼

[开发进程]实验十、另类走8字...........................................................................................第31楼

我跟同事将平衡小车改为寻迹小车part1.............................................................................第34楼




关键词: 智能车     开发进程    

菜鸟
2015-05-21 15:07:58     打赏
2楼

实验一、Visual Scope使用体验

1、引言:

小车已经快到手了,趁着时机预热一下。VisualScope是一款示波器上位机软件,作用是将串口通信的数据按照一定的协议,进行4组数据的识别、在软件界面上显示波形。由于楼主以前并没有在实验平台上调试PI代码,今天突然想自己手头上并没有示波器,所以对这软件起了很大的兴趣。

2、软件介绍:

图1、VisualScope软件界面

VisualScope其实是一款非免费的软件,没破解前不能配置串口,只能是COM19600的默认配置。注册(破 解)后可以自由配置。软件本身支持四通道的数据。这是一款绿色软件,软件主体只有一个文件,其大小为2.15MBconfig.dat是配置文件(串口配置信息关闭程序后仍然保存,应该就是存在这文件中)。

图2、软件目录


3、实验过程:

本次实验所需:配置好Uart的单片机、UartUsb模块一块。安装了Uartusb驱动的PC机。

哼哼,图中MCU板子为新唐Nuvoton的Nutiny-EVB-M451,+ PL2302 USB转串。

3.1、单片机调试:

首先肯定是先配置好单片机的Uart,主要代码:

unsigned short CRC_CHECK(unsigned char *Buf, unsigned char CRC_CNT)
{
    unsigned short CRC_Temp;
    unsigned char i,j;
    CRC_Temp = 0xffff;

    for (i=0;i>1 ) ^ 0xa001;
            else
                CRC_Temp = CRC_Temp >> 1;
        }
    }
    return(CRC_Temp);
}
void VisualScope_Output(float data1 ,float data2 ,float data3 ,float data4)
{
    int temp[4] = {0};
    unsigned int temp1[4] = {0};
	uint8_t databuf[10] = {0};
	unsigned char i;
	unsigned short CRC16 = 0;

	temp[0] = (int)data1;
	temp[1] = (int)data2;
	temp[2] = (int)data3;
	temp[3] = (int)data4;

	temp1[0] = (unsigned int)temp[0] ;
	temp1[1] = (unsigned int)temp[1];
	temp1[2] = (unsigned int)temp[2];
	temp1[3] = (unsigned int)temp[3];
  
  for(i=0;i<4;i++) 
  {
     databuf[i*2] = (unsigned char)(temp1[i]%256); 
     databuf[i*2+1] = (unsigned char)(temp1[i]/256);
  } 
  CRC16 = CRC_CHECK(databuf,8); 
  databuf[8] = CRC16%256; databuf[9] = CRC16/256; 
  UART_Write(UART0,databuf,10); /*这行代码按照不同的单片机自行修改,作用是往UART0发送10个数据,数据存放到databuf*/ 
} 


以上两个函数C语言的适用于所有拥有uart的单片机的,移植时候只要修改UART_write这个函数就OK

另外在main函数的死循环之前,计算得到了4组数据用于软件评估。

for(i=0;i<2000;i++) 
{
  datach1 = 1000*sin((float)2*PI*i/2000); 
  datach2 = 800*sin((float)2*PI*i/1000); 
  datach3 = 600*sin((float)2*PI*i/500); 
  datach4 = i; 
  VisualScope_Output(datach1,datach2,datach3,datach4);
 } 
while(1); 


datach1顾名思义,通道1的数据。Ch1-3都是正弦波,ch4为斜坡函数。代码编好了。之后就是VisualScope软件配置了。

3.2VisualScope软件配置

首先是串口配置。

现在很多串口软件都可以自动识别可用的串口。如免费的软件Tera Term。(记得还是开源的。)


图3、观察对应的串口数


配置过程:

1 菜单Setup -> Communication Protocol -> CRC16

2 菜单Setup -> Communication Setup ,选择Comm No.,我实验时是COM11,Bard rate115200(跟单片机初始化的波特率一样)

3 RUN

如无意外,就可以看到下图所示的波形了。不过要知道,软件看起来是先在RAM中初始化了四组数据,数据有多大,软件界面波形就有多长。。。显示的新数据的波形都在波形最后面哦。



图4、实验结果


本人对用串口调试PID参数并不熟悉,不过体验了VisualScope显示波形的快乐,在没有示波器的情况下,如果单片机还存在ADC电路,就可以将电气量转换为数字量传输到上位机用该软件配合调试了。

其实,若有无线转串口模块,就可以在电脑上面调试,这是一个很好的选择。预计这个实验以后会做到!


高工
2015-05-21 19:56:05     打赏
3楼

写得很清晰,有图有代码!!!

CC1101这个模块可以考虑用一下



菜鸟
2015-05-22 15:54:49     打赏
4楼

[开发进程]平衡小车开箱、组装、测试

我身在广州,平衡小车要从成都物流到广州。今天终于可以收货了。

参考了车友的开箱帖子,这边也从箱子开始拍照!因为之前看到车友的开箱帖子,直到了自己的货物有多大,在收快递的时候马上就找到自己的了。可是路滑+手滑,撑着伞的时候一不小心把箱子摔到地上了。。。

用刀子刮开了透明胶,看到了箱子里面空隙都用报纸塞好了。可见发货人的细心。

把东西摊开,好奇里面放的都是什么仔细看从左到右应该是电池和充电器、车主板、车轮、OLED、亚克力板、轮轴、下载器以及STLINKv2

拆开保护层的器件,虽然手机像素不高,可我还是挺喜欢看自己拍出来的效果。在组装之前打开《【EEPW专版】平衡小车使用说明(必看)》这个PDF文件,前车之鉴,不看着组装必定后悔当然楼主也很欣赏喜欢不看使用使用说明书直接组装的这种冒险精神!

以下是组装的过程:


1、首先是组装车轮

车轮也是直接将轮子插到轴上就可以了。

车轮组装完毕



2、装四根双通铜柱

使得轮轴上有四根小螺丝的面朝上,依次安装四根铜柱。这四根铜柱的作用主要就是稳定住电池,同时为电池提供空间。


3、安放电池


放电池时候折腾了一段时间。使用说明书上的电池为1100mAh,明显比发货的1300mAh小一点点。安装电池时候遇到的问题就是,如果带有文字的面朝上,会出现电池放不下的情况。


如果这样子安装,后果就是双通铜柱和固定主控板的铜柱之间的缝隙太大,组装不可完成。如下图。


所以安装电池时候一定要文字面(正面)朝下,如此一来,为电池而准备的空间就可以得到充分利用!如下图。

备注: 对比车友的电池,看来是因为我的电池有轻微差异,其实要文字面向上才是正确的...2015年05月22日晚修改


哎哟,最近接触电子多,总是喜欢用双手接触地面,使地面带走手上的多余电荷。这样就不怕静电损坏器件了……



期间用万用表测试了一下电池白色的接口是否带电,是的,为12.5V

同时安装的时候走了些弯路,以为主控板上白色的接头是供电用的,错!我真的醉了。。其实电池的接口就在左上方….如下图。

这图在taobao店的宝贝描述中有,特别鸣谢平衡小车之家。

我觉得这图放到资料内多好啊,可是我没找到只能在taobao店内找到。



4、安装主板

安装主板时候注意开关的朝向是接近电池的供电接口的噢。图中的手就是在掰双通铜柱,真的如同《【EEPW专版】平衡小车使用说明(必看)》所述,铜柱是对得不太准的。不过没关系,掰一下就好。



5、搞定OLED模块


我买的是套餐3,带有oled模块,排针自己焊接,很快完成!自己另外有一个超声波模块,顺利安装!



6、连接电机线

我有一条电机线不够长,把那带子剪断了,ok

图中是一条带子剪了另外一条很好!最后安装上了没有碰到地面,应该不影响行车安全!

注意接头红色线在右边,这我是对照着使用说明来接的。。


7、亚克力保护板


刀子细细的方便弄开保护层。随后用手撕开!

好了!



8、最后的电源线


电源线最后才安装会有点麻烦,电源线很硬,看起来可靠,可是第1-7步完成了根本插不进电源线,只能拆了螺丝插线!另外电池的白色的充电插头的线我用电池压着,就不影响行走了。


其他问题不大,组装过程很有乐趣,就是手机拍照声影响别人了。。。



因为图片太大,好像晒得太严重,于是普遍调整到不大于500。。。


开机测试 自平衡小车!


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

启动不够温柔,车子一下子把脸摔到地上。不过平衡的效果还是不错,一前一后移动的平衡。



这个视频中,录制的就是暴走的小车,

如果在正常运行中,用手将车子抬高,车轮就会突然转很快,简直失控了!


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



谢谢观看!


助工
2015-05-22 16:42:24     打赏
5楼
非常棒,话说充电线可以放在电机线的背后哈

菜鸟
2015-05-22 21:32:50     打赏
6楼

实验二、串口通信


这次实验的目的是将平衡车刷成砖头……

其实是以开发板的角度,自学啦。我一开始就有念头自己建立工程来学习。慢就慢吧……

本实验目的以平衡车为实验平台,新建起一个只有串口通信的工程。

实验材料

硬件:平衡车标配,串口转USBSTlinkv2(可选),win7电脑

软件:MDK5STM32CubeMX

实验过程

首先接线,把硬件都准备好!

我的电脑跟平衡车有一段距离,普通杜邦线根本没有用!不怕,我有好长的信号线!



两个白色接线头都只有3根线,分别是两根信号线和一根GND,实验操作完成才发现硬件设计者真是用心良苦。我最怕的就是将VCC接错,现在VCC不必连接,串口和STLINK模块都由电脑USB供电,方便多了!

注意MCU主控板上,都带有丝印指示引脚,PA9连接TTLUSBRXPA10连接TTLUSBTX。至于STLINK,都已经标记好了并不需要另外翻电子说明书!


一红一绿。绿色不闪就正确了,stlink的硬件以及驱动都没有问题!



工程生成过程很简单,STM32CubeMX已经帮我完成了。

在用户自定义代码输入的地方,输入了几行代码,就可以实现芯片主动不断的发送数据。。。



  /* USER CODE BEGIN 3 */
	HAL_UART_Transmit_IT(&huart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE);
	HAL_Delay(2000);
  }
  /* USER CODE END 3 */

 

  以上这种在 CODE BEGIN   到  END之内的地方就是可以输入代码的地方!其他地方的代码,都会收到CubeMX重新生成代码的影响。也就是如果在CubeMX中修改初始化配置,若点重新生成代码的话,在工程内只会保留 CODE BEGIN  到  END 之内的代码,其他地方的代码都会被刷掉~


实验结果:



我的mdk是5,之后用STM32CubeMX在没删除V5文件的情况下,在原目录生成了mdkv4的工程,不知道用v4版本的编译有没有问题啊...

myUsart1.zip


菜鸟
2015-05-23 20:21:53     打赏
7楼

[开发进程]制作蓝牙遥控器之阶段一

 

背景:近阶段对蓝牙通信比较有兴趣,借次机会(指平衡小车),网购了几块蓝牙模块,学习如何使用蓝牙模块进行无线通信。之前一直担心自己的手机无法配对小车上的蓝牙模块,虽然昨天已经做了实验证实了自己的手机可以与小车上的SPP-CA模块配对且通信成功,但还是顺着这个势头实践了一下蓝牙模块的使用。手机上的APP都很不错,例如HCAPP(共享出来了,见附件)还有平衡小车官方推荐的APP。可是暂时还是有转弯控制难的问题。

 

 

实验目的:学习蓝牙模块的使用

          学会使用AT指令

实验材料SPP-C蓝牙模块x1、万用板x1、蓝牙串口模块BC04-Bx1TTLUSB模块x1



制作蓝牙遥控器另外需要单片机、还有遥杆这部分打算在下一个阶段会做出来。

实验过程

按照用户手册的应用电路图,在万用板上焊接好

其中焊接过程省略

  

再来个合照

模块的引脚间距为1.5mm,上面的图中,模块都是通过1.5mm2.54mm来转接,用排针连接排母。

缺点是这种转接板都是每次只能接三个脚,假如接了P01 P02 P03这三个脚,P04就只能用剪断的电阻引脚或电线来接了。


完成以后,上电测试,下图的接线,220V通过5V电源、通过3.3V LDO给蓝牙模块供电。蓝牙模块的UART直接接TTLUSB


接好第一次记得用AT指令测试蓝牙模块是否正常运行!


平衡小车开机,测试蓝牙模块


串口显示已经与SPP-C配对成功!


另外也可以用电脑串口控制小车的前进后退或者转弯了..尝试了一下,由于代码关系,(也有可能是STM32C8T6的性能不够强,毕竟得运算速度和功耗要取舍),转弯难以控制,原地转就转得很好看。。。还有前进后退也是可以的。


菜鸟
2015-05-24 11:26:31     打赏
8楼

[开发进程]制作蓝牙遥控器之阶段二

上楼介绍了如何进行硬件的焊接,今天尝试用单片机读取摇杆的状态,并且用平衡小车所能识别的控制信号

第一部分、控制信号的识别

用手机连接蓝牙转串口工具(上楼提到的SPP-C)或者童鞋们也可以用电脑自带的蓝牙T-T,进行手机控制信号的接收。做实验可以知道,安卓手机上的Mini Balance App中,软件界面主要有白色背景、灰色大圆、蓝色小圆组成。灰色大圆主要用于参照用,用于观测小圆的位置。蓝色小圆是提示手指触摸的位置,以及将蓝色小圆发生变化后的位置第一时间发送到平衡小车中,需要注意的是此处的变化。即只有蓝色小圆的位置变化,才发信号;而不变化,不发信号。

那应该怎样读取摇杆的状态再将对应的数据发送到平衡小车中呢?

摇杆一般为平面控制的用XY两个自由度来描述摇杆所在位置。翻开摇杆的用户手册,可以知道其实其原理很简单。两个可调电位器并联,两头分别连到VCCGND。摇杆转动时候,电位器的有效数值也随着变化。

下图表明了手机APP和平衡小车已经定好的控制协议。若控制端(摇杆或者手机APP的蓝色小圆,移动到原点),应该通过蓝牙将0x00发送到小车上的SPP-C蓝牙模块中。如果控制端往x轴的正方向移动了一定距离,就发送0x03。还有一个控制信号,是急停信号,控制方法是在手机APP中,在灰色圆下方从左到右或从右到左滑动。不过这是在小车代码中实现识别,并不需要在控制端发送特别的信息。

X(平均值) y(平均值)

0x00 2048 2048

0x01 2048 0

0x02 2048*(1+sin(pi/4)) 2048*(1-sin(pi/4))

0x03 4096 2048

0x04 2048*(1+sin(pi/4)) 2048*(1+sin(pi/4))

0x05 2048 4096

0x06 2048*(1-sin(pi/4)) 2048*(1+sin(pi/4))

0x07 0 2048

0x08 2048*(1-sin(pi/4)) 2048*(1-sin(pi/4))

以上的理所当然的错误……

具体的数据是要测量出来的>>>>

X(平均值) y(平均值)

0x00 2048 2048

0x01 2048 0

0x02 4096 0

0x03 4096 2048

0x04 4096 4096

0x05 2048 4096

0x06 0 4096

0x07 0 2048

0x08 0 0

这个才是正确的。。。在代码中,由于将xy平面分成8个区间,只要实际值到了以上平均值的上下100之内,就算是逼近了。

以上过程的实现代码:


ControlStatusPrev = ControlStatus;
if((abs((int32_t)Result1.Result-2048)<100)&&(abs((int32_t)Result2.Result-2048)<100)) ControlStatus = 0x00; else if((abs((int32_t)Result1.Result-2048)<100)&&(abs((int32_t)Result2.Result-0)<100)) ControlStatus = 0x01; else if((abs((int32_t)Result1.Result-4096)<100)&&(abs((int32_t)Result2.Result-0)<100)) ControlStatus = 0x02; else if((abs((int32_t)Result1.Result-4096)<100)&&(abs((int32_t)Result2.Result-2048)<100)) ControlStatus = 0x03; else if((abs((int32_t)Result1.Result-4096)<100)&&(abs((int32_t)Result2.Result-4096)<100)) ControlStatus = 0x04; else if((abs((int32_t)Result1.Result-2048)<100)&&(abs((int32_t)Result2.Result-4096)<100)) ControlStatus = 0x05; else if((abs((int32_t)Result1.Result-0)<100)&&(abs((int32_t)Result2.Result-4096)<100)) ControlStatus = 0x06; else if((abs((int32_t)Result1.Result-0)<100)&&(abs((int32_t)Result2.Result-2048)<100)) ControlStatus = 0x07; else if((abs((int32_t)Result1.Result-0)<100)&&(abs((int32_t)Result2.Result-0)<100)) ControlStatus = 0x08; if(ControlStatusPrev!=ControlStatus) { UART001_WriteDataBytes(&UART001_Handle0, &ControlStatus, 1); }



第二部分、ADC采样与串口发送数据在Infineon XMC2Go板子中实现



该目标板子是英飞凌公司生产的,板载jlink仿真器,主MCUCortexM0内核,型号是XMC1100。板子是去年参加研讨会赠送的,原则上是非卖品。。。

其实还可以用M4做的,可是我觉得M0 比较适合做这个简单的控制器。

初始化了ADC 两个通道,进行Continuous Scan采样,初始化了Uart用来与蓝牙模块进行通信,另外是一个GPIO口,用来控制板载的LED灯用于工作指示!

工程在DAVE3上搭建,此软件是英飞凌转为其公司生产的单片机设计的编程环境,类似于TI 公司的CCS

MCU没有STM32系列的普及,因此而少人了解

我还是放上代码


图示控制器与小车的连接。。控制器的MCU板为用弯针排针接排母。


期间在做试验的时候,由于MCU接摇杆的GND杜邦线掉了,造成控制器一直发送0x04, 害我的小车一直转,要开手机APP才得以停止...随后把线连上,就行了。。还有之前说的转弯控制不好转,原因是自己在控制转弯没有突然松开手,才让小车 一直原地转,原来是自己的控制问题,不是小车的问题……


谢谢观看。如果有问题可以直接提出。

祝各位工作顺利 生活愉快!



BT_Controller_XMC2Go_v1_20150524.zip



助工
2015-05-24 11:49:24     打赏
9楼
非常棒~我是你的忠实拥趸~可以配合APP做滑动识别哦,就是记录过去一段数据做分析

工程师
2015-05-24 12:29:10     打赏
10楼
写得很详细,学习了

共34条 1/4 1 2 3 4 跳转至

回复

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