输入输出按键等笔记
输出、输入选择
首先需要明确输出、输入的意思。输出是指STM32控制外设(主要指输出高电平或低电平)或STM32发送数据给外设,输入是指外设发送数据给STM32。
推挽输出可以输出两种状态,分别是0V和3.3V,对应低电平和高电平。大多数情况下都会选择这个模式。
开漏输出借助下图讲解,INT端为单片机引脚(可以由单片机控制为1(高电平)或0(低电平)),OUT端为最终的输出。Us端接地始终为低电平0,当INT端为1时Ug>Us,NMOS导通,此时OUT直接接地,OUT端输出电压为0;当INT端为0时Ug=Us,NMOS截止,此时可以认为电路断开,4.7K电阻上没有电流通过,OUT端与VDD连接,OUT端的输出电压与VDD相等。开漏输出一般应用于电压不匹配的场合,STM32可以直接输出3.3V的电压,但如果需要5V或者更高的电压,此时单片机无法直接提供,则可以借助开漏输出完成高电压的输出。这里的VDD是外部电源提供的电压。
复用输出则是该端口被其他外设使用,如一个外设需要读取另一个外设的数据时可以使用复用输出模式
什么时候选择上拉,什么时候选择下拉
如果按键按下是高电平有效的话,我们就下拉,让该IO口在默认状态下处于低电平(即没有按键按下时IO口检测到的总是低电平,只有按键按下的时候IO口才会检测到高电平);
如果按键按下是低电平有效的话,我们就上拉,让该IO口在默认状态下处于高电平(即没有按键按下时IO口检测到的总是高电平,只有按键按下的时候IO口才会检测到低电平)。
简单点来说:
上拉输入就是指在IO口上(芯片内部)串一个电阻到vcc,正常情况IO监测到的是高电平,适用于外部接GND的按键输入;
下拉输入是指在IO口上(芯片内部)串一个电阻到GND,正常情况IO监测到的是低电平,适用于外部接VCC的按键输入。(实在还不理解,记住会用也行)
GPIO_ReadInputDataBit
函数 GPIO_ReadInputDataBit 读的是 GPIOx_IDR
读的是当 IO 口设置为输入状态时候的 IO 口电平状态值。
/*读取引脚当前电平状态*/
CurrLevel = GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8 );
pwm调速原理
PWM,就是脉冲宽度调制技术,其具有两个很重要的参数:频率和占空比。频率,就是周期的倒数;占空比,就是高电平在一个周期内所占的比例。
为什么要采用PWM调速?
电机不能 时刻保持在全速运转的过程当中,必须要可控制速度才能完成一些特定功能,例如循迹,小车速度过快,传感器来不及反应做出方向调整,小车很容易跑离轨道。pwm调速是目前电机的主流调速方式。
循迹的原理
红外光线会有一个反射特性,对于不同的物体反射特性是不一样的,特别是对白色反光的物体,红外光线的反射量将会多一些。对黑色不反光的物体,红外反射量会减少。利用这个特性进行黑与白的判断。
当平面的颜色不是黑色时,传感器发射出去的红外光大部分被反射回来,传感器输出低电平0.
平面是黑线时,反射回来的红光很少,达不到传感器动作的水平,传感器输出1
若右边的探头检测到黑线,小车往右边运动,所以左电机向前运动而右电机静止。同样的道理,左边探头检测到,小车向左运动。
避障的原理
利用障碍物对光线的反射特点,当前面有障碍物的时候,传感器发射出的红外光被大部分反射回来,传感器输出低电平0,点亮模块上的信号灯。
当没有障碍物的时候,反射回来的红外光很少,达不到传感器动作的水平,传感器输出1
循迹和避障,小车行驶速度不同,循迹需要精细的调节左右电机运动,而避障只需要判断障碍物后作出一般性躲避,避障时电机速度可快于循迹。
左边有障碍物,右转;右边有障碍物,左转;左右都有障碍物,后退,再左转
超声波避障
HC-SR04超声波特点,电压5V,探测距离2cm到4m,但是2cm之内是盲区。
超声波测距模块可提供2cm-400cm的非接触距离感测功能,测距精度3mm,模块包括超声波发射器,接收器与控制电路。
基本工作原理
(1)采用IO口trig出发测距,给Echo最少10us的高电平信号。
(2)模块自动发送40khz的方波,自动检测是否有信号返回
(3)有信号返回,通过IO口ECHO(如上图)输出一个高电平,高电平持续时间就是超声波从发射到返回的时间。
公式:距离=(高电平时间*340m/s)/ 2
Echo接收,Trig控制
舵机
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
红外遥控
红外接收头,当红外线合成信号进入红外接收模块,在其输入端可以得到原先发射器发出的数字编码,通过单片机解码程序进行解码,就可以得知按下了哪一个按键,完成遥控的相应动作。
红外发送协议:引导码+客户码1+客户码2+操作码+操作反码
引导码:检测到了引导码才确认接收后面的数据,保证数据接收的正确性
客户码:区分遥控设备,互不干扰
操作码:用户实际需要的编码,按不同按键产生不同的操作码,待接收端进行操作
操作反码;目的是接收端接收到数据后,将其取反与操作码比较,不相等就表示传输过程中发生了变化,数据无效,可以提高数据的准确性。
接收头特性,接收到红外线时输出低电平,静态时为高电平。