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

STM32 定时器移相任意角度和占空比,频率可调

由于使用了中断修改翻转的CCR值,对于频率超250K以上不太适用.

void Motor1_Init(Motor MotorChValue)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;NVIC_InitTypeDef NVIC_InitStructure;/*设置中断*/	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); /*时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	RCC_APB2PeriphClockCmd( MOTOR1_CLK | RCC_APB2Periph_AFIO, ENABLE);/*通道引脚*/  GPIO_InitStructure.GPIO_Pin = MOTOR1_A1_PIN | MOTOR1_B1_PIN | MOTOR1_A2_PIN | MOTOR1_B2_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(MOTOR1_A1_PORT, &GPIO_InitStructure);//初始化GPIOGPIO_InitStructure.GPIO_Pin = MOTOR1_A2_PIN | MOTOR1_B2_PIN; GPIO_Init(MOTOR1_A2_PORT, &GPIO_InitStructure);//初始化TIM3TIM_TimeBaseStructure.TIM_Period = 65535; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =72-1; //72分频,TIM3 = 1MhzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //1分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化TIM3 Channel2 PWM模式	 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_Pulse = MotorChValue.Ch1Value;TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM4 OC1TIM_OCInitStructure.TIM_Pulse = MotorChValue.Ch2Value;TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM4 OC2TIM_OCInitStructure.TIM_Pulse = MotorChValue.Ch3Value;TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM4 OC3TIM_OCInitStructure.TIM_Pulse = MotorChValue.Ch4Value;TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM4 OC4TIM_ITConfig(TIM3, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);TIM_SetCounter(TIM3,0);
//	TIM_Cmd(TIM3, DISABLE);  }void  ConfigTimer(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB1PeriphClockCmd(  RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(  RCC_APB2Periph_GPIOB,ENABLE);TIM_DeInit(TIM3);TIM_TimeBaseStructure.TIM_Prescaler = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;TIM_TimeBaseStructure.TIM_Period = (Fsys/2) / Fpwm;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Disable;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;TIM_OCInitStructure.TIM_Pulse = (((Fsys/2) / Fpwm) * PWM_DUTY) / 100;TIM_OC3Init(TIM3,&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_Pulse = (((Fsys/2) / Fpwm) * (100-PWM_DUTY)) / 100;TIM_OC4Init(TIM3,&TIM_OCInitStructure);GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);TIM_CtrlPWMOutputs(TIM3, ENABLE);TIM_Cmd(TIM3,ENABLE);
}

http://www.lryc.cn/news/411863.html

相关文章:

  • C++ 与其他编程语言区别_C++11/14/17新特性总结
  • 玩转云服务:Google Cloud谷歌云永久免费云服务器「白嫖」 指南
  • 用18讲必看:宇哥亲划重点内容+核心题总结
  • 什么是安全生产痕迹化管理?如何做到生产过程中全程痕迹化管理?
  • VIsual Studio:为同一解决方案下多个项目分别指定不同的编译器
  • Flat Ads资讯:Meta、Google、TikTok 7月产品政策速递
  • 嵌入式C++、ROS 、OpenCV、SLAM 算法和路径规划算法:自主导航的移动机器人流程设计(代码示例)
  • 数据安全堡垒:SQL Server数据库备份验证与测试恢复全攻略
  • 嵌入式人工智能(40-基于树莓派4B的水滴传感器和火焰传感器)
  • EF访问PostgreSql,如何判断jsonb类型的数组是否包含某个数值
  • Qt 实战(8)控件 | 8.1、QComboBox
  • 模拟算法概览
  • uniapp手写滚动选择器
  • 智慧医院临床检验管理系统源码(LIS),全套LIS系统源码交付,商业源码,自主版权,支持二次开发
  • 超市是怎样高效完成客流统计与客流分析
  • 进程地址空间,零基础最最最详解
  • 全面解锁:通过JSP和Ajax实现钉钉签到数据展示及部门筛选功能
  • LLM应用-prompt提示:让大模型总结生成PPT
  • 安全防护软件的必要性:从微软蓝屏事件谈起
  • 解开基于大模型的Text2SQL的神秘面纱
  • 对象转化成base64-再转回对象
  • vue运行或打包报错 “‘node --max-old-space-size=10240“‘ 不是内部或外部命令
  • 反爬虫限制:有哪些方法可以保护网络爬虫不被限制?
  • 『 Linux 』基于阻塞队列的生产者消费者模型
  • vite+typescript项目 报错:找不到模块“./*.vue”或其相应的类型声明——解决方案
  • 连锁企业组网的优化解决方案
  • 网络通信---UDP
  • 从零开始学习网络安全渗透测试之基础入门篇——(四)反弹SHELL不回显带外正反向连接防火墙出入站文件上传下载
  • Nginx(1)
  • C# 构建观测者模式(或者为订阅者模型)