STM 32 입력 캡 처 모드
: TIM5_CH1 , , TIM5_CNT 。 , , , TIM5_CNT 。 , TIM5_CNT , , TIM5 , 。
TIMx_ARR TIMx_PSC, TIMx 。
/ 1:TIMx_CCMR1, , ;TIMx_CCMR1 2 , [7:0] / 1 , [15:8] / 2 , TIMx CCMR2 , CCMR2 3 4( 《STM32 》290 ,14.4.8 )。
TIM5 / 1, TIMx_CMMR1 [7:0] ( 8 )。
/ :TIMx_CCER;
DMA/ :TIMx_DIER, , 1 , CC1IE 1。
:TIMx_CR1, , ;
/ 1:TIMx_CCR1, ,TIMx_CNT , TIMx_CCR1 1 TIMx_CNT , ( , ) , 。
( TIM5 DIER )
우리 가 잡 아야 할 것 은 고 레벨 신호 의 펄스 폭 이기 때문에 첫 번 째 캡 처 는 상승 선 이 고 두 번 째 캡 처 시 하강 선 입 니 다. 캡 처 상승 선 을 잡 은 후에 캡 처 가장자리 가 하강 선 으로 설정 해 야 합 니 다. 또한 펄스 폭 이 비교적 길 면 타이머 가 넘 치고 넘 치 는 것 을 처리 해 야 합 니 다. 그렇지 않 으 면 결과 가 정확 하지 않 습 니 다.이 두 가지 일 은 모두 중단 되 어 있 기 때문에 캡 처 중단 과 업데이트 중단 을 시작 해 야 합 니 다.
PWM 입력 캡 처 모드 1. 개념 이해 PWM 입력 캡 처 모드 의 특례 1. 각 타이머 에 네 개의 입력 채널 IC1, IC2, IC3, IC4 가 있 고 IC1 IC2 1 조, IC3 IC4 1 조 가 있 으 며 파이프 와 레지스터 의 대응 관 계 를 설정 합 니 다. 2. 두 개의 TI 출력 은 두 개의 ICx 신호 3 을 비 추 었 습 니 다. 이 두 개의 ICx 신 호 는 각각 반대 되 는 극성 가장자리 에서 유효 합 니 다.두 개의 사 이 드 신호 중 하 나 는 트리거 신호 로 선택 되 었 고 모드 컨트롤 러 에서 리 셋 모드 5 로 설정 되 었 으 며 트리거 신호 가 왔 을 때 입력 신 호 를 촉발 하 는 캡 처 레지스터 로 설정 되 었 으 며 '하나의 PWM 주기 (즉, 연속 적 인 두 개의 상승 선 또는 하강 선)' 를 캡 처 했다. 그 는 TIM 시계 주 기 를 포함 하 는 개수 와 같다.(즉, 캡 처 레지스터 에서 캡 처 한 TIM 의 개수 n) 6. 같은 캡 처 채널 캡 처 트리거 신호 와 다음 의 반대 극성 사 이 드 신호 의 개수 m, 즉 (즉, 고 레벨 의 주기 또는 저 레벨 의 주기) 7. 이 를 통 해 PWM 의 시계 주기 와 차지 하 는 비례 Frequency = f (TIM 시계 주파수) / n Duty cycle = (고 레벨 계수 개수)/ n m 가 고전 평 계수 개수 라면 duty cycle = m / n; m 위 저 전 평 계수 개수 라면 duty cycle = (n - m)/ n 주: 계수 기 는 16 비트 이기 때문에 한 주기 에 최대 65535 개 를 계산 하기 때문에 측정 한 최소 주파수 = TIM 시계 주파수 / 65535 2, 프로 그래 밍 1, 프로그램 개요: TIM 3 를 PWM 입력 캡 처 로 선택 합 니 다. IC2 는 상승 선 으로 설정 하고 효과 적 인 트리거 입력 신호 로 설정 되 어 있 기 때문에 IC2 의 캡 처 레지스터 는 PWM 주기 로 캡 처 합 니 다.
01 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //
02 RCC_APP2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
03
04 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //GPIO
05 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
06 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
07 GPIO_Init(GPIOA, &GPIO_InitStructure);
08
09 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //NVIC
10 NVIC_InitStructure.NVIC_IRQChannePreemptionPriority = 0;
11 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
12 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
13 NVIC_Init(&NVIC_InitStructure);
14
15 TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; //
16 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //
17 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //
18 TIM_ICInitStructure.TIM_ICPSC_DIV1;// , , , , , , ,
19
20 TIM_ICInitStructure.TIM_ICFiter = 0x0; // , 0x0-0xf;
21 TIM_PWMIConfig(TIM3, &TIM_ICInitStructure); // TIM
22 TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);
23 TIM_SelectMasterSalveMode(TIM3, TIM_MasterSlaveMode_Enable);
24 TIM_Cmd(TIM3, ENABLE);
25 TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
26
27 void TIM3_IRQHandler(void)
28 {
29 TIM_CLearITPendingBit(TIM3, TIM_IT_CC3);
30 IC2Value = TIM_GetCapture2(TIM3);
31 if(IC2Value != 0)
32 {
33 DutyCyle = (TIM_GetCapture1(TIM3) * 100) / IC2Value;
34 Frequency = 72000000 / IC2Value;
35 }
36 else
37 {
38 DutyCycle = 0;
39 Frequency = 0;
40 }
41
42 }
43
44 ( ): PWM , TIM
45
46 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; // 0~FFFF
47 TIM_TimeBaseStructure.TIM_Prescaler = 5; // , 5+1 6
48 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //
49 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//
50 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//
51 ( ): TIM X1 X2。 APB 1 , 1, 2
ICInitStructre
01 typedef struct
02 {
03 u16 TIM_ICMode;
04 u16 TIM_Channel;
05 u16 TIM_ICPolarity;
06 u16 TIM_ICSelection;
07 u16 TIM_ICPrescaler;
08 u16 TIM_ICFilter;
09 } TIM_ICInitTypeDef;
10
11
12
13 TIM_ICMode
14 TIM_ICMode_ICAP TIM
15 TIM_ICMode_PWM1 TIM PWM
16
17 TIM_Channel
18 TIMChannel
19 TIM_Channel_1 TIM 1
20 TIM_Channel_2 TIM 2
21 TIM_Channel_3 TIM 3
22 TIM_Channel_4 TIM 4
23
24 TIM_ICPolarity
25 TIM_ICPolarity
26 TIM_ICPolarity_Rising TIM
27 TIM_ICPolarity_Falling TIM
28
29 TIM_ICSelection
30 TIM_ICSelection
31 TIM_ICSelection_DirectTI TIM 2,3 4 IC1 IC2 IC3 IC4
32 TIM_ICSelection_IndirectTI TIM 2,3 4 IC2 IC1 IC4 IC3
33 TIM_ICSelection_TRC TIM 2,3 3 TRC
34
35 TIM_ICPrescaler
36 TIM_ICPSC_DIV1 TIM
37 TIM_ICPS_DIV2 TIM 2
38 TIM_ICPS_DIV3 TIM 3
39 TIM_ICPS_DIV4 TIM 4
1, 회전:http://www.eeworld.com.cn/mcu/2015/1009/article_22791.html 2, 참조:http://blog.csdn.net/xiaoxiongli/article/details/49885675 http://blog.csdn.net/gtkknd/article/details/52846860 3. 작은 응용 프로그램:http://www.51hei.com/bbs/dpj-41774-1.html 4. 레지스터 의 원리 설명:http://blog.csdn.net/longintchar/article/details/43453393
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.