저전력 부팅이 작동하지 않습니다


9

일반적으로 5V @ 8MHz (Arduino Pro 3.3V 8MHz 프로파일 및 부트 로더 사용)에서 실행되는 사용자 지정 Arduino ATMega328 보드가 있습니다. 이 설정을 사용하는 주된 이유는 주 전원이 연결 해제되고 배터리 전원 (코인 셀에서 3V)이 소진 될 때 보드를 절전 모드로 전환 할 수 있기 때문입니다. 5V 및 3V 소스는 다이오드 OR로 연결되며 5V 입력은 INT0에 연결됩니다. 코드에서 INT0이 낮아졌다는 것을 감지하면 내부 모드를 유지하고 칩이 다시 깨워 졌는지 확인하기 위해 1Hz 사이클을 유지하는 워치 독 타이머를 제외하고 슬립 모드를 초기화하고 모든 전원이 꺼집니다. 이 작품 아름답게 5V 전원이 다음 배터리가 삽입되어, 먼저 적용 할 때 다음5V가 분리되었습니다. 절전 모드로 전환되고 5V가 다시 켜지면 깨어나고 카운트가 손실되지 않은 것을 알 수 있습니다.

그러나 3V를 먼저 적용하면 문제가 발생 합니다. 부팅 중인지 확실하지 않습니다. 그러나해야 할 일은 부팅, INT0 (Digital 2)이 부족한지 확인하고, 그렇다면 잠자기 상태로 전환하십시오. 전류 인출을 보면서 몇 초 동안 최대 몇 mA까지 전원을 공급 한 다음 약 0.3mA로 떨어짐을 알 수 있습니다 (여전히 절전 모드에있는 것보다 높음). 그러나 5V를 다시 적용하면 아무것도 없습니다 . 전원이 다시 공급되지만 FTDI 직렬을 통해 응답하지 않습니다.

3V에서 부팅 할 수없는 것이 누락 되었습니까? 이론적으로는 잘 작동해야합니다.

업데이트 : LED를 D13에 놓고 깜박임 스케치를 시도했습니다. 3V 또는 5V에서 시작할 때 잘 작동합니다. 그러나 펌웨어를 실행하고 3V에서 시작하면 LED가 크게 깜박이기 시작합니다. D13을 코드에 아무것도 설정하지 않았기 때문에 무엇이 원인인지 전혀 모릅니다. 그러나 그것은 부트 로더와 관련이있는 일을합니다.


1
BOD는 무엇으로 설정되어 있으며 시작시 현재 드로우는 무엇입니까?
Ignacio Vazquez-Abrams

2.7V로 설정되어 있습니다. 3V에있는 동안의 전류 소모는 처음 몇 초 동안 약 4mA입니다.
Adam Haile

ISP를 통해 부트 로더없이 시도해 보셨습니까?
Ignacio Vazquez-Abrams

아니요, 아직 시도하지 않았습니다. 이상하게도 깜박임 스케치를 실행하면 괜찮습니다
Adam Haile

2
배터리의 모든 센서 또는 부하를 포함하여 배선이 어떻게 연결되어 있는지 "정확하게"보여주는 다이어그램을 추가 할 수 있습니다. 어떤 종류의 코인 셀을 사용하고 있습니까? 리튬 이온 (충전식) 또는 알칼리성입니까?
Ron J.

답변:


6

그래서 .. 무슨 일이 있었는지 코드로 밝혀졌습니다. 코드의 맨 처음에 INT0이 낮을 때 인터럽트를 초기화하고 있음이 밝혀졌습니다. 문제는 3V 백업 전원으로 시작할 때 INT0이 5V 라인에 연결되어 있기 때문에 INT0이 항상 낮다는 것입니다 (절전 모드로 알고 있음). INT0이 낮고 인터럽트가 낮게 트리거되었으므로 일정한 인터럽트가 발생하여 프로그램의 나머지 부분을 실행할 수 없습니다. 전체 깨우기 모드에 들어간 후에 만 ​​인터럽트를 활성화하도록 전환했으며 이제는 정상적으로 작동합니다.


4

