如何用STM32F103stm32产生spwm波程序-STM32-F0/F1/F2专区

工具类服务
编辑部专用服务
作者专用服务
基于 STM32 F103的三相 SPWM 软件设计
基于对三相鼠笼式异步电动机变频转速控制的目的,在阐述SPWM输出原理基础上进行软件设计。采用规则采样法数学模型,通过查表法及相序延迟120°完成三相拟合,获得三相互补SPWM输出信号,所得三相互补SP-WM输出信号可以驱动三相鼠笼式异步电机。
Abstract:
Based on three-phase squirrel cage induction motor variable frequency speed control, the purpose of this article expounds the principle of SPWM output based on the software design.With the help of mathematical model of rule sampling method, the complementary three-phase SPWM output signal could be obtained through the look-up table method and phase sequence delay of 120 degrees.The complementary three-phase SPWM output signal can drive three-phase squirrel cage induction motor.
ZHANG Qizhi
作者单位:
西安石油大学钻机控制重点实验室,西安,710065
年,卷(期):
Keywords:
在线出版日期:
基金项目:
陕西省科技统筹创新工程计划项目“脉冲负载运动装置电控系统的研发”
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社&&&&基于STM32的SPWM波产生
基于STM32的SPWM波产生
使用STM32的定时器产生SPWM波,滤波可产生正弦波。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
开发技术下载排行STM32产生SPWM_电工电气_中国百科网
STM32产生SPWM
    /** @author Mei Jilin
加入生成SPWM部分
#include &timer.h&
#include &led.h&
static uint16_t CCR3_Val = 1800;
static uint16_t PrescalerValue = 0;
/*PWM输出配置说明,*/
/* - Prescaler = (TIM3CLK / TIM3 counter clock) - 1 选择TIMER工作在36MHZ
The TIM3 is running at 36 MHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1)
= 36 MHz / 3600 = 10 KHz
TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 */
/*转换周期10K*/
void PWM_Init(void)
TIM_TimeBaseInitTypeDef
TIM_TimeBaseS
TIM_OCInitTypeDef
TIM_OCInitS
GPIO_InitTypeDef
GPIO_InitS
NVIC_InitTypeDef NVIC_InitS
/* TIM3 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
/* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|
RCC_APB2Periph_AFIO, ENABLE);
/* GPIOA Configuration:TIM3 Channel1, 2, 3 and 4 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
//TIM1_CH1N
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Compute the prescaler value */
PrescalerValue = (uint16_t) (SystemCoreClock / ) - 1; //TIMER2 - 36MHZ
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 3600;
/*TIM3_ARR = Khz*/
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerV
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
/* Channel 1, 2,3 and 4 Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_E //关闭互补输出
TIM_OCInitStructure.TIM_Pulse = CCR3_V
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_H
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_S
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_S
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //这句的功能是让改变CCR2之后马上有效
TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM1, ENABLE);
/* TIM1 Main Output Enable */
TIM_CtrlPWMOutputs(TIM1, ENABLE);
//TIM1需要加上这句,貌似低级定时器不需要
uint16_t Duty[] = {12,78,33,73,93,
88,55,92,98,71,14,
28,16,82,31,68,00,
31,68,17,83,71,5,
963,944,928,915,907,901,900,901,907,915,928,944,963,985,71,83,1226,
66,21,87,99};
uint16_t count = 0;
uint16_t num = sizeof(Duty)/(sizeof(Duty[0]));
void TIM1_CC_IRQHandler(void)
if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET)
TIM1-&SR = (uint16_t)~TIM_IT_CC1;
TIM1-&CCR1 = Duty[count];
count++;
if(count==num)
下一篇文章中会简单讲解一下Duty[]是如何产生的链接:http://blog.csdn.net/mjlsuccess/article/details/
Copyright by ;All rights reserved.STM32f103c8t6怎么驱动液晶屏jlx-STM32-F0/F1/F2专区_百度知道
STM32f103c8t6怎么驱动液晶屏jlx-STM32-F0/F1/F2专区
我有更好的答案
或者在网上找来抄,不过例子可能就不是STM32的了看使用手册,或者找供应商拿范例
其他类似问题
为您推荐:
stm32f103c8t6的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 1017|回复: 3
如何用STM32F103产生SPWM
主题帖子精华
新手上路, 积分 30, 距离下一级还需 20 积分
在线时间1 小时
想用SPWM做一个信号源,看过大家做的50Hz的,不明白50Hz是怎么计算得到的,想做一个滤波后正弦波频率可以通过按键调整的,在2Hz—2kHz的范围内调整(按下按键KEY0频率加1Hz,按下按键KEY2频率减1Hz),最近急用,希望各位大神帮忙看看!万分感激!
PWM一个正弦周期,就等于SPWM的周期。
主题帖子精华
在线时间292 小时
PWM一个正弦周期,就等于SPWM的周期。
我的淘宝小店:
主题帖子精华
新手上路, 积分 30, 距离下一级还需 20 积分
在线时间1 小时
回复【2楼】正点原子:
---------------------------------
原子哥,这个正弦周期是怎么确定的呢,是不是跟定时器的中断设置的频率有关系呢,比如说我正弦表有100个点,我定时器1ms产生一个中断,也就是1ms采一个正弦表里的一个点,采完100个点用时100ms,这100ms就是PWM的一个正弦周期,这样理解对吗?
主题帖子精华
在线时间292 小时
回复【3楼】sunyuan9071:
---------------------------------
对的。
我的淘宝小店:
Powered by

我要回帖

更多关于 stm32f407 spwm 的文章

 

随机推荐