今天给大家分享一个 初级版本的步进电机的控制方法,用到的步进电机是4线两相的42步进电机 如下图:
步进电机驱动选用的是这款 TB6600
供电选用了12V的稳压电源 最小系统板供电是从Jlink上直接引出
MCU是 stm32F407ZGT6 最小系统板
根据步进电机控制器的资料可以知道 步进电机的速度和转过的角度都是通过 PUL + 和PUL- 来控制的
(这里插一段关于步进电机驱动上的六个控制接线端子的使用,将其中的四个+ 或者是四根 - 接在一起做成共阳接法或者共阴接法,如果 电平是3.3V 或者 5V 可以不串接电阻 ,如果电压大于5V 需要在每一根线上串接相应阻值的电阻)
这里我选择的是共阳接法 也就是将所有的正极接线接到了一起
EN -引脚悬空 (我的程序里面暂时没有用到, 实际使用需要读者自行考虑)
DIR- 接单片机 PE12口
PUL- 接单片机 PE13口
接下来 就说一下我程序的基本思路:
要想控制步进电机 我们一般是控制两个东西:1是转过的角度值(位置)2是速度(为了防止丢步和平稳的启动机器 预防启动极限和转子振荡 我们的速度不能变化太快)
归结到程序上也就是我们需要控制PE13 IO口输出一定的方波信号 。 这个信号一方面有数量的限定,另一方面这个信号的频率不能是一个固定的数值(除非你的控制对时间没有要求,可以允许设备一直以一个较低的速度运行),这里我们选用了定时器 中断作为脉冲的时间基准 ,在定时器的中断函数里面我们对IO口的电平进行翻转一次获得一个方波的边缘(一半的方波) 通过对中断次数的统计我们可以实现对位置的控制(理想情况下),另一个需求就是控制速度,我的解决方案是控制中断的频率 以此来实现控制方波的频率,具体的操作就是修改 定时器的预分频器 PSC ,通过改变最终进入定时器CNT的脉冲频率来实现修改定时频率的目的(这里用到的是定时器的更新中断)
以上是初始化代码 ,需要注意的请看备注 , 这份代码我会上传到CSDN 需要的朋友可以自行下载 也可以私信我
主要是一个定时器的初始化以及中断的配置、两个通用IO的初始化
以上是中断函数部分 通过这噶函数我们可以实现对运行状态的粗略控制: 我们可以控制脉冲的数量,进而控制步进电机转过的角度。 我们可以控制定时器的中断频率,进而控制脉冲的频率 以此实现对步进电机速度的控制。
说明: 此代码只适合新手来看看,并不适用于实际生产! 步进电机的速度控制算法有比这个优秀很多的,这只是我初步写的一个初级版本,后续会补上其他版本的步进电机控制方案。
另外有一点需要注意的就是步进电机的细分选择: 我这边选择的是8细分 电流是根据电机特性选择的1.5A 细分方面不建议细分太多,这样会导致初级版本的程序频繁的进入中断函数,占用的CPU时间可能会影响程序的运行效率。细分的如果太少也会导致一些其他问题,比如电机的噪音增大。电流大小会直接影响到电机的力矩,如果电流过小可能会导致大电机启动不起来。电流过大则会导致小电机的发热严重。 EN 引脚一般是控制释放电机的 ,这里有一个概念叫做 保持力矩,也就是步进电机再点击驱动器的电流影响下会保持当前的位置难以转动,这个力矩的大小是由电流决定的也就是保持力矩。
另外分享一个快速区分步进电机的两根相线的方法: 将步进电机的任意两条相线短接,转动转子,如果有卡顿的感觉 那就说明短接的两根是同一相! 另外的两根自然就是另一相。
关键字:stm32F4 定时器中断 步进电机控制器 四线两相 步进电机
引用地址:
stm32F4 定时器中断 + 步进电机控制器 控制四线两相步进电机
推荐阅读最新更新时间:2024-11-12 15:07
一体化步进电机微型驱动控制器选型快速指南
简介 现代社会分工日益细化。不论企业还是用户,只有专注于最擅长的工作才能使利益最大化。步进电机的用户多数不研究电机的控制和优化,而是将其应用于某个场合。基于这点,国外开始盛行一体化步进系统,即将步进电机、反馈装置、驱动放大器、运动控制器组合成一个整体。其优势为:体积小、故障率低、无需匹配电机和驱动控制器,使用简单,系统设计和维护方便,大大减少产品开发时间。 然而国外的一体化步进系统售价高昂,一般在200到1000美金一台/轴。鉴于国内实际情况,上海优爱宝公司从美国引进了一体化步进系统全面技术,以适合中国的价格为国内用户提供一体化步进电机驱动控制系统。其低端产品比国内同类售价略低,其高端产品国内尚无类似,其价格是国外产品的1/
[嵌入式]
stm32f4xx标准外设固件库
一、标准固件库简介 本文下载的是STM32F4xx_DSP_StdPeriph_Lib_V1.5.0,其文件夹如下图所示: 其中Project文件夹为各个开发环境(MDK-ARM、EWARM、TrueSTUDIO)的模板工程,Utilities文件夹为官方评估板的标准固件库应用例程,而真正的标准固件库在Libraries文件夹中。在Libraries文件夹中:CMSIS文件夹主要包含于内核相关的文件;STM32F4xx_StdPeriph_Driver文件夹为STM32F4xx处理器外设相关的底层驱动。 以下为固件库移植时CMSIS文件夹中的重要源文件: core_cm4.h :内核功能的定义,比如N
[单片机]
stm32f407之三ADC交替采样(操作寄存器)
stm32f407之三ADC交替采样(操作寄存器) 三ADC交替采样 在多ADC模式中,ADC1为主,ADC2或ADC3为从,交替或者同时触发,工作模式取决于ADC_CCR寄存器的MULTI 。 多ADC模式中,转换后的数据可以多模式的数据寄存器(ADC_CDR)中读取。状态可以在多模式的状态寄存器(ADC_CSR)读取。 多ADC模式下的DMA传输方式: 方式1:每个AD转换完都发出DMA请求,多模式的数据寄存器(ADC_CDR)用低位保存转换结果。 1st request: ADC_CDR = ADC1_DR 2nd request: ADC_CDR = ADC2_DR 3rd request: ADC_CDR =
[单片机]
直流伺服电机、交流伺服电机和步进电机的优缺点
为了适应数字控制的发展趋势,运动控制系统中大多采用步进电机、直流电机或全数字式交流伺服电机作为执行电动机。虽然三者在控制方式上相似,但在使用性能和应用场合上存在着的差异。现大兰电机小编就三者的优点用途作一比较。 交流伺服电机 优点: ⑴无电刷和换向器,因此工作可靠,对维护和保养要求低。 ⑵定子绕组散热比较方便。 ⑶惯量小,易于提高系统的快速性。 ⑷适应于高速大力矩工作状态。 直流伺服电机 优点: 直流伺服电机特指直流有刷伺服电机——电机成本高结构复杂,启动转矩大,调速范围宽,控制容易,需要维护,但维护不方便(换碳刷),会产生电磁干扰,对环境有要求。因此它可以用于对成本敏感的普通工业和民用场合
[嵌入式]
51单片机第二讲(定时器中断)
1.中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断产生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A中断的地方继续处理事件A(中断返回),这一过程称为中断。 2.中断的优先级 51单片机里一共有5个中断源,分别是外部中断0,定时器0,外部中断1,定时器1,串口中断,中断优先级从大到小分别是0,1,2,3,4。 3.中断的优点 分时操作。CPU可以分时为多个I/O设备服务,提高了计算机的利用率; 实时响应。CPU能够及时处理应用系统的随机事件,系统的实时性大大增强; 可靠性高。CPU具有处理设备故障及掉电等突发性事件能力,
[单片机]
结合STM32F4关于CAN基本的信息描述
CAN,Controller Area Network(控制器局域网络),在汽车电子、工业控制领域的应用比较多,通常用于局域组网。 CAN总线和UART、I2C、SPI总线最大的区别主要在于取消了传统的地址编码方式,理论上讲总线上的互联节点数不受限制,拥有强大的握手与出错管理及重发机制,具有很强的抗干扰能力。 1 STM32 CAN 基础内容CAN网络中主要由CAN控制器和CAN收发器组成,大部分STM32内部都集成了CAN控制器,如果需要使用CAN功能,还需要在外部连接一个CAN收发器才能使用。 ▲ CAN 网络拓扑结构图 STM32内部集成的CAN控制器,支持 2.0A 和 B 版本的 CAN 协议。还有通信速度更
[单片机]
MSP430 定时器中断使用总结
最近两天琢磨了下MSP430的定时器,发现还是挺麻烦的,在这里把学习心得记录下来:在MSP430G2211上只有TIMER A中断,所以在这里我们讨论TIMER A ,TIMER B应该和TIMER A差不多。 对于每一个定时器来说,它有两个中断,TIMERA0_VECTOR 和TIMERA1_VECTOR 。这两个中断何时被触发呢?在MSP430中,TIMERA0_VECTOR在TACCR0寄存器溢出时被触发;而TIMERA1_VECTOR 在三个时候都可以被触发(TACCR1 CCIFG、TACCR2 CCIFG,TAIFG只要这三个寄存器中的任何一个被置位了,TIMERA1_VECTOR 中断就会被触发)。 显然,这样就会有一
[单片机]
MC9S12G定时器中断设置
一、关闭定时器模块 时TSCR1的TEN位为0; 二、设定IOSx为输出比较引脚(以7为例) TIOS_IOS7 = 1; 三、绑定输出比较引脚 TCTL1_OM7 = 0; TCTL1_OL7 = 1; 四、设置计数器的比较值(在24Mhz的系统时间下,0xBB为1ms)中断周期:0x4926*128/24MHz = 100ms TC7 = 0xBB; 五、设置定时器分频设置(以128分频为例) TSCR2_PR = 0x7; 六、设置定时器比较成功后输出从而产生中断 TSCR2_TCRE = 1; 七、最后开启定时器 TSCR1_TEN = 1; 八、中断函数要写为
[单片机]