历史上的今天
返回首页

历史上的今天

今天是:2025年06月28日(星期六)

2018年06月28日 | 用stm32输出pwm波使无刷电机转起来

2018-06-28 来源:eefocus

现阶段使用stm32,基本处于模仿阶段,用野火的教程以及程序,修改一些IO口,然后烧到自己的开发板上,实现一些功能。

第二个实验室了解pwm波这个东西,脉宽调制,调节占空比可以改变电机转速,原理可以看刘洋老师的基础视频,讲的很详细。

修改野火的pwm程序,野火用了四个通道,我只用了TIM4的第一通道,程序如下:

#include "pwm_output.h"

void pwm_value(void)

{

TIM4->CCR1=1300;

}

/*

 * 函数名:TIM3_GPIO_Config

 * 描述  :配置TIM3复用输出PWM时用到的I/O

 * 输入  :无

 * 输出  :无

 * 调用  :内部调用

 */

static void TIM4_GPIO_Config(void) 

{

  GPIO_InitTypeDef GPIO_InitStructure;

 

/* TIM4 clock enable */

//PCLK1经过2倍频后作为TIM3的时钟源等于72MHz

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); 

  /*GPIOB clock enable */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    // 复用推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 

 

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  // 复位定时器。

  TIM_DeInit(TIM4);

}

 

/*

 * 函数名:TIM4_Mode_Config

 * 描述  :配置TIM3输出的PWM信号的模式,如周期、极性、占空比

 * 输入  :无

 * 输出  :无

 * 调用  :内部调用

 */

static void TIM4_Mode_Config(void)

{

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

 

/* PWM信号电平跳变值 */

u16 CCR1_Val =990;        

// u16 CCR2_Val = 375;

// u16 CCR3_Val = 250;

// u16 CCR4_Val = 125;   

 

/* -----------------------------------------------------------------------

    TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:

    TIM3CLK = 72 MHz, Prescaler = 0x0, TIM3 counter clock = 72 MHz

    TIM3 ARR Register = 999 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)

    TIM3 Frequency = 72 KHz.

    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%

    TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%

    TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%

    TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%

  ----------------------------------------------------------------------- */

 

  /* Time base configuration */  

  TIM_TimeBaseStructure.TIM_Period = 3999;       //当定时器从0计数到999,即为1000次,为一个定时周期

  TIM_TimeBaseStructure.TIM_Prescaler = 71;    //设置预分频:不预分频,即为72MHz

  TIM_TimeBaseStructure.TIM_ClockDivision = 0 ; //设置时钟分频系数:不分频

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式

  TIM_ARRPreloadConfig(TIM4, ENABLE); // 使能TIM4重载寄存器ARR

  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

 

  TIM_OCStructInit(&TIM_OCInitStructure);

  /* PWM1 Mode configuration: Channel1 */

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //配置为PWM模式1

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = CCR1_Val;   //设置跳变值,当计数器计数到这个值时,电平发生跳变

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平

 

  TIM_OC1Init(TIM4, &TIM_OCInitStructure); //使能通道1

 

  TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);

 

  /* TIM3 enable counter */

  TIM_Cmd(TIM4, ENABLE);                   //使能定时器3

}

 

/*

 * 函数名:TIM3_PWM_Init

 * 描述  :TIM3 输出PWM信号初始化,只要调用这个函数

 *         TIM3的四个通道就会有PWM信号输出

 * 输入  :无

 * 输出  :无

 * 调用  :外部调用

 */

void TIM4_PWM_Init(void)

{

TIM4_GPIO_Config();

TIM4_Mode_Config();

}

 

/******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/


当然,野火用的是TIM3,我用的是TIM4

主函数:


#include "stm32f10x.h"

#include "pwm_output.h"

 

/*

 * 函数名:main

 * 描述  :主函数

 * 输入  :无

 * 输出  :无

 */

int main(void)

{

  

while (1)

{}

}


这个程序编译的时候没出现问题,软件仿真的时候也能出现pwm波,下载到开发板上也成功了,但是电机就是不转,百思不得其解。

找学长看了一下,加了个延时函数,就成功了,说是电调初始化需要点时间,然后主函数改成了:


#include "stm32f10x.h"

#include "pwm_output.h"

 

/*

 * 函数名:main

 * 描述  :主函数

 * 输入  :无

 * 输出  :无

 */

int main(void)

{

   int i, j;

/* TIM3 PWM波输出初始化,并使能TIM3 PWM输出 */

TIM4_PWM_Init();

for( i=0;i<20000;i++)

{

for ( j=0;j<1000;j++)

{

}

}

pwm_value();

while (1)

{}

}


还是挺简单的嘛。


推荐阅读

史海拾趣

AC Interface Inc公司的发展小趣事

在电子行业中,ABC Electronics Inc. 深知单打独斗难以取得长远发展。因此,公司积极寻求与其他企业的合作机会,通过技术共享、联合研发、市场互补等方式实现共赢。例如,公司与一家知名芯片制造商合作,共同开发了一款具有高性能的嵌入式系统解决方案,成功应用于智能家居、工业自动化等领域。这种合作模式不仅加速了产品的研发进程,也提高了公司的市场竞争力。

