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

共11条 1/2 1 2 跳转至

jokernl的进程帖!

菜鸟
2015-05-25 14:10:49     打赏

目录:

一:小车组装以及例程的运行

1、小车开箱

2、组装小车

3、下载程序

4、运行效果

二:我的程序

1、基于库的工程模板的建立

2、点亮LED的实验

3、电机驱动实验(电机驱动模块)

3、OLED屏幕的调试(显示模块

4、编码器显示速度测试(编码器模块) (已更新)

6、调试陀螺仪(倾角测量模块)        (未更新)

7、反馈算法调试(PID模块)            (未更新)


今天先来个开箱:

收到包裹 内件

全部内件

)(待更新))(待更新))(待更新)http://forum.eepw.com.cn/thread/275647/1#2




关键词: 开箱     小车     DIY     智能小车     平和车    

院士
2015-05-25 14:16:42     打赏
2楼
等待后续

菜鸟
2015-05-25 14:19:32     打赏
3楼

组装过程完全没看教程,就看着像就装起来,组装后才发现有组装教程的PDF。。。。额


电机线长正好:

板子并不厚,下面的电池依靠卡住并挤压固定,个人感觉还是有点担心。


组装完成

比想象的小很多

小小的车车

板子上直接集成了陀螺仪和蓝牙以及电机驱动,布线不错,有点薄,稍微担心会不会被电池挤坏!

 近照


菜鸟
2015-07-20 15:54:06     打赏
4楼

在因为忙于期末考试等原因沉寂了都快两个月了后,jokernl的学习进程要继续更新了:


今天的内容是,工程的调试下载:


第一步打开官方提供的例程:


第二步:编译和下载


如下图所示,几个按钮的用途

我先进行了编译,成功,没有什么问题:



然后接好SWD仿真器,但是下载失败了。

应该是需要改选项,点击选项图标
进入选项窗口——Debug选项卡,使用J-LINK仿真器。

在Utilities也需要更改一下。

连上J-link,可以在设备管理器里面看见:

这时候点击刚刚那个Debug选项卡的仿真器后面的setting

就会弹出如下窗口:

PORT选择SW,可以看见一个SWD仿真器。


接下来就可以下载了。



菜鸟
2015-07-21 14:58:35     打赏
5楼

菜鸟
2015-07-26 17:56:12     打赏
6楼

如果出现乱码,建议修改编码即可,改成UTF8 或者GB2312,如下图:



菜鸟
2015-09-09 10:35:29     打赏
7楼

本来准备基于例程修改功能。

前几天看了看例程,直接寄存器操作我就不说了,操作寄存器居然是去操作地址,这代码一定是很厉害的人写了,可能是用过DSP的习惯?也可能是为了防止太多人移植,毕竟这也是人的劳动成果!

但是我作为STM32初学者对那些底层基本上看不懂呀!


决定自己重写,基于ST官方3.50的库


这是官方的库文件:

STM32F103固件库(3.5版本 )下载

这是我用库文件以及做好的工程模板:

基于3.5.0版本库的工程模板




菜鸟
2015-09-09 10:36:37     打赏
8楼

简单程序调试:

点蓝灯程序的main文件程序如下,工程其他和楼上的工程模板完全一样,只需要替换一下main.c即可,该程序很短,也很简单,先初始化IO口,然后再main函数中将其置低电平,即可点亮。

/**
  **************************
  * 基于3.5.0版本库的工程模板
  **************************
  * 用于平衡小车的程序
  * EEPW 账号:jokernl
  **************************
  */
  
#include "stm32f10x.h"


void LED_GPIO_Config(void)
{ 
  GPIO_InitTypeDef Bule_LED;  //定义GPIO结构体
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //IO时钟打开
       Bule_LED.GPIO_Pin=GPIO_Pin_8;         //设定管脚PB8
       Bule_LED.GPIO_Mode=GPIO_Mode_Out_PP;   //设定推挽输出
       Bule_LED.GPIO_Speed=GPIO_Speed_50MHz;  //设定50Mhz
       GPIO_Init(GPIOB,&Bule_LED);  	//进行初始化       
}

/**
  * @brief  主函数
  */

int main(void)
{
LED_GPIO_Config();

GPIO_ResetBits(GPIOB, GPIO_Pin_8);//根据电路图知,PB8低电平时该灯点亮
  
while(1)
{
}

}
 
 




