历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2019年08月22日 | STM32用PWM实现步进电机的正反转

2019-08-22 来源:eefocus

2019年7月23日

做小车的第三天。

利用可调的PWM脉冲实现步进电机的正反转,思路大致是:利用TIM3(STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出)的两个通道输出两道PWM脉冲,控制电机的高低电平以实现电机的正反转。

代码如下:

#ifndef __TIMER_H

#define __TIMER_H

#include “sys.h”

/****************************************************

在下面的宏定义中 作用是起一个连接语句的作用意思是用 IN(a) 代表后面的if else语句。

#define IN1(a) if (a) 

GPIO_SetBits(GPIOA,GPIO_Pin_6);

else 

TIM_SetCompare1(TIM3,6000)

#define IN2(a) if (a) 

GPIO_SetBits(GPIOA,GPIO_Pin_7);

else 

TIM_SetCompare2(TIM3,6000);

/

void TIM3_Int_Init(u16 arr,u16 psc);

void TIM3_PWM_Init(u16 arr,u16 psc);

#endif

//

void TIM3_PWM_Init(u16 arr,u16 psc)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

TIM_OCInitTypeDef TIM_OCInitStruct;

/************************************************

使能TIM3 以及配置相应的IO口(通道)PA6(通道1) PA7(通道2)

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

/

TIM_TimeBaseInitStructure.TIM_Period=arr;//配置定时器的重装载值

TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//配置预分频系数

TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);

/*********

两个通道均采用PWM2模式(CCPx比arr大为有效)并且设置为High 有效为高电平

TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;

TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;

TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;

TIM_OC1Init(TIM3,&TIM_OCInitStruct);

TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;

TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;

TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;

TIM_OC2Init(TIM3,&TIM_OCInitStruct);

TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);

*****************************************************************/

TIM_Cmd(TIM3,ENABLE);

}

/*******/

void Motor_1_STOP(void)

{

IN1(1);

IN2(1);

}

void Motor_1_PRun(void) //正转

{

IN1(0);

IN2(1);

}

void Motor_1_NRun(void) //反转

{

IN1(1);

IN2(0);

}

int main(void)

{

delay_init();

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //因为配置定时器用到中断,所以配置中断优先级

uart_init(115200);

/

线面的这句话就是重点重点了,之前我的电机正反转实现不了,现象不明显主要是这的问题。

首先这个9999是arr的值也就是计数从0-9999;

后面的预分频系数只要的是1,那么 TIM3的时 钟频率将为 APB1 时钟的两倍。因此,TIM3 的时钟为 72M,由公式算的现在的周期是1s。下面的比较值设置的是6000也就是说此时的占空比为40%我的延迟函数是延迟0.5s,这样相对而言是比较明的。

而我之前是这样设置的TIM3_PWM_Init(899,0); 这样用公式算出来12.5us,但是我的延迟函数还是延迟0.5s,那么这样一来,这能看见电机在不停的转,不会看见正转反转的现象。所以这个arr和psc设置也是重要啊,arr的设置以及占空比也就决定了小车的速度。

***************************************************************/

TIM3_PWM_Init(9999,7199);

while(1)

{

Motor_1_PRun();

delay_ms(500);

Motor_1_NRun();

delay_ms(500);

Motor_1_STOP();

delay_ms(500);

}

}

下面看一看PWM脉冲的仿真图像。

在这里插入图片描述

推荐阅读

史海拾趣

AND Displays公司的发展小趣事

随着公司规模的扩大和实力的增强,AND Displays开始实施国际化战略。公司在全球范围内设立了多个研发中心和生产基地,以便更好地满足不同地区客户的需求。同时,公司还加强了与国际同行的交流与合作,共同推动显示技术的创新与发展。通过全球布局和资源整合,AND Displays逐渐成为了全球显示行业的领军企业之一。

以上五个故事从不同角度展示了AND Displays公司在电子行业中的发展历程和成就。这些故事不仅反映了公司的技术实力和市场竞争力,也体现了公司对环保、可持续发展等社会责任的关注和担当。

Electrolube公司的发展小趣事

在电子行业中,电池管理系统(BMS)的可靠性和耐用性一直是制造商关注的焦点。Electrolube公司凭借其在材料科学领域的深厚积累,成功推出了一款名为UVCL的新型UV固化涂层。这款涂层以其独特的特性迅速在市场中脱颖而出。

UVCL涂层采用先进的UV固化技术,能够在几秒钟内完成固化过程,大大提高了生产效率。同时,它还具有高效的湿气引发的二次固化机制,确保即使在阴影区域也能实现完全固化。这一特性对于BMS等复杂电子电路的保护至关重要。

