dsp通用stm32高级定时器pwm与比较单元产生pwm波的区别,考试急求

君,已阅读到文档的结尾了呢~~
介绍了TI公司的TMS320F2812..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
PWM波的产生
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口查看: 1110|回复: 1
STM32F407ZG 用TIM14CH1和TIM3CH1两个定时器两个通道产生的PWM波 驱动两个舵机 只有一个工作 另一个不工作
主题帖子精华
初级会员, 积分 65, 距离下一级还需 135 积分
在线时间0 小时
本人想利用STM32F407ZG产生两路PWM波对两个舵机进行控制 在原子的实验9 PWM波输出实验改的 由于TIM14只有CH1通道 所以又启用了一个TIM3CH1通道 但是发现只有TIM14CH1对应引脚的舵机工作 同样的舵机在TIM3CH1对应的引脚下不工作 所以不是舵机的问题,而TIM3还可以产生PWM波进行灯的控制 所以也不是定时器的问题;我的tim3ch1完全按照TIM14CH1配置改的 ,请大家帮我看看是不是配置不对,难道通用定时器的配置还不一样吗?TIM14CH1对应的引脚是PF9 TIM3CH1对应的引脚是PC6 严格按照数据手册上查的 。跪谢大神,急求!!!
下面是PWM.C的代码
#include "pwm.h"
#include "led.h"
#include "usart.h"
////////////////////////////////////////////////////////////////////////////////// &
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//定时器PWM 驱动代码
//正点原子@ALIENTEK
//技术论坛:
//创建日期:
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//TIM14 PWM部分初始化&
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM14_PWM_Init(u32 arr,u32 psc)
//此部分需手动修改IO口设置
GPIO_InitTypeDef GPIO_InitS
TIM_TimeBaseInitTypeDef &TIM_TimeBaseS
TIM_OCInitTypeDef &TIM_OCInitS
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); & //TIM14时钟使能 & &
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
//使能PORTF时钟
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GPIOF9复用为定时器14
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; & & & & & //GPIOF9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; & & & &//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; & & &//推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; & & & &//上拉
GPIO_Init(GPIOF,&GPIO_InitStructure); & & & & & & &//初始化PF9
TIM_TimeBaseStructure.TIM_Prescaler= &//定时器分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period= & //自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;&
TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14
//初始化TIM14 Channel1 PWM模式 &
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
& TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_L //输出极性:TIM输出比较极性低
TIM_OC1Init(TIM14, &TIM_OCInitStructure); &//根据T指定的参数初始化外设TIM1 4OC1
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); &//使能TIM14在CCR1上的预装载寄存器
& TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE使能&
TIM_Cmd(TIM14, ENABLE); &//使能TIM14
void TIM3_PWM_Init(u32 arr,u32 psc)
//此部分需手动修改IO口设置
GPIO_InitTypeDef GPIO_InitS
TIM_TimeBaseInitTypeDef &TIM_TimeBaseS
TIM_OCInitTypeDef &TIM_OCInitS
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); & //TIM3时钟使能 & &
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
//使能PORTF时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; & & & & & //GPIOC6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; & & & &//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; & & &//推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; & & & &//上拉
GPIO_Init(GPIOC,&GPIO_InitStructure); & & & & & & &//初始化PC6
GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM3); //GPIOC6复用为定时器3
TIM_TimeBaseStructure.TIM_Prescaler= &//定时器分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period= & //自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision=0;&
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//初始化定时器3
//初始化TIM3 Channel1 PWM模式 &
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
& TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H //输出极性:TIM输出比较极性低
TIM_OC1Init(TIM3, &TIM_OCInitStructure); &//根据T指定的参数初始化外设TIM3OC1
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); &//使能TIM3在CCR1上的预装载寄存器
& & TIM_ARRPreloadConfig(TIM3,ENABLE);//ARPE使能&
TIM_Cmd(TIM3, ENABLE); &//使能TIM3
下面是main.c代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"
//ALIENTEK 探索者STM32F407开发板 实验9
//PWM输出实验-库函数版本
//技术支持:
//淘宝店铺: &
//广州市星翼电子科技有限公司 &
//作者:正点原子 @ALIENTEK
int main(void)
//u8 dir=1;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); &//初始化延时函数
uart_init(115200);//初始化串口波特率为115200
& TIM14_PWM_Init(-1); //频率为50hz & &&
TIM3_PWM_Init(-1);
& &while(1)
TIM_SetCompare1(TIM14,500);
delay_ms(1500);
TIM_SetCompare1(TIM14,1000);
delay_ms(1500);
TIM_SetCompare1(TIM14,1500);
delay_ms(1500);
TIM_SetCompare1(TIM14,2000);
delay_ms(1500);
TIM_SetCompare1(TIM14,2500);
delay_ms(1500);
while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
TIM_SetCompare1(TIM3,500);
delay_ms(1500);
TIM_SetCompare1(TIM3,1000);
delay_ms(1500);
TIM_SetCompare1(TIM3,1500);
delay_ms(1500);
TIM_SetCompare1(TIM3,2000);
delay_ms(1500);
TIM_SetCompare1(TIM3,2500);
delay_ms(1500);
pwm.h的也整上来吧
#ifndef _TIMER_H
#define _TIMER_H
#include "sys.h"
////////////////////////////////////////////////////////////////////////////////// &
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//定时器 驱动代码
//正点原子@ALIENTEK
//技术论坛:
//创建日期:
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
void TIM14_PWM_Init(u32 arr,u32 psc);
void TIM3_PWM_Init(u32 arr,u32 psc);
主题帖子精华
中级会员, 积分 263, 距离下一级还需 237 积分
在线时间22 小时
解决了没有 ,LZ,我的TIM3CH3好像也不能工作!!!
Powered byDSP事件管理器学习
一.EV(Event Mangner)事件管理器的功能
专门为控制系统(运动控制和电动机控制)设计的,有多个可编程的定时器,每个定时器又具备多种中断,很容易产生控制信号.
二.基本的组成
&& 一个DSP中有两件EV模块:EVA和EVB
&& 每个事件管理模块的组成
&& 1.两个通用定时器(GP General
Purpose) TIMER1& T1PWM/T1CMP
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&TIMER2& T2PWM/TWCMP
作用:只看到了可做为ADC模块的AD转换启动信号,应该还有其它的作用
DSP书上介绍说:获得控制系统采样周期
&&&&&&&&&&&&&&&&&
为正交编码器脉冲电路(QEP)和捕获单元的操作提供一个时间基准
&&&&&&&&&&&&&&&&&&为比较单元和相应的PWM的产生提供一个时间基准
&&&2.三个比较单元(Compare)
每个单元可以生成互补的PWM波形,总共可以生成六路PWM波形
&& 3.三个捕获单元
捕捉外部输入脉冲的上升沿或下降沿,可以统计脉冲的间隔,或者统计脉冲的个数
&& 4.正交编码电路(正交编码脉冲两倍频电路)(QEP
Quadrature Encoder Pulse)
它可以对输入的正交脉冲进行编码和计数
它和光电编码器相连可以获得旋转机械部件的位置和速率信息
& 上面的捕获单元以及正交编码电路引交有两个是共用的
&& 5.其它的引脚
定时器计数方向选择引脚
定时器外部时钟输入
功率驱动保护中断输入
三.实际的应用实例
&&&对于SVPWM也就是经过一系列计算得到T1,T2之后,再通过EVA模块生成相应的PWM波,朱苛的是开环的程序,没有对正交编码器的操作,估计程序里是用通用定时器产生时基
但是问题是在一个采样周期内涉及到要用到两个空间矢量,用一个定时器怎样完成切换的操作.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 stm32高级定时器pwm 的文章

 

随机推荐