发作品签到
专业版

基于BK4802的迷你对讲机:灵犀LXB

工程标签

6.5k
0
0
50

简介

基于BK4802,麦当劳对讲机同款射频芯片。迷你体积,内置喇叭、麦克风,支持连接耳机。支持多个频段,内置公众对讲机频段20个频率,按键循环切换。使用配套上位机软件进行修改内置频率及更多高级设置

简介:基于BK4802,麦当劳对讲机同款射频芯片。迷你体积,内置喇叭、麦克风,支持连接耳机。支持多个频段,内置公众对讲机频段20个频率,按键循环切换。使用配套上位机软件进行修改内置频率及更多高级设置
星火计划2024
复刻成本:50

开源协议

CERN Open Hardware License

(未经作者授权,禁止转载)
创建时间:2024-10-22 10:29:25更新时间:2024-12-02 14:32:46

描述

项目仅供学习,使用时请遵守相关法律法规

中华人民共和国无线电管理条例
关于公众对讲机管理有关问题的通知

商用需保留开机闪屏、PCB作者和项目名称丝印,同时标明出处:https://oshwhub.com/qwqoffice/lxb-nano-radio-based-bk4802/

交流QQ群:1002613160

 

设计背景

还记得今年5月22日麦当劳对酱机开售,等到我看到的时候已经卖没了,作为一个电子爱好者 ,怎么能受此委屈,于是想着自己做一个(虽然后面也买到了)

在网上看到别人的晒单,总结出麦当劳对酱机的缺点有以下几个:

1、10分钟自动关机

2、无法更改频率,容易和别人串台(注意:法规只允许公众对讲机固定一个频率,但DIY的话还是希望能覆盖到芯片支持的全部频段)

3、使用7号电池,无法充电

那么自己做的,肯定是要把这些缺点全部改过来,于是就有了这个项目

在这里也十分感谢麦当劳,让我们认识了BK4802这一国产射频芯片,此芯片功能高度集成,只需要简单的外围电路即可完成一个无线收发器的制作

 

开源协议

CERN Open Hardware License

 

项目属性

本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。

 

Github链接

https://github.com/qwqoffice/lxb-nano-radio-based-bk4802

 

型号介绍

LXB:标准版本,29mm喇叭,有显示屏

LXBM:迷你版本,21mm喇叭,有显示屏

LXBE:精简版本,无喇叭,无显示屏

 

功能亮点

旋钮开关机/调节音量(仅LXBE)

支持连接3.5mm耳机

支持背夹和挂绳

同时支持3D打印外壳/亚克力外壳

支持内置最多99个频率

配套Windows和Android管理工具软件

详细的使用说明及技术文档

 

实物展示

正面

背面

左侧

右侧

顶部

装上背夹

对比泉盛UVK5

对比麦当劳对讲机

尚未完成外壳设计的LXBE精简版

 

 

 

硬件设计

单片机的选型,基于最初设想可通过串口传输指令给MCU执行某些操作,以及BK4802是I2C通信协议,按键方面需要一个PTT键和一个SET键,那么就MCU需要支持串口和I2C,除去前面的至少需要剩下2个IO作为按键输入。由于没做过多少项目不太了解有哪些MCU可以选择,故在立创商城使用选型功能,筛选以上条件并按价格升序,第一个是STC8G1K08。后面由于程序空间不足,改用了STC8G1K17。设计LXBE无屏幕和喇叭的版本时,旋钮调节音量的功能需要ADC获取电位器电压,故改为STC8G1K17A(LXB和LXBM仍可使用STC8G1K17不带ADC的版本)

LDO这块,最初版本使用AMS1117-3.3V(当时只认识这个),实际使用发现喇叭只要一打开,单片机就会复位,后面查明原因是喇叭打开时有功率突变,LDO无法承受,电压降低到2.4V左右,单片机触发低压复位。后面参考麦当劳的方案,使用南京微盟的ME6230C33M5G

锂电池充电管理方面,选择了常用的TP4056,充电电流设置为0.5A

锂电池则支持使用702040-650mAh或102040-1200mAh两种规格

