历史上的今天
返回首页

历史上的今天

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

2022年12月21日 | 使用msp432搭建的平衡小车(一)

2022-12-21 来源:zhihu

1、前言

2、正文

  打开ccs建立DriverLib模板工程


  建立方法:1、工具栏project中找到project wizard点击


     2、在输入栏中输入你的开发板型号


     3、找到driverlib_empty_project_from_source 导入工程


     第一次导入会提示安装SDK,安装重启后再导入


  平衡小车第一步:驱动电机


    首先我们得知道如何使用GPIO,在DriverLib中的gpio文件指出了使用方法


    先将GPIO设置为输出  GPIO_setAsOutputPin(port,pin) 


    设置输出电平,高电平 GPIO_setOutputHighOnPin(port,pin) 


           低电平  GPIO_setOutputLowOnPin(port,pin) 


    使俩个电机正转 


int main(void){

    MAP_GPIO_setAsOutputPin(

            GPIO_PORT_P6,

            GPIO_PIN0

            );

    MAP_GPIO_setAsOutputPin(

            GPIO_PORT_P5,

            GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2

            );

    MAP_GPIO_setAsOutputPin(

            GPIO_PORT_P3,

            GPIO_PIN5

            );

    MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P6, GPIO_PIN0); 

    //置高stby 使驱动工作

    MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN0); 

    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN1); 

    MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN5); 

    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN2);

    while(1){

  

    }

}  

    当然我们还需要控制电机速度,方法就用pwm控制吧,先学习下如何使用msp432的pwm。


    生成pwm有俩种方法:用定时器A模拟出pwm信号,另一种是定时器A生成一个pwm信号


    在timer_a文件中 void Timer_A_generatePWM 方法中声明 Generate a PWM with timer running in up mode  所以同样会占用一个定时器,但是定制好了模块操作起来会很快,


    因为效率至上,我采用了这种方法


     void Timer_A_generatePWM(uint32_t timer, const Timer_A_PWMConfig *config); 方法中有俩个参数


    第一个参数是定时器,有四个定时器


TIMER_A0_BASE

TIMER_A1_BASE

TIMER_A2_BASE

TIMER_A3_BASE

    第二个参数是配置结构体


typedef struct _Timer_A_PWMConfig

    uint_fast16_t clockSource;   //时钟源

    uint_fast16_t clockSourceDivider; //时钟分割

    uint_fast16_t timerPeriod;     //周期

    uint_fast16_t compareRegister; // 比较寄存器

    uint_fast16_t compareOutputMode; //模式

    uint_fast16_t dutyCycle; //占空比

} Timer_A_PWMConfig;

   前三项影响pwm频率:时钟频率  /  周期 , 关于比较寄存器在方法中没有细讲,告知我们查询数据手册,在查询过后得知每个TimerA定时器都有5个比较寄存器


在手册中 Input/Output Diagrams 有标注 ,但是我有一点疑惑在方法中却注释了7个比较器通道(0 - 6)那么剩下的俩个是什么,希望知道的可以解释下。


   模式选择 TIMER_A_OUTPUTMODE_RESET_SET  重新计数 。占空比为pwm中高电平数,当需要调节占空比时可以直接对结构体中dutycycle赋值,


   再使用 Timer_A_generatePWM 方法配置。


   到这里pwm使用方法就明白了


   我们建立my_pwm.c文件,文件内容


/*

 * my_PWM.C

 *

 *  Created on: 2021年7月29日

 *      Author: Administrator

 */

#include 


Timer_A_PWMConfig pwmConfig1 =

{

        TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_4,

        3200,

        TIMER_A_CAPTURECOMPARE_REGISTER_2,

        TIMER_A_OUTPUTMODE_RESET_SET,

        0

};

Timer_A_PWMConfig pwmConfig2 =

{

        TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_4,

        3200,

        TIMER_A_CAPTURECOMPARE_REGISTER_3,

        TIMER_A_OUTPUTMODE_RESET_SET,

        0

};

