找回密码
 立即注册
楼主: vb2002

(已解决)刚解决一个问题,又来新的问题.关于电容充电时间

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-11-15 11:48:42 | 显示全部楼层
vb2*** 发表于 2024-11-15 11:39
已经把泄放电阻加到680K 了.
P32引脚的判定还是快.  按照欧姆定律,这个RC电路,放完22uf的电,应该要75秒
...

同时,能否给出更完整的电路图?只给出一部分我没办法做出更进一步的判断。
目前我的理解是:你的单片机在切换挡位的时候供电会被切断?然后下一次上电的时候判断电容是否有点来区分第一次上电/短暂的切换挡位
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-11-15 12:04:28 | 显示全部楼层
王*** 发表于 2024-11-15 11:48
同时,能否给出更完整的电路图?只给出一部分我没办法做出更进一步的判断。
目前我的理解是:你的单片机 ...


这个是完整的电路图.

截图202411151202049127.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-11-15 12:04:43 | 显示全部楼层
王*** 发表于 2024-11-15 11:48
同时,能否给出更完整的电路图?只给出一部分我没办法做出更进一步的判断。
目前我的理解是:你的单片机 ...
  1. sbit CAP=P3^2;
  2. //u8 time;
  3. //bit flag;
  4. sbit led=P5^5;  
  5. unsigned int eepromid=0x0005;
  6. unsigned char dat;
  7. bit ispcap;
  8. u8 ledee ()
  9. {
  10. //        delayms(5);
  11.         while(1)
  12.         {
  13.        
  14.          dat = IapRead(eepromid +1);                //开始就eepromid == 0x0a02
  15.                
  16.          if(dat==0xff)                                //如果eepromid == 0xff
  17.          {
  18.          if(ispcap )       
  19.          {
  20.          dat=  IapRead(eepromid);                //eepromid == 0x0a01
  21.                 switch(dat)
  22.                 {
  23.                         case 1: IapProgram(eepromid+1, 250);break;
  24.                         case 250: IapProgram(eepromid+1, 210);break;
  25.                         case 210: IapProgram(eepromid+1, 120);break;
  26.                         default: IapProgram(eepromid+1,1);break;
  27.                 }
  28.          }
  29.         else
  30.                  dat=  IapRead(eepromid-1);
  31.                 return dat;
  32.          }
  33.                 else
  34.                 {
  35.                 eepromid++;
  36.                 }
  37.                 if(eepromid>= 0xffd)
  38.                 {
  39. //                        eepromid=0x0ff5;
  40.                         IapErase(0x0000);                                //擦除扇区
  41.                         IapErase(0x0200);                                //擦除扇区       
  42.                         IapErase(0x0400);                                //擦除扇区       
  43.                         IapErase(0x0600);                                //擦除扇区       
  44.                         IapErase(0x0800);                                //擦除扇区       
  45.                         IapErase(0x0A00);                                //擦除扇区       
  46.                         IapErase(0x0C00);                                //擦除扇区       
  47.                         IapErase(0x0E00);                                //擦除扇区                               
  48.                         return 1;
  49.                 }
  50.         }
  51. }
  52. void main()
  53. {
  54.         led=0;
  55.         sys_init();
  56.         ledee();
  57.         CCAP1H=dat;
  58.         UartSend((eepromid>>8)&0xff);               
  59.         UartSend(eepromid&0xff);
  60.         UartSend(dat&0xff);
  61.         UartSend(CAP&0xff);
  62.         UartSend(CCAP1H&0xff);
  63.         while(1)
  64.         {       
  65. //        if(flag)  {
  66. //        flag=0;
  67. //         UartSend((eepromid>>8)&0xff);               
  68. //        UartSend(eepromid&0xff);
  69. //        UartSend(dat&0xff);       
  70. //                }               
  71.         }
  72. }
  73. void sys_init(void)
  74. {
  75.         P_SW2|=0x80;
  76.            P3M0 = 0x0c; P3M1 = 0x00;
  77.         ispcap=CAP;
  78. //    P3M0 = 0x00; P3M1 = 0xfc;                  //除p3031全高阻 p32也高阻,加上拉
  79. //    P3PU = 0x04;                                         //p32也高阻,加上拉
  80. //    P5M0 = 0x20; P5M1 = 0xff;                         //P55开漏, 其他高阻,
  81. //    P5PU = 0x20;                                         //P55上拉
  82. //    P5M0 = 0x10; P5M1 = 0xff;                 //P54开漏, 其他高阻,
  83. //    P5PU = 0x10;                                         //P54内部上拉4k
  84. //        IT0=1;EX0=1;                                //外部中断0 P32
  85.         INTCLKO|=0x40;           IP2=0x10;        //EX4=1; 允许INT4外部中断 不停电下载
  86.         EA=1;                                                //总中断
  87.         UartInit();
  88.         Timer0_Init();
  89.         PWM_init();
  90. }
