买了个没有名牌的二相四线电机,搞得头大,现在简单调通了。
我用的是STM32f103RCT6+TBB6600驱动器+42步进电机。
电机有两种接法,共阳极和共阴极
我用的共阳极的解法。
我买的电机连个名牌都没有,问卖家也啥都没有。按照网上的方法测出来AB两相,具体可以百度一下,或者B站上面直接搜步进电机也有方法。
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "key.h"
/*
void TIM1_PWM_Init(u16 arr,u16 psc)
Hz£ = 72000000/(arr+1)/(psc+1)
*/
int main(void)
{
u8 keysta;
delay_init();
LED_Init();
KEY_Init();
EN = 1;
DIR = 1;
//
TIM1_PWM_Init(719,49);//72000000/720=100000 30-150
while(1)
{
keysta = KEY_Scan(0);
if(keysta==1)
{
LED1 = ~LED1;
EN = 0;
//TIM_Cmd(TIM1, DISABLE); //ʹÄÜTIM1
delay_ms(1000);
//TIM_Cmd(TIM1, ENABLE);
//DIR = 0;
DIR = 0;
EN = 1;
keysta = 0;
}
}
}
正点原子的官方PWM例程改的。下面是接的3个IO口PA6PA7PA8,脉冲端找个能产生PWM的就行,其他两个普通IO即可
#define PUL PAout(8)
#define DIR PAout(7)
#define EN PAout(6)
我踩的坑:
1.由于我用的是共阳极的解法,所以我把PUL+ EN+ DIR+都接在了板子上的5V上的地方,因为驱动器上面也这样标,这样的后果是,电机时转时不转,还会发烫。后面我把这三接到了3.3V上面的地方正常了。这里我也不知道为什么,有懂的评论解释一下。
2.程序有些要用的IO我没初始化就直接用了,导致我一直不知道是什么原因,细心检查才发现。需要认真看32IO初始化的每一个步骤。
3.给的脉冲频率太高,丢步了,每个电机的特性不同,能够接受的频率也不一样,要注意。32PWM初始化频率的计算公式以上面 TIM1_PWM_Init(719,49);为例:
TIM1_PWM_Init(u16 arr,u16 psc)//arr:自动重装值 psc:时钟预分频系数
如果系统时钟是72M,那么PWM的频率就是
Frquency = 72000000/(arr+1)/(psc+1);//单位Hz
自动重装值就相当于PWM周期。
4.驱动器上面的细分要对应电机。我这里电机是1.5A的电流,所以要打开驱动器上面的S4 S5。
细分步进电机步距角按下列方法计算:步距角=电机固有步距角/ 细分数。如:一台固有步距角为1.8 °的步进电机在4细分下步距角为
1.8 °/4=0.45 °驱动板上拨码开关1、2、3分对应S1、S2、S3。
后面有空把用五一调的也一并上传了。