STM32F103 控制步进电机可定角(很准确),oled显示当前角度,可调速,不用输入捕获,只使用一个定时器

42步进电机的程序

不太会用CSDN,应该点我主页应该能下载到源码 ?

程序挺好使的,反正我转了百十来圈也没误差
我真觉得我是个傻逼,初学步进电机,挺简单的一个问题搞了三天。最后实现的方法贼简单,感觉浪费了许多时间。所以我觉得我有必要写出来以免让大家也浪费时间了。
实现方法真的很简单,就是输出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里,初始化也要改
没别的了,按键按下,屏幕数值也跟着动的。没了。
希望大家少走弯路。我真的好气啊,贼简单问题搞了好久。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值