复制代码


点评

是这样的,你的代码写错了 应该在设置io模式前进行读取,不然你始终只能读到1 [attachimg]63915[/attachimg] 正确的代码应该是:  详情 回复 发表于 2024-11-15 12:19
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-11-15 12:19:20 | 显示全部楼层

是这样的,你的代码写错了
应该在设置io模式前进行读取,不然你始终只能读到1
截图202411151218257235.jpg
正确的代码应该是:
  1. P_SW2|=0x80;
  2. ispcap=CAP;
  3. P3M0 = 0x0c; P3M1 = 0x00;
  4. CAP=1;
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-11-15 12:38:39 | 显示全部楼层
王*** 发表于 2024-11-15 12:19
是这样的,你的代码写错了
应该在设置io模式前进行读取,不然你始终只能读到1

改了. 还是一样的.
判定时间太短了.
要在30ms内才能有电平变化.

点评

不会的,我用100k配0.01uf(103)电容测了一下掉电曲线,都能测到70ms。 你这个这么大的电容不应该的。 有没有示波器或者万用表测试一下断电后的电压曲线。 [attachimg]63917[/attachimg]  详情 回复 发表于 2024-11-15 12:48
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-11-15 12:48:57 | 显示全部楼层
vb2*** 发表于 2024-11-15 12:38
改了. 还是一样的.
判定时间太短了.
要在30ms内才能有电平变化.

不会的,我用100k配0.01uf(103)电容测了一下掉电曲线,都能测到70ms。
你这个这么大的电容不应该的。
有没有示波器或者万用表测试一下断电后的电压曲线。
IMG_20241115_120743.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-11-15 12:50:56 来自手机 | 显示全部楼层
本帖最后由 vb2002 于 2024-11-15 12:54 编辑
王昱顺 发表于 2024-11-15 12:48
不会的,我用100k配0.01uf(103)电容测了一下掉电曲线,都能测到70ms。
你这个这么大的电容不应该的。
...

我刚拆了看了一下.   虚焊了.
电阻掉了.
我重新焊上去试下.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-11-15 13:09:15 | 显示全部楼层
王*** 发表于 2024-11-15 12:48
不会的,我用100k配0.01uf(103)电容测了一下掉电曲线,都能测到70ms。
你这个这么大的电容不应该的。
...

我刚刚有重新焊接了. 还是不行
但是我想到问题所在了.
会不会是因为判断p32 引脚本来就没有问题.
问题来自于已经断电了. 单片机没有供电.
马上就关机了. 这个时候eeprom没有足够的电压来写入下一个档位 的eeprom数据

点评

你在断电的时候写eeprom? 不应该是上电的时候写嘛,记录当前的值。 下次根据eeprom和p32联合判断是该清空还是继续更改状态  详情 回复 发表于 2024-11-15 13:37
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-11-15 13:37:17 | 显示全部楼层
vb2*** 发表于 2024-11-15 13:09
我刚刚有重新焊接了. 还是不行
但是我想到问题所在了.
会不会是因为判断p32 引脚本来就没有问题.

你在断电的时候写eeprom?
不应该是上电的时候写嘛,记录当前的值。
下次根据eeprom和p32联合判断是该清空还是继续更改状态
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-11-15 14:21:49 | 显示全部楼层
我也有点懵了.
现在我加大电容,确实可以增加那个P32引脚为1 的时间.
并了电阻以后,没有任何变化.
按照 放电电阻的时间来看,应该是有变化的.

现在的实际情况,就是我需要超快速的关机开机,才可以换挡
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:16 , Processed in 0.263845 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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