void PWM_Init(void){


      MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN5,GPIO_PRIMARY_MODULE_FUNCTION);

      MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN6,GPIO_PRIMARY_MODULE_FUNCTION);


      MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig1);

      MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig2);

}

void GPIO_Motor_Init(void){

    MAP_GPIO_setAsOutputPin(

            GPIO_PORT_P6,

            GPIO_PIN0

            );

    MAP_GPIO_setAsOutputPin(

            GPIO_PORT_P5,

            GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2

            );

    MAP_GPIO_setAsOutputPin(

            GPIO_PORT_P3,

            GPIO_PIN5

            );

    MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P6, GPIO_PIN0);


}


void PWM_config(double Left_cycle,double Right_cycle){


    if(Left_cycle > 0){

        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN1);

        MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN5);


    }

    else {

        MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN1);

        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN5);

    }

    pwmConfig1.dutyCycle = abs(Left_cycle);

    MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig1);


    if(Right_cycle > 0){

        MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN0);

        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN2);

    }

    else {

        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN0);

        MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN2);

    }

    pwmConfig2.dutyCycle = abs(Right_cycle);

    MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig2);

}

my_pwm.h


/*

 * my_PWM.H

 *

 *  Created on: 2021年7月29日

 *      Author: Administrator

 */


#ifndef MY_PWM_H_

#define MY_PWM_H_


#include


void PWM_Init(void);

void GPIO_Motor_Init(void);

void PWM_config(double Left_cycle,double Right_cycle);

#endif /* MY_PWM_H_ */

mian.c


#include


/* Standard Includes */

#include

#include

#include

#include

#include

#include

int main(void){

    MAP_WDT_A_holdTimer();

    PWM_Init();

    GPIO_Motor_Init();

    int i;             

    while(1){

    for(i = 0; i <= 3200; i = i + 100){

         PWM_config( i , -i);

          delay_ms(50);   

    }

  }  

}


推荐阅读

史海拾趣

First Silicon Co., Ltd公司的发展小趣事

随着全球电子市场的不断扩张,First Silicon公司意识到单一市场已无法满足其长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,实现了从研发、生产到销售的全球化布局。这一战略不仅有效降低了公司的运营成本,还极大地提升了其品牌影响力和市场份额。在全球化进程中,First Silicon还积极与当地企业开展合作,共同推动电子技术的进步和应用。

Analogix Semiconductor公司的发展小趣事

面对日益激烈的市场竞争,First Silicon公司深知供应链管理的重要性。公司投入大量资源,对供应链进行了全面整合和优化。通过建立长期稳定的供应商关系、引入先进的供应链管理软件和提高库存周转率等措施,First Silicon有效降低了原材料成本和库存风险。同时,公司还加强了与下游客户的沟通和合作,确保产品能够及时、准确地送达客户手中。这一系列举措不仅提升了公司的运营效率,还增强了其市场竞争力。

智浦欣(Chipstar)公司的发展小趣事

随着技术的不断进步和市场需求的日益增长,智浦欣公司意识到,只有不断创新和突破,才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发团队的投入,引进了一批国内外顶尖的模拟器件和混合信号设计人才。经过数月的努力,团队成功研发出了一款具有高性价比的WLED驱动器产品,该产品以其卓越的性能和稳定的质量赢得了客户的广泛好评。随后,公司又相继推出了多款具有竞争力的新产品,进一步巩固了其在消费类电子市场的地位。

Herga公司的发展小趣事

进入21世纪后,Herga公司意识到全球化市场的重要性,开始实施积极的国际化战略。公司首先在欧洲市场建立了稳固的根据地,随后通过并购和合资等方式,逐步进入北美、亚洲等新兴市场。在这个过程中,Herga公司不仅提供了符合当地市场需求的产品和服务,还积极融入当地文化,建立了良好的品牌形象。这些努力使得Herga公司的全球市场份额逐年上升,成为国际电子行业中不可忽视的力量。

芯海科技(CHIPSEA)公司的发展小趣事

