历史上的今天
返回首页

历史上的今天

今天是:2025年08月21日(星期四)

正在发生

2019年08月21日 | STM32 TIM1 CH1 出波动态改变PWM频率 控制步进电机的方法

2019-08-21 来源:eefocus

 void TIM1_PWM_Init(u16 arr,u16 psc)

{  

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  

                                                                     

 

   

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);

 

TIM_TimeBaseStructure.TIM_Period = arr; 

TIM_TimeBaseStructure.TIM_Prescaler =psc; 

TIM_TimeBaseStructure.TIM_ClockDivision = 0; 

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); 

 

 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 

TIM_OCInitStructure.TIM_Pulse = 0; 

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 

TIM_OC1Init(TIM1, &TIM_OCInitStructure);  

 

  TIM_CtrlPWMOutputs(TIM1,ENABLE);

 

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);   

TIM_ARRPreloadConfig(TIM1, ENABLE); 

TIM_Cmd(TIM1, ENABLE);    

}

 

首先是TIM1 CH1 通道1初始化 配置。其次就是 将这个产生的频率进行线性化,了解PWM波的都知道其是反比例的关系。PWM频率=72MHZ/(ARR+1)/(PSC+1)所以要进行线性化。便于PID控制。


#define PRESCALER  31//预分频系数  最好和初始化的一致

void   Linear_Conversion(u16 moto)    //PWM线性化  入口参数需要的PWM频率

float temp;    

TIM_Cmd(TIM1, DISABLE);            //失能定时器

temp=72000000/moto/(PRESCALER+1);  //计算ARR值

if(temp>65535) temp=65535;         //设置最大值

if(temp<3) temp=3;                 //避免ARR和  CCR1太小

TIM1->ARR=temp-1;                  //

TIM1->CCR1=TIM1->ARR/2;            //50%占空比

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

}

上方2个初始化仅涉及初始化,具体怎么让步进电机运行,在这不做描述。用的时候调用即可,笔者认为这种方法修改的频率不要太快,保证5MS以上修改PWM频率,即改变CCR1和ARR值。


注:如果出波口出现低电平,步进电机会卡死,不是硬件或者电机问题,这是PWM初始化失败,造成出波口输出低电平。笔者使用的A4988小型步进电机驱动,出波口为低电平会出现卡死,不知道其他驱动是否一致。


推荐阅读

史海拾趣

HTC Korea(TAEJIN Technology )公司的发展小趣事

HTC Korea(前身为TAEJIN Technology Co., Ltd.)成立于2000年,最初以Linear IC产品的研发及生产为主,逐步在通信、消费类及PC等应用领域稳步发展。然而,公司的真正突破发生在2006年,这一年HTC决定从OEM代工厂转型为自主品牌制造商。这一转型并非易事,面临着合作伙伴转变为竞争对手的风险,导致股价一度暴跌。但HTC坚持下来,推出了HTC Touch和HTC Diamond等经典机型,成功吸引了市场的关注,股价逐渐回升,最终奠定了其在手机市场的重要地位。

FETek Technology(东沅)公司的发展小趣事

随着公司规模的扩大,东沅开始投入大量资源进行技术研发。经过数年的努力,他们成功开发出了一系列具有竞争力的半导体测试设备和测试程序开发工具。这些产品不仅覆盖了模拟器件、数字器件、混合信号器件和射频器件等多种类型,而且具有高精度、高效率和高可靠性的特点。凭借这些技术优势,东沅逐渐赢得了市场的认可,客户数量不断增加。

Fanstel公司的发展小趣事

Fanstel公司深知人才是企业发展的关键因素。因此,公司一直注重人才的培养和引进。公司建立了完善的人才培养机制,为员工提供各种培训和学习机会,帮助他们提升自身素质和能力。同时,Fanstel还积极引进高端人才,打造了一支具有丰富经验和专业技能的研发团队。这些人才的加入为公司的技术创新和产品研发提供了有力支持。

