目录标题

  • A4988 步进电机驱动模块测试-两相4线步进电机
    • 电机
    • stm32发脉冲的代码
    • 常见问题总结:
    • 烧毁
      • 接线注意:
    • 代码。参考文章
    • 链接
  • 舵机指令包
  • windows下运行步骤
  • sync_read_write
  • bulk_read_write
  • 故障
    • length does not match
    • 调试过程中查的小知识
      • list
      • setup.py
      • from . import XXX
      • Visual Studio Code快捷键

A4988 步进电机驱动模块测试-两相4线步进电机

使用中,把使能脚和细分脚全部接地,即不设置细分(步进值为1),复位脚和睡眠脚用跳线帽短接。
A4988功能实验测试:
DIR=1,STEP为3.3V占空比50%,频率为500Hz的方波,电机电压Vmot=12V。

电机

接线参考下图对应关系
A+和A-为一相
B+和B-为一相
同相之间电阻较小,非同相之间电阻无穷大,接完线可以用万用表测量是否接错



A4988的引脚图及运用 – 八色木
https://www.basemu.com/a4988_pinout_and_how_to_use.html

stm32发脉冲的代码

//PB15 enable  低电平有效
//PB14 dir
//PB13 pulse
void loop()
{int i,j,k,x=7;int num=1000;PBout(15)=0;PBout(14)=1;for(i=0;i<num;i++){PBout(13)=1;Delay_ms(x);PBout(13)=0;Delay_ms(x);}GPIOBE_REV;Delay_ms(1000);PBout(14)=0;for(i=0;i<num;i++){PBout(13)=1;Delay_ms(x);PBout(13)=0;Delay_ms(x);}GPIOBE_REV;Delay_ms(1000);PBout(15)=1;//    GPIOBE_REV;
}

主函数:

int main(void)
{u8 i,j,k=0;RCC_Configuration();GPIO_Configuration();//LED+用到的GPIOwhile(1){loop();}
}

脉冲越快电机转动速度越快
脉冲不能发的太快,否则电机跟不上就会吱吱响但是不转动

常见问题总结:

1、4988驱动板可以驱动57电机吗?
4988可以驱动的电机跟尺寸关系不大,主要与工作电流有关,理论上电流小于2A的步进电机都是可以驱动的,不论是42还是57电机。

2、可以驱动多大的电流?
如果4988芯片上没有加散热片,电流最好在1.2A以下。如果加散热片,电流可以达到2A。

3、步进电机的连接方式是什么?
正如4988板子背面所标识的,连接方式是依次连接步进电机的1B-1A-2A-2B,或者反向为2B-2A-1A-1B,或者1A-1B-2B-2A,其它的方式一次类推。如果你的电机线是标准的红蓝绿黑的颜色,可以按照颜色连接为:红-蓝-绿-黑,或相反:黑-绿-蓝-红。

4、如何调节相电流?
相电流的大小跟步进电机的扭力有直接关系,如果感觉你的步进电机扭力不足,可以加大4988板子的电流配置。驱动板是通过一个小的电位器来实现对输出电流的配置的。可以通过用万用表测量电位器中间管脚的电位。电位和电流的关系满足下面的公式:Vref = A*0.8.也就是如果你想配置电机工作电流为1A,则电位应该配置在0.8V。默认的元件配置可以将电流调节到1.5A,如果需要更大电流需要修改电路中的R1,将30K的阻值改为20K(左右),就可以将电流调节到2A左右。

5、4988板子的细分如何配置?
4988板子细分配置需要ramps或其它相似板子的短路块来配置。ramps上对应每个4988驱动都有ms1,ms2,ms3三个短路块来调节细分(需要取下4988板子才可以看到),
ms1 | ms2 | ms3
no | no | no |全细分
yes | no | no |1/2(2细分)
no | yes | no | 1/4 (4细分)
yes | yes | no |1/8(8细分)
yes | yes | yes | 1/16(16细分)

6、接上电机后,电机不能正常运行,在左右抖动,是什么原因?
电机出现抖动一般有两个原因,
一是缺相:可能是4988板子没有焊接好或因为外力导致4988的输出端某一相断开,造成电机缺相从而抖动。也有可能是步进电机接线只用一相没有连接好;
而是两相接错:如果步进电机没有按照正确的顺序进行连接,电机也会出现抖动的情况,请按照问题3进行正确的连接。

7、4988可以驱动两相六线或两相无线的电机吗?
可以,两相连线按照问题3连接,将中间抽头悬空即可。

