版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档说明本手册旨在帮助用户正确构建 BH-MSD4805 步进电机驱动器的使用环境,引导用户快速使用该驱动器。2 / 38目录BH-MSD4805 步进电机驱动器1用户手册1文档说明2目录31.BH-MSD-4805 简介4BH-MSD4805 简介4特性参数42.硬件测试5硬件连接5测试流程9参数设置92.2.2 控制步进电机加运动103.4.注意事项及常见问题17配套程序说明19驱动原理19main 函数执行流程37产品更新及售后支持385.3 / 381. BH-MSD-4805 简介1.1BH-MSD4805 简介BH-MSD4805 是秉火科技推出的一款智能步进电机驱动器。它是一款以
2、双极恒流驱动输出控制电机的驱动器,驱动电压范围 DC12V48V,适合外径为 42mm、 57mm、86mm 系列,驱动电流在 5A 以下的所有两相混合式步进电机。根据驱动器提供的8 位拨码开关可以轻松的实现对不机电流及不同细分步数的精确控制。带有自动半流技术,可以大大降低电机的功耗及发热量,输入信号都经过光耦能力,能适应恶劣的工作环境。,具有很强的图 1-1 MSD4805 外观图1.2特性参数4 / 38参数说明额定电压直流:12V 48V额定电流0.75A 5.0A驱动方式双极恒流驱动输出工作温度0 80结构尺寸118(mm)*75.5(mm)*33(mm)应用领域数控设备、雕刻机等设备
3、2. 硬件测试本驱动器配套 STM32 驱动程序,可直接使用秉火指南者、霸道及者开发板进试。按要求使用杜邦线把模块连接到开发板,并程序即可。2.1硬件连接BH-MSD4805 驱动器外观见图 2-1,驱动器右侧分别是电源及故障指示灯、控制信号接口、参数设定拨码开关、电源驱动接口,在其端子的正上方是对应引脚名称的丝印。图 2-1 BH-MSD4805 驱动器外观5 / 38表 2-1 BH-MSD4805 驱动器控制信号说明表 2-2 BH-MSD4805 驱动器拨码开关说明表 2-3 BH-MSD4805 驱动器电源驱动端子说明6 / 38序号引脚名称引脚定义功能说明1A-A 相绕组负端驱动器
4、的A 相绕组驱动输出,跟电机的A 相绕组相连2A+A 相绕组正端3B-B 相绕组负端驱动器的B 相绕组驱动输出,跟电机的B 相绕组相连4B+B 相绕组正端5GND电源负端驱动器的电压供电口,驱动电压应该满足直流:12V 48V6VCC电源正端序号引脚名称引脚定义功能说明1SW1细分设定由 SW1SW4 四个拨码开关来设定驱动器微步细分数,其有 16 档微步细分设定。用户设定微步细分时需要重新上电微步细分才生效,具体输出微步细分的设定,见驱动器的细分设置由拨码开关的 SW1SW4 来设定,默认为 100 细分,一般的两相四线制步进电机的步进角都是 1.8,因此电机旋转一圈需要 360/1.8=2
5、00 个脉冲,这里 100 细分转一圈需要的脉冲数为200*100=20000 个。详细设定见表 2-7。表 2-7。2SW23SW34SW45SW5电流设定由 SW5SW8 四个拨码开关来设定驱动器输出电流,其输出电流共有 14 档。其中 SW8 为全局电流设定开关,如果设定为 ON,则输出结果为设定值的一半。具体输出电流的设定,见驱动器的电流设置由拨码开关的 SW5SW8 来设定,默认为 1.5A。这个电流值需要根据步进电机的额定电流来设定。一般建议驱动器的输出电流设定和电机额定电流差不多或者小一点,详细设定见表 2-7。表 2-8 电流参数使用拨码开关设置说明。6SW67SW78SW8序
6、号引脚名称引脚定义功能说明1ENA-(ENA)输出使能负端控制器的输出是通过该组信号使能,又称脱机信号。当此信号有效时,输出关闭,电机绕组电流为零,电机为无力矩状态,可以转动电机,适合需要手动调整电机的场合。2ENA+(+5V)输出使能正端3DIR-(DIR)方向控制负端电机的方向控制信号,当此信号有效时,电机顺时针转动,当此信号无效时,电机逆时针旋转。4DIR+(+5V)方向控制正端5PUL-(PUL)脉冲控制负端电机的转动控制信号,驱动器接收到的脉冲信号电机就会按照既定的方向旋转。电机的角位移与脉冲的数量成正比,速度与脉冲的频率成正比。通常脉冲的有效宽度=5us,频率 accel_lim,
7、度是受限于的开始。距离 decel_val 应该为()decel_val = (step accel_lim)定时器中断处理函数定时器中断产生步脉冲并且只有在步进电机移动时进入。这个中断处理速度属性的四个不同的状态,分别为 stopaccelrundecelstop。如图 4-9 所示。图 4-9 步进电机运行速度的四个状态速度的这种行为通过状态机在定时器中断中实现。如图 4-10 所示。STOP 为停止状态,ACCEL 为状态,RUN 为匀速状态,DECEL 为状态。27 / 38图 4-10 定时器中断中的状态机当应用程序启动或者步进电机停止状态机处于 STOP 状态。当输入移动步数建立计
8、算完成,一个新状态被置位同时定时器的中断被使能。当运行的步数超过 1 步状态机进入 ACCEL 状态,如果只移动一步,那么状态直接变为 DECEL。因为只移动一步是不需要加速的。当状态变为 ACCEL,应用程序一直步进电机达到期望的最大速度,这时状态变为 RUN,或者必须开始,状态变为 DECEL。它会一直保持 DECEL 状态并一直到期望的步数并且速度为 0。然后状态变为 STOP。计算和定时器的计数器在和过程中的每一步新的时间延迟必须计算得出。这个计算结果会包括一个系数和一个余数,为了提高精度余数保留并包含在下一次计算当中。由式(414)可以得出式(430),其中 rest 为余数,首次计
9、算值为 0。new_rest 就是保存除不尽的余数参与下一次计算。 2_+new_step_delay = step_delay()4_+1new_rest = (2 + )(4 _ + 1) ()当状态改变时为了保持位移的轨迹,一些辅助计数变量是必不可少的。见图 4-11。28 / 38图 4-11 在延时中的计数变量step_count 为计算步数,在 ACCEL 状态从零开始,在DECEL 状态完成时结束。的步数应该与命令控制的步数相同。accel_count 用于控制或者。在 ACCEL 状态时,它从零开始每一步都会增加直到ACCEL 状态结束。在 DECEL 状态时,它设置为 dec
10、el_val,并且为负数,每一步都会增加直到它的值为 0,运动结束,状态设置为 STOP。decel_start 指示开始。当 step_count 与 decel_start 相等时,状态设置为 DECEL。当这个代码使用过程中需要特别注意中断的优先级。如果产生脉冲的中断被其他中断阻塞会影响电机的速度。29 / 389.代码讲解配套的三个程序除了主控控制板不一样,其它部分是完全一样的,这里BH-MSD4805 测试程序 F103(指南者)”来讲解。以“1.BH-MSD4805 的驱 动包含 了 MicroStepDriver.c 及 MSD_test.c 文件中 。MicroStepDriv
11、er.c 文件中主要是配置定时器产生脉冲, 以及实现步进电机移动的函数MSD_Move(signedstep, unsignedaccel, unsigneddecel, unsignedspeed) 。MSD_test.c 文件包含串口命令接收处理、控制步进电机运动。MicroStepDriver.c 程序中首先初始化步进电机需要用到的三组信号:脉冲信号、方向信号、脱机信号。代码见代码4-1。代码4-1 定时器初始化代码(位于 MicroStepDriver.c 和 MicroStepDriver.h 文件)1 / 当使用不同的定时器的时候,对应的 GPIO 是不一样的,这点要注意23456
12、78910111213141516171819202122232425262728293031323334353637383940414243444546/ 这里 #define #define #define使用定时器 TIM2MSD_PULSE_TIMMSD_PULSE_TIM_APBxClock_FUNMSD_PULSE_TIM_CLKTIM2RCC_APB1PeriphClockCmdRCC_APB1Periph_TIM2/ 定时器输出 #define #define/ 定时器中断 #define #define通道,PA0 是通道 1 MSD_PULSE_OCx_Init MSD_P
13、ULSE_OCx_PreloadConfigTIM_OC4Init TIM_OC4PreloadConfigMSD_PULSE_TIM_IRQMSD_PULSE_TIM_IRQHandlerTIM2_IRQnTIM2_IRQHandler/ #de信号的频率eF = TIM_CLK/(ARR+1)*(PSC+1) MSD_PULSE_TIM_PERIOD MSD_PULSE_TIM_PSC(10-1)(72-1)#define/ 步进电机脉冲输出通道#define #define #defineMSD_PULSE_GPIO_CLK MSD_PULSE_PORT MSD_PULSE_PINRCC
14、_APB2Periph_GPIOA GPIOAGPIO_Pin_3/ 步进电机方向控制#define #define #defineMSD_DIR_GPIO_CLK MSD_DIR_PORT MSD_DIR_PINRCC_APB2Periph_GPIOB GPIOBGPIO_Pin_14/ 步进电机脉冲输出使能引脚#define #define #defineMSD_ENA_GPIO_CLK MSD_ENA_PORT MSD_ENA_PINRCC_APB2Periph_GPIOC GPIOCGPIO_Pin_4sic void TIM_Mode_Config(void)/ 开启定时器时钟,即内
15、部时钟 CK_=72M MSD_PULSE_TIM_APBxClock_FUN( D_PULSE_TIM_CLK,ENABLE);/*-时基结构体初始化*/TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);/ 自动重装载寄存器的值,累计 TIM_Period+1 个周期后产生一个更新或者中断TIM_TimeBaseStructure.TIM_Period=MSD_PULSE_TIM_PERIOD;/ 驱动 CNT 计数器的时钟 = Fck_/(psc+1)
16、TIM_TimeBaseStructure.TIM_Pr caler= MSD_PULSE_TIM_PSC;/ 时钟分频因子 ,配置死区时间时需要用到TIM_TimeBaseStructure.TIM_ClockDivi/ 计数器计数模式,设置为向上计数=TIM_CKD_DIV1;30 / 38474849505152535455565758596061626364656667686970717273747576777879808182TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/ 重复计数器的值,最大值为 255/TIM_
17、TimeBaseStructure.TIM_RepetitionCounter=0;/ 初始化定时器TIM_TimeBaseInit(MSD_PULSE_TIM, &TIM_TimeBaseStructure);/*-输出比较结构体初始化*/TIM_OCInitTypeDef TIM_OCInitStructure;/ 配置为模式 2TIM_OCIni tructure.TIM_OCMode =/ 输出使能TIM_OCInitStructure.TIM_OutputS/ 互补输出禁能TIM_OCInitStructure.TIM_OutputNS/ 设置占空比大小TIM_OCMode_2;e
18、= TIM_OutputSe_Enable;e = TIM_OutputNSe_Disable;TIM_OCInitStructure.TIM_Pulse = MSD_PULSE_TIM_PERIOD/2;/ 输出通道电平极性配置TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;/ 输出通道空闲电平极性配置TIM_OCInitStructure.TIM_OCIdleSe = TIM_OCIdleSe_Reset;MSD_PULSE_OCx_Init(MSD_PULSE_TIM, &TIM_OCInitStructure);/使能 T
19、IM1_CH1 预装载寄存器MSD_PULSE_OCx_PreloadConfig(MSD_PULSE_TIM, TIM_OCPreload_Enable);/使能 TIM1 预装载寄存器TIM_ARRPreloadConfig(MSD_PULSE_TIM, ENABLE);/设置中断源,只有溢出时才中断TIM_UpdateReq/ 清除中断标志位onfig(MSD_PULSE_TIM,TIM_UpdateSource_Regular);TIM_ClearITPendingBit(MSD_PULSE_TIM, TIM_IT_Update);/ 使能中断TIM_ITConfig(MSD_PULS
20、E_TIM, TIM_IT_Update, ENABLE);/ 使能计数器TIM_Cmd(MSD_PULSE_TIM, DISABLE);MicroStepDriver.h 头文件主要定义驱动步进电机所需脉冲的定时器和它对应的输出通道引脚。方向信号引脚,脱机信号引脚。MicroStepDriver.c 程序中控制 STM32 使用 TIM2 定时器采用中断的方式产生脉冲,定时器的周期设定为 10us,占空比为 50%。使能溢出中断,使能计数器。以给定的步数、度、度、最大速度移动步进电机。代码见代码4-2。代码4-2 移动步进电机代码(位于 MicroStepDriver.c)1 /*!brie
21、f 以给定的步数移动步进电机通过计算到最大速度,以给定的步数开始23456789101112131415*/如果paramparamparamparam度和 step accel decel speed度很小,步进电机会移动很慢,还没达到最大速度就要开始移动的步数 (正数为顺时针,负数为逆时针).度,如果取值为 100,实际值为 100*0.01*rad/sec2=1rad/sec2度,如果取值为 100,实际值为 100*0.01*rad/sec2=1rad/sec2最大速度,如果取值为 100,实际值为 100*0.01*rad/sec=1rad/secvoid MSD_Move(sign
22、edstep, unsignedaccel, unsigneddecel, unsignedspeed)/达到最大速度时的步数.unsigned/必须开始 unsignedmax_s_lim;的步数(如果还没accel_lim;到达最大速度时)。31 / 38/ 根据步数的正负来判断方向if (step 1);/使能定时器 TIM_Cmd(MSD_PULSE_TIM, ENABLE);/步数不为零才移动else if (step != 0) /的驱动器用户手册有详细的计算及推导过程/ 设置最大速度极限, 计算得到 min_delay 用于定时器的计数器的值。/ min_delay = (alp
23、ha / tt)/ w srd.min_delay = A_T_x100 / speed;/ 通过计算第一个(c0) 的步进延时来设定度,其中 accel为 0.01rad/sec2/ step_delay = 1/tt * sqrt(2*alpha/accel)/ step_delay = ( tfreq*0.676/100 )*100 * sqrt( (2*alpha*10000000000) / (accel*100) )/10000srd.step_delay = (T1_FREQ_148 * sqrt(A_SQ / accel)/100;/ 计算多少步之后达到最大速度的限制/ max
24、_s_lim = speed2 / (2*alpha*accel)max_s_lim = (long)speed*speed/(long)(long)A_x20000*accel)/100);/ if如果达到最大速度小于 0.5 步,四舍五入为 0但实际须移动至少一步才能达到想要的速度(max_s_lim = 0) max_s_lim = 1;计算多少步之后须开始/n1 = (n1+n2)decel / (accel + decel)accel_lim = (long)step*decel) / (accel+decel);/ if须至少 1 步才能才能开始.(accel_lim accel_
25、lim= 0) = 1;/使用限制条件可以计算出第一次开始的位置/srd.decel_val 为负数if (accel_lim = max_s_lim) srd.decel_val = accel_lim - step; else srd.decel_val = -(long)(max_s_lim*accel/decel);32 / 388081828384858687888990919293949596979899100101102103104105106107/ if当只剩下一步(srd.decel_val srd.decel_val须= 0) = -1;/计算开始时的步数srd.dece
26、l_start = step + srd.decel_val;/ 如果最大速度很慢, if (srd.step_delay srd.step_delay就不需要进行运动1);/使能定时器 TIM_Cmd(MSD_PULSE_TIM, ENABLE);MSD_Move(signedstep, unsignedaccel, unsigneddecel, unsignedspeed)函数作用是用户输入固定的步数、度、度、最大速度四个参数;然后计算出运动速度曲线,根据步数的正负来判断电机的方向;根据式(422)用最大速度来计算脉冲之间的最小延时对应定时器的计数值;根据式(425)计算出度的定时器计数值
27、。根据式(426)用度和最大速度计算出到达最大速度是的步数;根据式(427)用步数、度和度计算必须开始的步数;根据给定的参数可以计算出电机是否能加速到最大速度就要开始,选择式(428)或者式(428)来计算距离。所有数据设置完毕后就启动定时器。产生脉冲定时器的中断响应程序,每走一步都会重新计算运动状态。代码见代码4-3。代码4-3 定时器中断服务函数代码(位于 MicroStepDriver.c)123456789101112131415161718/*brief产生脉冲定时器的中断响应程序,每走一步都会计算运动状态*param无*retval无*/void MSD_PULSE_TIM_IRQ
28、Handler(void)/ 保存下一个延时周期unsignednew_step_delay;/过程中最后一次延时.siclast_accel_delay;/ 移动步数计数器sic unsignedstep_count = 0;new_step_delay 中的余数,提高下一步计算的精度/33 / 3819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485sic signedrest
29、 = 0;if(TIM_GetITS/* Clear Mus(MSD_PULSE_TIM, TIM_IT_Update) != RESET) PULSE_TIM Capture Compare1errupt pending bit*/_Update);TIM_ClearITPendingBit(MSD_PULSE_TIM, TIMMSD_PULSE_TIM-CCR4=srd.step_delay 1;/周期的一半 MSD_PULSE_TIM-ARR=srd.step_delay;/如果 if (ssrswitch输出,电机则停止运动us.out_ena != TRUE |sus.estop =
30、 TRUE) .run_se = STOP;(srd.run_se) case STOP:step_count = 0;rest = 0;/ Stop Timer/Counter 1. MSD_PULSE_TIM-CCER &= (1CCER |= 1= srd.decel_start) srd.accel_count = srd.decel_val;srd.run_se = DECEL;/检查是否到达期望的最大速度else if (new_step_delay CCER |= 1= srd.decel_start) srd.accel_count = srd.decel_val;/ 以最后一
31、次的延时作为开始的延时new_step_delay = last_accel_delay;srd.run_se = DECEL;break;case DECEL:MSD_PULSE_TIM-CCER |= 1= 0) srd.run_se = STOP;break;srd.step_delay = new_step_delay;中断服务函数中,使用一个状态机根据速度的四个状态来计算运动轨迹。根据式(430)和式(431)计算得出和时每一步需要脉冲的时间间隔。串口中断服务函数中调用 DealSerialData 函数用作处理串口接收到的指令,4-4。代码见代码4-4 USART1 串口接收数据处
32、理代码(位于 MSD_test.c 文件)代码1 /* 23456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051*brief处理串口接收到的数据*param无*retval无*/void DealSerialData(void)s/ s/ s/ s/ sic char showflag =1;umber ic cce ic ece ic pee icof steps to move. steps = 40000;tion to use. acceleration =
33、32000;ation to use. deceleration = 32000;o use.speed = 3000;acc_temp=0; dec_temp=0; speed_temp=0;/ chals if the received string was kCmd = FALSE;a validd.if(showflag) showflag = 0;ShowData(stepition, acceleration, deceleration, speed, steps);/ ifIf (s iad is received, check the= TRUE) UART_RxBuffer0
34、 = m) / Move with.if (UART_RxBuffer1 = ) / .number of steps given.d and act on it.steps = atoi(char const *)UART_RxBuffer+2); MSD_Move(steps, acceleration, deceleration, speed); okCmd = TRUE;pr elseiff(nr ); (UART_RxBuffer1 = o) (UART_RxBuffer2 = v) if (UART_RxBuffer3 = e) / if.all parameters given
35、(UART_RxBuffer4 = ) i = 6;ps = atoi(char const *)UART_RxBuffer+5);while (UART_RxBufferi != ) & (UART_RxBufferi != 13) i+;i+;acceleration = atoi(char const *)UART_RxBuffer+i);35 / 3852535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610
36、7108109110111112113114115116117118while (UART_RxBufferi != ) & (UART_RxBufferi != 13) i+; i+;deceleration = atoi(char const *)UART_RxBuffer+i);while(UART_RxBufferi != ) & (UART_RxBufferi != 13) i+; i+;speed = atoi(char const *)UART_RxBuffer+i); MSD_Emergency_Stop(DISABLE);MSD_Move(steps, acceleration, deceleration, speed); okCmd = TRUE;prf(nr );else/ ifif (UART_RxBuffer0 = a) Set acceleration. (UART_RxBuffer1 = ) acc_temp = atoi(char const *)UART_Rx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年邵阳通航职业技术学院马克思主义基本原理概论期末考试笔试真题汇编
- 2024年中央民族大学马克思主义基本原理概论期末考试笔试题库
- 2025年阳泉师范高等专科学校马克思主义基本原理概论期末考试笔试真题汇编
- 2025年安徽医科大学临床医学院马克思主义基本原理概论期末考试笔试真题汇编
- 2025年浙江科技学院马克思主义基本原理概论期末考试笔试真题汇编
- 2025年湖北铁道运输职业学院马克思主义基本原理概论期末考试笔试真题汇编
- 康复护理技术
- 应聘培训师准备的课件
- 应用化工实习内容安全培训课件
- 资产管理公司不良资产处置协议
- 监控中心工作总结
- 2021医院感控持续改进手册(护士版)
- JJF 1375-2024机动车发动机转速测量仪校准规范
- 瑜伽馆装修合同模板及明细
- GB/T 9799-2024金属及其他无机覆盖层钢铁上经过处理的锌电镀层
- 工程伦理与管理智慧树知到期末考试答案章节答案2024年山东大学
- 文史哲与艺术中的数学智慧树知到期末考试答案章节答案2024年吉林师范大学
- GB/T 15651.7-2024半导体器件第5-7部分:光电子器件光电二极管和光电晶体管
- 浙教版劳动二年级上册全册教案
- 《物联网工程项目管理》课程标准
- 物业公司财务预算管理制度
评论
0/150
提交评论