This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

在工程中,如何添加按键,实现电机正反转



在lab11e中,利用速度基准值的正负,可以实现电机的正反转;但我需要用按键来实现,三个按键分别接入GPIO口,如果KEY1=0时,基准值为正,如果KEY2=0,基准值为负。

但是没有成功实现,什么原因?怎样才能实现?

望告知!

  • 这段程序你是具体怎么编程的呢?最后运行的时候是哪个功能没有实现?
  • 正反转是基准值的正负,程序:
    if(KEY1==0)
    {
    delay(100);
    if(KEY1==0)
    {
    gMotorVars.SpeedRef_krpm= gMotorVars.SpeedRef_krpm ;
    }
    }
    if(KEY2==0)
    {
    delay(100);
    if(KEY2==0)
    {
    gMotorVars.SpeedRef_krpm=- gMotorVars.SpeedRef_krpm;
    }
    }
    就是按键没反应。
    1、程序是否不对
    2、是不是直接flash烧写
    3、如果直接flash烧写,出现KEY未定义的错误
  • 请问:

    基准速度的正负可以实现正反转,在CCS监视窗口输入正负即可实现。但是我需要用硬件来输入正负(按键1按下输入正信号,按键2按下输入负信号),如何实现?

    在程序中,CCS中输入负信号实现反转的程序具体是哪一部分?

  • 首先,“flash烧写,出现KEY未定义的错误”,如果是ram运行的话不会报错?
    其次,这样编写程序的话,个人认为程序只会在上电启动的时候识别KEY1或者KEY2的值,之后运行过程中程序没有设置循环判断的话就不会再判断这两个参数的值了,类似define和if define,所以按键没反应。另外你还要设置读取KEY1、KEY2状态值的程序不知道你设置了吗?
  • void key_control(void)
    {

    if(HAL_readGpio(halHandle, (GPIO_Number_e)HAL_keyGpio_1) ==LOW)
    {
    usDelay(50);
    if(HAL_readGpio(halHandle, (GPIO_Number_e)HAL_keyGpio_1)==LOW)
    {
    gMotorVars.SpeedRef_krpm = 0.8;
    }
    }
    if(HAL_readGpio(halHandle, (GPIO_Number_e)HAL_keyGpio_2) ==LOW)
    {
    usDelay(50);
    if(HAL_readGpio(halHandle, (GPIO_Number_e)HAL_keyGpio_2)==LOW)
    {
    gMotorVars.SpeedRef_krpm = -0.8;
    }
    }
    if(HAL_readGpio(halHandle, (GPIO_Number_e)HAL_keyGpio_3) ==LOW)
    {
    usDelay(50);
    if(HAL_readGpio(halHandle, (GPIO_Number_e)HAL_keyGpio_3)==LOW)
    {
    while(1)
    {
    gMotorVars.SpeedRef_krpm = 0.8;
    usDelay(500);
    gMotorVars.SpeedRef_krpm = -0.8;
    usDelay(500);
    }
    }
    }
    }
    程序未出现错误,但是按键还是没有反应?是不是 gMotorVars.SpeedRef_krpm = 0.8;不该这样控制呀?
    还有监视窗口中的基准速度初始值的程序在哪里?main.h中的速度已经设为0了,基准速度还是1800,为什么呢?