8、电机停止转动时会有滋滋的电流声。
首先说明的是这是正常现象。步进电机的特点是走特定的角度而不是一直转,所以步进电机都有一个参数,步距角。如果通过细分,可以最小走 步距角/细分数的角度,比如步距角为1.8度的步进电机,采用16细分,最小可以走的角度是1.8/16=0.1125度。但由于这个角度非常小,并且不一定在电机物理所在的位置(1.8度为一个物理位置),所以步进电机停止时也需要通电,从而保证电机不会自动跳到物理步距角上。因为这个特性使得步进电机在静止时会有电流声,这属于正常现象,不用担心。

链接:https://www.jianshu.com/p/a168c20b0f65
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

烧毁

a4988芯片烧毁的现象:24V和GND短路,AB两相也短路

步进电机驱动芯片a4988上电烧毁-OpenEdv-开源电子网
http://openedv.com/thread-100510-1-1.html

接线注意:

好几根线都要接的时候

  • 尽量弄成不同长度的,错开接线的位置,可以有效避免因为不小心发生短路。
  • 接完后尽量找胶带粘上,避免裸露。

代码。参考文章

代码 A4988 步进电机驱动模块测试 - 简书
https://www.jianshu.com/p/a168c20b0f65

(8条消息) A4988步进驱动_Nc2016的博客-CSDN博客
https://blog.csdn.net/PoJiaA123/article/details/85107927

链接

(8条消息) 使用Arduino与A4988 驱动步进电机_凌顺实验室-CSDN博客
https://blog.csdn.net/ling3ye/article/details/47001251

A4988 步进电机驱动模块测试 - 简书
https://www.jianshu.com/p/a168c20b0f65

(8条消息) A4988步进驱动_Nc2016的博客-CSDN博客
https://blog.csdn.net/PoJiaA123/article/details/85107927

(8条消息) 【arduino】arduino uno + A4988控制42步进电机_g1fdgfgdf2_的博客-CSDN博客
https://blog.csdn.net/g1fdgfgdf2_/article/details/78692759




舵机指令包

Instruction Packet
Instruction Packet is the command data sent to the Device.

windows下运行步骤

安装vscode和python,pyserial
vscode选择打开文件夹

选择协议2文件夹
打开如图

选择文件后改动com口,点击菜单“运行”

sync_read_write


由上图协议可知,param前四个为地址和数据长度,后面是id编号

这里初始化了同步读取的四个参数,分别为端口 数据包 地址 数据长度。。协议第二条要求地址和数据长度不可变。
类初始化四个参数:

后面继续添加要读取的舵机id(添加了两个):

发送,并获得返回数据:

使用完后,(程序即将退出时):

写入类似,多了个写入的目标位置值

bulk_read_write

# Enable Dynamixel#1 Torque
dxl_comm_result, dxl_error = packetHandler.write1ByteTxRx(portHandler, DXL1_ID, ADDR_PRO_TORQUE_ENABLE, TORQUE_ENABLE)
if dxl_comm_result != COMM_SUCCESS:print("%s" % packetHandler.getTxRxResult(dxl_comm_result))
elif dxl_error != 0:print("%s" % packetHandler.getRxPacketError(dxl_error))
else:print("Dynamixel#%d has been successfully connected" % DXL1_ID)# Add parameter storage for Dynamixel#1 present position
dxl_addparam_result = groupBulkRead.addParam(DXL1_ID, ADDR_PRO_PRESENT_POSITION, LEN_PRO_PRESENT_POSITION)
if dxl_addparam_result != True:print("[ID:%03d] groupBulkRead addparam failed" % DXL1_ID)quit()

while1循环