USB转串口,选择了CH340系列中最基础的型号CH340N,满足使用即可

供电方面,单片机、屏幕、4802均使用LDO供电,CH340则使用USB直接供电,原因是STC单片机在烧录程序的时候,需要先检测到串口设备,点击下载后再给单片机上电才能正常烧录

喇叭声音这块,踩了一个大坑,就是音量总是达不到麦当劳对讲机同一水平,尝试过购买各种规格的喇叭、修改4802的设置、甚至直接把麦当劳的喇叭拆下来装到我这里,都无济于事。后来发现是音腔的问题,我们调试硬件的时候,往往都是把喇叭直接外面一放,然后拿起来放到耳朵上听,这样喇叭发出的声音是非常小的,需要一个音腔来发出正常水平的音量,外壳就是一个很好的音腔,但是调试的时候不方便装到外壳中,最简单的办法就是手半握拳,罩住喇叭背面,形成一个简易的音腔,声音立马扩大N倍

3.5mm耳机接口的加入,可以在嘈杂的环境中也能清晰的对讲,这里使用了一个8pin的耳机接口,可以让你在耳机插入的时候,物理断开内置喇叭和麦克风,转为使用耳机的喇叭和麦克风,达到自动切换的效果,同时我设计了一个切换开关,可以切换为即使插入耳机也同样使用内置麦克风

屏幕方面,使用一块0.96寸的OLED屏幕,大小适中,同样是I2C协议,和射频芯片共用IO口

天线接口使用标准的SMA公头,可以直接使用市面上的对讲机天线

阻抗匹配部分,已经没有时间去补射频相关知识了,只能简单的参考网上一些工具来计算阻抗匹配电路,欢迎射频大佬来改进

 

软件设计

按键手势检测

项目中只设计了两个功能按键,但又希望可以直接在对讲机上完成大部分核心功能的操作,减少对上位机软件的依赖,这时可以使用按键的短按、长按、以及组合的方式,增加可操作性,在软件上则需要对手势进行识别

其实也可以使用不同按键串联不同阻值的电阻,然后使用ADC读取数值判断范围的方式来区分哪个按键被按下,以及是否同时按下,但是单片机最初选型为不带ADC功能的,所以没有采用这种方式

在网上看到别人是这样处理的,检测到按下,延时一段时间,然后仍然检测到按键是按下状态,则可以判定为按键是被人为按下,而不是因为抖动,但是这种不能做长按的识别,因为比如我要长按1秒后执行,那么我就要延时1秒,期间是无法执行其他代码的,如果我需要循环读取状态显示到屏幕,那么在延时期间状态就无法在屏幕上更新。因此我换了一种方式,设计一个定时器,把单片机运行的毫秒数保存到一个变量milliseconds中,按键按下时保存当前运行毫秒数到一个变量down_start中,每次循环判断down_start - milliseconds > 1000,即表示按键已被按下超过1秒,这样就不会阻塞循环,让单片机有机会执行其他任务

char set_down = 0; // SET是否按下
char set_long_down = 0; // SET是否长按按下
unsigned long set_start = 0; // SET按下开始时间
unsigned long set_long_start = 0; // SET长按按下开始时间

char ptt_down = 0; // PTT是否按下
unsigned long ptt_start = 0; // PTT按下开始时间
char ptt_long_down = 0; // PTT是否长按按下

char set_ptt_down = 0; // SET和PTT是否同时按下
char set_ptt_long_down = 0; // SET和PTT是否长按按下
unsigned long set_ptt_start = 0; // SET和PTT按下开始时间

