[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
步兵玉生烟
2015-5-3 14:45:09 显示全部楼层

马上注册,玩转Robomaster!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用官方给的例程去控制云台电机
下面附上CAN的初始化代码和发送云台电机控制命令的代码:
  1. /*************************************************************************
  2.                           CAN1_Configuration
  3. ÃèÊö£º³õʼ»¯CAN1ÅäÖÃΪ1M²¨ÌØÂÊ
  4. *************************************************************************/
  5. void CAN1_Configuration(void)
  6. {
  7.     CAN_InitTypeDef        can;
  8.     CAN_FilterInitTypeDef  can_filter;
  9.     GPIO_InitTypeDef       gpio;
  10.     NVIC_InitTypeDef       nvic;

  11.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  12.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

  13.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_CAN1);
  14.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_CAN1);

  15.     gpio.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
  16.     gpio.GPIO_Mode = GPIO_Mode_AF;
  17.     GPIO_Init(GPIOA, &gpio);
  18.    
  19.     nvic.NVIC_IRQChannel = CAN1_RX0_IRQn;
  20.     nvic.NVIC_IRQChannelPreemptionPriority = 0;
  21.     nvic.NVIC_IRQChannelSubPriority = 1;
  22.     nvic.NVIC_IRQChannelCmd = ENABLE;
  23.     NVIC_Init(&nvic);
  24.    
  25.     nvic.NVIC_IRQChannel = CAN1_TX_IRQn;
  26.     nvic.NVIC_IRQChannelPreemptionPriority = 1;
  27.     nvic.NVIC_IRQChannelSubPriority = 1;
  28.     nvic.NVIC_IRQChannelCmd = ENABLE;
  29.     NVIC_Init(&nvic);
  30.    
  31.     CAN_DeInit(CAN1);
  32.     CAN_StructInit(&can);
  33.    
  34.     can.CAN_TTCM = DISABLE;
  35.     can.CAN_ABOM = DISABLE;
  36.     can.CAN_AWUM = DISABLE;
  37.     can.CAN_NART = DISABLE;
  38.     can.CAN_RFLM = DISABLE;
  39.     can.CAN_TXFP = ENABLE;
  40.     can.CAN_Mode = CAN_Mode_Normal;
  41.     can.CAN_SJW  = CAN_SJW_1tq;
  42.     can.CAN_BS1 = CAN_BS1_9tq;
  43.     can.CAN_BS2 = CAN_BS2_4tq;
  44.     can.CAN_Prescaler = 3;   //CAN BaudRate 42/(1+9+4)/3=1Mbps
  45.     CAN_Init(CAN1, &can);

  46.     can_filter.CAN_FilterNumber=0;
  47.     can_filter.CAN_FilterMode=CAN_FilterMode_IdMask;
  48.     can_filter.CAN_FilterScale=CAN_FilterScale_32bit;
  49.     can_filter.CAN_FilterIdHigh=0x0000;
  50.     can_filter.CAN_FilterIdLow=0x0000;
  51.     can_filter.CAN_FilterMaskIdHigh=0x0000;
  52.     can_filter.CAN_FilterMaskIdLow=0x0000;
  53.     can_filter.CAN_FilterFIFOAssignment=0;//the message which pass the filter save in fifo0
  54.     can_filter.CAN_FilterActivation=ENABLE;
  55.     CAN_FilterInit(&can_filter);
  56.    
  57.     CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
  58.     CAN_ITConfig(CAN1,CAN_IT_TME,ENABLE);
  59. }



  60. /********************************************************************************
  61.    ¸øµçµ÷°å·¢ËÍÖ¸ÁIDºÅΪ0x200£¬Ö»ÓÃÁ½¸öµçµ÷°å£¬Êý¾Ý»Ø´«IDΪ0x201ºÍ0x202
  62.          cyq:¸ü¸ÄΪ·¢ËÍÈý¸öµçµ÷µÄÖ¸Áî¡£
  63. *********************************************************************************/
  64. void Cmd_ESC(int16_t current_201,int16_t current_202,int16_t current_203)
  65. {
  66.     CanTxMsg tx_message;
  67.    
  68.     tx_message.StdId = 0x200;
  69.     tx_message.IDE = CAN_Id_Standard;
  70.     tx_message.RTR = CAN_RTR_Data;
  71.     tx_message.DLC = 0x08;
  72.    
  73.     tx_message.Data[0] = (unsigned char)(current_201 >> 8); //¸ß8λ
  74.     tx_message.Data[1] = (unsigned char)current_201;                                //µÍ8λ
  75.     tx_message.Data[2] = (unsigned char)(current_202 >> 8);
  76.     tx_message.Data[3] = (unsigned char)current_202;
  77.     tx_message.Data[4] = (unsigned char)(current_203 >> 8);
  78.     tx_message.Data[5] = (unsigned char)current_203;
  79.     tx_message.Data[6] = 0x00;
  80.     tx_message.Data[7] = 0x00;
  81.    
  82.     CAN_Transmit(CAN1,&tx_message);
  83. }
