数码之家

 找回密码
 立即注册
搜索
查看: 2702|回复: 28

[家电] 用FT60E211单片机替换头灯的驱动芯片

[复制链接]
发表于 2023-7-13 10:16:05 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
前段时间因电池装反,烧了头灯内部的驱动芯片,上网查了下芯片型号是YX8254,本身价格只有几毛钱,但算上运费就要好几块了,其实我只要单键开关功能就行了,想到以前买了些FT60E211单片机还在吃灰,就尝试用它代替。用厂家提供的例程略改了一下,凑和能用了,量了下待机时的电流为0.1uA左右。至于用到的编译器和编程器的资料,可以搜索本坛 2元成本玩2毛单片机这个帖子。
ft60e211.png

  1. #include "SYSCFG.h"

  2. bit start=0;

  3. void interrupt ISR(void)        
  4. {
  5.         //PA2外部中断处理
  6.         if(INTE && INTF)               
  7.         {
  8.                 INTF = 0;                          //清PA2 INT 标志位
  9.                 INTE = 0;                          //暂先禁止PA2中断
  10.             start=~start;
  11.         }
  12. }

  13. /*-------------------------------------------------
  14. * 函数名:POWER_INITIAL
  15. * 功能:  上电系统初始化
  16. * 输入:  无
  17. * 输出:  无
  18. --------------------------------------------------*/        
  19. void POWER_INITIAL (void)
  20. {
  21.         OSCCON = 0B01110001;        //IRCF=111=16MHz/4T=4MHz,0.25us
  22.         INTCON = 0;                          //暂禁止所有中断
  23.         PORTA = 0B00000100;               
  24.         TRISA = 0B00000100;                //PA输入输出 0-输出 1-输入
  25.                                                                                                                
  26.         WPUA = 0B00000100;            //PA端口上拉控制 1-开上拉 0-关上拉                                                        
  27.                            
  28.         OPTION = 0B00001000;        //Bit3=1,WDT MODE,PS=000=WDT RATE 1:1                             
  29.     PSRCA = 0B11111111;            //源电流设置最大

  30.     PSINKA = 0B11111111;    //灌电流设置最大
  31.                     
  32.     MSCON = 0B00110000;                           
  33.         //Bit5:        PSRCAH4和PSRCA[4]共同决定源电流。00:4mA; 11: 33mA; 01、10:8mA
  34.         //Bit4:        PSRCAH3和PSRCA[3]共同决定源电流。00:4mA; 11: 33mA; 01、10:8mA
  35.         //Bit3:        UCFG1<1:0>为01时此位有意义。0:禁止LVR;         1:打开LVR
  36.         //Bit2:        快时钟测量慢周期的平均模式。0:关闭平均模式;1:打开平均模式
  37.         //Bit1:        0:关闭快时钟测量慢周期;1:打开快时钟测量慢周期
  38.         //Bit0:        0:睡眠时停止工作:1: 睡眠时保持工作。
  39.     //                当T2时钟不是选择指令时钟的时
  40.         }
  41.       
  42. /*-------------------------------------------------
  43. *  函数名:DelayUs
  44. *  功能:  短延时函数
  45. *  输入:  Time延时时间长度 延时时长Time us
  46. *         输出:  无
  47. -------------------------------------------------*/
  48. void DelayUs(unsigned char Time)
  49. {
  50.         unsigned char a;
  51.         for(a=0;a<Time;a++)
  52.         {
  53.                 NOP();
  54.         }
  55. }                  
  56. /*-------------------------------------------------
  57. *         函数名:DelayMs
  58. *         功能:  短延时函数--16M-4T--大概快1%左右.
  59. *         输入:  Time延时时间长度 延时时长Time ms
  60. *         输出:  无
  61. -------------------------------------------------*/
  62. void DelayMs(unsigned char Time)
  63. {
  64.         unsigned char a,b;
  65.         for(a=0;a<Time;a++)
  66.         {
  67.                 for(b=0;b<5;b++)
  68.                 {
  69.                          DelayUs(98);
  70.            
  71.                 }
  72.         }
  73. }

  74. /*-------------------------------------------------
  75. * 函数名: INT_INITIAL
  76. * 功能:  中断初始化函数
  77. * 输入:  无
  78. * 输出:  无
  79. --------------------------------------------------*/
  80. void INT_INITIAL(void)
  81. {
  82.         TRISA2 =1;                                                                //SET PA2 INPUT
  83.         IOCA2 =0;                                                                //禁止PA2电平变化中断
  84.         INTEDG =0;                                                                //OPTION,INTEDG=0;PA2 INT 为下降沿触发
  85.         INTF =0;                                                                //清PA2 INT中断标志位
  86.         INTE =1;                                                                //使能PA2 INT中断
  87. }

  88. /*-------------------------------------------------
  89. *  函数名:  main
  90. *        功能:  主函数
  91. *  输入:  无
  92. *  输出:  无
  93. --------------------------------------------------*/
  94. void main()
  95. {   
  96.    
  97.         POWER_INITIAL();
  98.     PA3=1;
  99.         while(1)
  100.         {         
  101.             if(start==1)            
  102.                 {
  103.                        PA3=0;
  104.                        DelayMs(250);                                         
  105.                 }
  106.             else
  107.                 {
  108.                        PA3=1;
  109.                        DelayMs(250);                                    
  110.                 }      
  111.                                           
  112.                 INT_INITIAL();                                                //初始化外部中断
  113.                 GIE = 1;                                                        //开总中断
  114.                 SLEEP();
  115.         }
  116. }
