完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
在stm32f4上对(28byj48)步进电机运行介绍
1.对于步进电机的驱动电路介绍。 步进电机不能直接的和单片机进行连接,需要驱动模块来实现单片机对步进电机进行控制。 对驱动模块的接线说明 通过对电路图的观察 IN1~7 为单片机的io输出端接线。(四相)IN1 ~ 4. 1C ~ 7C为步进电机的(线) 本程序是四相四线步进电机程序(对几相几线不清楚的可以去查)。 电源接线(GND,VCC,空,VCC) (2)步进电机程序 头文件 #ifndef _28byj48_H#define _28byj48_H#include “system.h”#include “SysTick.h”void Motor_Init(void);void Motorcw(void);void motorNCircle(int n,int position,int x);void SetMotor(unsigned char InputData);#endif 程序 #include “28byj48.h”//引脚连接//IN1:PC6、IN2:PC7、IN3:PC8、IN4:PC9、 //步进电机初始化函数void Motor_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 __HAL_RCC_GPIOC_CLK_ENABLE(); //开启时钟 GPIO_InitStructure.Pin =GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP ;//推挽输出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //PC6置0, HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); } //步进电机正转测试函数void Motorcw(void){ HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //1依次高电平输出 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); delay_ms(10); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //2依次高电平输出 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); delay_ms(10); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //3依次高电平输出 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); delay_ms(10); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //4依次高电平输出 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); delay_ms(10); }unsigned char F_Rotation[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09} ; //反unsigned char B_Rotation[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08} ; //正//下面就是SetMotor函数,根据传的数据不同,控制的4个IO pin输出不同。void SetMotor(unsigned char InputData){ if(InputData & 0x08) { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); } if(InputData & 0x04) { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET); } if(InputData & 0x02) { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET); } if(InputData & 0x01) { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); }}/*此函数两个参数,第一个参数是圈数n(10~500)。第二个参数是方向也就是选择正转和翻转(1正传,0反转)。第三个参数转动时间x(5~90)。*/void motorNCircle(int n,int position,int x){ int i=0; int j=0; int k=0; for(j=0;j《n;j++) { for(i=0;i《64*8;i++) { for(k=0;k《8;k++) { if(1 == position) { SetMotor(F_Rotation[k]); } else { SetMotor(B_Rotation[k]); } delay_ms(x);//转动速度控制(转动频率)3~90 } } }} (3)运行效果。 |
|
|
|
只有小组成员才能发言,加入小组>>
597浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 16:18 , Processed in 0.792211 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号