当前位置: 首页 > news >正文

网站备案 服务内容宁波seo行者seo09

网站备案 服务内容,宁波seo行者seo09,北京网页设计公司山东济南兴田德润在哪里,福州官网网站建设本文将深入解析基于STM32定时器输入捕获功能的方波相位差测量技术#xff0c;通过复位模式实现高精度相位检测。以下是完整的代码实现与详细原理分析。一、相位差测量原理相位差测量基于两个同频方波信号下降沿时间差计算。核心原理#xff1a;​复位模式​#xff1a;将TIM…本文将深入解析基于STM32定时器输入捕获功能的方波相位差测量技术通过复位模式实现高精度相位检测。以下是完整的代码实现与详细原理分析。一、相位差测量原理相位差测量基于两个同频方波信号下降沿时间差计算。核心原理​复位模式​将TIM1配置为从模式复位TIM_SlaveMode_Reset以参考信号下降沿复位计数器​双通道捕获​通道1PA8捕获周期值通道2PA9捕获相位时间差​相位计算​根据公式 相位差 (Δt / T) × 360° 转换时间差为角度值 关键优势​避免计数器溢出处理简化中断逻辑 二、代码解析与配置细节1. GPIO与时钟初始化 // 使能TIM1和GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA, ENABLE);// 配置PA8/PA9为浮空输入 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure);​关键点​浮空输入模式减少外部干扰50MHz高速响应信号边沿2. 定时器时基配置 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Prescaler psc; // 预分频值 TIM_TimeBaseStructure.TIM_Period arr; // 自动重装载值 TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInit(TIM1, TIM_TimeBaseStructure);​参数计算​定时器频率  72MHz / (psc 1)最大测量时间  (arr 1) × 定时周期3. 输入捕获通道配置 TIM_ICInitTypeDef TIM1_ICInitStructure; // 通道1配置参考信号 TIM1_ICInitStructure.TIM_Channel TIM_Channel_1; TIM1_ICInitStructure.TIM_ICPolarity TIM_ICPolarity_Falling; TIM1_ICInitStructure.TIM_ICSelection TIM_ICSelection_DirectTI; TIM1_ICInitStructure.TIM_ICPrescaler TIM_ICPSC_DIV8; // 8分频降中断频率 TIM1_ICInitStructure.TIM_ICFilter 0x0; // 无滤波 TIM_ICInit(TIM1, TIM1_ICInitStructure);// 通道2配置相位信号同通道1 TIM1_ICInitStructure.TIM_Channel TIM_Channel_2; TIM_ICInit(TIM1, TIM1_ICInitStructure);​设计要点​DIV8分频减少高频信号中断负载双通道相同触发边沿确保测量一致性4. 复位模式关键配置 TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1); // 选择TI1为触发源 TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset); // 复位模式​工作原理​ PA8下降沿 → 复位TIM1计数器 → PA9下降沿触发捕获 → CCR2值即为相位时间差5. 中断配置与使能 // 使能捕获中断 TIM_ITConfig(TIM1, TIM_IT_CC1 | TIM_IT_CC2, ENABLE);// 配置NVIC NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel TIM1_CC_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority 0; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure);三、中断处理与相位计算1. 中断服务程序 volatile uint32_t Cycle 0; // 信号周期 volatile uint32_t Phase 0; // 相位差计数值void TIM1_CC_IRQHandler(void){if(TIM_GetITStatus(TIM1, TIM_IT_CC1) SET) {Cycle TIM_GetCapture1(TIM1); // 获取周期值TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);}else if(TIM_GetITStatus(TIM1, TIM_IT_CC2) SET) {Phase TIM_GetCapture2(TIM1); // 获取相位差值TIM_ClearITPendingBit(TIM1, TIM_IT_CC2);} }2. 相位差智能计算 float getPhase(void) {if(Phase (Cycle 1)) { // 相位差在负半周期return -((float)Phase / Cycle) * 360.0f; } else { // 相位差在正半周期return ((float)(Cycle - Phase) / Cycle) * 360.0f;} }​算法创新点​​分段处理​区分[-180°, 0°]和[0°, 180°]区间​动态补偿​对超过半周期的相位差自动转换​浮点优化​提高角度分辨率四、性能优化与注意事项​抗干扰设计​增加输入滤波TIM_ICFilter值设为0x4~0xF施密特触发器启用GPIO内部上拉​精度提升策略​ // 示例72MHz时钟下配置 #define psc 71 // 1MHz计数频率72MHz/72 #define arr 9999 // 10ms最大周期1MHz×0.01s测量误差​ 0.036°​10kHz信号​中断优化技巧​分频器ICPSC动态调整DMA传输捕获值减少CPU干预 实测性能在STM32F103C8T6上可稳定测量0.1°相位差​10kHz方波 五、完整源码实现 void TIM1_CH1_Cap_Init(u32 arr,u16 psc) {NVIC_InitTypeDef NVIC_InitStructure;//TIM1时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE); //使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA , GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA , GPIO_InitStructure);TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定时器分频TIM_TimeBaseStructure.TIM_Prescaler psc; //向上计数模式TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; //自动重装载值TIM_TimeBaseStructure.TIM_Period arr; //时钟分频TIM_TimeBaseStructure.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInit(TIM1 , TIM_TimeBaseStructure);//初始化TIM1输入捕获参数//CC1S01 选择输入端 IC1映射到TI1上TIM_ICInitTypeDef TIM1_ICInitStructure;TIM1_ICInitStructure.TIM_Channel TIM_Channel_1 ; //下降沿捕获 TIM1_ICInitStructure.TIM_ICPolarity TIM_ICPolarity_Falling; // 下降沿触发//映射到TI1上 TIM1_ICInitStructure.TIM_ICSelection TIM_ICSelection_DirectTI; // 直连TI1PA8//配置输入分频,不分频 TIM1_ICInitStructure.TIM_ICPrescaler TIM_ICPSC_DIV8; // 8分频捕获降低中断频率//IC1F0000 配置输入滤波器 不滤波 TIM1_ICInitStructure.TIM_ICFilter 0x0; TIM_ICInit(TIM1 , TIM1_ICInitStructure);TIM1_ICInitStructure.TIM_Channel TIM_Channel_2 ; //下降沿捕获 TIM1_ICInitStructure.TIM_ICPolarity TIM_ICPolarity_Falling;//映射到TI1上 TIM1_ICInitStructure.TIM_ICSelection TIM_ICSelection_DirectTI; //配置输入分频,不分频 TIM1_ICInitStructure.TIM_ICPrescaler TIM_ICPSC_DIV8;//IC1F0000 配置输入滤波器 不滤波 TIM1_ICInitStructure.TIM_ICFilter 0x0; TIM_ICInit(TIM1 , TIM1_ICInitStructure);//双通道均设置为下降沿触发通过分频器DIV8减少中断次数//允许CC1 ,允许CC2IE捕获中断 TIM_ITConfig(TIM1 , TIM_IT_CC1 | TIM_IT_CC2, ENABLE);//TIM_TS_TI1FP1表示选择 TIMx_CH1 引脚的滤波后信号即经过输入滤波器和边沿检测后的信号作为触发源//输入捕获模式下用于自动复位计数器CNT以实现周期测量//PWMI 模式中结合通道 2TI1FP2同时测量信号的频率和占空比TIM_SelectInputTrigger(TIM1 , TIM_TS_TI1FP1 ); // 选择TI1PA8作为触发源TIM_SelectSlaveMode(TIM1 , TIM_SlaveMode_Reset); // 从模式TI1下降沿时计数器复位//PA8的下降沿会复位计数器TIM_SlaveMode_Reset为相位差测量提供基准NVIC_InitStructure.NVIC_IRQChannel TIM1_CC_IRQn ;//抢占优先级2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0;//子优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority 0; //IRQ通道使能 NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; //根据指定的参数初始化NVIC寄存器NVIC_Init(NVIC_InitStructure); //使能定时器5TIM_Cmd(TIM1 , DISABLE ); }int Cycle 0; //周期 int Phase 0; //相位 void TIM1_CC_IRQHandler(void) {if((TIM1-SR TIM_IT_CC1) ! RESET) // 捕获1发生捕获事件{ Cycle TIM1-CCR1; // 保存周期值计数器复位后的计数值TIM1-SR (uint16_t)~TIM_IT_CC1; }else if((TIM1-SR TIM_IT_CC2) ! RESET) // 捕获2发生捕获事件{ Phase TIM1-CCR2; // 保存相位差两次下降沿间隔TIM1-SR (uint16_t)~TIM_IT_CC2;} }float getPhase() {float phs 0.0;if(Phase (Cycle 1)) //进行分段求相位{phs -((float)(Phase) / (float)Cycle) * 360; // -180 ~ 0}else {phs ((float)(Cycle - Phase) / (float)Cycle) * 360;}return phs; }
http://www.zqtcl.cn/news/730919/

