当前位置:   article > 正文

ROS小车搭建(一)——底层STM32使用_ros上位机控制stm32小车

ros上位机控制stm32小车

最近在弄ROS小车,做一些分享吧。

由于实验室的需求需要搭建一个智能移动平台,平台是两个轮子的差速运动模型。同时也是比较常见的模型,在创客智造上也有相关的代码和说明。自己也在此基础上做了修改,同时也也有之前实验室的师兄留下的代码,做了一些修改。

1前期准备工作

需要准备的材料:STM32板子(stm32vet6,100引脚)、伺服直流电机以及驱动器、减速器、轮子、串口转USB的线、USB-CAN分析仪,上位机电脑、keil5软件、串口调试助手、USB-CAN监控软件(CAN_TEST)等。

因为相关的机械结构已经制作好了,不需要再多余的安装相关机械设施,主要把重点集中在STM32的调试上。首先需要说一下整体的思路如下图所示:

                                                                      

 其实原理上是很简单的,就是通过上位机发送通过串口发送指令给STM32,STM32通过检测到串口发送的命令进行分析并通过CAN分配给两个电机一定的速度,同时STM32通过CAN接收到电机的位置反馈信息,经过计算得到里程计信息再经过串口发送给上位机。

  • 驱动器电机配置

因为驱动器和伺服电机已经是采购好的,所以需要通过厂家给定的上位机软件对其进行设置即可,具体如下图所示。

上位机软件

 上图中黄色框部分我基本上没有改动,厂家给定的参数即可。蓝色框部分是我用到的部分,需要选择模式,上方的是PC端输入,下方是速度控制即转速控制。中间黑色框部分是设置CAN报文的时间即多长时间发送报文,我设置的是0,因为我在STM32身上会发送相关请求指令,关键的是CAN的波特率一定和STM32的对应上,否则会有一些麻烦,还有就是可以再软件上设置CAN的ID号和组号,通过设置ID可以使STM32识别不同的电机并且发送相关指令。右侧的红色框是PID调节部分,这一部分需要自己调节,一般厂家也会设置好,这里面很方便不会占用很长时间。一般PID调节的首先需要使ID为0,开始调节P值,从小到大,然后在接近目标速度时需要将此时的值记下并乘以0.75,然后开始调节I,使波动范围最小确定下此时的I值,最后调节PI以及D的值使其更精确,一般都用PI调节。最右侧的红色框表示对电压以及电流的转速等的监控。最后驱动器连接好的如下图所示。

驱动器

上图中左侧的“网线”是和上位机进行232通讯,配置相关参数即上位机软件,此口也会用到和STM32进行CAN通讯的连接。中间的连线接电机,右侧红黑线是电源。相关的参数是电机48V,200W,编码器码盘线数2500,4倍频。其实以上说的这些都是厂家给的资料信息,其中有些接线是自己制作的。

  • CAN的连线部分

一般CAN的部分网上有很多,我觉得这位博主的还行关于CAN,需要注意的是终端电阻的配置,一般为120欧。其次是伺服直流电机驱动器和STM32的连接情况,就是“高接高,低接低”,CAN_H和CAN_H对应,CAN_L和CAN_L对应。其次就是CAN-USB的分析仪,这个设备在CAN调试上有着至关重要的作用。给个图,嘿嘿。这个图是在网上找的,我实际上用的和这个差不多,不过比这个圆润多了。

CAN-USB

前期的准备工作已经差不多了,主要是在各种接线和一些初始化的配置。这个根据每个人不同的情况来定。接下来就是在STM32上进行编程设计了。

2CAN的配置和使用

STM32这个工控板是含有一个CAN通讯接口的,下面就需要在软件上对其进行一定的配置。具体代码如下:

  1. void CAN1_Init(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. NVIC_InitTypeDef NVIC_InitStructure;
  5. CAN_InitTypeDef CAN_InitStructure;
  6. CAN_FilterInitTypeDef CAN_FilterInitStructure;
  7. /* 复用功能和GPIOB端口时钟使能*/
  8. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);
  9. /* CAN1 模块时钟使能 */
  10. RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
  11. /* Configure CAN pin: RX */ // PB8
  12. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  13. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
  14. GPIO_Init(GPIOB, &GPIO_InitStructure);
  15. /* Configure CAN pin: TX */ // PB9
  16. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  17. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
  18. GPIO_Init(GPIOB, &GPIO_InitStructure);
  19. //#define GPIO_Remap_CAN GPIO_Remap1_CAN1 本实验没有用到重映射I/O
  20. GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
  21. //CAN_NVIC_Configuration(); //CAN中断初始化
  22. /* Configure the NVIC Preemption Priority Bits */
  23. //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  24. #ifdef VECT_TAB_RAM
  25. /* Set the Vector Table base location at 0x20000000 */
  26. NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  27. #else /* VECT_TAB_FLASH */
  28. /* Set the Vector Table base location at 0x08000000 */
  29. NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  30. #endif
  31. /* enabling interrupt */
  32. NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;
  33. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  34. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  35. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  36. NVIC_Init(&NVIC_InitStructure);
  37. //CAN_INIT();//CA初始化N模块
  38. /* CAN register init */
  39. CAN_DeInit(CAN1); //将外设CAN的全部寄存器重设为缺省值
  40. CAN_StructInit(&CAN_InitStructure);//把CAN_InitStruct中的每一个参数按缺省值填入
  41. /* CAN cell init */
  42. CAN_InitStructure.CAN_TTCM=DISABLE; //没有使能时间触发模式
  43. CAN_InitStructure.CAN_ABOM=DISABLE; //没有使能自动离线管理
  44. CAN_InitStructure.CAN_AWUM=DISABLE; //没有使能自动唤醒模式
  45. CAN_InitStructure.CAN_NART=DISABLE; //没有使能非自动重传模式
  46. CAN_InitStructure.CAN_RFLM=DISABLE; //没有使能接收FIFO锁定模式
  47. CAN_InitStructure.CAN_TXFP=DISABLE; //没有使能发送FIFO优先级
  48. CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//CAN设置为正常模式
  49. CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳跃宽度1个时间单位
  50. CAN_InitStructure.CAN_BS1=CAN_BS1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/661280
推荐阅读
相关标签
  

闽ICP备14008679号