S32K144EVB를 이용하여 ADC 테스트를 하고, FreeMASTER로 모니터링하는 실습을 진행해보도록 하겠습니다.
ADC의 결과값을 PWM 듀티로하여 LED로 출력하기
1. PWM 회로도 설정
FTM0 사용 : PTD15 -> Red LED
LED OUT Full-up
- PTD0 : Blue LED
- PTD15 : Red LED
- PTD16 : Green LED
2. PWM Driver 설정
기존 GPIO 설정된 것에서 FTM0를 추가하면 PTD15 에러가 발생합니다.
따라서 기존 GPIO의 PTD15 사용 하지 않은것으로 변경합니다.
3. flexTimer_PWM 선택
4. FTM initialization 설정
Default로 설정합니다.
- FTM0
- System Clock
- Edge Aligned PWM
- Software Trigger
- Immediate
5. FTM Configuration 설정
Default로 설정합니다.
- PWM Frequency : 1,000Hz
6. FTM Channels Configuration 설정
Default로 설정합니다.
- Channel 0
- Channel Polarity : Active low
- Duty Cycle : 0%
7. Update Code
8. PWM 초기 함수 호출
// Initialize FTM PWM
FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig);
9. PWM 초기 PWM 선정
- PWM Ch 1, 1KHz, 0% Duty 등 선정해줍니다.
- peripherals_flexTimer_pwm_1.c의 내용 참고 (아래 코드)
/* PWM configuration for flexTimer_pwm_1 */
ftm_pwm_param_t flexTimer_pwm_1_PwmConfig =
{
1U, /* Number of independent PWM channels */
0U, /* Number of combined PWM channels */
FTM_MODE_EDGE_ALIGNED_PWM, /* PWM mode */
0U, /* Dead time value */
FTM_DEADTIME_DIVID_BY_1, /* Dead time prescale */
1000U, /* PWM frequency */
flexTimer_pwm_1_IndependentChannelsConfig, /* The independent PWM channels configuration structure */
NULL, /* Combined PWM channels configuration structure */
&flexTimer_pwm_1_FaultConfig /* PWM fault configuration structure */
};
10. main.c파일에서 ADC Result 값을 PWM Duty로 설정
- ADC_Raw : 0 ~ 4096
- ADC_Voltage : 0 ~ 5.0V
- PWM_Raw : 0 ~ 32768(2^15)
- PWM_Percent : 0 ~ 100.0%
- 아래 코드를 참고
// PWM Duty Conversion from ADC
#define PWM_GAIN 8 // 32768/4096
uint16_t FAN_Raw = 0U; //0% =0, 100% = 2^15
float FAN_Duty = 0.0f; // 0 ~ 100.0%
for (;;)
{
/* Insert a small delay to make the blinking visible */
//delay(720000);
/* Toggle output value LED0 & LED1 */
//PINS_DRV_TogglePins(LED_PORT, 1 << LED_BLUE);
//PINS_DRV_TogglePins(LED_PORT, 1 << LED_BLUE);
// Configure ADC channel and software trigger a conversion
ADC_DRV_ConfigChan(INST_ADC_CONFIG_1, 0U, &adc_config_1_ChnConfig0);
// Wait for the conversion to be done
ADC_DRV_WaitConvDone(INST_ADC_CONFIG_1);
// Store the channel result into a local variable
ADC_DRV_GetChanResult(INST_ADC_CONFIG_1, 0U, &ADC_Raw);
// Convert PWM Duty from ADC, 0(0%) ==> 4096(100% = 2^15 = 32768)
FAN_Raw = ADC_Raw * PWM_GAIN;
FAN_Duty = (float)FAN_Raw / 32768 * 100; // 0 ~ 100%
// update PWM Duty From ADC Result: ch0,
FTM_DRV_UpdatePwmChannel(INST_FLEXTIMER_PWM_1, 0, FTM_PWM_UPDATE_IN_DUTY_CYCLE, FAN_Raw, 0U, true);
// Call polling function whenever target board is free to or should process FreeMASTER commands(in polling mode)
FMSTR_Poll();
}
11. 디버깅 결과
12. FreeMaster 설정하기
S32K144EVB를 이용하여 ADC 실습편에서 설정했기에 해당 내용을 참고하여 진행하시기 바랍니다.
https://kjy1010.tistory.com/80
S32K144EVB를 이용한 ADC 실습(1)
S32K144EVB를 이용하여 ADC 테스트를 하는 실습을 진행해보도록 하겠습니다. 추가로 실습환경 구축단계에서 설치했던 FreeMASTER 를 이용해 모니터링까지 진행하겠습니다. ADC 실습 포텐션 미터로 들어
kjy1010.tistory.com
https://kjy1010.tistory.com/81
S32K144EVB를 이용한 ADC 실습(2)
이전 포스팅에서 S32 Design Studio for S32 Platform에서 FreeMaster사용을 위한 Setting을 완료하였습니다. 이제 FreeMaster를 실행하여 실습을 위한 Setting을 진행하도록 하겠습니다. FreeMASTER 프로젝트 생성 및
kjy1010.tistory.com
12. Oscilocope 실행 결과
'Embedded > MCU' 카테고리의 다른 글
S32K144EVB를 이용한 SPI 실습(2) (0) | 2024.01.24 |
---|---|
S32K144EVB를 이용한 SPI 실습(1) (2) | 2024.01.24 |
S32K144EVB를 이용한 ADC 실습(2) (0) | 2024.01.24 |
S32K144EVB를 이용한 ADC 실습(1) (0) | 2024.01.24 |
S32K144EVB를 이용한 LED 실습 (0) | 2024.01.24 |