• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

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

yanxuyang 2018-05-22 浏览量:3547
111.jpg

222.jpg333.jpg光电传感器与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,这又是怎么回事呢?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:6
  • 真的很急,有没有哪位能发现问题的?[・_・?]

  • 用万用表检测电压,看看是硬件问题还是软件问题,同时也能检测是否是启动与停止的间隔太短的问题

  • 已经找到问题了,端口初始化的时候使能错端口了233333

  • 我之前试过这问题,是外部上拉输出导致的,把外部上拉取消掉只用推挽输出就没事了。

  • 电机停止需要一定的时间,一定要让启动和停止的时间足够长,才能看出效果

  • 这是巡光小车,一堆线好好理一下,可能哪里搞错了。

相关问题

问题达人换一批

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