登建设厅锁子的是哪个网站,城市旅游网站开发,色块网站,如何自己开一家外贸公司一、简介 步进电动机#xff08;stepping motor#xff09;把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号#xff0c;步进电动机前进一步#xff0c;故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备…一、简介 步进电动机stepping motor把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号步进电动机前进一步故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备以及打印机、绘图机和磁盘等装置。
二、工作原理 步进电机通过一系列离散的步进动作来实现旋转。每个电脉冲信号驱动电机转动一个固定的角度称为步距角。步进电机的控制通常通过一个驱动器步进驱动器来完成该驱动器接受来自控制器的脉冲信号并将其转换为步进电机的相位信号从而驱动电机按预定的步进角度转动。
这里以28BYJ-48为例说明其工作原理 当对步进电机施加一系 列连续不断的控制脉冲时它可以连续不断的转动。每一个脉冲信号对应步进电机的某一组 或两相绕组的通电状态改变一次也就对应转子转过一定的角度一个步距角。当通电状 态的改变完成一个循环时转子转过一个齿距。四相步进电机可以在不同的通电方式下运行 常见的通电方式有单单相绕组通电四拍A-B-C-D-A 循环双双相绕组通电四拍 AB-BC-CD-DA-AB-循环八拍A-AB-B-BC-C-CD-D-DA-A-循环。 下面为驱动方式四相八拍的通电方式 。 橙色对应的是 A 相黄色对应的是 B 相粉色对应的是 C 相蓝色对应的 是 D 相。
三、原理图 对照原理图A 相对应 STM32 的 PC7B 相对应 STM32 的 PC6 C 相对应 STM32 的 PC5D 相对应 STM32 的 PC4注意他们都是通过 ULN2803A 来驱动 步进电机的而 ULN2803A 是反相器。 ULN2803A 的输入为高电平时输出为低电平输入为低电平时输出为高电平。那如果要 让 A 相通电由表格可以看出是需要给橙色线低电平的那么对应的 PC7 应该是高电平 通过 ULN2803A 反向才能给橙色线低电平其它的类似。 因此总结一下使某相通电则该相对应的 STM32 引脚需要输出高电平某相不通电则需要该相对应的 STM32 引脚输出低电平。 并且注意在电机处于停止状态时所有的相都需要不通电的状态以免过热烧毁电机
四、代码实现
1.IO口宏定义
#define SM28BYJ48_A SM28BYJ48_A_FUN_OUT(SM28BYJ48_A_PIN_ID) //SM28BYJ48_A
#define SM28BYJ48_B SM28BYJ48_B_FUN_OUT(SM28BYJ48_B_PIN_ID) //SM28BYJ48_B
#define SM28BYJ48_C SM28BYJ48_C_FUN_OUT(SM28BYJ48_C_PIN_ID) //SM28BYJ48_C
#define SM28BYJ48_D SM28BYJ48_D_FUN_OUT(SM28BYJ48_D_PIN_ID) //SM28BYJ48_D
2.在步进电机头文件定义一个结构体去设置步进电机的状态以及步进电机通电导通控 制的宏定义。
/* 定义结构体便于全局变量操作 */
typedef struct
{uint8_t ucSpeed; /* 电机速度 */uint8_t ucDir; /* 电机方向 0 正转 1 反转 2 停止 */uint8_t ucStop; /* 0 运行 1 停止 */
}MOTOR_T;
/* 步进电机导通控制定义 */
enum
{SM_OFF 0, /* A B C D 相均不导通 */SM_A, /* A 相导通 */SM_B, /* B 相导通 */SM_C,SM_D,SM_AB, /* AB 相导通 */SM_BC,SM_CD,SM_DA
};3.驱动文件要编写的内容
设置一个变量 MOTOR_T g_tMot; /* 定义全局变量 */
注意这个变量在头文件中用 extern 申明一下以便被其它文件调用
void bsp_InitSM28BYJ48(void)
{设置 GPIO 端口的初始化设置为推挽输出特别注意驱动引脚初始电平是要设置为低电平
}设置一下通电状态
static void motPowerOn(uint8_t _ucMode)
{if (_ucMode SM_OFF){SM28BYJ48_A 0;SM28BYJ48_B 0;SM28BYJ48_C 0;SM28BYJ48_D 0;}else if (_ucMode SM_A){SM28BYJ48_A 1;SM28BYJ48_B 0;SM28BYJ48_C 0;SM28BYJ48_D 0;}
//还有其它状态自行补全总共 9 个状态呢对应头文件里步进电机导通控制定义
}4.电机驱动函数
void motPower(uint8_t _mode,uint8_t _stop)
{ if(_stop){motPowerOn(0);}else{if(_mode0){if(g_tMot.ucSpeed9)g_tMot.ucSpeed1;motPowerOn(g_tMot.ucSpeed);}else if(_mode1){if(--g_tMot.ucSpeed1)g_tMot.ucSpeed9;motPowerOn(g_tMot.ucSpeed);}else if(_mode2){motPowerOn(0);} }} 5.主函数应用
int main(void)
{bsp_InitSM28BYJ48(); /* 电机初始化 */ bsp_StartAutoTimer(1,g_tMot.ucSpeed);while(1){bsp_Idle(); /* CPU 空闲时执行的函数在 bsp.c */if (bsp_CheckTimer(0)) /* 判断定时器超时时间 */ {/* 每隔 300ms 进来一次 */ bsp_LedToggle(1); /* 翻转 DS0 的状态 */ }if (bsp_CheckTimer(1)) /* 判断定时器超时时间 */ {/* 每隔 300ms 进来一次 */ motPower(g_tMot.ucDir,g_tMot.ucStop); }}
} 文中代码只是简单demo非完整代码还请读者自行动脑子补全有问题可随时交流。