|
近日准备制作一个WiFi小车,有两个直流电机一个步进电机,利用论坛上的源码进行修改,直流电机没问题,步进电机单独一直正转或反转也没问题,就不知怎么控制?本人编程菜鸟,折腾了几天没成功,希望各位大侠相助,帮我把代码改下,谢谢!
硬件配置: 论坛一代驱动板,芯片STC11F32XE;L298N 电机驱动模块;2相4线步进电机,型号35HS2808A4.
目标动作:上位机控制步进电机正反转,停止。(比如FF020200FF等三个指令)
问题:如何用一个上位机指令去控制4个端口驱动步进电机动作?
1、实物接线图:
2、config.h 增加内容:
sbit SMOTOR_A=P2^0;
sbit SMOTOR_B=P2^1;
sbit SMOTOR_A1=P3^6;
sbit SMOTOR_B1=P3^7;
3、main.c 文件:
/*
版权声明:
WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于向他人牟取暴利。
By WIFI机器人网·机器人创意工作室
*/
#include "stc_new_8051.h"
#include "motor.h"
#include "uart.h"
#include <stdio.h>
#include "type.h"
#include "timer.h"
#define uint unsigned int
uint y,z;
void delayms(uint);
void main(void)
{
UART_init();
/* 定时器0作为舵机专用,不建议更改配置 */
Timer0_Init();
/* 定时器1为自由状态,用户可灵活使用 */
Timer1_Init();
Motor_Init();
if(y==1)
{
while(1)
{
SMOTOR_A=1;
SMOTOR_B=1;
SMOTOR_A1=0;
SMOTOR_B1=0;
delayms(10);
SMOTOR_A=0;
SMOTOR_B=1;
SMOTOR_A1=1;
SMOTOR_B1=0;
delayms(10);
SMOTOR_A=0;
SMOTOR_B=0;
SMOTOR_A1=1;
SMOTOR_B1=1;
delayms(10);
SMOTOR_A=1;
SMOTOR_B=0;
SMOTOR_A1=0;
SMOTOR_B1=1;
delayms(10);
}
}
else if (z==1)
{
while(1)
{
SMOTOR_A=1;
SMOTOR_B=0;
SMOTOR_A1=0;
SMOTOR_B1=1;
delayms(10);
SMOTOR_A=0;
SMOTOR_B=0;
SMOTOR_A1=1;
SMOTOR_B1=1;
delayms(10);
SMOTOR_A=0;
SMOTOR_B=1;
SMOTOR_A1=1;
SMOTOR_B1=0;
delayms(10);
SMOTOR_A=1;
SMOTOR_B=1;
SMOTOR_A1=0;
SMOTOR_B1=0;
delayms(10);
}
}
}
void delayms(unsigned int xms)
{
uint i, j;
for(i=xms;i>0;i--)
for(j=100;j>0;j--);
}
4、Motor.h 文件:
/*
版权声明:
WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于向他人牟取暴利。
By WIFI机器人网·机器人创意工作室
*/
#ifndef _MOTOR_H_
#define _MOTOR_H_
#include "type.h"
#include "config.h"
void Motor_Init(void);
#define MOTOR_GO_FORWARD MOTOR_A_CON1=0;MOTOR_A_CON2=1;MOTOR_B_CON1=0;MOTOR_B_CON2=1;LED1=0;LED2=1;LED3=1;LED4=1
#define MOTOR_GO_BACK MOTOR_A_CON1=1;MOTOR_A_CON2=0;MOTOR_B_CON1=1;MOTOR_B_CON2=0;LED1=1;LED2=0;LED3=1;LED4=1
#define MOTOR_GO_RIGHT MOTOR_A_CON1=1;MOTOR_A_CON2=0;MOTOR_B_CON1=0;MOTOR_B_CON2=1;LED1=1;LED2=1;LED3=0;LED4=1
#define MOTOR_GO_LEFT MOTOR_A_CON1=0;MOTOR_A_CON2=1;MOTOR_B_CON1=1;MOTOR_B_CON2=0;LED1=1;LED2=1;LED3=1;LED4=0
#define MOTOR_GO_STOP MOTOR_A_CON1=0;MOTOR_A_CON2=0;MOTOR_B_CON1=0;MOTOR_B_CON2=0;LED1=1;LED2=1;LED3=1;LED4=1
#define SMOTOR_FORWARD y=1;
#define SMOTOR_BACK z=1;
#define SMOTOR_STOP SMOTOR_A=0;SMOTOR_B=0;SMOTOR_A1=0;SMOTOR_B1=0;
#endif
5、Uart.c 增加内容
else if(buffer[0]==0x02)
{
switch(buffer[1])
{
case 0x01:SMOTOR_FORWARD; return;
case 0x02:SMOTOR_BACK; return;
case 0x00:SMOTOR_STOP; return;
default: return;
}
}
6、Keil 4 错误提醒:
|
|