使用arduino IDE进行pwm时可节省ATTINY85的功耗(休眠)

时间:2019-02-10 07:23:14

标签: avr arduino-ide attiny

我整天都在使用ATTINY85数据表,谷歌和其他论坛,但是沉睡的东西对我来说只是部分意义。

项目目标: 我正在构建一个迪斯科球速度控制器,以对廉价的中国电池供电的迪斯科球旋转器中的微型直流电动机进行供电和pwm控制。

硬件: 便宜的电源(5V USB端口输出)-> ebay上常见的ATTINY85 digispark复制板->带n-FET的pwm->电动机。一键切换速度设置。

启动后,我运行设置循环,以监听按键(实际上是最终形式的快速电源开关),并在几个预配置的pwm设置之间进行更改。自上次按键后约2分钟后,使用中的设置将保存到EEPROM中,以便下次启动。这一切都在起作用。

在更新EEPROM之后,我想将功耗降至最低,因为迪斯科舞厅永远都不会停止。通过阅读各种教程和数据表,当使用pwm时似乎只有SLEEP_MODE_IDLE是可能的。

我想尽可能地将板子僵化,只要保持设置的pwm即可。永远都不需要醒来。

实际上还可以关闭其他哪些内容,以及如何正确进行操作? 提示和建议?

到目前为止,这是我微不足道的尝试。它有点奏效,我设置的调试指示灯保持在pwm = 30(在主循环中会产生脉冲),但是系统会在按下按钮时唤醒(转到主循环–指示灯开始发出脉冲),因此我怀疑还有更多事情要做。 / p>

void timeout() { // this happens when settings loop has run long enough and its time for eternal sleep

  analogWrite(PINLED, 30); //debug
  countsmall = 0; //DEBUG, in case we wake up be ready for main loop
  countbig = 0; //DEBUG, in case we wake up be ready for main loop


  // save the setting
  EEPROM.update(0, savedlevel);

  // conserve power -- go zombie state for eternity

  noInterrupts();

  ACSR |= _BV(ACD);                         //disable the analog comparator?
  ADCSRA &= ~_BV(ADEN);                     //disable ADC?

  mcucr1 = MCUCR | _BV(BODS) | _BV(BODSE);  //turn off the brown-out detector?
  mcucr2 = mcucr1 & ~_BV(BODSE);
  MCUCR = mcucr1;
  MCUCR = mcucr2;

  set_sleep_mode(SLEEP_MODE_IDLE);
  //sleep_enable(); //redudant

  sleep_bod_disable();

  sleep_mode();

}

整个程序:http://uvkk.kirah.fi/jotainmuutarandomia/randomfiles/liskodiskoboltsi.cpp

添加项1 11.2.2019:

当前情况,拔下电源指示灯,调试指示灯在睡眠时关闭(循环时每秒2毫秒闪烁2ms),仅连接到板上的电源(根据地线测量):
1 MHz:13.8毫安循环,12.9毫安空转 8 MHz:19,0 ma循环,15,1 ma空闲
16.5 MHz:24.7毫安循环,17.9毫秒空载

我认为这使它以500kHz运行: 设置为1MHz,但setup()中为clock_prescale_set(clock_div_32);。现在至少有1秒的闪烁时间为2秒,电流汲取循环为13.2 ma,空转为12.6 ma。

但是这些数字太高了……我在这里做错了吗?即使我直接给5V引脚供电,板载稳压器也可以泄放电流吗?

1 个答案:

答案 0 :(得分:0)

您是对的,您认为空闲模式是尽可能深的睡眠,并且计时器仍在运行。

在1Vhz和5V电压下,您希望该芯片在活动模式下使用大约1mA电流...

enter image description here

在闲置状态下,您希望将其降至0.2mA左右。...

enter image description here

我的猜测是,您看到的绝大多数功率消耗都来自LED。

如果您需要一些视觉反馈,但仍然希望省电,请考虑周期性地使LED闪烁而不是始终打开。每秒可见一次10毫秒的闪光灯,其使用功率的1/100。

然后,您就可以开始进行边际节电,例如关闭外设,阻止Arduino ISR形式运行,以使ATINY功耗用户从完全活动的1mA降低到0.2mA。

如果您禁用了LED并仍然看到高电流消耗,那么我的猜测是开发板上带有线性稳压器,这基本上会消耗功率。 ATTINY85可以直接接受高达5.5V的电源,因此,只要您的输入电压小于此电压,您就可以完全卸下稳压器,然后将功耗降至期望值。

enter image description here

看看您的电路板原理图,我认为您可以通过JP2的引脚3(VIN)提供电源,并跳过调节器。你尝试过吗?

enter image description here