51单片机学习笔记17 4线双极性马达和SG90舵机

2024-04-11 20:36

本文主要是介绍51单片机学习笔记17 4线双极性马达和SG90舵机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

51单片机学习笔记17 4线双极性马达和SG90舵机

  • 一、四线双极性电机控制
    • 1. 四线双极性电机工作方式介绍
      • (1)工作原理
      • (2)驱动方式
      • (3)极性区分
      • (4)驱动方式
    • 2. TC1508S芯片介绍
      • (1)主要特性
      • (2)引脚
      • (3)输入/输出逻辑表
    • 3. 模块电路图
    • 4. 代码实现
      • dc_motor_4_wire_utils.c
      • main.c
  • 二、SG90舵机控制
    • 1. SG90简介
    • 2. 硬件连接
    • 3. 控制信号
    • 4. 代码示例
      • dc_motor_sg90_utils.c
      • main.c

一、四线双极性电机控制

1. 四线双极性电机工作方式介绍

在这里插入图片描述

四线双极性电机通常用于驱动一些需要高效率和可靠性的应用。它的定子通常包含固定的线圈,而转子则是可以旋转的部分,通常是通过磁场与定子相互作用来产生转动力。

(1)工作原理

四线双极性电机的工作原理基于电流和磁场之间的相互作用。当电流通过定子线圈时,产生的磁场会与转子上的磁场相互作用,导致转子产生旋转运动。
在这里插入图片描述

(2)驱动方式

四线双极性电机通常使用直流电源供电。通过在定子线圈中施加不同方向的电流,可以控制电机的转向和速度;
该电机驱动原理有4拍驱动和8拍驱动,4拍即4个节拍一转动圈,8拍即8个节拍一圈。

本文使用TC1508S芯片用来驱动4线双极性电机。

(3)极性区分

与五线四相步进电机相比,四线双极性步进电机只有四根电路线,其中两根用于控制两个线圈(相),另外两根则是共阳或共阴线和地线。

  • 四线双极性步进电机的线圈是分别独立连接的,每个线圈只与一个控制线相连。
  • 四线双极性步进电机的步进角度通常较大,因为它们只有两个线圈,步进角度受限于线圈的布置方式。

(4)驱动方式

四线双极性步进电机只需要使用两个控制信号,通过改变信号的极性来控制线圈的激活,从而实现步进运动。

2. TC1508S芯片介绍

TC1508S是一款双通道直流电机驱动集成电路,主要用于驱动中小型直流电机或四线双极性步进电机。这款芯片内置了功率MOSFET全桥驱动电路,可以方便地实现电机的正转、反转、停止以及刹车控制。

我手头的步进电机额定电压要6-24V,TC1508S无法直接驱动。已网购 TMI8549 芯片,到手实验成功后补充驱动电路 。

(1)主要特性

  1. 双通道设计:能够独立驱动两个直流电机或一个步进电机的两个绕组。

  2. 内置MOSFET:集成高耐压和大电流的MOSFET,每个通道的最大连续输出电流可达1.8A,并且支持峰值电流2.5A,这意味着它可以直接驱动中低功率的直流电机而无需额外的H桥驱动电路。

  3. 宽电压工作范围:适合多种电源电压条件下的应用。

  4. 高效能:具有超低的待机电流和工作电流,有助于节能和提高整体系统效率。

  5. 控制功能:提供前进、后退和制动模式的控制接口,使得在嵌入式系统中对电机进行精准操控变得容易。

  6. 保护机制:虽然具体的保护功能未明确指出,但通常这类马达驱动芯片会包含过流、短路等保护措施以确保芯片及电机的安全。

(2)引脚

在这里插入图片描述

  • INA、INB 第一通道输入
  • OUTA、OUTB 第一通道输出
  • INC、IND 第二通道输入
  • OUTC、OUTD 第二通道输出
  • 几个GND 连地
  • VDD 连5V

(3)输入/输出逻辑表

INAINBOUTAOUTB运动方式
LLHi-ZHi-Z待命状态
HLHL前进
LHLH后退
HHLL刹车

波形:
在这里插入图片描述
第二通道与此类似 。
由于输出可以反相,可以控制电机正转或反转。

3. 模块电路图

本文示例是从网上直接购买的模块组件,原理图如下:
在这里插入图片描述
PCB示例:
在这里插入图片描述

4. 代码实现

dc_motor_4_wire_utils.c