while 1:print("Press any key to continue! (or press ESC to quit!)")if getch() == chr(0x1b):break# Allocate goal position value into byte arrayparam_goal_position = [DXL_LOBYTE(DXL_LOWORD(dxl_goal_position[index])), DXL_HIBYTE(DXL_LOWORD(dxl_goal_position[index])), DXL_LOBYTE(DXL_HIWORD(dxl_goal_position[index])), DXL_HIBYTE(DXL_HIWORD(dxl_goal_position[index]))]# Add Dynamixel#1 goal position value to the Bulkwrite parameter storagedxl_addparam_result = groupBulkWrite.addParam(DXL1_ID, ADDR_PRO_GOAL_POSITION, LEN_PRO_GOAL_POSITION, param_goal_position)if dxl_addparam_result != True:print("[ID:%03d] groupBulkWrite addparam failed" % DXL1_ID)quit()# Bulkwrite goal position and LED valuedxl_comm_result = groupBulkWrite.txPacket()if dxl_comm_result != COMM_SUCCESS:print("%s" % packetHandler.getTxRxResult(dxl_comm_result))groupBulkWrite.clearParam()# Add Dynamixel#2 LED value to the Bulkwrite parameter storagedxl_addparam_result = groupBulkWrite.addParam(DXL1_ID, ADDR_PRO_LED_RED, LEN_PRO_LED_RED, [dxl_led_value[index]])if dxl_addparam_result != True:print("[ID:%03d] groupBulkWrite addparam failed" % DXL1_ID)quit()# Bulkwrite goal position and LED valuedxl_comm_result = groupBulkWrite.txPacket()if dxl_comm_result != COMM_SUCCESS:print("%s" % packetHandler.getTxRxResult(dxl_comm_result))# Clear bulkwrite parameter storagegroupBulkWrite.clearParam()while 1:# # Bulkread present position and LED statusdxl_comm_result = groupBulkRead.txRxPacket()if dxl_comm_result != COMM_SUCCESS:print("%s" % packetHandler.getTxRxResult(dxl_comm_result))# Check if groupbulkread data of Dynamixel#1 is availabledxl_getdata_result = groupBulkRead.isAvailable(DXL1_ID, ADDR_PRO_PRESENT_POSITION, LEN_PRO_PRESENT_POSITION)if dxl_getdata_result != True:print("[ID:%03d] groupBulkRead getdata failed" % DXL1_ID)quit()# # Check if groupbulkread data of Dynamixel#2 is available# dxl_getdata_result = groupBulkRead.isAvailable(DXL2_ID, ADDR_PRO_LED_RED, LEN_PRO_LED_RED)# if dxl_getdata_result != True:#     print("[ID:%03d] groupBulkRead getdata failed" % DXL2_ID)#     quit()# Get present position valuedxl1_present_position = groupBulkRead.getData(DXL1_ID, ADDR_PRO_PRESENT_POSITION, LEN_PRO_PRESENT_POSITION)# # Get LED value# dxl2_led_value_read = groupBulkRead.getData(DXL2_ID, ADDR_PRO_LED_RED, LEN_PRO_LED_RED)# print("[ID:%03d] Present Position : %d \t [ID:%03d] LED Value: %d" % (DXL1_ID, dxl1_present_position, DXL2_ID, dxl2_led_value_read))if not (abs(dxl_goal_position[index] - dxl1_present_position) > DXL_MOVING_STATUS_THRESHOLD):break# Change goal positionif index == 0:index = 1else:index = 0

故障

length does not match

Succeeded to open the port
Succeeded to change the baudrate
[RxPacketError] The data length does not match as expected!

####已解决,舵机地址错误

调试过程中查的小知识

list

txpacket = [0] * (length + 7)
在python中, 如果用一个列表list1乘一个数字n 会得到一个新的列表list2, 这个列表的元素是list1的元素重复n次, 例如:

list1 = [0]
list2 = list1 * 5      # list2 = [0, 0, 0, 0, 0]

(3条消息) python 列表乘一个数字_hq_cjj的博客-CSDN博客
https://blog.csdn.net/hq_cjj/article/details/86659589

setup.py

Python 库打包分发(setup.py 编写)简易指南 | Huoty’s Blog
https://blog.konghy.cn/2018/04/29/setup-dot-py/#part-2bb23717ee7e9bfc

from . import XXX

我的理解是 from . import XXX默认的就是在当前程序所在文件夹里__init__.py程序中导入XXX,如果当前程序所在文件夹里没有__init__.py文件的话,就不能这样写,而应该写成from .A import XXX,A是指当前文件夹下你想导入的函数(或者其他的)的python程序名,如果你想导入的函数不在当前文件夹,那么就有可能用到 from … import XXX(即上一个文件夹中的__init__.py),或者from …A import XXX(即上一个文件夹中的文件A)

链接:https://www.zhihu.com/question/28688151/answer/66982373

Visual Studio Code快捷键

(3条消息) 【Visual Studio Code】VS Code在Linux/Mac/Windows中向前、向后定位的快捷键及修改方法_H_O_W_E的专栏-CSDN博客
https://blog.csdn.net/H_O_W_E/article/details/104944130