EFC [Electronic Film Capacitors, Inc.]公司的发展小趣事

在电子薄膜电容器领域,EFC公司一直以其技术创新而闻名。公司创始人李博士带领着一支由资深工程师组成的研发团队,不断挑战技术极限。某年,他们成功研发出一种新型材料,这种材料不仅大大提高了电容器的性能,还降低了制造成本。这一突破性的创新使EFC公司在市场上脱颖而出,赢得了大量客户的青睐。

广州奥松公司的发展小趣事

随着公司的不断发展,奥松电子陆续获得了多项荣誉资质,如“国家专精特新‘小巨人’企业”、“国家高新技术企业”等。这些荣誉的获得,不仅证明了公司在电子行业中的实力与地位,也为公司的品牌建设提供了有力的支撑。同时,这些荣誉也为公司的市场拓展和业务发展提供了更多的机遇和可能。

GTE Microcircuits公司的发展小趣事
复合放大器在长时间工作后性能下降的原因可能包括元件老化(如电阻、电容值的变化)、温度漂移、以及电源波动等。为了缓解这些问题,可以定期校准电路、使用温度稳定性好的元件、以及加强电源的稳定性和滤波。

问答坊 | AI 解惑

7段显示

我是一个初学者。急需一个显示电路,请那位高手帮帮忙。单一个7段显示,第一次触控输入信号显示号码,等第二次触控时第一次触控的显示消除;显示第二次触控的号码《是触控不是开关》。请帮忙的高手能提供电路图 wuhukadn@hotmail.com…

查看全部问答>

40/45nm的功耗

At 40 and 45 nm process nodes, power has become the primary factor for FPGA selection. Spartan®-6 and Virtex®-6 FPGAs offer lower power, simpler power systems and PCB complexity, better reliability, and lower system cost. ...…

查看全部问答>

无线传感器分级休眠模型的研究

摘要:为了提高无线传感器的有效工作时间, 在无线传感器处于等待状态时, 令其休眠是重要的一种降低功耗策略。分析已 有的两种无线传感器分级休眠能耗模型的特点, 指出这两种模型是单部件无线传感器分级休眠模型, 它们不适用于多部件 组成的无线传 ...…

查看全部问答>

2440实验板,不通过JTAG如何烧写引导程序

大家好!2440的板子上不用JTAG,可以向flash里面烧写引导程序吗?通过USB、串口或者网口可以吗?…

查看全部问答>

用visual studio 2005 开发windows ce 的应用软件 需要哪些软件,如何配置?越详细越好!!主要是 sql ce 的配置 qq 5496

用visual studio 2005 开发windows ce 的应用软件 需要哪些软件,如何配置?越详细越好!!主要是 sql ce 的配置 qq 549602724…

查看全部问答>

请问Build菜单中Open Build Release Directory是连接哪个文件的。我想知道如何写一个.bat文件,让其自动编译驱动。

请问Build菜单中Open Build Release Directory是连接哪个文件的。我想知道如何写一个.bat文件,让其自动编译驱动。然后加载到nk.bin文件中。分别使用命令build、makeimg。 下面是我写的,我觉得是“call wince.bat ARMV4I CEBASE smdk2440”错误。 ...…

查看全部问答>

求助,望各位大侠赐教

现在在搞个磁卡打印机的程序,用的COM口,发出读指令后,有返回值,请问如何记录返回值?谢谢!…

查看全部问答>

好东西难求

好东西不好找,更不容易掌握!…

查看全部问答>

现在正在学习XMC1300,用DAVE遇到了一点问题

如图所示,现在那个DAVE的编译按钮和甲壳虫都是可以使用(没有变灰色)的,我编译完一个工程之后,再点击编译其他工程,为什么还是编译原来的工程,并且点击的第二个工程变成了第一个工程名; 还有一个问题是等我把这个工程删除之后,编译按钮和甲 ...…

查看全部问答>