정확히 무슨 일이 일어나고 있고 제공된 정보의 양에 따라 이유를 결정할 수 없습니다. 그러나 설명 된 증상을 적어도 부분적으로 설명하는 하나 이상의 잠재적 인 문제가 있습니다.

전압 공급 장치를 선택하기 위해 다이오드를 사용하고 있다고 말했으며 하나의 공급 장치는 3V 배터리입니다. ~ 0.6V로 떨어지는 표준 다이오드를 사용하는 경우 MCU의 공급 전압은 ~ 2.4V에 불과합니다. 0.15-0.45 사이의 전압 강하를 가진 쇼트 키 다이오드를 사용하는 경우 공급 전압이 2.5V 정도로 낮을 수 있습니다. BOD 전압을 2.7V로 설정 했으므로 이론적으로 MCU는 배터리로 부팅되지 않습니다.

왜 5V에서 시작하고 3V로 떨어 뜨린 다음 다시 다시 올릴 수 있는지 잘 모르겠습니다. 코드에서 BOD를 비활성화했을 수 있습니다. 어쩌면… 왜 작동하는지 확실하지 않지만 작동하지 않을 수 있습니다.

전압이 전환 될 때 오실로스코프에서 어떻게 보이는지 확인하기 위해 5v 및 3.3v로 다이오드 스위치 회로를 설정했습니다. 3.3V에서 최대 5V로 스위칭 할 때 전압은 처음에 약간 진동합니다. MCU가 절전 모드에서 벗어날 때 일부 문제가 발생할 수 있습니다. VCC와 GND 사이에 캡을 씌우면 신호가 매우 원활 해졌습니다. 5v에서 3.3v로 전환 할 때 진동이없고 깨끗하게 떨어졌습니다.

이 정보에서 BOD 임계 값을 낮추거나 BOD를 끄고 VCC와 GND 사이에 디커플링 캡을 배치해야합니다. 또한 INT0에 풀다운 저항이 있는지 확인하고 슬립 및 웨이크 업에 대한 모든 고려 사항을 설명하는 다양한 슬립 모드를 설명하는 MCU 데이터 시트 섹션을 읽으십시오. 건배


2

문제는 부트 로더에 문제가 있다고 생각하지만 생각하는 방식은 아닙니다.

Arduino가 시작되면 직렬 호스트 찾기 또는 플래시에서 프로그램 데이터로드와 같은 여러 작업을 수행하는 부트 로더는 잠자는 Arduino보다 많은 에너지를 소비합니다.

Arduino가 시작되지 않는 이유는 부트 로더에 정확한 클럭 소스가 필요하기 때문에 3v를 적용하면 해당 클럭이 엉망이되어 안정적인 소스에 3.3v가 적용될 때까지 기다릴 수 있습니다.

데이터 시트를 보면 :

저작권 ATMEL

우리는 깨우는 동안 (부트 로더를 실행하는 동안) 전류가 약 2mA가 될 것이고 수면 전류는 약 0.8 마이크로 암페어가 될 것 입니다. 이로 인해 적절한 전류가 없으면 시동시 정전이 발생할 수 있습니다.

아마도 5V 전원으로 만 켜거나 더 높은 전류, 더 높은 전압의 배터리가 필요할 수 있습니다.


이것은 Blink가 작동하지 않는다는 것을 의미하지 않습니까? 또한 문제없이 코인 셀에서 몇 가지 Arduino를 실행하고 있습니다. 그들은 짧은 시간 동안 많은 전류를 공급할 수 있습니다.
Cybergibbons

-5

도구> 부트 로더 굽기로 이동하여 arduino를 다시 부팅하십시오.


1
이 작업을 수행하는 방법에 대한 자세한 내용을 추가해 주시겠습니까? 그다지 구체적이지 않습니다. Arduino에 무엇을 연결할 수 있습니까? 위험이 있습니까? 감사!
익명 펭귄

모든 것을 안전하게 분리 할 수는 있지만 위험은 없습니다.
DeveloperACE

다음은 부트 로더를 굽는 방법입니다 : arduino.stackexchange.com/a/474/37 . 귀하의 답변에 모든 방법이 설명되어 있지는 않습니다.
모자와 사람
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.