DAC는 ADC의 반대로, Digital값을 Analog 값으로 변환하는 모듈입니다.
STM32F103에는 12bit DAC 모듈을 가지고 있습니다.
0부터 Vref+ 에 인가된 전압을 4096(2^12)개로 쪼개어 출력으로 보냅니다.
DACoutput: DAC 출력
VREF: VREF+ 핀에 인가된 전압
DOR: Data Output Register로 여기에 0~4095값이 쓰여짐
Vref+ 가 3.3V일경우
3.3*1 / 4095 = 0.000806 이 됩니다.
즉 Digital Value 1당 0.000806V가 출력으로 나가게 됩니다.
CubeMX 설정
여기서 Output Buffer는 DAC 출력핀의 버퍼를 두어 출력 임피던스를 줄이는 역할을 합니다.
* DAC Output Buffer를 Enable로 했을 경우, 200mV 이하로 내려가지 않는 이슈가 있습니다.
community.st.com/s/question/0D50X00009XkXzE/minimum-dac-output-voltage-on-stm32f30x
HAL
HAL 드라이버에서 초기화를 제외한 DAC에 필요한 함수는 아래와 같습니다.
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel);
// DAC Output Enable 함수
// hdac: dac 인스턴스
// Channel: DAC_CHANNEL_1 or DAC_CHANNEL_2
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef *hdac, uint32_t Channel);
// DAC Output Disable 함수
// hadc: dac 인스턴스
// Channel: DAC_CHANNEL_1 or DAC_CHANNEL_2
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);
// DAC Value 설정 함수
// hadc: dac 인스턴스
// Channel: DAC_CHANNEL_1 or DAC_CHANNEL_2
// Alignment: DAC_ALIGN_12B_R or DAC_ALIGN_12B_L or DAC_ALIGN_8B_R
// data: 0 ~ 4095 값
사용법
목표: DAC 채널 1의 출력을 2V로 설정하고 싶다.
DOR = 2V * 4095 / 3.3V = 2481.82 ≒ 2482
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2482);
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
반응형
'MCU > STM32:HAL' 카테고리의 다른 글
[HAL][STM32F]USART와 Queue (2) | 2021.03.24 |
---|---|
[STM32F]FSMC와 LCD (0) | 2021.02.28 |
[STM32F]FSMC로 LCD(SSD1963) 제어하기 (2) | 2021.02.07 |
[STM32F][HAL] USART Interrupt (0) | 2020.12.23 |
[STM32F][HAL] OUTPUT COMPARE 사용하기 (0) | 2020.06.01 |
[STM32F][HAL] USB CDC (Virtual Port Com) 사용하기 (1) | 2020.05.28 |
[STM32F][HAL] HAL_Delay (0) | 2020.05.21 |
[STM32F][HAL] ADC - ADC Calibration (4) | 2020.05.17 |