复制代码

打赏

参与人数 5家元 +259 收起 理由
followboy + 6 優秀文章
xtay112 + 6 優秀文章
IlovePLC + 30 認真發帖
作死的家伙 + 7
家睦 + 210

查看全部打赏

发表于 2023-7-13 10:32:45 | 显示全部楼层
这个替换不错,对于非常懂编程的可以实现各种玩法。
回复 支持 反对

使用道具 举报

发表于 2023-7-13 11:52:31 | 显示全部楼层
简单实用,但好像不是恒流驱动LED。
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:19:11 | 显示全部楼层
这个替换不错
回复 支持 反对

使用道具 举报

发表于 2023-7-13 13:03:52 | 显示全部楼层
双稳态开关嘛,用两个BJT可以实现,两个MOS也可以。
也可以用触发器。记忆一个bit的数据,就是触发器的本职工作。用一个D触发器,静态10uA的样子,攒成这样。

屏幕截图 2023-07-13 125953.png
D触发器clk上升沿,Q把Q#输出到mos打开输出。每一个按键上升沿,Q反转一次。电容去抖,长按不响应。
推荐一个ti的d触发器,可以找找其他厂家,d触发器很常用的一个件,国产可能几毛钱吧。
屏幕截图 2023-07-13 130029.png

打赏

参与人数 1家元 +20 收起 理由
家睦 + 20

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-13 13:11:19 | 显示全部楼层
魂の殇 发表于 2023-7-13 13:03
双稳态开关嘛,用两个BJT可以实现,两个MOS也可以。
也可以用触发器。记忆一个bit的数据,就是触发器的本职 ...

因为头灯的LED和按键是共地的,用了根三芯弹簧线,要是用分立件替换的话,还要另外加条电线。
回复 支持 反对

使用道具 举报

发表于 2023-7-13 14:37:29 | 显示全部楼层
单片机在此处有点大才小用了。
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-13 15:18:22 | 显示全部楼层
魂の殇 发表于 2023-7-13 13:03
双稳态开关嘛,用两个BJT可以实现,两个MOS也可以。
也可以用触发器。记忆一个bit的数据,就是触发器的本职 ...

会编程,单片机比你这电路要简单很多,而且根本不用改硬件电路,有需要还可以加更多的功能,另外也便宜。
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-13 15:43:55 | 显示全部楼层

这个思路不错,可以借鉴
回复 支持 反对

使用道具 举报

发表于 2023-7-13 20:55:06 来自手机浏览器 | 显示全部楼层
这个真利用的好
回复 支持 反对

使用道具 举报

发表于 2023-7-13 23:47:42 | 显示全部楼层
看起来是简单了些,需要编程。
回复 支持 反对

使用道具 举报

发表于 2023-7-14 07:54:45 | 显示全部楼层
这个思路不错,可以借鉴
回复 支持 反对

使用道具 举报

发表于 2023-7-14 10:05:32 | 显示全部楼层
会编程就是好
回复 支持 反对

使用道具 举报

发表于 2023-7-14 10:41:19 | 显示全部楼层
0.1ua的待机电流真的是非常的合适。
回复 支持 反对

使用道具 举报

发表于 2023-7-14 12:54:19 | 显示全部楼层
单片机基础入门真的挺简单,精通就难,不过搞技术的要有兴趣有时间还要悟性加上一个契机或者说机会这样就会玩的很愉快.我是之前模电专业出身的一直从事电子制造工程行业,后来在2010年后开发案子用模电实现的功能实在是事倍功半,开始学习单片机,最开始用STC的89C52学习板入门,现在基本用CH32V系列做产品开发.
回复 支持 反对

使用道具 举报

发表于 2023-7-14 13:02:22 | 显示全部楼层
辉芒微FT60E211 系列我也了解着一阵,是价格真香系列,也想搞个来玩玩,后来看到下载器价格着实不低又加上我做产品不至于极致压缩成本,只玩玩就没必要再花心思搞.现在开发小方案都是用CH32V003,中型方案用CH32V203,大型方案用CH32V307,增加CH340,貌似现在越来越倾近于沁恒的全家桶了.
回复 支持 反对

使用道具 举报

发表于 2023-7-15 13:14:52 | 显示全部楼层
603599910 发表于 2023-7-14 12:54
单片机基础入门真的挺简单,精通就难,不过搞技术的要有兴趣有时间还要悟性加上一个契机或者说机会这样就会玩 ...

自己瞎几把搞搞,坏了也没事,做产品就得保证可靠性了,不能生产几十万了发现有缺陷就麻烦了
回复 支持 反对

使用道具 举报

发表于 2023-7-16 01:02:58 | 显示全部楼层
可惜不是STC系列的51单片机
回复 支持 反对

使用道具 举报

发表于 2023-7-17 07:43:52 | 显示全部楼层
会编程就是好
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-6-2 16:41 , Processed in 0.343200 second(s), 16 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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