// 处理按键
void HandleKey()
{
    // SET按下
    if(set == 1 && set_ptt_down == 0 && ptt == 1)
    {
        set_ptt_down = 1;
        set_ptt_start = milliseconds;
        Refresh_Setting_Last_WakeUp();
    }

    if(set == 1 && set_ptt_down == 0)
    {
        if(set_down == 0)
        {
            set_start = milliseconds;
            set_down = 1;
            Refresh_Setting_Last_WakeUp();
        }
        if(set_down == 1 && set_long_down == 0 && milliseconds - set_start > 1000)
        {
            // SET长按大于1000ms
            if(is_setting_mode == 1)
            {
                setting_index++;
                if(setting_index > 1)
                {
                    setting_index = 0;
                }
                OLED_HideSettingIndex();
                HandleWakeUp(0);
            }
            else
            {
                set_long_start = milliseconds;
                HandleWakeUp(1);
            }
            set_long_down = 1;
        }
        if(is_setting_mode == 0 && set_down == 1 && set_long_down == 1 && milliseconds - set_long_start > 300)
        {
            // SET持续长按每300ms
            set_long_start = milliseconds;
            HandleWakeUp(1);
        }
    }
    // SET释放
    if(set == 0 && set_down == 1)
    {
        if(set_long_down == 0 && set_ptt_down == 0 && milliseconds - set_start > 30)
        {
            // SET按下保持大于30ms
            if(is_setting_mode == 1)
            {
                if(setting_index == 0)
                {
                    SetNextVolumeLevel();
                }
                else if(setting_index == 1)
                {
                    SetNextContrastLevel();
                }
                Refresh_Last_WakeUp();
            }
            else
            {
                HandleWakeUp(1);
            }
        }
        set_down = 0;
        set_long_down = 0;
    }

    // PTT按下
    if(ptt == 1 && set_ptt_down == 0)
    {
        if(ptt_down == 0)
        {
            ptt_start = milliseconds;
            ptt_down = 1;
        }
        if(ptt_down == 1 && ptt_long_down == 0 && milliseconds - ptt_start > 60)
        {
            // PTT按下保持大于60ms
            ptt_long_down = 1;
            HandleWakeUp(0);
            SwitchTx();
        }
    }

    // PTT释放
    if(ptt == 0)
    {
        if(ptt_down == 1)
        {
            if(ptt_long_down == 0 && milliseconds - ptt_start > 30)
            {
                // PTT按下保持大于30ms
                HandleWakeUp(0);
            }
            ptt_down = 0;
            ptt_start = milliseconds;
        }
        if(ptt_down == 0 && ptt_long_down == 1 && milliseconds - ptt_start > 60)
        {
            // PTT按下保持大于60ms,并释放保持大于60ms
            ptt_long_down = 0;
            SwitchRx();
        }
    }

    // 取消同时按下
    if(set_ptt_down == 1 && set == 0 && ptt == 0)
    {
        if(is_setting_mode == 0 && milliseconds - set_ptt_start <= 1000)
        {
            // 处理SET按键锁定/解锁
            SwitchLock();
            HandleWakeUp(0);
        }
        set_ptt_down = 0;
        set_ptt_long_down = 0;
    }
    if(set_ptt_down == 1 && set_ptt_long_down == 0 && milliseconds - set_ptt_start > 1000)
    {
        // 进入设置模式
        if(is_setting_mode == 0)
        {
            EnterSettingMode();
        }
        else
        {
            ExitSettingMode();
        }
        HandleWakeUp(0);
        set_ptt_long_down = 1;
    }
}

 

电位器ADC消抖

在型号LXBE中,我参考泉盛UVK5对讲机的设计,使用了一个带开关的电位器,可以同时作为电源开关和音量调节旋钮。当转动旋钮时,循环读取的ADC数值发生变化,然后控制BK4802的接收音量寄存器达到音量调节的效果。在实际操作中,ADC数值难免会有抖动,即你往一个方向转动旋钮,理想情况下数值应该是一直增大或者减小的,但是实际上数值会突然变大,然后又突然恢复正常,这时需要一个消抖算法来对数值做平滑处理。消抖算法并不是一成不变的,而是需要根据实际的抖动情况做对应的处理。对于我这种情况,我的消抖方案是这样的,将ADC数值变化分为3种状态,增大、减小、不变,当相同的状态持续3次或以上,数值即可判断为有效值,否则丢弃。

char adc_prev_direction = 0;
int adc_direction_count = 0;
int adc_prev_values[3] = {0, 0, 0};
int adc_stable_value = 0;

