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

共17条 1/2 1 2 跳转至

dangkunyuan智能车DIY进程帖

菜鸟
2015-08-17 16:46:08     打赏

1、安装焊接

2、软件安装调试

3、上传展示视频

4、基础实验——电机驱动实验

5、基础实验——编码器数据采集实验

6、基础实验——无线通讯实验(Nrf2401或蓝牙均可)

7、基础实验——传感器驱动实验

8、高级实验——多传感器数据融合

9、高级实验——PID调试

10、高级实验——实现平衡小车直立时处于静止状态

11、高级实验——实现平衡小车绕八字行走

12、高级实验——实现小车自主避障

13、高级实验——实现小车利用线性CCD巡线

14、高级实验——实现体感控制(利用KINECT或者姿态传感器)

15、高级实验——撰写APP实现对小车的数据和状态进行监控



菜鸟
2015-08-17 21:53:19     打赏
2楼

1、安装焊接;

收货:完好无损

安装轮子、铜柱、电池

 
安装电路板,焊接、安装显示屏

 
安装有机玻璃,能动了







菜鸟
2015-08-17 22:32:39     打赏
3楼

2、软件安装调试;

端口驱动程序安装成功,COM3是一个USB转Serial端口,用于串口下载程序

上位机软件,5个颜色读取5个参数

烧录软件,载入HEX程序


我试过了很多种类型的MDK,最后,选择了一款适合我电脑的。

keil设置1、这里我把其频率改成了8MHz,实际上72MHz也是可以的,只要不是实时仿真就不用改。

keil设置2、选择ST-Link,单击Settings


keil设置3、选择SW模式,注意只有插上ST-Link仿真器SWDIO下才会有显示。

keil设置4、选择ST-Link Debugger,点击Settings。

keil设置5、

keil设置6、点击右上角仿真按键(这是在接上ST-Link的情况下才能仿真的)

keil设置7、仿真成功


菜鸟
2015-08-17 23:12:11     打赏
4楼

菜鸟
2015-08-17 23:20:00     打赏
5楼

4、基础实验——电机驱动实验

在电机驱动实验之前先来个简单的——led闪烁实验。

实验的目:建立一个工程文件。


我根据这个文件《在keil MDK环境下建立有固件库的工程文件》建立了我的第一个工程文件。我的固件库是v3.5版本的,和QQ群里给的工程文件一样。

main.c是led灯的闪烁。开始只有这么多:

#include "main.h"

int main(void)

{

SystemInit();            //系统初始化

delay_init(72);                 //延时初始化

JTAG_Set(JTAG_SWD_DISABLE);     //关闭JTAG接口

JTAG_Set(SWD_ENABLE);           //打开SWD接口,利用主板SWD接口调试

led_init();                     //初始化与LED连接的硬件接口

while(1)

{

GPIOB->ODR|=1<<8; //PB8 输出高 灯灭

delay_ms (500);

GPIOB->ODR=~(1<<8);//PB8 输出低 灯亮

delay_ms (500);

}

}

然后遇到了以下这3个编译问题

1、error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.

我看到QQ群里的工程启动文件左边有三个红点,而我的没有。于是我百度了一下,找到原因如下:

项目中同时包含以下启动文件,

startup_stm32f10x_hd.s

startup_stm32f10x_md.s

startup_stm32f10x_ld.s

......

应该针对不同的CPU选择不同的启动文件。

解决办法1:从项目中删除不相关的启动文件

解决办法2:右击不相关的启动文件,点击 options for file 'startup_stm32f10x_md.s'...

在弹出的对话框中的properties页,勾去灰化的'Include in Target Build'和‘Always Build’两项。

2、后来又遇到一些symbol未定义的问题,例如temperature等,我发现QQ原程序中在main.c里面有对一些参数进行定义。于是我加上了这段,main.c变成了这样:

#include "main.h"

u8 Way_Angle=1;                             //获取角度的算法

u8 Flag_Qian,Flag_Hou,Flag_Left,Flag_Right; //蓝牙遥控相关的变量

u8 Flag_Stop=1,Flag_Show=1;                 //停止标志位和 显示标志位 默认停止 显示打开

int Encoder_Left,Encoder_Right;             //左右编码器的脉冲计数

int Moto1,Moto2;                            //电机PWM变量 应是Motor的 向Moto致敬

int Temperature;                            //显示温度

int Voltage;                                //电池电压采样相关的变量

float Angle_Balance,Gyro_Balance,Gyro_Turn; //平衡倾角 平衡陀螺仪 转向陀螺仪

float Show_Data_Mb;                   //全局显示变量,用于显示需要查看的数据

int main(void)

