博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ULN2003步进电机驱动(STM32或51)
阅读量:3951 次
发布时间:2019-05-24

本文共 3099 字,大约阅读时间需要 10 分钟。

51驱动

/*******************************************************ULN2003驱动5V减速步进电机程序STC89C52RC*******************************************************接线方式:IN1 ---- P00IN2 ---- P01IN3 ---- P02IN4 ---- P03+   ---- +5V-   ---- GND*********************/#include
#define uchar unsigned char#define uint unsigned int#define MotorData P0 //步进电机控制接口定义uchar phasecw[4] ={
0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-Auchar phaseccw[4]={
0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D//ms延时函数void Delay_xms(uint x){
uint i,j; for(i=0;i

STM32

motor.h

#ifndef _MOTOR_H#define _MOTOR_H#include "stm32f10x.h"#include "delay.h"#include "sys.h"/********************************************************接线方式:IN1 ---- B11IN2 ---- B12IN3 ---- B13IN4 ---- B14+   ---- +5V-   ---- GND*********************/#define STEP_MOTOR_PORT	GPIOB	//定义IO接口所在组#define STEP_MOTOR_A	GPIO_Pin_8	//定义IO接口#define STEP_MOTOR_B	GPIO_Pin_9	//定义IO接口#define STEP_MOTOR_C	GPIO_Pin_10	//定义IO接口#define STEP_MOTOR_D	GPIO_Pin_11	//定义IO接口#define MOTOR_A_H GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A)#define MOTOR_B_H GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B)#define MOTOR_C_H GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C)#define MOTOR_D_H GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_D)#define MOTOR_A_L GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A)#define MOTOR_B_L GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B)#define MOTOR_C_L GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_C)#define MOTOR_D_L GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_D)void STEP_MOTOR_Init(void);//初始化void STEP_MOTOR_OFF (void);//断电状态void MotorCW(void);//顺时针转动void MotorCCW(void);//顺时针转动#endif

motor.c

#include "motor.h"//初始化void STEP_MOTOR_Init(void){
//接口初始化 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); //APB2外设GPIO时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//启动AFIO重映射功能时钟 GPIO_InitStructure.GPIO_Pin = STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D; //选择端口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) GPIO_Init(STEP_MOTOR_PORT, &GPIO_InitStructure); //必须将禁用JTAG功能才能做GPIO使用 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);// 改变指定管脚的映射,完全禁用JTAG+SW-DP STEP_MOTOR_OFF(); //初始状态是断电状态 }//断电状态void STEP_MOTOR_OFF (void){
MOTOR_A_L,MOTOR_B_L,MOTOR_C_L,MOTOR_D_L;}//顺时针转动void MotorCW(void){
u16 i; for(i=0;i<100;i++) {
MOTOR_A_L,MOTOR_B_L,MOTOR_C_L,MOTOR_D_H; delay_ms(4); MOTOR_A_L,MOTOR_B_L,MOTOR_C_H,MOTOR_D_L; delay_ms(4); MOTOR_A_L,MOTOR_B_H,MOTOR_C_L,MOTOR_D_L; delay_ms(4); MOTOR_A_H,MOTOR_B_L,MOTOR_C_L,MOTOR_D_L; delay_ms(4); } }//逆时针转动void MotorCCW(void){
u16 i;for(i=0;i<100;i++) {
MOTOR_A_H,MOTOR_B_L,MOTOR_C_L,MOTOR_D_L; delay_ms(4); MOTOR_A_L,MOTOR_B_H,MOTOR_C_L,MOTOR_D_L; delay_ms(4); MOTOR_A_L,MOTOR_B_L,MOTOR_C_H,MOTOR_D_L; delay_ms(4); MOTOR_A_L,MOTOR_B_L,MOTOR_C_L,MOTOR_D_H; delay_ms(4); } }

转载地址:http://rbyzi.baihongyu.com/

你可能感兴趣的文章
2440init.s文件分析
查看>>
ADS ARM Assembler内置变量
查看>>
linux设备模型中ktype的用法
查看>>
Linux内核Ramdisk(initrd)机制
查看>>
Linux2.6 内核的 Initrd 机制解析
查看>>
解析linux根文件系统的挂载过程
查看>>
Linux的cpufreq(动态变频)技术
查看>>
Android系统的移植要做的两个工作
查看>>
内核调试案例(oops错误)
查看>>
Linux内核调试 - 一般人儿我都不告诉他(一)
查看>>
Linux内核的Oops
查看>>
基于Linux-2.6.28的 EELiod平台UART驱动分析(一)
查看>>
Linux flash文件系统剖析
查看>>
linux的文件属性和权限学习——分析ls命令结果
查看>>
android 静音与振动
查看>>
android的wake_lock介绍
查看>>
浅析linux设备驱动的clock(时钟)的注册
查看>>
epoll_create epoll_ctl epoll_wait close epoll和select的简单比较
查看>>
学习使用epoll
查看>>
uevent分析
查看>>