《基于stm32的canopen运动控制主从站开发》由会员分享,可在线阅读,更多相关《基于stm32的canopen运动控制主从站开发(71页珍藏版)》请在金锄头文库上搜索。
1、华中科技大学硕士学位论文基于STM32的CANopen运动控制主从站开发姓名:赵飞申请学位级别:硕士专业:机械电子工程指导教师:陈冰;陈幼平2011-01-18I华中科技大学硕士学位论文 华中科技大学硕士学位论文 摘 要 运动控制技术的发展经历了近一个世纪的历史, 现场总线运动控制系统是当前运动控制系统应用的主流,基于现场总线的网络化运动控制系统布线简单,系统柔性高,易于扩展与复用,便于维护与诊断,是运动控制系统的发展方向。 CANopen 是开放的总线技术,广泛应用于自动化生产各个领域,目前国内 CANopen通讯与设备的开发相对滞后, 不利于基于 CANopen 高性能运动控制系统的自主研
2、发与推广。本文在对 CANopen 协议研究的基础上,总结了 CANopen 规范应用于运动控制网络的优势,提出并实现了基于 CANopen 协议的运动控制主从站。 本文首先总结了运动控制系统发展的历程, 分析了现场总线运动控制系统的规范以及应用现状;接着分析了 CANopen 协议通讯规范及其应用于运动控制的设备规范,着重分析了 CANopen 同步机制, 并将 CANopen 同步机制与运动控制相结合, 提出了基于 STM32微控制器嵌入式运动控制主从站, 并详细描述了嵌入式运动控制主从站硬件与软件的具体架构。 最后,基于上述的运动控制主从站软硬件架构,结合项目中实际应用,实现了对CANo
3、pen 标准 I/O 总线端子进行管理控制的嵌入式主站,以及响应运动控制 PLC 管理控制的嵌入式从站。 关键词:关键词:CANopen 运动控制 嵌入式主从站II华中科技大学硕士学位论文 华中科技大学硕士学位论文 Abstract The motion control system has been developed for nearly a century, among various motion control systems,fieldbus-based motion control system is used most in recent years. The advantag
4、es of fieldbus-based network motion control system are simply of system wiring,high flexibility of the system,easy to be expanded, reused, maintenanced and diagnosised, etc, For these reasons, fieldbus-based network motion control system would be quickly developed in future. CANopen is an open field
5、bus technology and protocol, which has been widely used in automation fields. But the domestic R CANopen ;embeded master RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS) RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); 33华中科技大学硕士学位
6、论文 华中科技大学硕士学位论文 RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENAB
7、LE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 在上述全局时钟配置中,RCC_DeInit 函数将 RCC 寄存器复位,使能外部高速晶振并等待晶振稳定,将外部高速时钟(HSE)作为时钟源接入控制器时钟树,设置时钟的分频与锁相环的倍频, 使能锁相环并等待锁相环稳定, 使能将锁相环时钟配置为 72MHZ并设置为系统时钟。 全局时钟配置中, 锁相环的设定要在使能之前设定, 一旦锁相环使能后参数不可更改。所以全局时钟寄存器在禁能锁相
8、环功能的条件下配置,完成时钟配置后使能锁相环功能,全局时钟接通到控制器外设上。 由于 CAN 时钟来自于 STM32 低速外设时钟,CAN 通讯引脚采用了微处理器的引脚复用功能,因此全局时钟配置使能了低速外设时钟与复用引脚时钟。 (2) 引脚配置 引脚配置用于将微处理器引脚设置为 CAN 通讯引脚,主从站硬件中,将 STM32 的PB8 与 PB9 引脚分别设置为 CAN_Rx 与 CAN_Tx 引脚。 34华中科技大学硕士学位论文 华中科技大学硕士学位论文 PB9 引脚配置函数为: void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_Ini
9、tStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, 上述引脚配置过程使能了 PB9 引脚,并将 PB9 引脚设置为推挽输出,输出频率为50MHZ。同样的,PB8 被配置为浮空输入,PB8 引脚的配置过程: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStr
10、ucture.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, 由于 CAN 使用了引脚的复用功能,在引脚配置结束后,要使能 CAN 引脚的复用功能,使 PB8 与 PB9 复用为 CAN 通讯引脚: GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE); 配置完成后,将 PB9 引脚复用为 CAN 通信 CAN_Tx 引脚,推挽输出,频率为 50MHZ; PB8 复用为 CAN_Rx 引脚,配置为浮空输入。其它需要使用的控制器引脚也通过这种方式在 GPIO _Configuration 函数中进行配置。
11、 (3)中断向量配置 中断向量配置使能了 CAN 接收报文,发送报文,定时中断与 10-15 引脚外部中断功能。配置 CAN 发送报文中断的代码为: NVIC_InitStructure.NVIC_IRQChannel=USB_HP_CAN_TX_IRQChannel; 35华中科技大学硕士学位论文 华中科技大学硕士学位论文 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQ
12、ChannelCmd = ENABLE; NVIC_Init( 其它类型中断的配置过程与发送报文中断的配置过程相同。 (4) CAN 初始化配置 CAN 初始化配置过程包括 CAN 通信状态设置、波特率设置以及接收报文滤波设置,并配置实现通讯功能所必要的 CAN 中断。CAN 初始化配置过程封装成 API 函数: void CAN_Configuration(); 1.CAN 波特率设置 CAN 的时钟来自微控制器低速外设时钟,微控制器系统时钟设置好之后,通过配置CAN 位时间寄存器来得到 CAN 总线波特率,这种配置是在软件中对 CAN 位时间寄存器进行写操作实现的。图 4-2 显示了 CA
13、N 总线波特率与时钟频率的关系。 图 4-2 CAN 波特率与时钟频率 图 4-2 中,波特率为比特时间的倒数,比特时间由 SYNC_SEG 段,BS1 段与 BS2 段组成。即: NMINAL BIT TIME = Tq + Tbs1+Tbs2 根据 STM32 硬件特性: Tq = (BRP9:0)*Tpclk; Tbs1 = (Ts12:0)*Tpclk; Tbs2 = (Ts22:0)*Tpclk; 36华中科技大学硕士学位论文 华中科技大学硕士学位论文 Tpclk 是低速外设时钟,Tq 是 Tpclk 经分频后得到的频率,BRP、Ts1 与 Ts2 都在 CAN位时间寄存器中进行了定
14、义, 因此, 对位寄存器进行设置就可以得到所需的 CAN 波特率。CAN 时钟频率为 6MHZ 时,软件配置 125K CAN 波特率的配置过程为: CAN_InitStructure.CAN_SJW=CAN_SJW_2tq; CAN_InitStructure.CAN_BS1=CAN_BS1_5tq; CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; CAN_InitStructure.CAN_Prescaler=4; CAN_Init( 在 CAN_Init( Filter1.CAN_FilterScale = CAN_FilterScale_16bit; Fi
15、lter1.CAN_FilterIdHigh = 0x00; Filter1.CAN_FilterIdLow = 0x78; Filter1.CAN_FilterMaskIdHigh = 0x0000; Filter1.CAN_FilterMaskIdLow = 0x0000; Filter1.CAN_FilterFIFOAssignment = CAN_FIFO0; Filter1.CAN_FilterActivation = ENABLE; CAN_FilterInit( 上述代码实现了 CAN 接收 FIFO0 的报文滤波设置, 报文滤波设置在标识符列表模式37华中科技大学硕士学位论文
16、华中科技大学硕士学位论文 下,只有 ID 标识符为 0x0078 是报文能被接收到。接收 FIFO1 也通过这种方式设置,当采用标识符掩码模式时,控制器只过滤报文标识符部分位,标识符符合过滤要求的报文会被接收。CAN 接收 FIFO1 的报文滤波采用了这种设置: Filter1.CAN_FilterNumber = 1; Filter1.CAN_FilterMode = CAN_FilterMode_IdMask; Filter1.CAN_FilterScale = CAN_FilterScale_16bit; Filter1.CAN_FilterIdHigh = 0x00; Filter1.CAN_FilterIdLow = 0x64; Filter1.CAN_FilterMaskIdHigh = 0x0000; Filter1.CAN_FilterMaskIdLow = 0x0023; Filter1.CAN_FilterFIFOAssignment = CAN_FIFO1; Fi