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文件后两个电机一个都没动,不知道是为什么用的驱动器和红外传感器照片我放下面了