#include "dc_motor_4_wire_utils.h"// 默认逆时针方向
static u8 dir=0;
// 默认最大速度旋转
static u8 speed=STEPMOTOR_MAXSPEED;
static u8 step=0;
// 1运行中 0停止运行
static u8 run_flag=0;
/**
* @brief 向步进电机发送一个脉冲
* @param step 指定步进序号,可选值0~7
* @param dir 方向选择,1:顺时针,0:逆时针
*/
void step_motor_4_wire_send_pulse(void){u8 temp=step;if(dir==0)	//如果为逆时针旋转temp=7-step;//调换节拍信号// (A+)---(A+B+)---(B+)--(B+A-)---(A-)---(A-B-)---(B-)---(B-A+)// A-AC-C-CB-B-BD-D-DA-Aswitch(temp){   //        黑A+  绿A-    黄B+   红B-case 0: IN_A=1;IN_B=0;IN_C=0;IN_D=0;break;case 1: IN_A=1;IN_B=0;IN_C=1;IN_D=0;break;case 2: IN_A=0;IN_B=0;IN_C=1;IN_D=0;break;case 3: IN_A=0;IN_B=1;IN_C=1;IN_D=0;break;case 4: IN_A=0;IN_B=1;IN_C=0;IN_D=0;break;case 5: IN_A=0;IN_B=1;IN_C=0;IN_D=1;break;case 6: IN_A=0;IN_B=0;IN_C=0;IN_D=1;break;case 7: IN_A=1;IN_B=0;IN_C=0;IN_D=1;break;//default: IN_A=0;IN_B=0;IN_C=0;IN_D=0;break;}			
}
/**
* @brief 设置速度
*/
void step_motor_4_wire_set_speed(u8 s){speed=s;
}
/**
* @brief 增加速度
*/
void step_motor_4_wire_increase_speed(void){if(speed>STEPMOTOR_MAXSPEED)speed--;else{speed = STEPMOTOR_MINSPEED;}
}
/**
* @brief 设置方向
*/
void step_motor_4_wire_set_dir(u8 d){dir=d;
}
/**
* @brief 反转方向
*/
void step_motor_4_wire_revert_dir(void){if(dir==0)dir=1;elsedir=0;
}
/**
* @brief 启动
*/
void step_motor_4_wire_start(void){run_flag=1;
}
/**
* @brief 运行
*/
void step_motor_4_wire_run(void){if(run_flag==1){step_motor_4_wire_send_pulse();step++;if(step>7)step=0;delay_10us(speed*300);}
}
/**
* @brief 停止
*/
void step_motor_4_wire_stop(void){run_flag=0;
}
void step_motor_4_wire_init(void){IN_A=0;IN_B=0;IN_C=0;IN_D=0;
}

main.c

#include "dc_motor_4_wire_utils.h"
#include "key_utils.h"/**
* @brief 按键3_4回调函数
*/
void key3_4Callback(int keyNum){// key3 转方向 if(keyNum == 3){step_motor_4_wire_revert_dir();}else{// key4 增加速度step_motor_4_wire_increase_speed();}
}/**
* @brief 主函数
*/
void main()
{step_motor_4_wire_init();step_motor_4_wire_set_speed(1);// 顺时针旋转step_motor_4_wire_set_dir(1);// 启动步进电机step_motor_4_wire_start();key3_init();key4_init();setCallback(key3_4Callback);while(1){// 运行步进电机step_motor_4_wire_run();}		
}

二、SG90舵机控制

1. SG90简介

SG90舵机是一款常见且经济实惠的小型模拟伺服电机,广泛应用于各类DIY电子制作、机器人技术和模型制作中。它的主要特性和参数的简要介绍:

  1. 结构与尺寸

    • 尺寸小巧,规格约为21.5mm x 11.8mm x 22.7mm,重量仅为9克,适合在空间有限的应用场合中使用。
  2. 工作原理

    • 舵机作为一种位置伺服驱动器,通过接收外部控制器(如单片机、遥控器等)发出的PWM(脉宽调制)信号,依据脉冲宽度的变化来精确控制转动的角度。
  3. 电气规格

    • 工作电压范围为4.8V至6V,典型工作电压为4.8V。
    • 最大扭矩约为1.2至1.4公斤/厘米(在4.8V电压下),意味着它能提供足够的力量保持特定角度或者克服一定阻力。
    • 控制信号周期通常为20毫秒,脉冲宽度在0.5ms至2.5ms之间变化,对应不同的旋转角度,1.5ms时位于中心位置(约180度机械结构的一半)。
    • 脉冲控制精度较高,可达2微秒级别。
    • 位置等级为1024级,理论上可实现更精细的角度定位。
  4. 性能指标

    • 无负载情况下,SG90舵机在4.8V电压下大约能在0.12秒内完成60度的旋转,即每度大约需要0.002秒。
    • 使用温度范围较宽,从-30摄氏度到+60摄氏度。
    • 设有死区设定,防止舵机在接近目标角度时过度抖动,提高了稳定性。
  5. 类型

    • 根据内部结构材料的不同,SG90舵机有塑料齿轮和金属齿轮两种版本,金属齿轮版通常具有更高的耐用性和承载能力。

2. 硬件连接

51单片机的I/O端口可以直接连接SG90,

颜色引脚
红 色VCC
棕色GND
橙色信号线

3. 控制信号

调整信号线的PWM,就可以让SG90实现各个角度转动。

180度舵机控制参数:

角度 (°)脉冲周期 (ms)占空比 (%)脉冲高电平时间 (ms)
0202.50.5
45205.01
90207.51.5
13520102
1802012.52.5

4. 代码示例

dc_motor_sg90_utils.c

#include "dc_motor_sg90_utils.h"// 信号引脚
sbit SG_PWM = P0^0;
// 计数用来切换高低电平
static u8 PWM_count=3;   
static u8 count=0;//1--0度,2--45度,3--90度,4--135度,5--180度
static u8 sg90_angle=0;
void sg90_timer_Init()
{TMOD = 0X01;      	// T0定时方式1TH0 = 0Xfe;TL0 = 0X33;       	// 计数初值设置为0.5msET0=1;          	// 打开定时器0的中断TR0=1;          	// 打开定时器0EA=1;           	// 开总中断
}
// 定时器中断0
void sg90_timer_irq() interrupt 1
{TR0=0;TH0 = 0XFE;TL0 = 0X33;       //重新赋计数初值为0.5msif(count <= PWM_count){SG_PWM=1;}else{SG_PWM=0;}count++;if(count>=40){count=0;sg90_angle++;}TR0=1;
}
void sg90_run(void){if(sg90_angle==16){PWM_count=1;}if(sg90_angle==32){PWM_count=3;sg90_angle=0;}
}

main.c

#include "dc_motor_sg90_utils.h"void main()
{sg90_timer_Init();while(1){sg90_run();}
}

本文代码开源地址:
https://gitee.com/xundh/learn51

这篇关于51单片机学习笔记17 4线双极性马达和SG90舵机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895120

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个