BASIC4MCU | 질문게시판 | stm32f103 adc polling방식 질문드립니다.
페이지 정보
작성자 uln2 작성일2019-01-04 15:48 조회17,698회 댓글8건첨부파일
본문
stm32f103을 cubemx를 이용하여 테스트 해보고 있습니다.
adc polling방식을 공부하면서 기존에 가지고 있던 eth-01dv 온습도 센서에서 온도 부분만 발췌하여 테스트를 진행하였는데
printf("Vrefint = %d\r\n", adc_val); //adc값 출력 확인
float vref = (adc_val/4069)*3.3;
printf("Vrefin = %.3f \r\n",vref); // 이쪽에서 출력x
float temp = -66.875+ 218.5 * (vref/5);
printf("Vref = %.3fC\r\n", temp); // vref가 0으로 출력되기 때문에 -66.875만 나오는 것으로 보임
iar로 prinf로 데이터 값을 확인하였는데 -60의 값이 나오길래 문제점을 찾고 있었는데 정확하게 어떤점이 문제인지 잘 이해가 되지 않아서 글을 올리게 되었습니다.
4ch polling방식이나 인터럽트 방식으로 사용할 경우 for문을 이용하여 adc확장을 하면 될까요??
댓글 8
조회수 17,698master님의 댓글
master 작성일
vref가 0이라면 센서 연결이 되지 않았던지, ADC로 값을 읽지 못하는 것이겠죠
센서 전압은 몇V인가요?
uln2님의 댓글
uln2
센서 전압은 5v 전압을 인가하고 있습니다. adc 온도 출력 쪽에 입김을 불었을 경우 전압 값 변화를 감지해서 센서 문제는 아닌것 같다고 생각하고 실험하고 있습니다.
master님의 댓글
master
입김을 불었을 때 센서 출력 전압이 변한다는 것이죠?
CUBEMX 예제로 구동 해봤나요?
uln2님의 댓글
uln2
넵 cubemx로 설정해서 해보앗구여 float vref = (adc_val/4069)*3.3; 이 부분의 값을 변화해보니 값이 다르게 나오는 것을 확인하였습니다. 제가 알기로는 stm32f103은 adc 12bit를 사용하기 때문에 다음과 같이 계산하였습니다. 클락 설정 부분에서 혹시 잘못된 부분이 있는지 확인하고 있습니다.
추가적으로 multi dma모드로 설정하였으며,
HAL_ADC_Start_DMA(&hadc1, &adcvalue[0],3);
printf("adc %d %d %d \r\n",adcvalue[0],adcvalue[1],adcvalue[2]);
출력 값을 확인해보았습니다. 값이 adc[0]=163318255 adc[1]=2628, adc[2]=0; 이렇게 뜨고 있으며, 0번은 온도, 1번은 습도로 연결하였습니다.
master님의 댓글
master
온습도 센서대신 가변저항을 연결해서 ADC를 공부하세요
ADC 입력이 잘된 후에 온습도 센서로 바꾸면 됩니다.
1채널 먼저 구동하고
1채널이 잘되면 채널을 늘리세요
멀티채널 예제를 그대로 동작시키면 멀티채널 입력이 정상적으로 되겠죠
잘 되는지 확인 한 후에 온습도센서를 연결하세요
uln2님의 댓글
uln2
넵 센서로 실험해보겠습니다. 연산중에서 vref= (adc_val/4096)*3.3을 (adc_val * 3.3)/4096으로 하니까 원하는 값이 나오는것을 확인하였습니다. 도움 주셔서 감사합니다.
master님의 댓글
master
자동 형변환에 대해서 공부해보세요
정수*실수 은 실수연산
정수/실수 은 실수연산
자동형변환을 잘 모르면 괄호및 강제 형변환을 해주면 됩니다.
vref= ((float)adc_val/4096.0)*3.3
uln2님의 댓글
uln2
넵 갑사합니다. ^^