菜鸟
2015-09-09 13:17:20     打赏
9楼

二,驱动电机正反转实验程序

看了下驱动电路的电路图,可以看见 左边电机是由 PB0 PB12 PB13 控制;右边边电机是由PB1 PB14 PB15 控制。

其中PB0/PB1为 PWM的控制,其他IO控制正反转使用。

本实验将PWM全置高,试试电机的正反转,也很简单,比楼上的点亮LED并没有复杂太多。


LED是PB8 ,电机驱动IO是PB0 PB1 PB12 PB13 PB14 PB15,都属于PB,且都为输出,为了方便初始化,我干脆写了个GPIOB的输出初始化函,参数为具体管脚,可以方便的反复调用:

/* 带参宏, 右电机相关IO */
#define  PB0(on)  if (on)  GPIO_SetBits(GPIOB,GPIO_Pin_0); \
else   GPIO_ResetBits(GPIOB,GPIO_Pin_0)
#define  PB12(on) if (on)  GPIO_SetBits(GPIOB,GPIO_Pin_12); \
else   GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define  PB13(on) if (on)  GPIO_SetBits(GPIOB,GPIO_Pin_13); \
else   GPIO_ResetBits(GPIOB,GPIO_Pin_13)

/* 带参宏, 左电机相关IO */
#define  PB1(on)  if (on)  GPIO_SetBits(GPIOB,GPIO_Pin_1);    \
else   GPIO_ResetBits(GPIOB,GPIO_Pin_1)
#define  PB14(on) if (on)  GPIO_SetBits(GPIOB,GPIO_Pin_14);    \
else   GPIO_ResetBits(GPIOB,GPIO_Pin_14)
#define  PB15(on) if (on)  GPIO_SetBits(GPIOB,GPIO_Pin_15);    \

其中\为续行符,就是下一行接着的意思,因为#define必须写在一行嘛,我这样写是为了看起来整齐,关于带参数宏,部分C语言初学者可能看不懂,可以参考#define_百度百科 中对带参宏定义的介绍,并不难,而且用起来很方便。



接着我继续用宏定义,定义了LED的操作,以及电机的正反转或者制动操作,方便调用:

/* 带参宏,蓝灯低电平点亮, Blue_LED(1)为开蓝灯,Blue_LED(0)为关闭蓝灯 */
#define  Blue_LED(on) if (on) GPIO_ResetBits(GPIOB,GPIO_Pin_8);\
else  GPIO_SetBits(GPIOB,GPIO_Pin_8)

#define Motor_R(a) PB12(a);PB13(!a) //a=1 时 ,向前转,a=0时,向后转。
#define Motor_L(a) PB15(a);PB14(!a) //a=1 时 ,向前转,a=0时,向后转。
#define Motor_Rs  GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13) //右轮制动
#define Motor_Ls  GPIO_SetBits(GPIOB,GPIO_Pin_14|GPIO_Pin_15) //左轮制动


这是一个很无脑的延时函数,仅供调试使用:

/**
* @brief  无脑延时
*/
void Delay(__IO uint32_t nCount)  //简单的延时函数
{
for(; nCount != 0; nCount--);
}


下面是主函数,想初始化各个IO口,然后先后让电机正反转,这样,实验就完成了,其中亮灯关灯用来做效果对比,方便知道程序运行到哪里了,如果用SWD调试可以更方便的查看程序的运行。


/**
 * @brief  主函数
 */

 int main(void)
 {
 PB_OUT_Config(GPIO_Pin_8|GPIO_Pin_0|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_1|GPIO_Pin_14|GPIO_Pin_15); //配置输出管脚

 PB0(1);  PB1(1); //电机的PWM为全高

 while(1)
 {

 Blue_LED(1);  //开灯 

 Motor_R(1);   //右正转
 Motor_L(0);   //左反转 
 Delay(1000000);

 Motor_R(0);   //右反转
 Motor_L(1);   //左正转

 Delay(1000000); 

 Blue_LED(0);  //关灯 

 Motor_Rs;  Motor_Ls; //制动 
 Delay(1000000); 
 Delay(1000000); 

 }

 }


该实验的工程文件:J_car_beta0.01(电机驱动尝试)


菜鸟
2015-09-09 17:02:12     打赏
10楼

屏幕的简单调试工程:

J_car_beta0.02(电机&屏幕测试)


共11条 1/2 1 2 跳转至

回复

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