【解析新特性】300W单路输出工业电源>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » u7u7的智能车DIY进程帖

共10条 1/1 1 跳转至

u7u7的智能车DIY进程帖

高工
2015-05-21 21:47:21    评分



关键词: u7u7     智能车     平衡    

高工
2015-05-21 21:51:44    评分
2楼

终于发货了! 好激动QAQ 小车从天府之城——成都 出发啦

收到包裹后 迫不及待打开 包装非常用心 每个零件都被裹得里三层外三层 业界良心啊来个全家福

下面开始正式安装 先安装轮子 很简单 撸上去就ok

话说这可是瑞士电机 脏点也不影响使用 电机底座应该是3D打印的 也是下了血本啊

安装电池之前先要安装铜柱 注意!此处应该安装母对母的铜柱 方便后面主板的安装

1300mAh的电池 大容量才够味~

卡紧电池 安装主板 四个安装孔对其后用公对母的铜柱固定 为亚克力板的安装做准备

可以看到可爱的led屏幕 右下角我用螺丝又固定了一下 增加稳定性

平衡车中我最关注的就是这块主板 平时自己也画板子 每每拿到一块板都要细细欣赏 学习上面的焊接和走线

首先是焊功没得说 对于几个贴片的锡量把握的恰到好处

再就是走线 非常有意思 这块板子上有45°的转角也有圆弧形转角 方中带圆么~

红色圆圈标记的貌似是负片 过孔使用负片可增强各层的连接 方便散热

总体来说 硬件做的很出色!值得学习

接下来即使电机和编码器的安装 注意红线位置 不要反接

电机底部的线不要接触地面 一般来说不需要做什么特殊处理 凭借线的刚性就能保持一个固定的姿态

插上电池 耐心一点 慢~慢~~插~~~

还是良心设计 专门配备的T型头 妈妈再也不会担心正负极反接啦!

上面的热熔胶既保证正负极开路 在插电池时手按在这里也不会很痛好人性的设计

安装亚克力板 打开电源 led屏正常工作 整个安装完成啦~

燃!

按一下左上角的按键就能实现简单的平衡了 (小视频截图不太清楚 有机会再更新)

前后移动是正常现象 有时也会产生剧烈的摆动 但是依然能够保持平衡


整个安装过程并不复杂 模块集成度高 就像搭积木 感谢passoni

硬件做好 接下来就是调试软件 更多的挑战在等待着我们

你准备好了么


院士
2015-05-22 09:57:46    评分
3楼
good

高工
2015-05-25 01:54:40    评分
4楼

新版电磁组参考设计方案第二版.pdf---这个版本第16页有公式 网上下载的第16页的公式多为空白


高工
2015-10-02 15:47:10    评分
5楼

有很长一段时间没有更新进程贴  实在惭愧 不过有句话怎么说来着:“现在意识到晚就还不算晚

蓝牙连接

测试蓝牙连接的第一步是找到apk安装在手机上(首先你得有个安卓手机)

安装成功后打开APP 此时右上角显示“无连接”

打开小车电源 点击安卓手机的 menu 键 在弹出的菜单栏选择【连接设备】 在弹出的菜单栏点击【查找设备】选择"SPP-CA" (部分手机可能无法连接 或者无法打开APP 只需要在QQ群中选择其他版本的apk安装就好 总有一款适合你)

输入密码“1234” 就能连接成功

看到右上角显示“连接到SPP-CA”就连接成功了 在保持小车能自平衡的状态下(按一下小车左上角的白色按键)上下左右滑动屏幕中心的蓝色按钮 就能控制小车的前进方向了

小车舞台show




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

小车爬坡show(最后小车趴在地上:累死本宝宝了(づ。◕‿‿◕。)づ)



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

高工
2015-10-06 11:57:20    评分
6楼

电机驱动实验

想让小车跑起来,了解电机是必不可少的工作。下面让我们来看看STM32是如何通过TB6612FNG这款电机驱动芯片控制电机转速和方向的。

脑海中首先形成一个概念:MCU→电机驱动芯片→电机

电机驱动的硬件部分都已经在小车主板上集成,无需过多的连接,可直接进入程序代码部分。

我用的程序源码是“Mini Balance V2.5 标准版源码(集成DMP 卡尔曼滤波 互补滤波 小车默认搭载)”,同学们可以直接将其拷贝在磁盘根目录下修改其main函数即可,方便又快捷哦~

看过平衡小车使用说明的同学应该都记得测试上电后,可以先看看MiniBalance.c这个文件

非常好,这里面恰好有“赋值给PWM寄存器”的函数


void Set_Pwm(int moto1,int moto2)
{
			if(moto1<0) AIN2=1, AIN1=0; else AIN2=0, AIN1=1; PWMA=myabs(moto1); if(moto2<0) BIN1=0, BIN2=1; else BIN1=1, BIN2=0; PWMB=myabs(moto2); } 