为了将UVCL涂层推向市场,Electrolube公司的研发团队与客户紧密合作,克服了客户内部没有UV固化设施的难题。他们与信誉良好的供应商合作,提供了完整的解决方案,并成功为客户提供了原型样品单元进行现场测试。测试结果显示,UVCL涂层能够为电子电路提供最高水平的保护,且操作过程简单、应用速度快。

UVCL涂层的成功推出不仅提升了Electrolube公司在电子材料领域的地位,也为公司赢得了众多客户的信赖和好评。

DSMI Electronics SA公司的发展小趣事

DSMI Electronics SA公司始于20世纪90年代末,由一群志同道合的电子工程师和科研人员创立。在创业初期,公司就明确了自己的技术定位:专注于电子元件和模块的研发与生产,特别是针对嵌入式系统和工业自动化领域。他们凭借深厚的技术积累和不懈的努力,成功开发出了一系列性能稳定、质量可靠的电子元件,赢得了市场的初步认可。

意普(ESPE)公司的发展小趣事

为了提升产品质量和竞争力,意普(ESPE)公司开始注重品质管理,建立了严格的质量检测体系。同时,公司积极申请国际认证,成功获得了欧洲四级安全认证体系,进一步提升了产品的国际竞争力。这些努力不仅赢得了客户的信任,也为公司打开了国际市场的大门。

ETERNA公司的发展小趣事

1995年,ETERNA被保时捷家族收购,为公司的发展注入了新的活力。保时捷家族对制表业有着深厚的兴趣,他们投入大量资金用于研发和生产。在保时捷家族的支持下,ETERNA不断推出具有创新性的产品,如Spherodrive系统和超薄自动上炼机芯3030等。这些技术的成功应用,使ETERNA在制表业中取得了举足轻重的地位。同时,保时捷家族还通过全球营销战略,将ETERNA品牌推向了更广阔的市场。

ACE [ACE Technology Co., Ltd.]公司的发展小趣事

ETERNA公司起源于1856年,由格斯塔夫·罗斯切尔德和约翰·乌尔里希在瑞士的圣伊米尔创立。自成立之初,ETERNA便以精湛的制表工艺和不懈的创新精神闻名于世。公司不断推出具有划时代意义的腕表产品,其中最具代表性的是其“五点星座”设计,这一设计成为了品牌的象征,并引领了制表业的新潮流。ETERNA通过不断的技术创新和设计突破,逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

功率放大器知识

功率放大电路的原理及其知识........ …

查看全部问答>

帮忙看看这个消抖动程序有什么问题

library ieee;--消抖动 延迟10msuse ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dou isport(s,clk1k:in std_logic;     so:Put std_logic);end;architecture one of dou issignal cout4 :std_logic_vect ...…

查看全部问答>

博创pxa270开发板WINCE内核不支持VGA输出,请求帮助

WINCE系统驱动上面我一点都不懂,公司前两天买了博创的PXA270开发板,没有买LCD屏,LINUX下我用普通电脑显示屏,它是可以显示内容的.后来我刷了它的WINCE5.0内核,一直在电脑显示屏上显示不出来图像,咨询售后说是,没有买他们的LCD屏的问题? 大家手里有 ...…

查看全部问答>

【求助】SPI(DMA方式),代码分析!

void SPI_Init() {         //----------- IMPORTANT: By default, the internal clock is disabled.  To configure the controller ------         //          & ...…

查看全部问答>

workbench下编译下载的一个问题,请教

用的workbench3.0 选的是SIMNTdiab,编译通过,但是下载.OUT文件的时候 提示如下: “Please resolve following symbols before next download semBSmCreate smNameAdd” 不知道该如何解决,我是初学者一个。 源程序如下: #include #inc ...…

查看全部问答>

51单片机控制SIM300收发数据

各位高手,我想用51通过串口来控制SIM300收发数据,现在已经把SIM300模块和51实验板通过串口连接起来了,可写完程序后模块没有反应,不知道为什么,需要对模块初始化吗?我把程序贴上来麻烦大家看看有什么问题。另外我想用串口接收字符串并判断接 ...…

查看全部问答>

有关PIC系列单片机?

我想请问一个,有没有谁知道PIC系统单片机的编程工具和开发平台? 还有关于PIC18F6622芯片简介? 谢谢…

查看全部问答>

如何调用系统的手写输入?

VC中,如何去调用WinCE系统的自带的手写输入法? 谢谢!…

查看全部问答>

【求助】宏定义时溢出,想用unsigned int,怎么办?

宏定义时溢出,想用unsigned int,怎么办? ============================================================ 有如下一句定义: #define TIMER_A_50 (750*50) // 50ms 程序中有: CCR0 = TIMER_A_50; // 50 ...…

查看全部问答>