使用msp432搭建的平衡小车(一)

发布时间:2022-12-21  

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

    }

  }  

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    基于PLC的小车自动配料控制系统设计方案;引言 随着经济的发展和科技的进步,自动控制系统在工业生产中的应用越来越广泛,基于西门子PLC的自动控制系统获得了长足的发展与应用。利用PLC控制技术[1......
    基于AT89C52单片机的智能环保小车电路模块设计;  随着电子产品的快速发展,“智能工具”越来越普及化。智能清洁工具也为人们的生活带来了很大的便利。传统的清洁工具功能相对比较单一,只能吸尘,或只......
    阿克曼小车仿真运动控制设计方案;一、主要内容 结合阿克曼运动需求,本团队设计了阿克曼运动系统框图如图 主要包括阿克曼小车仿真设计和阿克曼小车实物实现。 图 1 阿克曼运动系统框图 1.1 阿克曼小车......
    基于51单片机的智能小车系统设计;原理图: 程序运行图: 部分......
    基于手势识别的小车运动控制系统设计;手势是人类社会长期存在的重要肢体语言。它具有简单、直接、高效、清晰,内容丰富的特点,是指跟踪人类手势并识别其表示含义的整个过程。静态......
    用MATLAB来做智能小车的建模与仿真案例;两种智能小车的构造简介 在市面上常见的两种智能小车都是基于轮式的,在某宝上面卖的最多的,各位在学生时代拿来应付课程设计和毕业设计用的各种小车......
    基于单片机控制的自主寻迹电动小车的设计;直道检测 在小车的中部平行装有两个色标传感器,采用查询检测的方法对黑线进行检测。89C51在检测到黑线信号后,通过89C51的PI.5和Pl.6口得......
    基于STM32的可遥控智能跟随小车的设计与实现;1、引言 智能小车是一个集自动控制、环境监测、无线遥控等多功能于一体的综合系统,人们习惯称其为移动轮式机器人,目前......
    基于STM32的重力感应无线智能遥控小车设计;引言 随着社会进步,电子消费产品的需求越来越高,遥控智能车辆以及在智能化车辆基础上开发出来的产品已广泛应用到自动化物流运输等领域。目前,遥控......
    泊车系统基本模块方框图如图1所示。 图1 智能泊车系统基本框图 系统工作原理如下:在小车启动之后,通过霍尔传感器A44E进行小车的速度检测,对小车进行智能限速,小车行进过程中通过红外光电传感器避障,车库......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>