TI中文支持网
TI专业的中文技术问题搜集分享网站

急!!大神,我想问个问题,如何用按键控制步进电机正反转,我自己编了条程序,还请大神帮忙看看为什么按键控制没用,非常感谢!!!

#ifndef PART_TM4C123GH6PM
#define PART_TM4C123GH6PM
#endif

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <inc\tm4c123gh6pm.h>
#include "driverlib/ssi.h"
#include "driverlib/rom.h"
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"

#define data GPIO_PORTB_AHB_DATA_R

unsigned int i,j,k;
unsigned int N=512;
unsigned char eight_pos[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e}; /*八拍驱动正转*/
unsigned char eight_rev[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06}; /*八拍驱动正转*/
void delay(unsigned int z);
void m_eight_pos();
void m_eight_rev();

int main(void)
{

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_2 |GPIO_PIN_3 );

GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3);

while(1)
{

if((GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2 ))==0)
{
m_eight_pos(); //八拍驱动正转360度
}
// delay(200);

else if((GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_3))==0)
{
m_eight_rev(); //八拍驱动反转360度
}
// delay(200);

}

}
void delay(unsigned int z) /*延时z毫秒*/
{
unsigned int x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–) ;
}
/******************************八拍驱动正转 (N*22.5/32)*************************************/
void m_eight_pos()
{
for(k=0;k<N;k++)
{

for(i=0;i<8;i++) //八拍一个脉冲转子转动5.625/2度,八拍共 22.5度

{
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_2 |GPIO_PIN_3,(eight_pos[i]&0x01)|(eight_pos[i]&0x02)|(eight_pos[i]&0x04)|(eight_pos[i]&0x08));

delay(20);
}

}
}
/******************************八拍驱动反转 (N*22.5/32)*************************************/
void m_eight_rev()
{
for(k=0;k<N;k++)
{

for(i=0;i<8;i++) //八拍一个脉冲转子转动5.625/2度,八拍共22.5度

{
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_2 |GPIO_PIN_3,(eight_rev[i]&0x01)|(eight_rev[i]&0x02)|(eight_rev[i]&0x04)|(eight_rev[i]&0x08));
delay(20);
}
}
}

xyz549040622:

d电机正反转51的程序已经很多了,你移植一个过来即可,有两点需要注意
1.确保可以驱动电机,电机驱动芯片是否接好
2.电机的时序是否正确

Michael Sun:

建议分开调试,先把M4的相关外设都调试正常了,然后再加入电机控制部分的逻辑。这样有问题也好定位。

yan yao:

回复 Michael Sun:

不用按键控制时,直接用延时是可以实现步进电机正反转,就是对按键判断部分不对,大神看我这判断条件可不可以这么写

if((GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2 ))==0){m_eight_pos(); //八拍驱动正转360度}

else if((GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_3))==0){m_eight_rev(); //八拍驱动反转360度}

Michael Sun:

回复 yan yao:

楼主按键都没去抖动啊,这一按下去都不知道跳哪里去了。

yan yao:

回复 Michael Sun:

h一定得去抖吗?我一直按着也没用,判断条件是对的吧?我试试去抖看看,谢了啊

Michael Sun:

回复 yan yao:

按键都要去抖的。先把这个做了,然后再看你的执行函数的逻辑和预期是否能符合。

是按下执行一次,还是按下一直执行。

yan yao:

回复 Michael Sun:

可以了,这个程序现在能实现,之前不知道为什么,没有加去抖

Michael Sun:

回复 yan yao:

按键都要加去抖的嘛,你量一下按键得波形,按下和抬起的时候,都会高低电平跳好多次,不去抖就全乱了。

赞(0)
未经允许不得转载:TI中文支持网 » 急!!大神,我想问个问题,如何用按键控制步进电机正反转,我自己编了条程序,还请大神帮忙看看为什么按键控制没用,非常感谢!!!
分享到: 更多 (0)