void HandleVolADC(int value)
{
    int diff;
    char direction;
 
    diff = value - adc_prev_values[0];
 
    // 确定方向
    if(diff == 0)
    {
  direction = adc_prev_direction != 0 ? adc_prev_direction : 0;
    }
    else
    {
        direction = (diff > 0) ? 1 : -1;
    }
 
    // 判断方向是否一致
    if(direction == adc_prev_direction)
    {
        adc_direction_count++;
    }
    else
    {
        adc_direction_count = 0;
    }
 
    // 如果方向一致次数大于等于3
    if(adc_direction_count >= 3)
    {
        adc_stable_value = adc_prev_values[2];
    }
 
    if(adc_direction_count > 3)
    {
        adc_direction_count--;
    }
 
    // 更新adc_prev_values
    adc_prev_values[2] = adc_prev_values[1];
    adc_prev_values[1] = adc_prev_values[0];
    adc_prev_values[0] = value;
 
    adc_prev_direction = direction;
}

使用了以上消抖算法的数值,对比原始数据,毛刺明显减少

 

AT指令系统

AT指令常用于各种终端之间的通讯,是一种简易的通讯协议,核心是字符串的解析提取

void HandleATCommand(char* command)
{
    char* params;
    char* cmd;
    char* equalSign;
    char* end;
    char* paramArray[MAX_PARAM_COUNT];
    int paramCount;
    char* token;
    unsigned int result;

    // 指令格式为AT+{指令}[=参数1,参数2,...]
    if(strncmp(command, "AT+", 3) == 0)
    {
        cmd = command + 3;
        equalSign = strchr(cmd, '=');

        // 去除cmd末尾的\r\n
        end = cmd + strlen(cmd) - 1;
        while(end > cmd && ( * end == '\r' || * end == '\n'))
        {
            * end = '\0';
            end--;
        }

        if(equalSign != NULL)
        {
            * equalSign = '\0'; // 将等号替换为字符串结束符,以提取命令
            params = equalSign + 1;

            // 解析参数
            paramCount = 0;

            token = strtok(params, ",");
            while(token != NULL && paramCount < MAX_PARAM_COUNT)
            {
                paramArray[paramCount++] = token;
                token = strtok(NULL, ",");
            }

            if(strcmp(cmd, "EEPR") == 0)
            {
                result = IapRead(HexStringToValue(paramArray[0]));
                HexToString(buffer, result, 2);
                UART_SendStr(buffer);
                UART_SendNewLine();
            }
            else if(strcmp(cmd, "EEPW") == 0)
            {
                for(i = 1; i < paramCount; i++)
                {
                    IapProgram(HexStringToValue(paramArray[0]) + i - 1, HexStringToValue(paramArray[i]));
                }
                UART_SendOK();
            }
            else if(strcmp(cmd, "OLEDC") == 0)
            {
                OLED_WrCmd(HexStringToValue(paramArray[0]));
                UART_SendOK();
            }
            else if(strcmp(cmd, "OLEDD") == 0)
            {
                OLED_Set_Pos(atoi(paramArray[0]), atoi(paramArray[1]));
                OLED_WrDat(HexStringToValue(paramArray[2]));
                UART_SendOK();
            }
        }
        // 如果没有等号,则处理为没有参数的命令
        else
        {
            if(strcmp(cmd, "RSTR") == 0)
            {
                UART_SendOK();
                IAP_CONTR = 0x60;
            }
            else if(strcmp(cmd, "TYPE") == 0)
            {
                UART_SendStr(MODEL);
                UART_SendNewLine();
            }
        }
    }
    else
    {
        UART_SendError();
    }
}

 

上位机软件设计

由于上位机软件计划支持Windows和Android两个平台,最初想使用Qt来做跨平台开发,实际开发过程中,由于不熟悉Qt导致进度非常慢,故转为.NET MAUI,然后发现和C#还是有很大的区别,最后还是放弃了跨平台,转为熟悉的C#进行Windows的开发

目前Windows端已完成开发,Android端正在规划

由于固件已经设计好了AT指令,故上位机软件只需要使用AT指令即可与单片机通信,无需再另外开发一套通信协议

