1.步进电机在3D打印上用的比较多,因为步长是固定的,因此能够精准的控制转动产生的位移
(DC 5V 4相8拍5线步进电机 28YBJ-48 / 驱动芯片型号:uln2003芯片)
2.驱动原理
3.驱动时序
3.1 4相8拍
3.2 4相单4拍
3.3 4相双4拍
4.参考代码(4相8拍,使用52840芯片驱动,使用P0.13、P0.14、P0.15、P0.16)
uint32_t control_IO[8] = {0x2000, 0x6000, 0x4000, 0xC000, 0x8000, 0x18000, 0x10000, 0x12000}; //顺时针旋转
4.1 控制步进电机正反转
static void demo1(void) {
NRF_LOG_INFO("Demo 1 循环5次正反转后停止");
uint16_t i,j;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 512; i++) {
for (j = 0; j < 8; j++) {//输出一个脉冲
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
for (i = 0; i < 512; i++) {
for (j = 7; j > 0; j--) {
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
if(++count == 5)
{
break;
}
}
}
4.2 控制电机减速旋转
static void demo2(void)
{
NRF_LOG_INFO("Demo 2/减速旋转5次后停止");
uint16_t i,j;
uint16_t speed = 1;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 512; i++) {
for (j = 0; j < 8; j++) {//输出一个脉冲
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(speed);
}
}
NRF_P0->OUT = 0x00;
if(speed < 3)
{
speed++;
nrf_delay_ms(500);
}
else
{
speed = 1;
}
if(++count == 5)
{
break;
}
}
}
4.3控制电机加速旋转
static void demo3(void)
{
NRF_LOG_INFO("Demo 3/加速旋转5次后停止");
uint16_t i,j;
uint16_t speed = 3;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 512; i++) {
for (j = 0; j < 8; j++) {//输出一个脉冲
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(speed);
}
}
NRF_P0->OUT = 0x00;
if(speed > 0)
{
speed--;
nrf_delay_ms(500);
}
else
{
speed = 3;
}
if(++count == 5)
{
break;
}
}
}
4.4 逆时针旋转90°
static void demo4(void)
{
NRF_LOG_INFO("Demo 4/逆时针旋转90°");
uint16_t i,j;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 128; i++) {
for (j = 7; j > 0; j--) {//输出一个脉冲
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
if(++count == 5)
{
break;
}
}
}
4.5 逆时针旋转180度
static void demo5(void)
{
NRF_LOG_INFO("Demo 5/逆时针旋转 180度");
uint16_t i,j;
NRF_P0->OUT = 0x00;
count=0;
while (1) {
for (i = 0; i < 256; i++) {
for (j = 7; j > 0; j--) {//输出一个脉冲
NRF_P0->OUT = control_IO[j];
nrf_delay_ms(1);
}
}
NRF_P0->OUT = 0x00;
nrf_delay_ms(500);
if(++count == 5)
{
break;
}
}
}
旋转角度A与脉冲数B的关系
A = (5.625°/64)*B
若A等于360°,那么需要4096个脉冲