打印

PSOC 低功耗的问题

[复制链接]
3165|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在做PSOC蓝牙的产品,测试运行电流9个多mA,就算全都注销掉程序跑也是7个多mA,但是测别人做的同样芯片的模块只有几十个uA,而且还开启蓝牙,不知道大家了不了解这方面的知识
沙发
飞翔的控制器| | 2015-10-28 08:56 | 只看该作者
你是否用其它器件了,其它器件不是低功耗的

使用特权

评论回复
板凳
波越| | 2015-10-28 09:19 | 只看该作者
你用的电源芯片是不是低功耗的

使用特权

评论回复
地板
上山砍老虎| | 2015-10-28 09:19 | 只看该作者
楼主把你的方案给大家说下,来分析分析

使用特权

评论回复
5
wangyufeng2500|  楼主 | 2015-10-28 14:09 | 只看该作者
就是单独的一个蓝牙模块,PSOC BLE ,跑官方的低功耗程序电流1mA一下,我的程序就特别高,感觉睡眠模式进去会立即出来,或者是进去了,但是好像还是电流比较高,现在发现其中一个原因就是频率问题,再就是不知道到和IO口的状态有没有关系,有的话IO应该怎么配置。

使用特权

评论回复
6
关小波522| | 2015-10-28 14:13 | 只看该作者
IO口一般不用的话,设置成输出状态,并输出为低

使用特权

评论回复
7
波越| | 2015-10-28 14:21 | 只看该作者
你可以接示波器看下,应该是你的程序的问题了,仿真看下,是不是有中断然后导致退出睡眠模式

使用特权

评论回复
8
ecoren| | 2015-10-28 15:30 | 只看该作者
wangyufeng2500 发表于 2015-10-28 14:09
就是单独的一个蓝牙模块,PSOC BLE ,跑官方的低功耗程序电流1mA一下,我的程序就特别高,感觉睡眠模式进去 ...

和IO状态也有关系,配置一下试试,我记不太清楚是哪种状态了,

使用特权

评论回复
9
dsll2010| | 2015-10-29 09:21 | 只看该作者
参考这个文档:
http://www.cypress.com/documentation/application-notes/an92584-designing-low-power-and-estimating-battery-life-ble?source=search&cat=technical_documents
需要做这几件事:
- 关时钟(IMO)
- 关闭调试口(SWD)
- 进入DeepSleep,让非运行组件Sleep。

使用特权

评论回复
10
JerryCloud| | 2015-10-29 11:40 | 只看该作者
   1.如果使用任何其它模块,在进入低功耗前,让该模块进入sleep模式,并设置输出口为模拟高阻态输入。
   2.firmware调用CySysClcEcoStop(); CySysPmDeepSleep();关闭主时钟,进入深度睡眠模式;
   3.在.cydwr文件中,设置时钟,看门狗时钟勾选Low power, ILO时钟,如果不用,不勾选;
   4.在.cydwr文件中,配置System项:Debug select选择GPIO。

使用特权

评论回复
11
wangyufeng2500|  楼主 | 2015-10-29 17:52 | 只看该作者
dsll2010 发表于 2015-10-29 09:21
参考这个文档:
http://www.cypress.com/documentation/application-notes/an92584-designing-low-power-an ...

现在deepsleep已经进入,可以通过BLE唤醒,但是上面写着不能通过串口唤醒,但是可以通过GPIO唤醒,但这部分没有介绍,我现在想通过外置按键或者串口唤醒deepsleep下的模块,请教方法,谢谢

使用特权

评论回复
12
wangyufeng2500|  楼主 | 2015-10-29 17:53 | 只看该作者
JerryCloud 发表于 2015-10-29 11:40
1.如果使用任何其它模块,在进入低功耗前,让该模块进入sleep模式,并设置输出口为模拟高阻态输入。
    ...

现在deepsleep已经进入,可以通过BLE唤醒,但是上面写着不能通过串口唤醒,但是可以通过GPIO唤醒,但这部分没有介绍,我现在想通过外置按键或者串口唤醒deepsleep下的模块,请教方法,谢谢

使用特权

评论回复
13
dsll2010| | 2015-10-29 19:54 | 只看该作者
wangyufeng2500 发表于 2015-10-29 17:53
现在deepsleep已经进入,可以通过BLE唤醒,但是上面写着不能通过串口唤醒,但是可以通过GPIO唤醒,但这部 ...

UART这样做:
https://bbs.21ic.com/icview-989988-1-1.html

IO口用中断就行了,Creator上有示例。

使用特权

评论回复
14
wangyufeng2500|  楼主 | 2015-10-30 09:10 | 只看该作者
dsll2010 发表于 2015-10-29 19:54
UART这样做:
https://bbs.21ic.com/icview-989988-1-1.html

串口唤醒这个我这边使用的是未配置的SCB模式,也有勾选使能唤醒,但是导致模块只能发送数据,并不能接受任何数据, UART_Sleep();  也添加了,但是还是不行。

使用特权

评论回复
15
dsll2010| | 2015-10-30 09:43 | 只看该作者
wangyufeng2500 发表于 2015-10-30 09:10
串口唤醒这个我这边使用的是未配置的SCB模式,也有勾选使能唤醒,但是导致模块只能发送数据,并不能接受 ...

工程附上来看看

使用特权

评论回复
16
wangyufeng2500|  楼主 | 2015-10-30 09:51 | 只看该作者

首先是这样的我SCB中勾选使能,这个时候我代码没有任何修改,运行之后发现只可以发送不可以接收数据。
我的程序开始启动时没有进入低功耗,要正常工作。
程序中我进入deepsleep状态,进入之前我先按照你的要求UART_SLEEP();
恢复运行之后我再UART_WEAKUP();
但是现在情况是我不知道怎么样程序没进入低功耗的时候能正常收数据,我调用UART_WEAKUP()也没有能收到数据

使用特权

评论回复
17
wangyufeng2500|  楼主 | 2015-10-30 09:54 | 只看该作者
我尝试这样去唤醒串口,但是还是无效的
    CyGlobalIntEnable;      
     UART_SCB_IRQ_Start();
     CyDelay(100);
     UART_Wakeup();

使用特权

评论回复
18
wangyufeng2500|  楼主 | 2015-10-30 11:32 | 只看该作者

帮看下,谢谢

使用特权

评论回复
19
dsll2010| | 2015-10-30 11:36 | 只看该作者
wangyufeng2500 发表于 2015-10-30 09:54
我尝试这样去唤醒串口,但是还是无效的
    CyGlobalIntEnable;      
     UART_SCB_IRQ_Start();

这段代码感觉好怪,你将工程传到网盘我看看。

使用特权

评论回复
20
wangyufeng2500|  楼主 | 2015-10-30 11:41 | 只看该作者
dsll2010 发表于 2015-10-30 11:36
这段代码感觉好怪,你将工程传到网盘我看看。

主要是这样,我原先程序没有任何变动,我就勾选了使能唤醒,这时候串口是不能收数据的,现在就是想知道怎样设置才能收数据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

57

帖子

1

粉丝