历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2021年01月11日 | MSP430F5529 多路PWM输出控制舵机和电机

2021-01-11 来源:eefocus

MSP430F5529有比较丰富的定时器资源,这次我给大家带来的是输出多路PWM波,可以实现控制舵机,当然简单修改后也可以实现控制电机  实验平台是 TI的MSP-EXP430F5529LP 也就是我们常说的launchpad,相信很多做电赛的小伙伴都是人手一块的

首先先简单的说一下控制电机和控制数字舵机的区别,控制电机的话只需要我们可以输出一定的占空比即可,不需要精确控制周期,然而控制舵机则需要我们准确的控制占空比和周期 。 电机控制我们不多谈,只要保证自己输出的频率不是太低(电机嗡嗡响)也不是太高(太高也会有问题,此处不展开)。 咱们初步设定电机调速用的频率是5KHz。数字舵机的控制需求,我这里就不多说了20ms的周期 高电平持续时间是0.5~2.5ms。咱们先说一般的电机控制 产生一个频率可以调整的5KHz频率的方波信号。

这里是代码链接: 代码链接   实现效果会放在文章的最后  主要和大家分享的还是实现的过程

第一步:IO口复用

IO复用对于学过一点STM32 或除了51以外单片机的小伙伴应该都不陌生(甚至像STC12xx这样的增强型51也有IO复用这个功能) 只是功能的介绍  我们就先生成四路PWM 稍微演示一下。。。。

打开我们的芯片的 Datasheet 在Terminal Function这一部分有IO的复用功能介绍

IO复用在MSP里面做的很简单(复用功能比较少,单一映射的不多。。) 只需要将PxSEL寄存器的指定位置1 就可以了  操作是这样的

第二步:对定时器的相关寄存器进行设置

这里 我用的是SMCLK这个时钟,未经过时钟升频的时钟(1MHz) 至于怎么提高系统的时钟 见这篇 博客   这是地址

我们打开msp430F5529的用户手册(user_guide,不是datasheet)

从上面的图我们可以看到大概两部分的寄存器,第一部分是时钟主体的设置:

如上图 我们所需要设置的寄存器参数主要就是这四个选项:第一个选项是时钟源,这里我选用的是1MHz的SMCLK(Subsystem master clock  子系统主时钟)

在头文件库 #include 里面我找到了关于 TA0CTL的 相关位

继续向下找,官方的头文件里面都说的明明白白了 实用的方法很简单

TA0CTL |= TASSEL__SMCLK ;就是这么简单  时钟就选完了! 接下来的操作就是配置 ID 和IDEX 两个寄存器

ID是第一次分频  第二次分频是 IDEX 

我们需要计算一下我们需要的分频参数    不过在这之前 我们还需要配置一下其他的一些参数:比如模式

模式的选择直接决定了你的用法,进而改变了参数的意义!   模式的选择就是我们先前图片的MC 的位

我们可以看到 模式的控制时这两个bit在控制的

这里是这两个bit 组合出来的四种 模式  后面都有定义  电机控制和舵机控制都必须选择模式1,这个我们可以简单的计算一下,即便我的时钟不进行分频  也就是计数频率是1MHz (最高25MHz) 那么 我们的脉冲的频率也就是1M/65536 = 15或者是25M/65536 = 381, 在我们1M的情况下只能使用 MC_Up这个选项,也就是把 CCR0 当做ARR(Auto Reload)寄存器用 ,当定时器的CNT计数到 CCR0时 重新置0 以电机控制为例  假设我们的电机控制的精度是1000(这里涉及到一个精度问题,我的理解是这样的 你想要把你一个周期时间分成多少个脉冲就是这个精度。精度也就是和ARR 有关。 例如在控制舵机时你的脉冲20ms分成200份(ARR = 2000),那么你能控制的最小脉冲时间是20ms/2000 =  10us  也就是你不可能产生一个不是10us整数倍的脉冲,你的脉宽最小的步进值就是10us 这个步进值会影响到你的舵机等的控制精度,ARR会影响到你电机速度控制闭环时的输出值的取值范围!) ARR的取值还是很值得深入研究的  ARR过高 计数值会比较大,控制精度很高,但是在430定时器的频率高就意味着 多费电,甚至为此你还需要去产生一个远高于  正常系统时钟 的时钟! 取值过小则会浪费精度(比如高精度的舵机)