Windows端需要.NET Framework 4.8或以上版本,采用单个exe文件的设计,无需安装,方便携带

设备选择界面

主界面

内置频率管理界面

 

外壳设计

3D打印外壳和亚克力外壳均使用Solidworks设计,在这里要特别感谢B站UP主@阿奇设计分享提供的Solidworks桌面小屏幕外壳设计课程,让我0基础入门Solidworks,并且在短时间内成功设计出对讲机外壳,课程的质量很高,强烈建议有为PCB设计外壳需求的同学学习一下:https://www.bilibili.com/video/BV1DW4y1K7Ww/

注意:LXBE型号的外壳尚未完成设计,请谨慎选择此型号

导光柱是一种将PCB上的LED灯光传递到外壳表面的零件。在网上很难买到形状匹配的导光柱零件,只能自己设计,但是材质的选择又是一个问题。无意中发现8001材质打印为半透明状态就适合做导光柱,价格便宜,一个零件2元,效果也不差,参考下图

 

成本估算

物料 价格
PCB 免费
OLED 8.4
锂电池 7.8
BK4802 2.4
CH340 1.5
TP4056 0.1
ME6230 0.3
STC8G1K17 0.7
SMA公头 3.2
耳机接口 0.5
LED 0.1
21.25MHz晶振 0.3
阻容 1
排针排母 0.5
螺丝铜柱 1.5
开关 1.1
喇叭咪头 0.5
TypeC母座 0.1
1.25线 0.5
1.25连接器 0.5
外壳 14
天线 5
总计 50

注意:以上价格为单价,不含运费

外壳材料为9006

 

制作指南

首先选择需要制作的型号

注意:LXBE型号的外壳尚未完成设计,请谨慎选择此型号

1、下单PCB

根据制作的型号下单对应的PCB,厚度为1.2mm

 

2、下单元件物料

BOM已做到大部分的匹配,可按照BOM下单,以下是无法匹配的元件,需要单独到淘宝下单:

注意:晶振不要按照BOM购买,BOM里面是24MHz的

BK4802:http://e.tb.cn/h.T1kYHqjRTh5sovf?tk=AP6o3HgxwrJ,需要咨询商家发SOP16封装的

OLED(GND开头,27.3*27.8mm):https://m.tb.cn/h.gmbY7lScoVBnXzm?tk=KS3p34kHjA1,规格:0.96寸白色OLED模块/4P

21.25MHz晶振:http://e.tb.cn/h.T1k1JMcjrETQYhp?tk=8LTv3HgyLB8

M2x4螺丝:http://e.tb.cn/h.T1kbhRUNsYZSanB?tk=WTfw3HgDZne ,规格:M2*4(50个)316

M2x11铜柱:https://m.tb.cn/h.gmbZUfpZVVaXGkz?tk=yHp434kJKN6,规格:M2*11[40颗]

1x4p排母:https://m.tb.cn/h.gmb0coOGh1UYSjb?tk=GV9034kJSrW,规格:1x4p 2.54mm直插单排母黑色(20个)

锂电池(二选一)

702040-650mAh:http://e.tb.cn/h.T1GCyFAzIppxgI7?tk=AKFv3HgApZZ

102040-1200mAh锂电池:http://e.tb.cn/h.T1OsjI7wbDHikXV?tk=gUyP3HSofGH

天线:http://e.tb.cn/h.TcUvGROK5kXIARI?tk=eotG3HTa6oF,规格:母头,长度形状按照喜好选择

喇叭(根据型号选择21mm或29mm)

21mm喇叭:http://e.tb.cn/h.T1EH5UadMajIY5G?tk=chnI3HSJzZn,规格:直径21mm 8欧 0.25W 小喇叭 塑胶(5个)

29mm喇叭:http://e.tb.cn/h.T1EH5UadMajIY5G?tk=chnI3HSJzZn,规格:直径29mm 8欧 0.25W 小喇叭 塑胶大磁(5个)

咪头:http://e.tb.cn/h.T1jNxztT7tjLG9s?tk=oeav3HStZdQ,规格:52DB拾音器不带针6*5mm咪头(10个)

