单片机直驱两相四线步进电机研究

【本文发布于https://blog.csdn.net/Stack_/article/details/132236329,未经允许不得转载,转载须注明出处】


双极性步进电机(两相四线步进电机),原理的东西就先不讲太多了,还没搞清楚,边查资料边写代码来理解吧。

此电路使用4片CMS6324去驱动2个H桥,每片CMS6324驱动的桥的同一侧,其自带硬件死区,所以不需要考虑死区插入的问题。如果不是这样的电路,则需要注意上下桥臂不能同时导通。


一、电机基本原理图 内部简化图


在这里插入图片描述

四拍,每个脉冲转 1.8°


在这里插入图片描述

八拍,每个脉冲转 0.9°


二、简单的驱动代码


#define MOTOR_A_P_PORT          PORT1   //P15 A+
#define MOTOR_A_P_PIN           PIN5#define MOTOR_A_N_PORT          PORT1   //P14 A-
#define MOTOR_A_N_PIN           PIN4#define MOTOR_B_P_PORT          PORT1   //P13 B+
#define MOTOR_B_P_PIN           PIN3#define MOTOR_B_N_PORT          PORT1   //P12 B-
#define MOTOR_B_N_PIN           PIN2#define MOTOR_A_P__SET()        PORT_SetBit(MOTOR_A_P_PORT, MOTOR_A_P_PIN)
#define MOTOR_A_P__RESET()      PORT_ClrBit(MOTOR_A_P_PORT, MOTOR_A_P_PIN)#define MOTOR_A_N__SET()        PORT_SetBit(MOTOR_A_N_PORT, MOTOR_A_N_PIN)
#define MOTOR_A_N__RESET()      PORT_ClrBit(MOTOR_A_N_PORT, MOTOR_A_N_PIN)#define MOTOR_B_P__SET()        PORT_SetBit(MOTOR_B_P_PORT, MOTOR_B_P_PIN)
#define MOTOR_B_P__RESET()      PORT_ClrBit(MOTOR_B_P_PORT, MOTOR_B_P_PIN)#define MOTOR_B_N__SET()        PORT_SetBit(MOTOR_B_N_PORT, MOTOR_B_N_PIN)
#define MOTOR_B_N__RESET()      PORT_ClrBit(MOTOR_B_N_PORT, MOTOR_B_N_PIN)PORT_Init(MOTOR_A_P_PORT, MOTOR_A_P_PIN, OUTPUT); //P15 A+PORT_Init(MOTOR_A_N_PORT, MOTOR_A_N_PIN, OUTPUT); //P14 A-PORT_Init(MOTOR_B_P_PORT, MOTOR_B_P_PIN, OUTPUT); //P13 B+PORT_Init(MOTOR_B_N_PORT, MOTOR_B_N_PIN, OUTPUT); //P12 B-PORT_Init(PORT3, PIN0, OUTPUT); //P30 CMS6021 POWER_EN, 使能CMS6324供电PORT_SetBit(PORT3, PIN0);while(1){#if (0) 													//四拍#if (0) 													//四拍正转//A+MOTOR_A_P__SET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B+MOTOR_A_P__RESET();MOTOR_B_P__SET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__SET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);#else   													//四拍反转//A+MOTOR_A_P__SET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__SET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B+MOTOR_A_P__RESET();MOTOR_B_P__SET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);#endif#else   													//八拍#if (0) 													//八拍正向//A+MOTOR_A_P__SET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A+ B+MOTOR_A_P__SET();MOTOR_B_P__SET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B+MOTOR_A_P__RESET();MOTOR_B_P__SET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B+ A-MOTOR_A_P__RESET();MOTOR_B_P__SET();MOTOR_A_N__SET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__SET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A- B-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__SET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B- A+MOTOR_A_P__SET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);#else 														//八拍反向//A+MOTOR_A_P__SET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B- A+MOTOR_A_P__SET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__RESET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A- B-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__SET();MOTOR_B_N__SET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A-MOTOR_A_P__RESET();MOTOR_B_P__RESET();MOTOR_A_N__SET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B+ A-MOTOR_A_P__RESET();MOTOR_B_P__SET();MOTOR_A_N__SET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//B+MOTOR_A_P__RESET();MOTOR_B_P__SET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);//A+ B+MOTOR_A_P__SET();MOTOR_B_P__SET();MOTOR_A_N__RESET();MOTOR_B_N__RESET();UserTimer_Reset(&timer_delay);while(UserTimer_Read(&timer_delay) < TIMEOUT_1MS);#endif#endif}

黄波形为A+ 蓝波形为B+ 紫波形为A- 绿波形为B-

在这里插入图片描述

四拍正转,每个正脉冲转1.8°,360°/1.8°=200个脉冲转一圈。一次循环A+ B+ A- B-四个脉冲,循环50次即转一圈。


在这里插入图片描述

四拍反转。四拍时,1ms切换太快了,会严重丢步,转动非常卡顿,将延时即切换时间适当拉长可获得较为平顺的效果。但导通时间过长会导致总电流很大。


在这里插入图片描述

八拍正转。拍数增加,转动相较于4拍平顺了不少


在这里插入图片描述

八拍反转



三、抓取步进电机驱动芯片/驱动器的四线波形进行对比


在这里插入图片描述

实际驱动时,不会像上面的那么“生硬”的,而是会不断调节输出的占空比的。例如下面抓取的波形




1、市面上驱动器驱动波形类型一。这种驱动方式横容易理解,跟上面相似


在这里插入图片描述