相关文章:

  • 建设银行网站维修图片昆明建设网站哪家好
  • 长春市做网站哪家好如何免费做网站网页
  • 时尚工作室网站源码百度seo现状
  • html怎么做查询网站吗前程无忧招聘网下载app官网
  • 找装修公司网站搜索引擎调词平台多少钱
  • 网站建设前台和后台班级网站建设需求
  • 学习教建网站个人做网站用什么技术
  • 企业型网站怎么做域名邮箱和域名网站
  • 建设银行激活网站站长工具seo综合查询 分析
  • 如何把自己做的网站发布到网上洛阳网新闻中心
  • 新手建网站教程id注册
  • 华为官方手表网站成都网站优化外包
  • 杭州企业排行榜网站优化包括对什么优化
  • 北京模板网站开发全包做网站网络
  • 甘肃建设项目审批权限网站wordpress插件移植
  • 网站开发沟通网站推广关键词工具
  • 河南微网站开发建程网的工程好拿钱吗
  • 怎么设立网站北京市网站备案
  • 网站容量空间一般要多大建设网上银行查询
  • 前端网站模板市场营销推广方案
  • 企业做网站收费做网页的
  • 网站内容创意网站开发后台php技术
  • 做下载网站用阿里云的什么产品goland 网站开发
  • 湖州网站建设策划学编程软件
  • 龙华网站建设专业定制企业外贸网店怎么开
  • 申请网站做自己的产品做头像一个字的网站
  • 外贸网站建设行业发展情况北京 企业网站开发
  • dedecms 倒计时 天数 网站首页创业众筹平台
  • 隆尧建设局网站wordpress彻底禁用google
  • 自己做网站需要什么技能比邻店网站开发