




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*功能名称IM3_PWM_Init(u16 arr,u16 psc) 描述 TIM3产生四路PWM*/void TIM3_PWM_Init(u16 arr,u16 psc) GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); /使能GPIO外设和AFIO复用功能模块时钟使能 GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); /Timer3全映射 GPIOC- 6,7,8,9 /用于TIM3的CH2输出的PWM通过该LED显示 /设置该引脚为复用输出功能,输出TIM3 CH1 CH2 CH3 CH4 的PWM脉冲波形 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; /初始化GPIO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);/默认电机使能端状态:不使能 TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值 这里是72分频,那么时钟频率就是1M TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; /选择定时器模式:TIM脉冲宽度调制模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0; /设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /输出极性:TIM输出比较极性高 TIM_OC1Init(TIM3, &TIM_OCInitStructure); /根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); /使能TIMx在CCR1上的预装载寄存器 TIM_OC2Init(TIM3, &TIM_OCInitStructure); /根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); /使能TIMx在CCR2上的预装载寄存器 TIM_OC3Init(TIM3, &TIM_OCInitStructure); /根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); /使能TIMx在CCR3上的预装载寄存器 TIM_OC4Init(TIM3, &TIM_OCInitStructure); /根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); /使能TIMx在CCR4上的预装载寄存器 TIM_ARRPreloadConfig(TIM3, ENABLE); /使能TIMx在ARR上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); /使能TIMx外设 /*功能名称TIM4_PWMINPUT_INIT(u16 arr,u16 psc) 描述 PWM输入初始化*/void TIM4_PWMINPUT_INIT(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /TIM的初始化结构体 NVIC_InitTypeDef NVIC_InitStructure; /中断配置 TIM_ICInitTypeDef TIM4_ICInitStructure; /TIM4 PWM配置结构体 GPIO_InitTypeDef GPIO_InitStructure; /IO口配置结构体 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); /Open TIM4 clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /open gpioB clock GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; /GPIO 7 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 /*配置中断优先级*/ NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM4_ICInitStructure.TIM_ICFilter = 0x3; /Filter:过滤 TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure); /PWM输入配置 TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); /选择有效输入端 TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); /配置为主从复位模式 TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);/启动定时器的被动触发 TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_Update, ENABLE); /中断配置 TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位 TIM_Cmd(TIM4, ENABLE); void TIM4_IRQHandler(void) if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)/捕获1发生捕获事件 duty_TIM4 = TIM_GetCapture1(TIM4); /采集占空比 if (TIM_GetCapture2(TIM4)600) period_TIM4 = TIM_GetCapture2(TIM4);/简单的处理 CollectFlag_TIM4 = 0; TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位/*功能名称TIM1_PWMINPUT_INIT(u16 arr,u16 psc) 描述 PWM输入初始化*/ void TIM1_PWMINPUT_INIT(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /TIM的初始化结构体 NVIC_InitTypeDef NVIC_InitStructure; /中断配置 TIM_ICInitTypeDef TIM1_ICInitStructure; /PWM配置结构体 GPIO_InitTypeDef GPIO_InitStructure; /IO口配置结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); /Open TIM1 clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); /open gpioE clock GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); /Timer1完全重映射 TIM1_CH2-PE11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; /GPIO 11 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 /*配置中断优先级*/ NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; /TIM1捕获中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM1_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM1_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM1_ICInitStructure.TIM_ICFilter = 0x03; /Filter:过滤 TIM_PWMIConfig(TIM1, &TIM1_ICInitStructure); /PWM输入配置 TIM_SelectInputTrigger(TIM1, TIM_TS_TI2FP2); /选择有效输入端 TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset); /配置为主从复位模式 TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);/启动定时器的被动触发 / TIM_ITConfig(TIM1, TIM_IT_CC2|TIM_IT_Update, ENABLE); /中断配置 TIM_ITConfig(TIM1, TIM_IT_CC2, ENABLE); /通道2 捕获中断打开 /TIM_ClearITPendingBit(TIM1, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位 TIM_Cmd(TIM1, ENABLE); void TIM1_CC_IRQHandler(void) if (TIM_GetITStatus(TIM1, TIM_IT_CC2) != RESET)/捕获1发生捕获事件 duty_TIM1 = TIM_GetCapture1(TIM1); /采集占空比 if (TIM_GetCapture2(TIM1)600) period_TIM1 = TIM_GetCapture2(TIM1); CollectFlag_TIM1 = 0; TIM_ClearITPendingBit(TIM1, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位 /*功能名称TIM2_PWMINPUT_INIT(u16 arr,u16 psc) 描述 PWM输入初始化*/void TIM2_PWMINPUT_INIT(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /TIM的初始化结构体 NVIC_InitTypeDef NVIC_InitStructure; /中断配置 TIM_ICInitTypeDef TIM2_ICInitStructure; /TIM2 PWM配置结构体 GPIO_InitTypeDef GPIO_InitStructure; /IO口配置结构体 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /Open TIM2 clock / RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /open gpioB clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); /使能GPIO外设和AFIO复用功能模块时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); /关闭JTAG GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE); /Timer2完全重映射 TIM2_CH2-PB3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; /GPIO 3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /浮空输入 上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 /*配置中断优先级*/ NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM2_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM2_ICInitStructure.TIM_ICFilter = 0x3; /Filter:过滤 TIM_PWMIConfig(TIM2, &TIM2_ICInitStructure); /PWM输入配置 TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2); /选择有效输入端 TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); /配置为主从复位模式 TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);/启动定时器的被动触发 TIM_ITConfig(TIM2, TIM_IT_CC2|TIM_IT_Update, ENABLE); /中断配置 TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位 TIM_Cmd(TIM2, ENABLE); void TIM2_IRQHandler(void) if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)/捕获1发生捕获事件 duty_TIM2 = TIM_GetCapture1(TIM2); /采集占空比 if (TIM_GetCapture2(TIM2)600) period_TIM2 = TIM_GetCapture2(TIM2); CollectFlag_TIM2 = 0; TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位 /*功能名称TIM5_PWMINPUT_INIT(u16 arr,u16 psc) 描述 PWM输入初始化*/void TIM5_PWMINPUT_INIT(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /TIM的初始化结构体 NVIC_InitTypeDef NVIC_InitStructure; /中断配置 TIM_ICInitTypeDef TIM5_ICInitStructure; /TIM4 PWM配置结构体 GPIO_InitTypeDef GPIO_InitStructure; /IO口配置结构体 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); /Open TIM4 clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /open gpioB clock GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; /GPIO 1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /浮空输入 上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式 TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 /*配置中断优先级*/ NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM5_ICInitStructure.TIM_ICFilter = 0x3; /Filter:过滤 TIM_PWMIConfig(TIM5, &TIM5_ICInitStructure); /PWM输入配置 TIM_SelectInputTrigger(TIM5, TIM_TS_TI2FP2); /选择有效输入端 TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset); /配置为主从复位模式 TIM_SelectMasterSlaveMode(TIM5, TIM_MasterSlaveMode_Enable);/启动定时器的被动触发 TIM_ITConfig(TIM5, TIM_IT_CC2|TIM_IT_Update, ENABLE); /中断配置 TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位 TIM_Cmd(TIM5, ENABLE); void TIM5_IRQHandler(void) if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)/捕获1发生捕获事件 duty_TIM5 = TIM_GetCapture1(TIM5); /采集占空比 if (TIM_GetCapture2(TIM5)600) period_TIM5 = TIM_GetCapture2(TIM5); CollectFlag_TIM5 = 0; TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位PID部分typedef struct int setpoint;/设定目标 int sum_error;/误差累计 float proportion ;/比例常数 float integral ;/积分常数 float derivative;/微分常数 int last_error;/e-1 int prev_error;/e-2PIDtypedef;float Kp = 0.32 ; /比例常数float Ti = 0.09 ; /积分时间常数float Td = 0.0028 ; /微分时间常数#define T 0.02 /采样周期#define Ki Kp*(T/Ti) / Kp Ki Kd 三个主要参数#define Kd Kp*(Td/T)PID.Hvoid PIDperiodinit(u16 arr,u16 psc); /PID 采样定时器设定void incPIDinit(void); /初始化,参数清零清零int incPIDcalc(PIDtypedef*PIDx,u16 nextpoint); /PID计算void PID_setpoint(PIDtypedef*PIDx,u16 setvalue); /设定 PID预期值void PID_set(float pp,float ii,float dd);/设定PID kp ki kd三个参数void set_speed(float W1,float W2,float W3,float W4);/设定四个电机的目标转速int incPIDcalc(PIDtypede
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市绿化规划实施方案
- 地球物理实验报告管理制度
- 慢性病预防与控制表
- 企业人力资源管理人才招聘及储备手册
- 初中音乐教学《古筝独奏》教案设计
- 人羊膜间充质干细胞移植治疗损伤的多维度实验探究与机制解析
- 汽车租赁公司租赁合同模板5篇
- 蒙古煤矿施工方案
- 节点控制施工方案
- 涂料桥梁施工方案
- 激光SLAM中的动态物体剔除算法研究及其性能评估
- 膝关节鹅足炎诊断
- 超声在肾结石中的诊断
- 基层应急管理培训课件
- 2024年司法协理员招聘考试题库及答案
- DB61-T 5061-2023 民用建筑有线电视系统工程技术规程
- 质量保障方案文案(3篇)
- 产科分娩风险管理制度
- DB61T-建设项目使用草地现状调查技术规范
- 安徽省房屋建筑和市政基础设施工程施工应用BIM技术招标投标评标办法实施导则(2025版)
- 急诊仪器设备管理制度
评论
0/150
提交评论