正转。可见,大体思路和上面的是一致的,只不过为了驱动更平顺以及功耗的考虑,各线通电时不是恒导通的,而是以PWM的方式进行输出


在这里插入图片描述

反转


在这里插入图片描述

每一相通电时,其正占空比都是先增后减,即电流先增后减


在这里插入图片描述

当速度提高,换相频率变高。一般地,功率也需要提高,速度不变负载增加,功率也需提高(需要接编码器),所以正占空比(平均)也变大了,电流变大




2、市面上驱动器驱动波形类型二。这种方式4根线上都是持续不断输出20kHz的波形的,分别控制A+和A-的占空比,以实现控制A相电流大小与方向的效果,如下列图中的红色波形。B+和B-同理。


① 正转


在这里插入图片描述

正转


在这里插入图片描述

A电流反向(A-流向A+)之前以及之后


在这里插入图片描述

A电流反向(A+流向A-)之前以及之后



② 反转


在这里插入图片描述

反转


在这里插入图片描述

A电流反向(A-流向A+)之前以及之后


在这里插入图片描述

A电流反向(A+流向A-)之前以及之后



以上为波形研究,待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/69418.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iTOP-i.MX8M开发板添加USB网络设备驱动

选中支持 USB 网络设备驱动&#xff0c;如下图所示&#xff1a; [*] Device Drivers→ *- Network device support → USB Network Adapters→ {*} Multi-purpose USB Networking Framework 将光标移动到 save 保存&#xff0c;如下图所示&#xff1a; 保存到 arch/arm64/c…

基于注意力神经网络的深度强化学习探索方法:ARiADNE

ARiADNE:A Reinforcement learning approach using Attention-based Deep Networks for Exploration 文章目录 ARiADNE:A Reinforcement learning approach using Attention-based Deep Networks for Exploration机器人自主探索(ARE)ARE的传统边界法非短视路径深度强化学习的方…

ppt中线材相交接的地方,如何绘画

ppt中线材相交接的地方&#xff1a; 在ppt中绘画线材相互交接的地方&#xff1a; 1.1绘图工具中的“弧形” 1.2小技巧 “弧形”工具点一下&#xff0c;在ppt中如下 1.3拖动活动点进行调整图形 1.4绘画圆弧 1.5调整“圆弧”的大小&#xff0c;鼠标放在“黄色点”位置&#xf…

极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)

目录 template 引用&#xff0c;减少代码冗余&#xff0c;增强 CI/CD 构建扩展性 问题 1&#xff1a;代码冗余&#xff0c;低效实践 问题 2&#xff1a;维护性难&#xff0c;工作量大 ➤ local ➤ file ➤ remote ➤ template 收益 1&#xff1a;一处修改&#xff0c;多…

kubernetes企业级高可用部署

目录 1、Kubernetes高可用项目介绍 2、项目架构设计 2.1、项目主机信息 2.2、项目架构图 1、Kubernetes高可用项目介绍 2、项目架构设计 2.1、项目主机信息 2.2、项目架构图 2.3、项目实施思路 3、项目实施过程 3.1、系统初始化 3.2、配置部署keepalived服务 3.3、…

炬芯科技低延迟高音质无线麦克风解决方案

随着互联网技术的高速发展&#xff0c;诸多新兴产业被带动起来。就近十年来看&#xff0c;内容平台以及其载体在不断演变&#xff0c;从自媒体到短视频以及直播&#xff0c;一点一滴地渗透进大众生活。而这些平台的兴起&#xff0c;亦为普罗大众提供了广阔的分享空间&#xff0…

【C++】位图与布隆过滤器(内含相关高频面试题)

本篇文章会对位图和布隆过滤器进行详解。同时还会给出位图和布隆过滤器相关的高频面试题与解答。希望本篇文章会对你有所帮助。 文章目录 一、位图的引入 1、1 查找整数&#xff08;腾讯面试题&#xff09; 1、2 解决方法1 1、3 解决方法2 1、3、1 外部排序 二、位图的原理与…

【k8s】基于Prometheus监控Kubernetes集群安装部署

目录 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 二、部署kubernetes集群 三、部署Prometheus监控平台 四、部署Grafana服务 五、grafana web操作 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 IP地址 主机名 组件 192.168.100.131 k8s-ma…

Opencv特征检测之ORB算法原理及应用详解

Opencv特征检测之ORB算法原理及应用详解 特征是图像信息的另一种数字表达形式。一组好的特征对于在指定 任务上的最终表现至关重要。视觉里程 (VO) 的主要问题是如何根据图像特征来估计相机运动。但是,整幅图像用来计算分析通常比较耗时,故而转换为分析图像中的特征点的运动…

ARTS 挑战打卡的第8天 ---volatile 关键字在MCU中的作用,四个实例讲解(Tips)

前言 &#xff08;1&#xff09;volatile 关键字作为嵌入式面试的常考点&#xff0c;很多人都不是很了解&#xff0c;或者说一知半解。 &#xff08;2&#xff09;可能有些人会说了&#xff0c;volatile 关键字不就是防止编译器优化的吗&#xff1f;有啥好详细讲解的&#xff1…

二本毕业,银行外包测试工作 4 个月有余。来说说一些真实感受 ...

本人普通二本本科毕业 4 年&#xff0c;目前是在广州工作&#xff0c;是一家大型的人力外包公司外包到银行的测试人员&#xff0c;这可能也是长期在各大招聘软件上最积极的招聘岗位。 从入职到现在已经有四个月了&#xff0c;也大概了解了外包的主要工作情况&#xff0c;也有了…

2023国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…