噢~貌似是通过对AIN2 AIN1和PWMA的赋值来控制MOTO1,BIN1 BIN2和PWMB控制MOTO2。可这些又分别代表什么?

通过查阅小车原理图电机驱动部分和TB6612FNG芯片手册可以看到

果然是通过IN1 IN2和PWM这三个量控制电机的正反转和转速,在main.c函数中敲段代码试一下吧~(有些没有的代码可以先注释掉,头文件保留!)


int main(void)
{ 
	SystemInit();                   
	delay_init(72);                 
	usart1_init();                
	uart3_init(72,9600);            
	JTAG_Set(JTAG_SWD_DISABLE);    
	JTAG_Set(SWD_ENABLE);          
        led_init(); 
        MiniBalance_PWM_Init(3599,0); 
        while(1)
	{
		Set_Pwm(1000,1000);
		
	}
}                  

具体下载程序的流程可以参考《平衡小车使用说明》或者STM32使用MCUISP下载程序教程

程序成功下载,小车以“EEPW”LOGO正方向面朝自己实现后退功能,MOTO1和MOTO2给定不同的值可以实现不同的速度,速度在达到3500时不再增加,正负则实现转向功能,比如下面程序可以让小车以相同速度前进

(相比以上程序我又注释掉一部分语句)

int main(void)
{ 
	SystemInit();
        usart1_init(); 
        MiniBalance_PWM_Init(3599,0);
        while(1)
	{
		Set_Pwm(-1000,-1000);
	}
}






高工
2015-10-06 22:11:18    评分
7楼

编码器数据采集实验

上一层我们对电机有了一个大概的了解,也能成功的驱动电机了,但是小车作为一个控制系统,想要实现自平衡,必须是一个闭环系统。

编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号,前者称为码盘,后者称为码尺。按照读出方式编码器可以分为接触式和非接触式两种;按照工作原理编码器可分为增量式和绝对式两类。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。

通俗点讲,编码器输入端齿轮和电机输出端的齿轮啮合,通过内部转换再将这个信号返回给MCU,实现一个反馈的作用。如果觉得这个速度慢,那么通过MCU处理后可以加速;如果觉得速度快,同样可以减速达到理想的速度。其实就是个测速仪。

这个瑞士的电机内部集成电机和编码器,通过xh排线直接连接到主板,硬件方面就已经连接好了,还真是方便呀!

软件部分,我们打算通过oled显示编码器采集的数据。基于电机驱动的实验修改代码如下

int main(void)
{ 
	SystemInit();                  
	delay_init(72);               
	usart1_init();               
        led_init();                    
 	Adc_Init();	                  
 	MiniBalance_PWM_Init(3599,0);   
	OLED_Init();	               
	Encoder_Init();                
 	if(Flag_Bizhang==1)
            TIM2_Cap_Init(0XFFFF,72-1); 
	if(Flag_Bizhang==0)	
	    Encoder_Init2();	           
	delay_ms(200);                	
	Timer1_Init(49,7199);           
        while(1)
	{
		Set_Pwm(-1000,-1000);
		if(1==Flag_Show) 
		oled_show();
	}
}

 其中 oled_show()函数我没有修改 上面显示的信息比较多 但是我们关注的是中间两行

从oled屏上可以看到,当pwm值给-1000时,编码器采集Enco大约在160

当我们再次改变pwm的值时,此时让电机高速运转

int main(void)
{ 
	SystemInit();                  
	delay_init(72);               
	usart1_init();               
        led_init();                    
 	Adc_Init();	                  
 	MiniBalance_PWM_Init(3599,0);   
	OLED_Init();	               
	Encoder_Init();                
 	if(Flag_Bizhang==1)
            TIM2_Cap_Init(0XFFFF,72-1); 
	if(Flag_Bizhang==0)	
	    Encoder_Init2();	           
	delay_ms(200);                	
	Timer1_Init(49,7199);           
        while(1)
	{
		Set_Pwm(-3500,3500);
		if(1==Flag_Show) 
		oled_show();
	}
}

 注意,我将电机旋转方向也做了改变,让我们看看编码器是否能有所显示

果然,Enco值增加到600,并且有正负的差别。

编码器数据采集实验成功!



高工
2016-07-10 18:23:12    评分
8楼
2016-7-10     立flag,对小车的开发并不会停止,闲下来将继续。

菜鸟
2017-03-11 11:05:27    评分
9楼

不是通过2401传送数据吗?怎么换成蓝牙了



助工
2017-11-01 10:21:50    评分
10楼

谢谢,研究一下


共10条 1/1 1 跳转至

回复

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