手电大家谈-手电筒爱好者之家

 找回密码
 注册成为会员,享受更多功能。

QQ登录

只需一步,快速开始

只需一步,快速开始

搜索
查看: 251|回复: 8

[电池] 大有电池的事儿

[复制链接]
  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

    发表于 2025-2-21 14:25 来自手机 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有账号?注册成为会员,享受更多功能。

    x
    买了个二手5401裸机,没配电池,本来也是打算玩儿,对于电池破解几个事情。
    1:19年数码之家有破解,随机销声匿迹。
    2:22年又有人破解了代码,说是用分析仪读出来的波形,用单片机做了个板子,接上就行了。代码我转帖在二楼,发帖的伙计早联系不上了。
    3:有套件,45块,自己配电池组装。
    4:有转接座儿,20块,但是似乎反应质量差点意思,其它品牌无协议的转接座7-10块,带协议的就19+。
    5:我开始也没打算组电池,我的想法是做个通用电池包,用软线xt9接口插接连到设备上,不限于大有,家里电动工具全部用这一个,统一了。对于5401直接从根子上把控制板和开关换了,大概看了下电动工具都是电池过来2跟线到控制板,控制板输出3根线到电机,然后有一个8/9线的插座接到开关上,9线比8线多一个LED灯。
    6:再议。
    回复 dsu_marcocopyright:copyright

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

     楼主| 发表于 2025-2-21 14:26 来自手机 | 显示全部楼层
    #include <stc15F104e.h> #define DATAPIN P33 const char sequence[25]={0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0};  void Delay200us() //@5.5296MHz {         unsigned char i,j;         i=2;         j=29;         do         {                 while(--j);         }         while(--i); }  /*void Delay200ma() //@5.5296MHz {         unsigned char i,j,k;         i=5;         j=52;         k=195;         do         {                 do                 {                         while(--k);                 }         while(--j);         }         while(--i); }*/  void sendBit(char x) {         //start         DATAPIN=0;         Delay200us();         //send bit         DATAPIN=x;         Delay200us();         Delay200us();         //end         DATAPIN=1;         Delay200us(); }  void Start() {         DATAPIN=0;         Delay200us();         Delay200us();         Delay200us(); }  void End() {         DATAPIN=1;         Delay200us();         Delay200us();         Delay200us(); }  void main() {         char i=0;         //send data 500ms         while(1)         {                 Start();                 for(i=0;i<25;i++);                 {                         sendBit (sequence[i]);                 }                 End();                 Delay200us();         } }
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

     楼主| 发表于 2025-2-21 14:28 来自手机 | 显示全部楼层
    代码我也看不懂,用豆包问了一下,
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

     楼主| 发表于 2025-2-21 14:29 来自手机 | 显示全部楼层
    1. 整体功能概述:这段代码基于stc15F104e单片机,主要功能是通过P33引脚发送特定的二进制序列。该序列定义在sequence数组中,通过特定的时序,以一位一位的方式发送出去。  2. 代码详细分析:  • 头文件和宏定义: #include <stc15F104e.h> #define DATAPIN P33 const char sequence[25]={0,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0}; • #include <stc15F104e.h>:引入stc15F104e单片机的头文件,包含了该单片机寄存器定义等相关信息。  • #define DATAPIN P33:定义DATAPIN为P33引脚,后续对DATAPIN的操作实际就是对P33引脚的操作。  • const char sequence[25]:定义一个常量数组sequence,包含25个元素,这些元素构成了要发送的二进制序列。  • 延时函数: void Delay200us() //@5.5296MHz {     unsigned char i,j;     i=2;     j=29;     do     {         while(--j);     }     while(--i); } • Delay200us函数实现了大约200微秒的延时。在5.5296MHz的晶振频率下,通过两层嵌套循环,根据i和j的初始值以及递减操作来控制延时时间。  • 注释掉的Delay200ma函数,从函数名推测应该是想实现200毫秒延时,但函数内部循环控制逻辑有误,缺少一层while循环的结束括号,实际无法正确实现200毫秒延时功能。  • 发送位函数: void sendBit(char x) {     //start     DATAPIN=0;     Delay200us();     //send bit     DATAPIN=x;     Delay200us();     Delay200us();     //end     DATAPIN=1;     Delay200us(); } • sendBit函数用于发送一个二进制位。  • 首先将DATAPIN拉低,延时200微秒,作为起始信号。  • 然后根据传入的参数x(0或1)设置DATAPIN的值,再延时400微秒(两个200微秒),发送该位数据。  • 最后将DATAPIN拉高,延时200微秒,作为结束信号。  • 起始和结束函数: void Start() {     DATAPIN=0;     Delay200us();     Delay200us();     Delay200us(); }  void End() {     DATAPIN=1;     Delay200us();     Delay200us();     Delay200us(); } • Start函数用于发送起始信号,将DATAPIN拉低并延时600微秒(三个200微秒)。  • End函数用于发送结束信号,将DATAPIN拉高并延时600微秒。  • 主函数: void main() {     char i=0;     //send data 500ms     while(1)     {         Start();         for(i=0;i<25;i++);         {             sendBit (sequence[i]);         }         End();         Delay200us();     } } • 在main函数中,进入一个无限循环。  • 每次循环先调用Start函数发送起始信号。  • 然后通过for循环遍历sequence数组,调用sendBit函数逐个发送数组中的二进制位。这里for循环后面多了一个分号;,会导致for循环体为空,实际只有一次sendBit (sequence[25])操作(这里sequence[25]越界,因为数组有效索引是0到24),应该去掉该分号。  • 发送完所有位后,调用End函数发送结束信号,再延时200微秒,然后开始下一轮循环。  3. 改进建议:  • 修正Delay200ma函数的语法错误,确保其能正确实现200毫秒延时功能。  • 去掉main函数中for循环后的多余分号,保证能正确发送整个sequence数组中的数据。  • 可以考虑添加注释,使代码逻辑更加清晰,特别是对一些关键操作和函数的功能进行详细说明。  通过上述分析,希望能帮助你更好地理解这段代码的功能和实现细节。如果还有其他疑问,请随时提问。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

     楼主| 发表于 2025-2-21 14:30 来自手机 | 显示全部楼层
    从提供的代码来看,它并非精确的毫秒级循环断续发送信号 ,原因如下:  • 发送周期分析:  • 每次完整发送包含起始信号、25位数据和结束信号。  • 起始信号 Start 函数延时600微秒(3个200微秒)。  • 每个数据位发送 sendBit 函数,每个数据位发送过程约800微秒(起始200微秒 + 数据位400微秒 + 结束200微秒),25 位数据发送总时长约25 * 800微秒 = 20000微秒。  • 结束信号 End 函数延时600微秒(3个200微秒)。  • 最后还有额外的200微秒延时。  • 一次完整发送周期约为600 + 20000 + 600 + 200 = 21400微秒,即21.4毫秒 。  • 非精确毫秒级:  • 代码中延时函数 Delay200us 是基于特定晶振频率(5.5296MHz)的固定延时,通过简单循环实现,这种方式受晶振精度、单片机运行环境等因素影响,无法保证绝对精确的时间。  • 代码中没有对发送周期进行精确的毫秒级定时控制,例如使用定时器中断等更精确的定时方式。  所以,该代码是以约21.4毫秒为周期循环发送信号,但不是精确的毫秒级控制,且时间精度受多种因素影响。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

     楼主| 发表于 2025-2-21 14:30 来自手机 | 显示全部楼层
    可以用脉冲发生器代替么?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

     楼主| 发表于 2025-2-21 14:31 来自手机 | 显示全部楼层
    该代码实现的功能可以用脉冲发生器替代,以下是具体分析:  功能相似性  • 代码通过对 DATAPIN 引脚的操作,按照特定的序列发送信号,本质上是产生了一种特定规律的脉冲信号。脉冲发生器也可以产生各种不同频率、占空比和波形的脉冲信号,能够模拟代码中产生的信号。  精度和稳定性  • 代码中的信号发送依赖于软件延时函数,精度受晶振精度等因素影响。而专业的脉冲发生器通常具有更高的时间精度和稳定性,能产生更精确的脉冲宽度和周期。  灵活性  • 代码中信号的序列和参数在程序中固定,若要修改需重新编写和烧录程序。脉冲发生器则可通过面板操作或外部控制接口,方便快捷地实时调整脉冲的各种参数,如频率、占空比、脉冲数等,具有更高的灵活性。  成本和复杂度  • 使用脉冲发生器可能会增加硬件成本,特别是一些高精度、多功能的脉冲发生器价格较高。而原代码基于单片机实现,只需单片机及相关的最小系统电路,成本相对较低。不过,从开发复杂度来看,使用脉冲发生器无需编写复杂的代码,降低了软件开发的难度和工作量。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-25 08:22
  • 签到天数: 709 天

    [LV.9]以坛为家II

     楼主| 发表于 2025-2-21 14:46 来自手机 | 显示全部楼层
    可调占空比发生器到手,问几个人电池中间脚电压多少,没一个人愿意量一下,早已习惯了,问豆包,中间脚电压2.8-4.2V。
    先用这个模拟吧,大概意思代码是以后200毫秒的50赫兹持续循环信号。占空比50%高低电位4.2-2.8,频率50赫兹整起再说。
    以我的电子小白认知为什么没有三方品牌复制呢?如果通讯协议是数字信号,读取复制早就破解了,需要苦之久已么?如果是模拟信号也早模拟出来了,玩家高手如云怎么可能是个难点?我先用模拟来试吧,如果行不通直接换控制板,原装控制板卖了换钱。
    电池不打算用21700了,电池包要有电池包的特色6串33140铁锂走起。
    电动工具的保护板貌似都有缺陷,典型第一个问题饿死电池,第二个充电保护电压不到位,放电倒是其次没电电钻就不转了,不用就不放电了。牧田款出了typeC的双向充电口,充电有60瓦放电20瓦,还没有大面积铺开,另外有人文宇创新做了主动均衡保护板,也没啥反响啊。没那手艺还是单买均衡板外接吧。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-4-12 21:50
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2025-2-21 15:05 | 显示全部楼层
    买原装电池吧,你这瞎弄省不了几个钱不说,充电还得麻烦。原装的可是充放都保护完善的。另外,尽量别想着用其它带有MOS管的电池来代用,强力工作MOS管顶不住的。
    回复

    使用道具 举报

    本版积分规则

    小黑屋|手机版|Archiver|论坛自带搜索|下载论坛app|手电大家谈-手电筒爱好者之家 ( 备案序号:鲁ICP备05002565号 )
    以上言论纯属个人观点,与手电大家谈立场无关。
    最佳浏览模式:1920*1080



    GMT+8, 2025-2-22 16:39 , Processed in 0.161550 second(s), 41 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表