OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2672|回复: 3

关于CAN总线驱动直流无刷电机的问题

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-9-9
在线时间
4 小时
发表于 2019-9-15 14:42:52 | 显示全部楼层 |阅读模式
4金钱
本帖最后由 穆十三 于 2019-9-15 14:49 编辑

用的电机和电调是大疆的M2006动力系统,板子是大疆的A型开发板F427,说明书如图。用原子哥F407的例程改了一个发送信息给电调的程序,波特率调到了要求的1KHZ,ID也是对的,但是死活不转  感觉自己理解上出现了问题,求各位大神指点。附上主函数和CAN配置int main(void)
{
                CanTxMsg TxMessage;
                LED_Init();
                delay_init(168);  
                CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_4tq,CAN_BS1_9tq,3,CAN_Mode_Normal);
                while(1)
                {
                                TxMessage.StdId=0x200;        
                                TxMessage.IDE=CAN_ID_STD;                 
                                TxMessage.RTR=CAN_RTR_DATA;                  
                                TxMessage.DLC=8;                                       
                                TxMessage.Data[0]=0x13;                                 
                                TxMessage.Data[1]=0x13;  
                                TxMessage.Data[2]=0x13;                                
                                TxMessage.Data[3]=0x13;
                                TxMessage.Data[4]=0x13;                                
                                TxMessage.Data[5]=0x13;
                                TxMessage.Data[6]=0x13;                                
                                TxMessage.Data[7]=0x13;
                                CAN_Transmit(CAN1, &TxMessage);
                        
               
         }
        
}








u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{

          GPIO_InitTypeDef GPIO_InitStructure;
          CAN_InitTypeDef        CAN_InitStructure;
          CAN_FilterInitTypeDef  CAN_FilterInitStructure;
#if CAN1_RX0_INT_ENABLE
           NVIC_InitTypeDef  NVIC_InitStructure;
#endif

          RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);                                                                                                                 
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);   
        

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
        

          GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_CAN1);
          GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_CAN1);

          CAN_InitStructure.CAN_TTCM=DISABLE;     
          CAN_InitStructure.CAN_ABOM=ENABLE;              
          CAN_InitStructure.CAN_AWUM=DISABLE;
          CAN_InitStructure.CAN_NART=DISABLE;        
          CAN_InitStructure.CAN_RFLM=DISABLE;        
          CAN_InitStructure.CAN_TXFP=DISABLE;      
          CAN_InitStructure.CAN_Mode= mode;      
          CAN_InitStructure.CAN_SJW=tsjw;     
          CAN_InitStructure.CAN_BS1=tbs1;
          CAN_InitStructure.CAN_BS2=tbs2;
          CAN_InitStructure.CAN_Prescaler=brp;     
          CAN_Init(CAN1, &CAN_InitStructure);   

         
           CAN_FilterInitStructure.CAN_FilterNumber=0;  
          CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
          CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
           CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
          CAN_FilterInit(&CAN_FilterInitStructure);
//               
#if CAN1_RX0_INT_ENABLE
        
          CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);               

          NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;   
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);
#endif
        return 0;
}   


微信图片_20190915143419.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-9-16 02:02:18 | 显示全部楼层
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-10-31
在线时间
5 小时
发表于 2019-11-1 20:46:36 | 显示全部楼层
帮顶aaaa
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-8-24
在线时间
4 小时
发表于 2019-11-11 10:08:48 | 显示全部楼层
虽然我也不懂,但是主函数里面不停地高频率发送指令对控制没有干扰吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 22:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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