四线双极性电机常日用于驱动一些须要高效率和可靠性的运用。它的定子常日包含固定的线圈,而转子则是可以旋转的部分,常日是通过磁场与定子相互浸染来产生迁徙改变力。
(1)事情事理四线双极性电机的事情事理基于电流和磁场之间的相互浸染。当电流利过定子线圈时,产生的磁场会与转子上的磁场相互浸染,导致转子产生旋转运动。
(2)驱动办法
四线双极性电机常日利用直流电源供电。通过在定子线圈中施加不同方向的电流,可以掌握电机的转向和速率;该电机驱动事理有4拍驱动和8拍驱动,4拍即4个节拍一迁徙改变圈,8拍即8个节拍一圈。

本文利用TC1508S芯片用来驱动4线双极性电机。
(3)极性区分与五线四相步进电机比较,四线双极性步进电机只有四根电路线,个中两根用于掌握两个线圈(相),其余两根则是共阳或共阴线和地线。
四线双极性步进电机的线圈是分别独立连接的,每个线圈只与一个掌握线相连。四线双极性步进电机的步进角度常日较大,由于它们只有两个线圈,步进角度受限于线圈的支配办法。(4)驱动办法四线双极性步进电机只须要利用两个掌握旗子暗记,通过改变旗子暗记的极性来掌握线圈的激活,从而实现步进运动。
2. TC1508S芯片先容TC1508S是一款双通道直流电机驱动集成电路,紧张用于驱动中小型直流电机或四线双极性步进电机。这款芯片内置了功率MOSFET全桥驱动电路,可以方便地实现电机的正转、反转、停滞以及刹车掌握。
我手头的步进电机额定电压要6-24V,TC1508S无法直接驱动。已网购 TMI8549 芯片,得手实验成功后补充驱动电路 。
(1)紧张特性双通道设计:能够独立驱动两个直流电机或一个步进电机的两个绕组。内置MOSFET:集成高耐压和大电流的MOSFET,每个通道的最大连续输出电流可达1.8A,并且支持峰值电流2.5A,这意味着它可以直接驱动中低功率的直流电机而无需额外的H桥驱动电路。宽电压事情范围:适宜多种电源电压条件下的运用。高效能:具有超低的待机电流和事情电流,有助于节能和提高整体系统效率。掌握功能:供应提高、退却撤退和制动模式的掌握接口,使得在嵌入式系统中对电机进行精准操控变得随意马虎。保护机制:虽然详细的保护功能未明确指出,但常日这类马达驱动芯片会包含过流、短路等保护方法以确保芯片及电机的安全。(2)引脚INA、INB 第一通道输入OUTA、OUTB 第一通道输出INC、IND 第二通道输入OUTC、OUTD 第二通道输出几个GND 连地VDD 连5V(3)输入/输出逻辑表
INA
INB
OUTA
OUTB
运动办法
L
L
Hi-Z
Hi-Z
待命状态
H
L
H
L
提高
L
H
L
H
退却撤退
H
H
L
L
刹车
波形:
第二通道与此类似 。由于输出可以反相,可以掌握电机正转或反转。
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(speed300);}}/ @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电子制作、机器人技能和模型制作中。它的紧张特性和参数的简要先容:
构造与尺寸:尺寸小巧,规格约为21.5mm x 11.8mm x 22.7mm,重量仅为9克,适宜在空间有限的运用处所中利用。事情事理:舵机作为一种位置伺服驱动器,通过吸收外部掌握器(如单片机、遥控器等)发出的PWM(脉宽调制)旗子暗记,依据脉冲宽度的变革来精确掌握迁徙改变的角度。电气规格:事情电压范围为4.8V至6V,范例事情电压为4.8V。最大扭矩约为1.2至1.4公斤/厘米(在4.8V电压下),意味着它能供应足够的力量保持特定角度或者战胜一定阻力。掌握旗子暗记周期常日为20毫秒,脉冲宽度在0.5ms至2.5ms之间变革,对应不同的旋转角度,1.5ms时位于中央位置(约180度机器构造的一半)。脉冲掌握精度较高,可达2微秒级别。位置等级为1024级,理论上可实现更风雅的角度定位。性能指标:无负载情形下,SG90舵机在4.8V电压下大约能在0.12秒内完成60度的旋转,即每度大约须要0.002秒。利用温度范围较宽,从-30摄氏度到+60摄氏度。设有去世区设定,防止舵机在靠近目标角度时过度抖动,提高了稳定性。类型:根据内部构造材料的不同,SG90舵机有塑料齿轮和金属齿轮两种版本,金属齿轮版常日具有更高的耐用性和承载能力。2. 硬件连接51单片机的I/O端口可以直接连接SG90,
颜色
引脚
红 色
VCC
棕色
GND
橙色
旗子暗记线
3. 掌握旗子暗记调度旗子暗记线的PWM,就可以让SG90实现各个角度迁徙改变。
180度舵机掌握参数:
角度 (°)
脉冲周期 (ms)
占空比 (%)
脉冲高电平时间 (ms)
0
20
2.5
0.5
45
20
5.0
1
90
20
7.5
1.5
135
20
10
2
180
20
12.5
2.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; // 开总中断}// 定时器中断0void 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