我在这里取 SMCLK = 1MHz ID和IDEX 都是默认设置(不分频) CCR0 取100   此时产生得到PWM的频率是

SMCLK / (ID*IDEX*CCR0)   =  100 0000/(1*1*100) = 10KHz   

以上是生成的10KHz频率( 这里的误差较大,是因为时钟不是1Mhz 而是1.05Mhz,至于是为什么是1.05MHz我会查出来。。。 接下来的文章都是按照1.05M的之中在测试的!!!!  文中的计算都是有问题的! 这里就不做后续的修改了,望读者们理解,至于为什么是1.05MHz 的时钟  看这里------->   链接地址

要设置我们的5KHz  只需要调整ID即可

以上脉冲可以用于 电机控制  但是不能用于舵机控制 , 接下来我们设计舵机控制的配置

假设我们是180度舵机 我希望可以达到步进值 是1 度 我们不妨设置CCR寄存器数值变化180个单位时 脉冲时间变化2ms 这样整个周期就需要 1800 个脉冲 也就是我们的CCR0 需要设置成1800  ,计算一下此时 如果不分频的话的频率是多少 SMCLK/CCR0 = 1000000/1800 = 555.555   Hz  > 50Hz   应该可以通过分频得到指定的频率!

接下来 我们应该计算一下分频的系数  我们大概需要的分频系数是  555.5/50 = 11.1  这个数字有点小了可靠的拆分应该是 2*6 = 12

我们获得的是 42Hz的方波   接下来我们调整一下IDEX = 5

Amazing!  我们得到了49Hz的方波,舵机控制应该是没有问题了! 

代码链接 我整理以后会奉上。 通过这些测试我也发现了,其实MSP430的时钟波动是比较大的,时钟也不是那么稳定,要想获得最好的参数还是需要自己去测试,测试出来的实际结果和预想的还是有一定差距的

调试用的示波器是 Loto的虚拟示波器 OSC802,可以直接插在电脑上调试的一个工具,调试代码简直不要太方便啊!

我是最近才重新捡起430的  还有很多生疏之处,如有错误,请大佬们不吝赐教,代码我整理完了会分享的!


推荐阅读

史海拾趣

乐鑫(espressif)公司的发展小趣事

乐鑫科技在发展过程中,与百度、亚马逊等全球知名企业建立了紧密的合作关系。通过与这些合作伙伴的共同努力,乐鑫科技成功开发了一系列具有市场影响力的语音框架和物联网解决方案,进一步提升了其品牌影响力和市场竞争力。

Gentron Corp公司的发展小趣事
在交通路口作为信号灯使用,指示车辆和行人通行。
DAQ Electronics LLC公司的发展小趣事

随着国内外市场的不断拓展和客户需求的不断增长,DAQ Electronics LLC公司开始积极探索国际化发展道路。公司积极参加国际展会和技术交流活动,与全球同行建立了广泛的联系和合作。同时,公司也加大了对海外市场的投入力度,不断拓展海外市场份额。这种国际化的发展战略不仅为公司带来了更多的商业机会和合作伙伴也为公司未来的发展提供了更广阔的空间和机遇。

请注意,以上故事均为虚构内容,仅供参考。如有需要,建议直接联系DAQ Electronics LLC公司获取其真实的发展历程和故事。

Bridgelux公司的发展小趣事

XXXX年,Bridgelux与Cree公司爆发了一场专利纠纷。Cree公司指控Bridgelux侵犯了其LED专利技术。经过一段时间的激烈争辩,双方最终达成了和解协议。Bridgelux同意支付一定的赔偿金,并获得了部分专利的授权。这次纠纷虽然给Bridgelux带来了一定的经济损失,但也使其更加注重知识产权保护,提升了自身的技术实力。

爱普特半导体(APTSEMI)公司的发展小趣事

在电子行业发展的浪潮中,爱普特半导体(APTSEMI)始终坚持自主创新的发展道路。公司自创立之初,就致力于研发具有自主知识产权的微处理器芯片。面对国外技术封锁和市场垄断的困境,爱普特团队不畏艰难,投入大量研发资源,成功突破了多项技术难关,研发出了全国产、高可靠性的32位MCU产品。这些产品性能卓越,可与国际先进水平相媲美,为我国电子行业的自主可控发展贡献了重要力量。

Hamlin ( Littelfuse )公司的发展小趣事

在全球供应链受到冲击、芯片告急的背景下,爱普特半导体始终坚持纯国产化发展理念。公司从管理层到核心研发人员,都具有深厚的半导体从业经验,无需借助任何海外团队支持,就能实现技术攻关和市场把控。这种全国产化的优势使得爱普特在面对外部风险时能够保持稳健的发展态势,也为公司的长远发展奠定了坚实基础。

问答坊 | AI 解惑

基于SH6613的空调遥控器设计

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑   SH6613(SH66P13)芯片   中颖电子的SH66xx系列4位单片机具有速度快, 功耗低, 结构简单易用,性价比高等特点, 广泛应用于遥控器,各种电器控制, 多功能计算器,万年历,掌上游戏机等产品。SH ...…

查看全部问答>

使用dsPIC30F实现交流感应电机的矢量控制

使用dsPIC30F实现交流感应电机的矢量控制…

查看全部问答>

USB OHCI问题

做OHCI驱动时,当进入Operation 后,却发现HccaFrameNumber值不变,而 HcFrameNumber寄存器却在正常变化,并可以接受到中断,我可以确定的是: HcHCCA 的值也是正确的,我已经折腾了很久,想不到原因?…

查看全部问答>

ce6.0 r3 s3c2451 休眠唤醒,死机

可以正常进入休眠,也可以退出休眠。 但是在唤醒的过程中,执行到一半系统挂掉了。 大部分时候,是在: zzzzzzzz APP_PowerUp. [HSMMC1] Power Up the HSMMC Host Controller [HSMMC1] Card is Inserted! 这端死机的。 经过测试,sd卡驱 ...…

查看全部问答>

pictbridge的实现?

如何通过USB slave实现pictbridge协议的打印过程? 主要是软件的设计. 和USB slave的区别在哪里?程序的大致流程是一样的吗? …

查看全部问答>

如何通过GPRS传送PPP协议的数据?

通过GPRS传送PPP协议数据时,由于PDP上下文还没有建立,应如何传送--按照层3的协议站信令处理吗?…

查看全部问答>

关于DSP和FPGA上电顺序的问题

请教各位大侠:          DSP的芯片配置管脚接入FPGA(通过FPGA控制这些管脚,以便得到不同的DSP配置),DSP上电时需要读取这些配置管脚的信息,那么这是否意味着FPGA要先于DSP上电,DSP上电时需要FPGA已正常工作 ...…

查看全部问答>

低功耗的问题,请大虾帮忙分析

我的板子的静态电流很大在LPM3模式下有120UA左右,我现在把板子上所有的外围器件都卸掉了,就剩下单片机(MSP430F5438), 程序是:所有IO配置成输出拉低,我想应该没问题,电流120UA左右,囧。。。是不是还有什么东西会影响电流。。 void ...…

查看全部问答>

protel99se中文下载

那里有protel99se软件下载,我在网上找了很久也没有找到。…

查看全部问答>

最近在单片机遇到岔路

本人学生,学习单片机有2.3月了,有下面俩问题: 1、单片机应用广不广泛 2、出去后能不能在工作中应用 本人学习51的,用的是MedWinV3.0来编程的,期望大家回答下我的问题…

查看全部问答>