42步进电机的程序
程序挺好使的,反正我转了百十来圈也没误差
我真觉得我是个***,初学步进电机,挺简单的一个问题搞了三天。最后实现的方法贼简单,感觉浪费了许多时间。所以我觉得我有必要写出来以免让大家也浪费时间了。
实现方法真的很简单,就是输出PWM,同时捕获一下。脉冲数到了就关闭。完事,并且这些操作一个定时器就能完成。之前我还用啥嘀嗒定时器进行定时开关来达到想要的角度,结果有误差,我还傻傻的各种修正误差,唉。没有老师自己弄的苦恼啊。
这程序的功能写在标题里了。还有按键程序,按一下转45度。
接线问题,首先需要步进电机驱动板,板子上需要有,EN使能(程序里没用上,你自己用程序就得用了)接B12口
STEP口接A6,A7,B0,B1都可以,用的定时器3,四个口输出的是一模一样的,用哪个都行
DIR口连的B13口
OLED口
#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_6)//CLK
#define OLED_SCLK_Set() GPIO_SetBits(GPIOC,GPIO_Pin_6)
#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_7)//DIN
#define OLED_SDIN_Set() GPIO_SetBits(GPIOC,GPIO_Pin_7)
#define OLED_RST_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_8)//RES
#define OLED_RST_Set() GPIO_SetBits(GPIOC,GPIO_Pin_8)
#define OLED_DC_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_9)//DC
#define OLED_DC_Set() GPIO_SetBits(GPIOC,GPIO_Pin_9)
#define OLED_CS_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_10)//CS
#define OLED_CS_Set() GPIO_SetBits(GPIOC,GPIO_Pin_10)
需要啥自己改去吧oled.h里
记得初始化函数也要跟着改,不然不好使
调速就在main函数的while(1)里。第一条语句就是。HZ值就是调速,少则1000,多则16000,不然不是电机受不了就是驱动芯片受不了。
每次转动的角度值在这
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Jiaodu=Jiaodu+45;
dir=0;
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
TIM_Cmd(TIM3, ENABLE);
}
这个jiaodu+45,的这个45就是每次转动的角度了
按键我设置的使KEY1 A0,KEY 2 C13,一样要改在key.h里,初始化也要改
没别的了,按键按下,屏幕数值也跟着动的。没了。
希望大家少走弯路。我真的好气啊,贼简单问题搞了好久。
42步进电机的程序
程序挺好使的,反正我转了百十来圈也没误差
我真觉得我是个***,初学步进电机,挺简单的一个问题搞了三天。最后实现的方法贼简单,感觉浪费了许多时间。所以我觉得我有必要写出来以免让大家也浪费时间了。
实现方法真的很简单,就是输出PWM,同时捕获一下。脉冲数到了就关闭。完事,并且这些操作一个定时器就能完成。之前我还用啥嘀嗒定时器进行定时开关来达到想要的角度,结果有误差,我还傻傻的各种修正误差,唉。没有老师自己弄的苦恼啊。
这程序的功能写在标题里了。还有按键程序,按一下转45度。
接线问题,首先需要步进电机驱动板,板子上需要有,EN使能(程序里没用上,你自己用程序就得用了)接B12口
STEP口接A6,A7,B0,B1都可以,用的定时器3,四个口输出的是一模一样的,用哪个都行
DIR口连的B13口
OLED口
#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_6)//CLK
#define OLED_SCLK_Set() GPIO_SetBits(GPIOC,GPIO_Pin_6)
#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_7)//DIN
#define OLED_SDIN_Set() GPIO_SetBits(GPIOC,GPIO_Pin_7)
#define OLED_RST_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_8)//RES
#define OLED_RST_Set() GPIO_SetBits(GPIOC,GPIO_Pin_8)
#define OLED_DC_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_9)//DC
#define OLED_DC_Set() GPIO_SetBits(GPIOC,GPIO_Pin_9)
#define OLED_CS_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_10)//CS
#define OLED_CS_Set() GPIO_SetBits(GPIOC,GPIO_Pin_10)
需要啥自己改去吧oled.h里
记得初始化函数也要跟着改,不然不好使
调速就在main函数的while(1)里。第一条语句就是。HZ值就是调速,少则1000,多则16000,不然不是电机受不了就是驱动芯片受不了。
每次转动的角度值在这
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Jiaodu=Jiaodu+45;
dir=0;
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
TIM_Cmd(TIM3, ENABLE);
}
这个jiaodu+45,的这个45就是每次转动的角度了
按键我设置的使KEY1 A0,KEY 2 C13,一样要改在key.h里,初始化也要改
没别的了,按键按下,屏幕数值也跟着动的。没了。
希望大家少走弯路。我真的好气啊,贼简单问题搞了好久。
举报