头像-241664

yanxuyang

个人成就

获得 0 次赞

帮助过0人

利用光电传感器控制电机的启停时电机停不下来

​光电传感器与STM32F103ZET6开发板的连接引脚为PA2,PA1,PD1,PD3电机与开发板引脚连接为PB3,PB5,PB6,PB7(利用引脚输出高低电平给L298N驱动器来控制电机的启停),其中PB3,PB5控制电机1,PB6,PB7控制电机2.  部分程序如下所示:While(1){           //如果和PA2、PD3相连的两个传感器没检测到反射光(此时为高电平)的话,两个电机都转。if(GPIO_ReadInputDataBit(GPIODGPIO_Pin_3)&&GPIO_ReadInputDataBit(GPIOAGPIO_Pin_2))  {                  GPIO_ResetBits(GPIOBGPIO_Pin_5);                  GPIO_SetBits(GPIOBGPIO_Pin_3); //控制电机1正转                  GPIO_ResetBits(GPIOBGPIO_Pin_7);                   GPIO_SetBits(GPIOBGPIO_Pin_6); //控制电机2正转}//如果和PA2相连的传感器检测到反射光(此时为低电平)的话,电机1转2停,利用两轮的速度差实现转弯      if(1-GPIO_ReadInputDataBit(GPIOAGPIO_Pin_2))  {                   GPIO_ResetBits(GPIOBGPIO_Pin_5); //控制电机1正转                    GPIO_SetBits(GPIOBGPIO_Pin_3);                 GPIO_SetBits(GPIOBGPIO_Pin_7);                 GPIO_SetBits(GPIOBGPIO_Pin_6); //控制电机2停   }//如果和PD3相连的传感器检测到反射光(此时为低电平)的话,电机2转1停,利用两轮的速度差实现转弯      if(1-GPIO_ReadInputDataBit(GPIODGPIO_Pin_3)){                     GPIO_ResetBits(GPIOBGPIO_Pin_5);                    GPIO_ResetBits(GPIOBGPIO_Pin_3); //控制电机1停                   GPIO_ResetBits(GPIOBGPIO_Pin_7);                    GPIO_SetBits(GPIOBGPIO_Pin_6); //控制电机2正转}} 编译后生成HEX文件,输入到开发板中后,测试时发现: 当PD3相连的传感器检测到反射光时,电机1依旧在转,没有停止,另外,测得此时各引脚电位为:PB3:3.3V  PB5:0V  PB3:3.3V  PB3:0V   可以看出PB3的电位不知道什么原因没有发生变化。这也是我想要求助的问题。(在这里补充说明一下,因为试着将最后一个判断语句里面的对PB5引脚的设置改为“setbits”后发现PB5的电位变为了3.3v,所以可以判断出最后一个if语句应该是能够被执行的,但是问题就出现在最后if语句的执行内容中的关于PB3引脚的那一句不知道什么原因没有按照程序要求执行) 另外在测量电压的过程中还遇到了一个奇怪的现象:当与PA2相连的传感器检测到反射光时,其他引脚的电位都正常,唯独PB7的引脚电位为1.4v而不是0v,这又是怎么回事呢?​

使用红外传感器来控制电机的启停(实现避障),电机却转不起来

编的程序部分如下:(关于电机控制的这一部分)   while (1)     {   if(GPIO_ReadInputDataBit(GPIODGPIO_Pin_2))      //这里是用了PD2浮空输入,红外传感器的输出端接到了PD2引脚上 {      GPIO_ResetBits(GPIOBGPIO_Pin_5); //       GPIO_SetBits(GPIOBGPIO_Pin_3); //   PB3,PB5用来控制电机1        GPIO_ResetBits(GPIOBGPIO_Pin_7);                        //      GPIO_SetBits(GPIOBGPIO_Pin_6); //PB6,PB7用来控制电机2​       }   }但是编译完导入HEX文件后两个电机一个都没动,不知道是为什么用的驱动器和红外传感器照片我放下面了