2020-09-26-舵机+两相4线步进电机相关推荐

  1. 单片机51---步进电机的设计(4相5线步进电机的驱动控制)

    单片机51-步进电机的设计 禁止作为商用,仅供学习交流. 0.本文主要内容 本文主要介绍了为实现步进电机的控制,先在电脑编写程序,仿真成功后,在进行实物的制作,最终独立自主的完成51单片机的编程,硬件 ...

  2. Y07-28D1-5010D 日本信浓步进马达 两相混合式步进电机驱动器组合

    Y07-28D1-5010D 日本信浓步进马达 上一条:日本信浓Y07-43D1-4275 3D打印机专用双轴步进电机 下一条:供应日东波峰焊专用日本信浓86步进电机 产品详情 品牌:日本东方 型号: ...

  3. stm32F4 定时器中断 + 步进电机控制器 控制四线两相步进电机 (初级版本)

    2020-12-07 更新 -------------------------------------------------------------------------------------- ...

  4. 两相步进电机和四相步进电机的不同点?

    两相步进电机和四相步进电机的不同点? 两相步进电机和四相步进电机的不同点: 2相步进电机在定子上只有2个绕组,4根引出线,一般整步步距角为1.8度,半步步距角为0.9度,驱动器只须通过对两相绕组电流通 ...

  5. 两相步进电机的控制及其实现

    1.步进电机如何控制 不同于传统的电机,步进电机是一种脉冲电机,即在不超载的情况下,电机不发生失步,此时电机转速只与驱动电机的脉冲相关.但电机的驱动转矩是有限的,负载又具有惯性,即转速是不能突变的,因 ...

  6. 松下伺服电机pwm控制连线_TMC4671基于硬件FOC伺服电机控制芯片适应BLDC/PMSM、两相步进、直流有刷...

    全球领先的嵌入式运动控制公司德国TRINAMIC MOTION CONTROL 已经推出最新的伺服控制芯片TMC4671 TMC4671_datasheet_v1.03.pdf 5M · 百度网盘 T ...

  7. 两相步进电机和五相步进电机

    步进电机是一种离散运动的装置,它和现代数字控制技术有着本质的联系.在目前国内的数字控制系统中,步进电机的应用十分广泛.随着全数字式交流伺服系统的出现,交流伺服电机也越来越多地应用于数字控制系统中.为了 ...

  8. 两相电机倒顺开关的接法是什么?

    我先说一下这个问题应该讲的是单相电机,对于这个问题要牵扯到两个方面,一方面是单相电机正转与反转的控制方法:另一方面是用倒顺开关控制单相电机的正反转. 单相异步电机正反转的控制方法 其实单相异步电机正反 ...

  9. 一文带你了解步进电机的相关知识:相、线、极性和步进方式

    一文带你了解步进电机的相关知识:相.线.极性和步进方式 原文链接:https://www.sohu.com/a/190689350_276002 这里不说步进电机的 "细分" 实验 ...

  10. Arduino DRV8825驱动两相步进电机

    Arduino DRV8825驱动两相步进电机 DRV8825步进电机驱动 DRV8825的特点 相对于4988的特点优势 DRV8825驱动步进电机注意事项 细分 引脚说明 Arduino配合DRV ...

最新文章

  1. 【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
  2. ASA 独立实现WEB URL过滤!!!
  3. 全境封锁UI游戏设计指南
  4. lcd刷新慢_LCD1602刷新率很慢的问题
  5. 【实践驱动开发3-006】TI WL1835MODCOM8 在android的移植 - SDIO wifi驱动的注册步骤
  6. python执行循环内存变大_python – 为什么我的循环在每次迭代时需要更多内存?...
  7. 基金定投 | 微笑曲线
  8. xp计算机u盘重装系统,u启动一键u盘安装原版XP系统教程_u启动
  9. grpc生成pb.go文件报错github.com/gogo/protobuf/gogoproto/gogo.proto: File not found.
  10. Python 玩转数据 12 - 数据读写 Data I/O: Pandas 读写 JSON File Format
  11. Linux驱动——mmc bus浅析(五)
  12. 学会System Generator(2)数字滤波器设计
  13. 罗升阳:那两年炼就的Android内功修养
  14. 遇到空指针异常的时候我们应该怎么办
  15. JAVA学习-JDK8环境的安装与卸载
  16. 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)
  17. (reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1, class-id=60, method-id=80)
  18. android音乐播放器之歌词下载、处理、开始、同步
  19. java 分班_CoreJava分班测试试卷答案
  20. python实现多线程

热门文章

  1. 区块链发展迎来新机遇
  2. Python深度学习三剑客,你集齐了吗?
  3. Python深度学习环境配置全流程
  4. Kotlin习惯用语和编码风格[转自Kotlin中文文档]
  5. python运维书_python运维书
  6. 【C语言】谭浩强C语言程序设计第五版135页例5.11译密码题的新解
  7. 罗技Lua脚本-CF神圣爆裂者自动开枪
  8. 浪潮gs设置连接服务器信息,浪潮GS系统客户端设置方案
  9. windows中ping端口:tcping命令
  10. Hue使用之Inceptor篇