完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
stepmotor.h
#ifndef __STEPMOTOR_H #define __STEPMOTOR_H #include “stm32f10x.h” void motor_Init(void); //初始化引脚 extern void motor_F(int n); //反转,n 脉冲间隔时间 extern 可有可无 表明函数在其他地方有定义 void motor_Z(int n); //正转,n 脉冲间隔时间 void Motor_Off(void); //关闭电机 void Motor_Angle(int angle,int n); // angle 角度 n 脉冲间隔时间 #endif stepmotor.c #include “stepmotor.h” #include “stm32f10x.h” #include “delay.h” /********************************************** 用正点原子战舰版 STM32F103ZET6 PC0–PC7是给OLED显示屏用的,现在显示屏不用, 使用PC0,PC1,PC2,PC3 给步进电机用 驱动板上接线 PC0 -------IN1 PC1 -------IN2 PC2 -------IN3 PC3 -------IN4 步进电机型号:28BYJ-48 5VDC 驱动芯片;ULN2003APG 在CSDN找程序,改参数 2020/3/15 LZ完成 2020/3/17 修改注释 ***********************************************/ #define orange_H GPIO_SetBits(GPIOC, GPIO_Pin_0); //橙色 #define orange_L GPIO_ResetBits(GPIOC, GPIO_Pin_0); #define yellow_H GPIO_SetBits(GPIOC, GPIO_Pin_1); //黄色 #define yellow_L GPIO_ResetBits(GPIOC, GPIO_Pin_1); #define pink_H GPIO_SetBits(GPIOC, GPIO_Pin_2); //粉色 #define pink_L GPIO_ResetBits(GPIOC, GPIO_Pin_2); #define blue_H GPIO_SetBits(GPIOC, GPIO_Pin_3); //蓝色 #define blue_L GPIO_ResetBits(GPIOC, GPIO_Pin_3); void motor_Init(void)//PC0,PC1,PC2,PC3 { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_ResetBits(GPIOC, GPIO_Pin_0);GPIO_ResetBits(GPIOC, GPIO_Pin_1);GPIO_ResetBits(GPIOC, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_3); } void motor_F(int n) //反转 逆时针 { orange_H; delay_ms(n); blue_L; delay_ms(n); yellow_H; delay_ms(n); orange_L; delay_ms(n); pink_H; delay_ms(n); yellow_L; delay_ms(n); blue_H; delay_ms(n); pink_L; delay_ms(n); } void motor_Z(int n) //正转 顺时针 { blue_H; delay_ms(n); orange_L; delay_ms(n); pink_H; delay_ms(n); blue_L; delay_ms(n); yellow_H; delay_ms(n); pink_L; delay_ms(n); orange_H; delay_ms(n); yellow_L; delay_ms(n); } void Motor_Off(void) { GPIO_ResetBits(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); } void Motor_Angle(int angle,int n) //angle 角度 n 脉冲间隔时间 { u16 j; for(j=0;j<64*angle/45;j++) // 64 减速比 定子8个齿,正反转函数执行一次,转子转一个齿距角。360/45=8 { motor_F(n); // 反转(逆时针),换成正转函数就正转(顺时针) } } main.c int main(void) //步进电机主函数 逆时针转360度 停止 { motor_Init(); delay_init(); Motor_Angle(360,10); Motor_Off(); while(1){ delay_ms(1000); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1548 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1493 浏览 1 评论
915 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
656 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1544 浏览 2 评论
1845浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
598浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
499浏览 3评论
502浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
483浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 07:24 , Processed in 0.803625 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号