HANPOSE公司的20HS24两相步进电机, STC8A8K64D4芯片
各位大佬,嵌入式新人一位,现在我在使用HANPOSE公司提供的20HS24的步进电机做项目,如下是根据原理图和步进电机写的一个简单demo,但是在将程序烧录到STC8A芯片板子里面,通过串口工具给STC8A的uart1发送指令来驱动电机的正反转,点击正转都没有90度,多点击正转90度之后,步进电机发热严重,请问大佬们帮忙看看是啥问题,非常感谢#include "config.h"#include "STC8A_Delay.h"
#include "STC8A_GPIO.h"
#include "Uart.h"
void GPIO_timer_config() {
//P1.4/P1.5/P1.6/P1.7 推挽 B3电机
P1M0 |= 0xf0; P1M1 &= ~0xf0;
P14 = 0;P15 = 0;P16 = 0;P17 = 0;
}
//电机反转90度
void Motor_reverse_90(){
unsigned char step;
for(step = 0;step <50; step++){
switch(step % 4){
case 0:
P14 = 1;
P15 = 0;
P16 = 1;
P17 = 0;
break;
case 1:
P14 = 0;
P15 = 1;
P16 = 1;
P17 = 0;
break;
case 2:
P14 = 0;
P15 = 1;
P16 = 0;
P17 = 1;
break;
case 3:
P14 = 1;
P15 = 0;
P16 = 0;
P17 = 1;
break;
default:
break;
}
delay_ms(2);// 延时,确保信号稳定
}
}
//电机正转90度
void Motor_forward_90(){
unsigned char step;
for(step = 0;step <50; step++){
switch(step % 4){
case 0:
P14 = 1;
P15 = 0;
P16 = 0;
P17 = 1;
break;
case 1:
P14 = 0;
P15 = 1;
P16 = 0;
P17 = 1;
break;
case 2:
P14 = 0;
P15 = 1;
P16 = 1;
P17 = 0;
break;
case 3:
P14 = 1;
P15 = 0;
P16 = 1;
P17 = 0;
break;
default:
break;
}
delay_ms(2);
}
}
void main(){
Uart_init();
GPIO_timer_config();
EA = 1;// 开启全局中断
printf("Init \n");
while (1) {
Uart1_recv();
if(recv_data == 1){
recv_data = 0;
Motor_reverse_90(); //反转90度
}else if(recv_data == 2){
recv_data = 0;
Motor_forward_90();//正转90度
}
delay_ms(10);
}
}
STC8A8K64D4-两相步进电机, 传统的CCP/PWM/PCA实现SPWM细分驱动 - BLDC/144MHz-PWM-硬件移相/45路PWM+3路CCP/7组不同周期的PWM/DAC 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)
20步进给1A电流???太大了!!! 神农鼎 发表于 2024-12-1 19:27
STC8A8K64D4-两相步进电机, 传统的CCP/PWM/PCA实现SPWM细分驱动 - BLDC/144MHz-PWM-硬件移相/45路PWM+3路 ...
感谢,我是刚入门嵌入式,有点看不太懂寄存器操作方式{:smile:},所以我想请教下大佬我代码逻辑是否有问题
DebugLab 发表于 2024-12-1 21:49
20步进给1A电流???太大了!!!
没明白意思,求大佬指点
果果爱吃土豆 发表于 2024-12-1 22:18
没明白意思,求大佬指点
更换这2个电阻,减小电流
驱动步进电机要使用加减速算法。
页:
[1]