本帖最后由 台多牛 于 2016-10-10 13:26 编辑 有偿请解决STM8输入捕获测量PWM脉宽问题 问题是:测量20Hz—450Hz的频率不准确。 用中断方式或者查询方式都得不到正确的结果。 实验硬件:STM8S003F3P6, TIM2—CH1(PC5)输出PWM(频率:20Hz—450Hz),(频率用示波器测量 正确!) TIM1——CH3(PC3)输入捕获通道,测量TIM2—CH1输出的频率(如图)。 硬件 有偿100元解决问题。测试成功立即转账 微信红包 或者支付宝。 下面是测试代码(有问题的): (在IAR下ST-LINK V2 仿真 结果) int main(void) { /*设置内部高速时钟16M为主时钟*/ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_32, 25000); TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 2500, TIM2_OCPOLARITY_HIGH); TIM2_Cmd(ENABLE); GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT); //初始化TIM1输入捕捉通道3 TIM1_DeInit(); //16分频 TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, 20000, 0); TIM1_ICInit(TIM1_CHANNEL_3,TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV4, 0x00); IM1_ClearFlag(TIM1_FLAG_CC3); TIM1_ITConfig( TIM1_IT_CC3 , ENABLE); //去掉是查询方式,否则是中断方式 //TIM1_ITConfig( TIM1_IT_UPDATE, ENABLE); TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE);//使能输入捕获通道3 TIM1_Cmd(ENABLE); //使能定时器 __enable_interrupt();//启动全局中断 while(1) { } // main loop } 中断部分: #pragma vector=0xD __interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) { F01++ ; TIM1_ClearITPendingBit(TIM1_IT_UPDATE); } #pragma vector=0xE __interrupt void TIM1_CAP_COM_IRQHandler(void) { if((TIM1_GetITStatus(TIM1_FLAG_CC3)) != RESET) { switch(temp) { case 0: ICValue1=TIM1_GetCapture3(); TIM1_ITConfig( TIM1_IT_UPDATE, ENABLE); temp=1; break; case 1: ICValue2=TIM1_GetCapture3(); TIM1_ITConfig( TIM1_IT_UPDATE, DISABLE); temp=2; break; default: TIM1_CCxCmd(TIM1_CHANNEL_3, DISABLE); TIM1_ITConfig(TIM1_IT_CC3, DISABLE); temp=3; break; } TIM1_ClearITPendingBit(TIM1_IT_CC3); TIM1_ClearFlag(TIM1_FLAG_CC3); } if(temp==2) { Period = 20000*(u32)F01 + ICValue2-ICValue1; Hz_V=4000000/Period ; T_V=10000/Hz_V; F01=0; } TIM1_ClearITPendingBit(TIM1_IT_UPDATE); } |
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
如何使用ST官网例程_LIN总线通讯_STM8AF
STM8 LIN
IAR代码编辑太费劲了,想问一下有没有好的方法,试了VScode但是头文件老是报错,调了很久也没调好,想换个方法了。
想问一下各位大佬,IAR下载调试代码时出现 warning: is an illegal data sample expression IAR是什么意思啊?
STM8S标准库TIM1编码器功能不计数,请大师帮我看看
分频系数改小后 靠近 靠近标准值! 加我微信 100元红包给你!
别客气,在频率测量方面我的感觉是不如单片机好用,因为单片机是直接对脉冲计数,只要电路的响应速度达得到且脉冲波形符合要求,一般就不会出大问题;而ARM 等多是采用中断或查询来计数,这样就需要中断处理的速度要足够的快,否则中断还没响应处理完,后面的中断又到了,就造成计数不准。ARM的计数功能基本上是服务于PWM调节等要求,对纯的脉冲计数尤其是高频的会差一些,这与其设计结构及服务方向相关。
虽然不多,别嫌弃,希望领取
没费什么事,多谢你的诚意。
1)低频,分频数接近1时,应该偏差接近1或0
2)频率高时,实际值约等于=测量值*分频数+偏差(<分频值)
3)注意测量值不要出现溢出,否则需加以补偿。
谢谢!
现在正常运行了,代码是正确的。 就是你说的 “主要是分频系数大将捕捉的脉冲被滤除了。”