1.25mm线:http://e.tb.cn/h.Tc6ImjQ09ObZEIu?tk=fQlo3HSuDhr,规格:2P-单头-10CM【30条】

使用3D打印外壳的购买:

M2x12螺丝:http://e.tb.cn/h.TcOSLkVcTgVksvK?tk=09Uc3thSr7h ,规格:M2*12(50粒

使用亚克力外壳的购买:

M2x8螺丝:http://e.tb.cn/h.TcEApyQ8Wd4UoVZ?tk=pqDK3th7lFb ,规格:M2x8[100个]

M2x14螺丝:http://e.tb.cn/h.TcEApyQ8Wd4UoVZ?tk=pqDK3th7lFb ,规格:M2x14[100个]

M2x7铜柱:http://e.tb.cn/h.Tcw06O1z4787SJA?tk=00mt3thRVkc,规格:M2*7[40颗]

M2x12铜柱:http://e.tb.cn/h.Tcw06O1z4787SJA?tk=00mt3thRVkc,规格:M2*12[20颗]

 

3、下单外壳

根据喜好选择3D打印外壳或亚克力外壳

3D打印外壳

下单平台:嘉立创3D打印

表1:3D打印外壳文件详解

编号 文件名 打印参数
1 按键V4_无圆角.STL LEDO 6060  白色 不打磨
2 背夹.STL 9600  哑光白   打磨-粗磨
3 导光柱带连接杆V2.STL 8001  半透明
4 导光柱遮挡.STL JLC Black  黑色   不打磨
5 对讲机_21mm喇叭_7mm电池_下壳_带背夹.STL 9600  哑光白   打磨-粗磨
6 对讲机_21mm喇叭_7mm电池_下壳_无背夹.STL 9600  哑光白   打磨-粗磨
7 对讲机_21mm喇叭_10mm电池_下壳_带背夹.STL 9600  哑光白   打磨-粗磨
8 对讲机_21mm喇叭_10mm电池_下壳_无背夹.STL 9600  哑光白   打磨-粗磨
9 对讲机_21mm喇叭_上壳.STL 9600  哑光白   打磨-粗磨
10 对讲机_29mm喇叭_7mm电池_下壳_带背夹.STL 9600  哑光白   打磨-粗磨
11 对讲机_29mm喇叭_7mm电池_下壳_无背夹.STL 9600  哑光白   打磨-粗磨
12 对讲机_29mm喇叭_10mm电池_下壳_带背夹.STL 9600  哑光白   打磨-粗磨
13 对讲机_29mm喇叭_10mm电池_下壳_无背夹.STL 9600  哑光白   打磨-粗磨
14 对讲机_29mm喇叭_上壳.STL 9600  哑光白   打磨-粗磨

表2:型号和对应需要打印的零件

喇叭 电池 背夹 打印编号
21mm 7mm 1、2、5、9
21mm 7mm 1、2、6、9
21mm 10mm 1、2、7、9
21mm 10mm 1、2、8、9
29mm 7mm 1、2、10、14
29mm 7mm 1、2、11、14
29mm 10mm 1、2、12、14
29mm 10mm 1、2、13、14
- LXBE尚未设计完成

选择电池喇叭背夹规格,根据表2找到需要打印的编号,然后根据表1找到编号对应的文件,按照对应的参数下单。

其中外壳主体部分,编号5~14,可根据自己喜好更换其他材质,其他编号建议使用推荐的参数下单

导光柱是可选零件,作用请看前面外壳设计部分,如需要请下单编号3、4

 

亚克力外壳

下单平台:立创商城

表3:型号和对应需要打印的图纸

喇叭 电池 图纸文件 图纸尺寸
21mm 7mm 工程图_21mm喇叭_7mm电池.DWG 140*140mm
21mm 10mm 工程图_21mm喇叭_10mm电池.DWG 140*140mm
29mm 7mm 工程图_29mm喇叭_7mm电池.DWG 140*150mm
29mm 10mm 工程图_29mm喇叭_10mm电池.DWG 140*150mm

下单参数:透明亚克力,图纸文件名和图纸尺寸看表3,常规,不需要背胶,2.5mm厚度,纯切割不打印

 