复制代码


跳转到指定楼层

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
步兵玉生烟
 楼主| 2015-5-3 21:17:15 显示全部楼层
jinzhong 发表于 2015-5-3 18:19
71.void Cmd_ESC(int16_t current_201,int16_t current_202,int16_t current_203)

72.{

我使用的就是这个函数发送的命令,经过测试,CAN1没有进入接收中断。请问如何修改程序?

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
工程jinzhong
2015-5-3 18:19:00 显示全部楼层
71.void Cmd_ESC(int16_t current_201,int16_t current_202,int16_t current_203)

72.{

73.    CanTxMsg tx_message;

74.   

75.    tx_message.StdId = 0x200;

76.    tx_message.IDE = CAN_Id_Standard;

77.    tx_message.RTR = CAN_RTR_Data;

78.    tx_message.DLC = 0x08;

79.   

80.    tx_message.Data[0] = (unsigned char)(current_201 >> 8); //¸ß8λ

81.    tx_message.Data[1] = (unsigned char)current_201;                                //µÍ8λ

82.    tx_message.Data[2] = (unsigned char)(current_202 >> 8);

83.    tx_message.Data[3] = (unsigned char)current_202;

84.    tx_message.Data[4] = (unsigned char)(current_203 >> 8);

85.    tx_message.Data[5] = (unsigned char)current_203;

86.    tx_message.Data[6] = 0x00;

87.    tx_message.Data[7] = 0x00;

88.   

89.    CAN_Transmit(CAN1,&tx_message);

90.}
发这个就行了

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
梯队队员鞠欢
2015-5-3 19:23:05 显示全部楼层
jinzhong 发表于 2015-5-3 18:19
71.void Cmd_ESC(int16_t current_201,int16_t current_202,int16_t current_203)

72.{

请问官方的CAN1配置程序不需要改动,可以直接拿来用吗,感觉有点问题

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
步兵玉生烟
 楼主| 2015-5-4 14:35:39 显示全部楼层
云台和主控之间的CAN通信 正常,就是云台和电机之间的CAN通信不正常。接收中断进入不了,请问如何解决?

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
梯队队员飘逸的分隔符
2017-11-15 14:44:51 显示全部楼层
666.xuexixuexi

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
梯队队员尾张大
2018-1-10 19:31:48 显示全部楼层
回复可以赚钱回复可以赚钱

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
梯队队员麦子到
2018-6-13 13:06:20 显示全部楼层
控制不了啊

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
梯队队员麦子到
2018-6-14 18:40:46 显示全部楼层
还是不会。。。。。
回复

使用道具 举报

[嵌入式] 【求助帖】云台电机如何才能转起来?

[复制链接]
梯队队员绿豆汤圆
2019-6-24 19:17:48 显示全部楼层
你用的是什么型号的电机?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

触屏版 | 电脑版

Copyright © 2024 RoboMasters 版权所有 备案号 粤ICP备2022092332号

快速回复 返回顶部 返回列表