Frequency Devices公司的发展小趣事

面对快速变化的市场需求,Frequency Devices公司展现出了敏锐的市场洞察力。在21世纪初,随着无线通信技术的快速发展,对高频电子元件的需求急剧增加。公司及时调整产品策略,加大了对无线通信领域高频产品的研发投入,并成功推出了一系列适用于手机、基站等通信设备的高频滤波器、功率放大器等关键元件。这些产品不仅满足了市场需求,还进一步巩固了公司在行业内的市场地位。

Block USA Inc.公司的发展小趣事

在成功推出线下支付业务后,Block USA Inc.进一步拓展至线上支付领域,并推出了集成了多种功能的手机软件Cash App。这款应用不仅提供了便捷的支付功能,还整合了robinhood、paypal和venmo等金融服务的特色,为用户提供了更加丰富的金融体验。Cash App的成功推出,使得Block在支付与金融服务领域的影响力进一步增强。

Alpha Wire公司的发展小趣事

Block USA Inc.最初以其线下支付业务Square在电子支付领域崭露头角。公司创始人杰克·多尔西洞察到小型商户在支付处理方面的需求,并推出了简单易用的磁条卡读卡器Square Reader。这一创新产品迅速受到市场欢迎,帮助无数小型企业和个体经营者实现了便捷、安全的电子支付。随着Square品牌的知名度不断提升,Block逐渐在支付领域建立了坚实的地位。

Cramer公司的发展小趣事

随着可穿戴设备的兴起,Cramer公司迅速捕捉到了市场机遇。他们推出了一款智能手表,该手表不仅具备基本的时间显示功能,还集成了健康监测、运动追踪等多项实用功能。为了提升产品的竞争力,Cramer公司与多家科技公司合作,共同研发新技术。这款智能手表在市场上获得了广泛认可,进一步提升了Cramer公司的品牌知名度和市场份额。

泽耀科技(Ashining)公司的发展小趣事

随着市场的不断变化和消费者需求的升级,泽耀科技(Ashining)意识到只有不断创新才能在竞争中立于不败之地。公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。经过多次尝试和实验,泽耀科技成功突破了某项关键技术,并推出了升级版的产品。这些新产品不仅性能更加优越,而且具有更高的性价比,深受消费者的喜爱。

问答坊 | AI 解惑

记录波形

1、  想把一个时间段的波形录制下来再看,或者传到电脑上进一步分析,有没有这样的示波器?或者有这样功能的仪器叫什么,大家有用到的介绍下…

查看全部问答>

sigmatel 9200 HD 声卡没有混音功能怎么办

能够记录机器里面播放的声音,或者使用麦克可以录音,但就是不能同时实现卡拉ok混音功能。怎么办,网上找到的补丁都用过了,就是不能用混音。 高手在哪里?…

查看全部问答>

单片机通信能发送浮点数据吗?

请问各位经过AD转换后存放在单片机里的浮点数据,要发送给其他单片机,需要把浮点转换成字符型或其他型数据吗?如果要转换,算法是什么?谢谢指点!…

查看全部问答>

wince wifi有问题

WINCE在开机后自动弹出来一个WIFI无线配置的窗口,但是这个窗口比LCD高了,有没有好办法把这个窗口缩小一点呀!如果单改代码来缩小窗口,那窗口上的控件也要调整,比较麻烦,改资源文件又好像只有英文版的才有效,哪位前辈能给小弟一点建议呀?!…

查看全部问答>

全国电子设计竞赛A题交流群101126312

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 全国电子设计竞赛A题交流群101126312  …

查看全部问答>

TI课堂进不去

上周学习了前三讲,后面的几次课就没有办法进去了,登陆不上去,不知怎么解决…

查看全部问答>

【TI课程ppt】开关电源组件选择

开关电源组件选择 开关电源组件选择 (Switch-Power-Supply-Component-Selection) 开关电源深入浅出之设计选型篇,作为能量转换的装置-电源,此篇告诉你想了解的储能元器件类型和如何选择,理解并能优化选择电容和电感 课程大纲: 拓扑敏感回路 ...…

查看全部问答>

CCS昨天编译出现“gmake: *** 拒绝访问",所有编译无法运行,奇怪得很呐

大家早上好,我这边遇到个关于CCS的小问题,想请大家帮帮忙。 问题描述:从昨天下午开始,使用CCS编译已经写好的程序之后,进度一直停留在大概7%左右的位置,查看编译信息,发现有如下提示:gmake: *** 拒绝访问 经过无数次的测试,就算是新建的 ...…

查看全部问答>

中秋节,晒福利

如题,晒晒你们公司的中秋福利吧…

查看全部问答>

msp430f5418的DCO最高倍频是多少

msp430f5418的DCO最高倍频多少?能不能倍到40MHz或以上?尝试过没成功…

查看全部问答>