4、焊接

元件大部分为贴片,最好使用热风枪和锡浆进行焊接,以下为注意事项:

1、两个按键、TypeC接口需要靠外

2、IC类元件、晶振、和LED需要注意方向,参考PCB上的丝印

3、TypeC接口背面焊锡尽量与PCB齐平,以免顶到电池

4、OLED屏幕的排针是超出屏幕平面的,尽量使用尖嘴钳剪去,以免影响外壳组装

5、屏幕的排母和SMA公头需要平整不要歪,以免影响外壳组装

6、喇叭使用1.25mm线焊接,不区分正负极(需要焊接到两端的铜片,图中为错误示范)

7、咪头使用1.25mm线焊接,需要区分正负极

8、锂电池可使用1.25mm线连接,剥去外皮手工连接后使用一节热缩管套起来

 

 

5、组装

3D打印外壳组装

(1) 准备好所需的物件,以及螺丝刀、镊子

(2) 使用M2x4螺丝*6,M2x11铜柱*3,固定OLED屏幕(左上角的铜柱不用装)

(3) 开关向下拨关闭电源,然后连接锂电池、喇叭和咪头

(4) 将锂电池,印刷文字向下,放入下壳中,电线固定到线槽

(5) 使用镊子放入按钮,小凸起向上

(6) 放入PCB,并将喇叭和咪头的电线调整到PCB凹槽处

(7) 如使用导光柱,则先组合好导光柱和导光柱遮挡零件,然后把PCB先拿起来,安装导光柱到PCB上,然后手按住导光柱将整体推入外壳中(此处为安装透明外壳不需要导光柱)

(8) 调整好天线接口的方向,如图所示

(9) 将咪头和喇叭放入上壳中,如比较松动可使用胶固定

(10) 合起上下壳,留一个缝隙使用镊子调整好内部的电线,合紧后使用M2x12螺丝*4固定外壳

(11) 装上天线,根据需要装上背夹,完成组装

 

亚克力外壳组装

(1) 使用M2x4螺丝*6,M2x11铜柱*3,固定OLED屏幕(左上角的铜柱不用装),开关向下拨关闭电源,然后连接锂电池、喇叭和咪头

(2) 使用M2x14螺丝*4M2x7铜柱*4,安装到下壳

(3) 放入PCB

(4) 安装前壳

(5) 安装左右壳

(6) 安装后壳,并将喇叭和咪头放入夹板中

(7) 使用镊子放入按钮

(8) 盖上夹板和上壳,使用M2x8螺丝*4M2x12铜柱*4固定。装上天线,完成组装

 

6、烧录固件

方式一:使用STC-ISP烧录

(1) 下载烧录软件STC-ISP:https://www.stcaimcu.com/data/download/Tools/AIapp-ISP-v6.94Y.zip

(2) 使用TypeC线连接电脑和对讲机,注意线材需带数据传输功能

(3) 打开STC-ISP软件,按照下图设置,芯片型号选择STC8G1K17-8PIN或STC8G1K17A-8PIN(根据你焊接的型号),IRC频率选择12.000MHz,EEPROM大小设置为2K取消勾选擦除用户EEPROM区,其他默认设置不用改动

(4) 点击“打开程序文件”,LXB、LXBM选择文件“lxb_1.0.hex”,LXBE选择文件“lxbe_1.0.hex”

(5) 点击“下载/编程”

(6) 将对讲机电源开关向上拨,为单片机上电,程序即开始烧录

方式二:使用软件升级工具烧录

软件升级工具是使用STC-ISP打包,预先设置好参数的烧录软件,因此无需额外的设置

(1) 使用TypeC线连接电脑和对讲机,注意线材需带数据传输功能 

(2) LXB、LXBM打开文件“lxb_upgrade_1.0_{芯片型号}.exe”,LXBE打开文件“lxbe_upgrade_1.0.exe”

(3) 点击“开始升级”

(4) 将对讲机电源开关向上拨,为单片机上电,程序即开始烧录

 

7、使用说明书

 

