上期我们介绍了我们要设计六路金属检测无线收发器,我们已经完成了发射端的设计,本期我们将完成发射端制作和软件设计以及修正一下上期硬件设计存在的问题。

首先是XL6019升降压部分的设计问题,原先的电路设计中将XL6019设计为单纯的升压模块了,而缺乏了降压的功能。

从而导致输入电压在5V到预期电压之间可以实现升压,之后输出电压会和输入电压一样,但是实际测试发现并不影响系统工作(传感器耐压上限比较高)而进一步拓宽了工作电压范围。
这里特别鸣谢芯龙的AE工程师及时的提供帮助。

除此之外是无线模块nRF24L01的引脚设计,但是感觉这个不是我的锅,主要是买模块那家提供的原理图太过于抽象。

谁能想到它原理图左边的邮票孔和右边的排针对应的1~10引脚居然是不一样的,下表的引脚标号仅针对邮票孔处定义,并不是排针处的定义。

最后只能设计一个转接板来解决这个问题。

金属探测模块通过光耦芯片将输出转化为单片机所能承受的3.3V高电平,因此六路金属探测模块可以等同于六路按键,我们所要做的就是检测六路按键的电平状态。
uint8_t led_status = 0;
voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
led_status = 0;
if(!HAL_GPIO_ReadPin(INPUT1_GPIO_Port, INPUT1_Pin))
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
led_status |= (1 << 0);
}
else
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
}
if(!HAL_GPIO_ReadPin(INPUT2_GPIO_Port, INPUT2_Pin))
{
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
led_status |= (1 << 1);
}
else
{
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
}
if(!HAL_GPIO_ReadPin(INPUT3_GPIO_Port, INPUT3_Pin))
{
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
led_status |= (1 << 2);
}
else
{
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);
}
if(!HAL_GPIO_ReadPin(INPUT4_GPIO_Port, INPUT4_Pin))
{
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET);
led_status |= (1 << 3);
}
else
{
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET);
}
if(!HAL_GPIO_ReadPin(INPUT5_GPIO_Port, INPUT5_Pin))
{
HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_SET);
led_status |= (1 << 4);
}
else
{
HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_RESET);
}
if(!HAL_GPIO_ReadPin(INPUT6_GPIO_Port, INPUT6_Pin))
{
HAL_GPIO_WritePin(LED6_GPIO_Port, LED6_Pin, GPIO_PIN_SET);
led_status |= (1 << 5);
}
else
{
HAL_GPIO_WritePin(LED6_GPIO_Port, LED6_Pin, GPIO_PIN_RESET);
}
tmp_buf[0] = led_status;
}
我们采用定时器扫描这种非阻塞式的方式以10ms为周期采集金属探测器引脚的电平状态,当检测到低电平(即光耦被触发从而导致引脚拉低)时,将对应的led_status变量的对应位置1。(这个变量会在每次进入定时器的时候被清零)
while (1)
{
NRF24L01_TxPacket(tmp_buf);
HAL_Delay(50);
}
之后在while循环中利用NRF24L01无线模块进行发送,届时接收端只需要解析收到的8位字符中各个位的状态,点亮对应的LED灯即可。


登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!