개요 | |
STM32 의 내장 ADC 활용하는 방법. 본 설명에서의 구체적인 상황.타겟칩 : STM32L4x6 페리페랄 : ADC 타겟보드 : D1P123R1 개발 IDE : KEIL MDK-ARM 혹은 SW4STM32 모두 가능. STM32CubeMX 기반하여 ADC 설정처리하고 IDE 에서 코딩한다. 참고 : STM32 는 모두 사용법이 비슷하니 위 세부 개발환경에 집착할 필요없음. ADC 활용 방법 기본.STM32CubeMX 에서 ADC 기능 설정 처리완료하고, 이를 프로젝트 코드에 적용시키고 이를 IDE(SW4STM32 , KEIL MDK-ARM 등 ) 에서 필요한 ADC 제어함수 작성하여 활용한다. | |
|
STM32CubeMX 에서 ADC 설정. | |
1. ADC 용으로 사용할 STM32 핀 지정.STM32 의 ADC 는 많은 핀들을 할당가능하긴 하나 동일핀을 다른 용도로도 설정가능하기 때문에 본격 회로 설계 전에 ADC 로 사용될 핀 설정이 가능한지 먼저 확인한 후 결정해야 한다. 본 예에서는 외부에서 STM32 에서 AD변환해야할 아날로그 신호가 3개가 있으며 연결된 MCU 핀은 아래 와 같은 상황을 예로 든다. STM32 PC3 : 아날로그 전압 입력 1. STM32 PC4 : 아날로그 전압 입력 2. STM32 PC5 : 아날로그 전압 입력 3. 2. ADC 입력단의 Differential, Single 지정.- 본예에서는 Single Ended 로 지정했다. 3. ADC 에서 사용하는 클럭 설정.4. ADC 의 비트 해상도 설정.- 본예에서는 12비트로 설정하고 있다. 상기 1, 2, 3, 4까지 모두 STM32CubeMX 에서 설정이 이뤄진다. 아래동영상에 전체 과정 모두 보이고 있다. 즉, 먼저 ADC입력으로 사용될 핀 지정부터 먼저 하고 ADC1 의 설정부에서 해당 핀의 입력 설정을 Single Ended 를 선택하고 있다.
위 동영상 59초 시점을 보면 4개의 핀 PC3, PC4, PC5 에 대응된 핀 네임이 각각 ADC1_IN4, ADC1_IN13, ADC1_IN14 로 대응되었다. 코드에서 ADC 채널 선택하는 경우에는 이 핀네임으로 접근하게 된다. | |
|
AD 변환 코드 작성. | ||
코드예. - AD변환 시험용으로 main 의 while 문내에 AD변환 구현예는 아래와 같다.
- AD 변환이 정상적으로 되고 있는지 확인하는 수단으로 입력한 아날로그 파형이 정상적으로 변환되고 있는지 확인하면된다. 본예에서는 외부에 아날로그 신호 발생기로 파형을 인가하고 KEIL MDK-ARM 의 디버그 모드에서 Logic Analyzer 로 AD 변환 결과값(상기 코드 상의 value_adc) 을 플로팅하여 입력한 신호 그대로 정상적으로 변환중인지 확인하다. 아래 동영상에서 디버거 ST LINK V2 연결된 상태에서, KEIL uVision 디버그 모드에서 변수 value_adc 의 값을 로직애널라이저로 관찰하는 과정을 보인다. | ||
|
본 글 포함 상위 정리 장소.
1. https://igotit.tistory.com/244 의 STM32 |
첫등록 : 2018년 12월 10일.
최종수정 :
본 글 단축주소 : https://igotit.tistory.com/1964
'임베디드.일렉트로닉스 > STM32' 카테고리의 다른 글
STM32. L4x6. Voltage Reference Buffer (VREFBUF) (0) | 2018.12.10 |
---|---|
STM32. DAC 활용 방법 (0) | 2018.12.10 |
STM32. ADC 활용 방법 (8) | 2018.12.10 |
STM32L4x6. USART (0) | 2018.12.10 |
STM32. L4x6. DAC (Digital to Analog Converter) (0) | 2018.12.08 |
STM32. L4x6. ADC ( Analog to Digital Converter ) (0) | 2018.12.08 |
질문이 있습니다만
채널을 4 , 13, 14 를 쓰셨는데
세개의 채널이 각각 표현되나요 이 코드에서는??
답글
네 KEIL 의 로직 애널라이저 기능이 최대 4개 채널까지는 표현가능한데.. 채널수 1개 일때는 무난하게 표현되었던 것이 채널수 많고 샘플링 속도가 빠른 경우엔 비정상적으로 표현될거예요..
글 잘 보았습니다. 궁금한게 있는데요.
ADC핀을 3개 사용하셨는데요. 작성된 코드는 핀3 개를 각각 개별로 볼 수 있는 방법이 있나요?
감사합니다.
답글
ADC 는 실제 1개의 아날로그 입력을 받고 GPIO 와의 연결부에는 MUX가 있는 상태입니다. (상세 : https://igotit.tistory.com/1961 의 Channel 입력단 상세 부분 )
MUX 설정하여 채널을 선택하는 개념이므로, 코드에서 원하는 채널 1개 선택된 상태에서 AD변환한 이후 그 다음 다른 채널 선택하고 AD변환 .. 이런 식으로 원하는 채널을 여러 개 변환할 수 있습니다.
아 구조가 그랬었군요! 알려주셔서 정말 감사합니다.
답글
안녕하세요 글 잘 보았습니다. 궁금한것이 있어 댓글 달아요.
저는 전류센서값을 adc변환하려고 합니다. S1, S2 출력선을 가지고 양단 전압으로 전류량을 알수있는데요.
이 출력값을 adc로 받을때, 센서의 두개의 출력선을 ADCx의 채널1,채널2에 각각 연결해주고 값을 보게 되는것인가요??
답글
adc 변환시 채널 1개의 의미는 전압 신호 1개를 의미합니다. 전류센서의 출력전압은 1개의 신호이므로 채널 1개만 할당하면 됩니다.
예1 .
S1, S2 가 차동 전압 출력이라면 adc 앞단에 있는 mux 에서도 차동으로 설정하면 됩니다.
S1 이 차동출력전압 (+) 이고 S2 가 (-) 라면
https://igotit.tistory.com/1961
의 채널 입력단 상세 그림에서 ADC123_INP1 을 S1 , ADC123_INN1 을 S2 에 연결하고 Channel Selection 에서 ADC 의 VINP 에 ADC123_INP1 , VINN 에 ADC123_INN1 이 연결되게 합니다.
예2 .
S1, S2 가 싱글엔디드 여서 S1 이 + 이고, S2 가 GND 라면 adc 앞단에 있는 mux 에서도 싱글엔디드로 설정합니다.
https://igotit.tistory.com/1961
의 채널 입력단 상세 그림에서 ADC123_INP1 을 S1 에만 연결하면 됩니다. Channel Selection 에서 ADC 의 VINP 에 ADC123_INP1 , VINN 에 VREF-가 연결되게 합니다. STM 주변회로 구성은 통상 VREF- 핀을 GND 와 연결해뒀을 겁니다.
differential/single-ended 결선에 대해 많이 헷갈렸는데 덕분에 궁금증이 해소된것 같습니다. 감사합니다ㅜㅜ