{

SystemInit();            //系统初始化

delay_init(72);                 //延时初始化

JTAG_Set(JTAG_SWD_DISABLE);     //关闭JTAG接口

JTAG_Set(SWD_ENABLE);           //打开SWD接口,利用主板SWD接口调试

led_init();                     //初始化与LED连接的硬件接口

while(1)

{

GPIOB->ODR|=1<<8; //PB8 输出高 灯灭

delay_ms (500);

GPIOB->ODR=~(1<<8);//PB8 输出低 灯亮

delay_ms (500);

}

}

3、后来又遇到STM32编译器assert_failed未定义的问题,百度了一下加上了这个:

#ifdef USE_FULL_ASSERT


void assert_failed(u8* file, u32 line)
{
while (1)
{
}
}
#endif

最后加进去,再编译就OK了。在此提供需要的人,如果用库函数时出现assert_failed定义问题,可像以上方法解决。

但是小白在次有个疑问,为啥QQ群里的程序main.c里咋没有这段程序????

最终led闪烁实验程序:

#include "main.h"

u8 Way_Angle=1;    //获取角度的算法

u8 Flag_Qian,Flag_Hou,Flag_Left,Flag_Right; //蓝牙遥控相关的变量

u8 Flag_Stop=1,Flag_Show=1;                 //停止标志位和 显示标志位 默认停止 显示打开

int Encoder_Left,Encoder_Right;             //左右编码器的脉冲计数

int Moto1,Moto2;                            //电机PWM变量

int Temperature;                            //显示温度

int Voltage;                                //电池电压采样相关的变量

float Angle_Balance,Gyro_Balance,Gyro_Turn; //平衡倾角 平衡陀螺仪 转向陀螺仪

float Show_Data_Mb;            //全局显示变量,用于显示需要查看的数据

int main(void)

{

SystemInit();            //系统初始化

delay_init(72);                 //延时初始化

JTAG_Set(JTAG_SWD_DISABLE);     //关闭JTAG接口

JTAG_Set(SWD_ENABLE);           //打开SWD接口,利用主板SWD接口调试

led_init();                     //初始化与LED连接的硬件接口

while(1)

{

GPIOB->ODR|=1<<8; //PB8 输出高 灯灭

delay_ms (500);

GPIOB->ODR=~(1<<8);//PB8 输出低 灯亮

delay_ms (500);

}

}

#ifdef USE_FULL_ASSERT

void assert_failed(u8* file, u32 line)

{

while (1)

{

}

}

#endif

实验现象:蓝光闪烁


电机驱动实验;



TB6612的任务书可以知道通过设置PWM、IN1、IN2可以控制电机的正反转,CCW表示逆时针、CW表示顺时针

A、B分别控制两个电机

电机实验主程序:


#include "main.h"
 int main(void)

{

SystemInit();            //系统初始化
delay_init(72);                 //延时初始化
JTAG_Set(JTAG_SWD_DISABLE);     //关闭JTAG接口
JTAG_Set(SWD_ENABLE);           //打开SWD接口,利用主板SWD接口调试
led_init();                     //初始化与LED连接的硬件接口
MiniBalance_PWM_Init(3599,0);  //f = 72 000 000 /((3599+1)*(0+1)) = 20K
//初始化PWM 20KHZ 高频可以防止电机低频时的尖叫声


while(1)
{
PWMA = 2000;  //#define PWMA   TIM3->CCR4  在2000时电平发生翻转
PWMB = 2000;  //#define PWMB   TIM3->CCR3  在2000时电平发生翻转
GPIOB->ODR=~(1<<8);//PB8低输出 灯亮

// AIN1 = 0;  //逆时针转(CCW)快前
// AIN2 = 1;
// AIN1 = 1;  //顺时针转(CW)慢后
// AIN2 = 0;
//  BIN1 = 0;  //顺时针快前CW
//  BIN2 = 1;
BIN1 = 1;  //逆时针慢后CCW
BIN2 = 0;  
}
}

#ifdef USE_FULL_ASSERT
void assert_failed(u8* file, u32 line)
{
  while (1)
  {
  }
}
#endif


菜鸟
2015-08-17 23:20:24     打赏
6楼
5、基础实验——编码器数据采集实验

菜鸟
2015-08-17 23:20:44     打赏
7楼
6、基础实验——无线通讯实验(Nrf2401或蓝牙均可)

菜鸟
2015-08-17 23:21:27     打赏
8楼
7、基础实验——传感器驱动实验

菜鸟
2015-08-17 23:21:55     打赏
9楼
8、高级实验——多传感器数据融合

菜鸟
2015-08-17 23:22:19     打赏
10楼
9、高级实验——PID调试

共17条 1/2 1 2 跳转至

回复

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