近年来,随着新能源汽车市场的快速崛起,BMS(电池管理系统)技术成为关键。芯海科技凭借在“模拟信号链+MCU”领域的技术积累,成功开发出应用于BMS锂电管理的高精度模拟信号链芯片。这一技术的突破使得芯海科技能够切入新能源汽车市场,为行业的发展提供了有力支持。

DESOUTTER公司的发展小趣事

2001年,Desoutter公司与CP(Chicago Pneumatic)和GR(Grorges Renault)合并,成立了CPDI公司。这次合并使Desoutter公司获得了更强大的技术实力和市场资源,进一步巩固了其在气动工具领域的领先地位。合并后,CPDI公司继续致力于气动工具的研发和生产,并推出了一系列创新产品,以满足市场的不断变化和升级需求。

问答坊 | AI 解惑

射频EDA仿真软件介绍(包括算法,原理)

微波系统的设计越来越复杂,对电路的指标要求越来越高,电路的功能越来越多,电路的尺寸要求越做越小,而设计周期却越来越短。传统的设计方法已经不能满足系统设计的需要,使用微波EDA软件工具进行微波元器件与微波系统的设计已经成为微波电路设计 ...…

查看全部问答>

PADS2007有中文版的吗

那位大哥能告诉我PADS2007有中文版的吗,那里有中文版的下载?…

查看全部问答>

步进程序(急需解决的疑问)

老师以上是我们这一组编写的与步进有关的程序,其中让两个步进电机同步的程序有问题。问题是:a电机正常转动,b电机只发出声音,但不转动。 老师,我是按你的方法写的,你帮我分析一下问题的所在。…

查看全部问答>

中兴通讯硬件一部巨作-信号完整性

中兴通讯硬件一部巨作-信号完整性 近年来,通讯技术、计算机技术的发展越来越快,高速数字电路在设计中的运用越来越多,数字接入设备的交换能力已从百兆、千兆发展到几十千兆。高速数字电路设计对信号完整性技术的需求越来越迫切。 在中、大规模 ...…

查看全部问答>

造型请教:有没有可以查询FPGA/CPLD芯片的价格查询网址?

现在在选型FPGA,要用到161个IO,编数组功能单元。 公司没有BGA焊接设备,只能焊引脚能看到的封装 打算用Virtex的,两个TQ144封装的(IO=2*98),或者一个PQ240的(IO=166) 不知道这几种贵不贵,考虑成本,想用几百元的! …

查看全部问答>

如何在wince6.0 中 使用wmvdmo 边录制视频边压缩?

我在wince6.0下开发了一个摄像软件,利用组件中的wmvdmo视频编码器,利用directshow编程。发现实现的是一次性录入然后一次性编码。这样,每次录完后要等好长时间才编码完,并且录制时间长一点就耗尽了内存。不知道怎么来实现边录制边压缩。望高手指 ...…

查看全部问答>

大家帮我看看93C46的处理代码?

代码如下: #include #include \"intrins.h\" sbit led  = P2^0; #define uchar unsigned char #define uint unsigned int typedef  unsigned  char   BYTE; typedef  unsigned &n ...…

查看全部问答>

【TI原创】采用8962实现串口服务器(ucosii+lwip)

引言   本研究设计了一种采用LM3S8962构架的嵌入式服务器采集Zigbee节点上的传感器数据,通过以太网实时访问、监测、查询家居信息。实现由Zigbee 自组网的无线局域网到广域网的智能家居系统。传感器Zigbee节点往协调器发送数据,协调器通 ...…

查看全部问答>

lm3s5956的jtag如何设计

lm3s5956的jtag如何设计…

查看全部问答>

和我一起认识吉时利3706型主机

3700系列系统开关及万用表是吉时利公司推出的新一代平台,为开关和/或集成数字万用表(DMM)应用提供了解决方案。这款新的平台采用主机和分立卡模块方法,是在2700/2701/2750(Integra)以及7001/7002产品特性基础上构建的,大大提高了吞吐量、密度和 ...…

查看全部问答>