开机
向上拨电源开关,设备开机,绿色电源指示灯亮起。向下拨电源开关,设备关
机,绿色电源指示灯熄灭

发射
按下PTT键,对讲机即切换到发射模式,蓝色发射指示灯亮起,此时可以对
着麦克风讲话。松开PTT键,切换回接收模式,蓝色发射指示灯熄灭

切换下一频率
短按SET键,在内置频率中循环切换频率。长按SET键1秒后,每300毫
秒切换一次频率

锁定频率
同时短按PTT和SET键,进入频率锁定模式,此模式下不能通过SET键切
换频率。再次同时短按PTT和SET键退出频率锁定模式

调整音量和亮度
首先同时长按PTT和SET键1秒进入设置模式。设置模式下,长按SET键
1 秒切换设置项,可通过设置项指示图标获知正在设置的项目是音量或是亮
度,短按SET键更改当前设置项。音量和亮度的范围为0~5
再次同时长按PTT和SET键1秒,或5秒内无操作退出设置模式

连接耳机
对讲机支持连接国际标准 (CTIA) 的 3.5mm 耳机,接口定义见下图。插入耳
机时,对讲机自动断开内置麦克风和扬声器,转为使用耳机作为音频输入输
出。麦克风模式可设置为固定模式,始终使用内置麦克风,请参考后面章节

恢复默认设置
首先向下拨电源开关使设备处于关机状态,然后按下SET键,保持按下状态
的同时向上拨电源开关,直到屏幕上显示“Settingsrestored”,设备即完成恢
复默认设置,此时可松开SET键

充电
使用TypeC充电线连接设备和充电器,红色充电指示灯亮起,开始充电。充
满电后红色充电指示灯熄灭。应使用5V输出电压的充电器以免损坏设备

麦克风模式
麦克风有两种工作模式
自动模式:插入耳机时使用耳机麦克风,拨出耳机时使用内置麦克风
固定模式:无论是否插入耳机,都使用内置麦克风
要切换模式,拆下外壳后,找到位于电路板右上方的麦克风模式拨杆,向上拨
动为模式固定模式,向下拨动为自动模式

 

管理内置频率
固件默认内置公众对讲机频段409.7500MHz~409.9875MHz 共 20 个频率,
如需修改内置频率,可使用配套的软件修改

配套软件
对讲机支持连接Windows和Android设备,以进行内置频率管理及更多高级
的设置,使用浏览器打开网址
https://www.qwqoffice.com/product/lxb/
或扫描以下二维码获取配套软件

技术参数

尺寸 63.3mm*40.8mm*25.7mm (LXB)
55.8mm*40.8mm*25.7mm (LXBM)
注:
1. 不含天线、背夹及其突出部分
2. 电池厚度7mm,容量650mAh
重量 62g
电池容量 650mAh/1200mAh
输入电压 5V
发射功率 10mW
工作频段 24~32、35~46、43~57、128~170、384~512

 

技术文档

有关AT指令、EEPROM的规划及其他技术性的说明文档,请参考https://www.qwqoffice.com/product/lxb/guide.html

 

附件说明

lxb_firmware_src_1.0.zip - 对讲机固件源码,keil工程,默认编译LXB、LXBM型号的固件,如需编译LXBE固件,修改main.c第10行,取消注释#define LXBE重新编译即可

lxb_firmware_1.0.zip - 已编译的对讲机固件

lxb_upgrade_tool_1.0.zip - 用于烧录的软件升级工具

lxb_shell_3d_v1.zip - 3D打印外壳STL文件

lxb_shell_panel_v1.zip - 亚克力外壳DWG图纸

lxb_tool_windows_1.0.zip - Windows上位机软件

lxb_instruction_20241202.pdf - 说明书

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
lxb_firmware_src_1.0.zip
143
2
lxb_firmware_1.0.zip
116
3
lxb_upgrade_tool_1.0.zip
126
4
lxb_shell_3d_v1.zip
238
5
lxb_shell_panel_v1.zip
113
6
lxb_tool_windows_1.0.zip
107
7
lxb_instruction_20241202.pdf
23
8
使用演示.mp4
12
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航