MSP432库函数输出多路任意占空比PWM波

最新更新时间:2022-08-05来源: csdn关键字:MSP432  占空比  PWM波 手机看文章 扫描二维码
随时随地手机看文章

本文适用于msp432库函数开发使用者,且已具备msp432环境(我使用的是keil),已下载SDK包,并有simeplink例程。若需要这些资源的,可以在评论区回复,我看见了会及时发送的!


今天要分享的是使用msp432库函数输出多路pwm,用以控制基础的电机转动。

1)所用到的引脚 P7.4~P7.7 、P2.4~P2.7共八路提供选择


2)查看数据手册

在这里插入图片描述
在这里插入图片描述

由手册可以知道,定时器TA0,寄存器CCR0~CCR4对应P2.4 - P2.7

定时器TA1,寄存器CCR0~CCR4对应P7.4 - P7.7


3)输出PWM初始化


/* Timer_A Compare Configuration Parameter  (PWM1) */

Timer_A_PWMConfig compareConfig_PWM1 =

{

       TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_10,

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_1, // Use CCR1  7.7

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


1.默认时钟源SMCLK,但可在主函数提前设置DCO时钟源,实现主频48MHZ;

2.TIMER_A_CLOCKSOURCE_DIVIDER_10,预分频系数设置为10;

3. 6000,占空比设总值

4. TIMER_A_CAPTURECOMPARE_REGISTER_1 使用寄存器CCR1

5. 默认翻转电平

6. 0,初始占空比设值


4)设置引脚输出PWM


/* Setting P7.7 and P7.4 and peripheral outputs for CCR */

    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7,GPIO_PIN6 + GPIO_PIN7 + GPIO_PIN4 + GPIO_PIN5, 

    GPIO_PRIMARY_MODULE_FUNCTION);

/* Setting P2.7 and P2.4 and peripheral outputs for CCR */

MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN6 + GPIO_PIN7 + GPIO_PIN4 + GPIO_PIN5, 

GPIO_PRIMARY_MODULE_FUNCTION);

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM1);  //7.7 ~ 7.4


    MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM2);  

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM3);

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM4);

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM5);  //2.4 ~ 2.7

   

    MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM6);

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM7);

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM8);

5)设置自己需要的占空比大小(基准为6000)


    compareConfig_PWM1.dutyCycle = 600;

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM1);

compareConfig_PWM2.dutyCycle = 1200;

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM2);

compareConfig_PWM3.dutyCycle = 1800;

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM3);

compareConfig_PWM4.dutyCycle = 2400;

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM4);

compareConfig_PWM5.dutyCycle = 3000;

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM5);

compareConfig_PWM6.dutyCycle = 3600;

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM6);

compareConfig_PWM7.dutyCycle = 4200;

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM7);

compareConfig_PWM8.dutyCycle = 4800;

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM8);


如第一句占空比大小为600 / 6000 = 0.1即10%大小的占空比


6)设置MSP432时钟源最高主频48MHZ


MAP_PCM_setPowerState(PCM_AM_LDO_VCORE1);

    MAP_CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48);


总体的代码如下


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

//  Pursuit of excellence

//  Description; Multifunctional integration file.

//  ACLK = n/a, MCLK = SMCLK = default DCO

//

//  Header:     My integration Library 

//  File Name:  ADC project

//  Author:     Mr. Wang Yin

//  Date:       July 31, 2021

//  place:      Chengdu University of information engineering 5402

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

#include "pwm.h"


/* Timer_A Compare Configuration Parameter  (PWM1) */

Timer_A_PWMConfig compareConfig_PWM1 =

{

       TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_10,

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_1, // Use CCR1  7.7

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


/* Timer_A Compare Configuration Parameter (PWM2) */

Timer_A_PWMConfig compareConfig_PWM2 =

{

        TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_10,

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_2, // Use CCR2   7.6

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


Timer_A_PWMConfig compareConfig_PWM3 =

{

       TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_10,

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_3, // Use CCR3    7.5

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


Timer_A_PWMConfig compareConfig_PWM4 =

{

       TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_10,

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_4, // Use CCR4     7.4

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


//TA0

Timer_A_PWMConfig compareConfig_PWM5 =

{

        TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_64,

        15000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_1, // Use CCR1     2.4

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


Timer_A_PWMConfig compareConfig_PWM6 =

{

       TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_1,

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_2, // Use CCR1     2.5

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


Timer_A_PWMConfig compareConfig_PWM7 =

{

        TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_1,

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_3, // Use CCR1     2.6

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};


Timer_A_PWMConfig compareConfig_PWM8 =

{

        TIMER_A_CLOCKSOURCE_SMCLK,

        TIMER_A_CLOCKSOURCE_DIVIDER_1,  

        6000,                                      //占空比设总值

        TIMER_A_CAPTURECOMPARE_REGISTER_4, // Use CCR1     2.7

        TIMER_A_OUTPUTMODE_RESET_SET, // Toggle output but

        0//初始占空比设值                        //  Duty Cycle

};  

/* Setting P7.7 and P7.4 and peripheral outputs for CCR */

    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7,GPIO_PIN6 + GPIO_PIN7 + GPIO_PIN4 + GPIO_PIN5, GPIO_PRIMARY_MODULE_FUNCTION);

/* Setting P2.7 and P2.4 and peripheral outputs for CCR */

MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN6 + GPIO_PIN7 + GPIO_PIN4 + GPIO_PIN5, GPIO_PRIMARY_MODULE_FUNCTION);

  MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM1);  //7.7 ~ 7.4


    MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM2);  

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM3);

MAP_Timer_A_generatePWM(TIMER_A1_BASE, &compareConfig_PWM4);

MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM5);  //2.4 ~ 2.7

   

    MAP_Timer_A_generatePWM(TIMER_A0_BASE, &compareConfig_PWM6);

[1] [2]
关键字:MSP432  占空比  PWM波 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic618234.html

上一篇:MSP432中断初试
下一篇:MSP432--通用I/O端口

推荐阅读

MSP432使用步进电机
其实是电赛练手题里有一个1分钟转一圈的要求,就算我把占空比改到最小,也无法办到,证明普通电机无法办到这一点,只好用到步进电机。同时我们还要一个步进电机驱动,就是之后图片的大黑盒子DM542,大概100大洋左右。代码部分设置TIMER_A输出pwmTimer_A_PWMConfig TIM0_PwmConfig2 = { TIMER_A_CLOCKSOURCE_SMCLK, TIMER_A_CLOCKSOURCE_DIVIDER_16, 7000, TIMER_A_CAPTURECOMPARE_REGISTER_2, TIMER_A_OUTPUTMODE_RE
发表于 2022-08-10
<font color='red'>MSP432</font>使用步进电机
MSP432笔记——按键中断
GPIO按键外部中断所用板卡 MSP432P401R LaunchPad按键电路图按键连接GPIO P1.1 P1.4按键按下时,对应IO变化为低电平,按键必须使用上拉电阻程序编写使用库函数 driverLibmain中需要的步骤{设置IO输入/输出方向,带上拉电阻的输入模式清除中断标识位,在配置时就需要清除标志位设置中断触发边沿,上升沿/下降沿使能GPIO中断使能总中断(3个中断函数)}main源码int main(void){ /* Stop Watchdog */ MAP_WDT_A_holdTimer(); //GPIO Interrupt test GPIO_setAsInputPinWithPullUpResis
发表于 2022-08-10
<font color='red'>MSP432</font>笔记——按键中断
MSP432笔记——TIM定时器中断
使用driverlib库函数以TA3为例前期配置时钟源信号源电压等级flash //Flash FlashCtl_setWaitState(FLASH_BANK0,1); FlashCtl_setWaitState(FLASH_BANK1,1); //PCM state PCM_setPowerState(PCM_AM_LDO_VCORE1); //CS configure CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48);配置定时器 Config参数配置结构体 config开始定时器 start使能定时器中断 (清空标志位、打开定时器的中断) Timer_A_UpMod
发表于 2022-08-10
MSP432笔记——单路ADC采样
配置ADC引脚配置使能ADC模块,初始化ADC模块单路转化配置,转化存储器配置使能采样时钟,使能转化中断使能,开启总中断开始转化 //enable ADC module ADC14_enableModule(); ADC14_initModule(ADC_CLOCKSOURCE_MCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0); //gpio P5.5 GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN5,GPIO_TERTIARY_MODULE_FUNCTION); //ADC Mem ADC14_configu
发表于 2022-08-10
基于MSP432的中断练习
/*MSP432:基于寄存器编程:利用P1.1和P1.4引脚外部中断,实现对LED灯亮灭的控制。P1.1和P1.4引脚连接S1和S2按键,该按键按下将触发引脚中断,P2.1和P2.2引脚分别连接连个LED灯,当按键P1.1被按下后,P2.1引脚LED灯的亮灭状态将会发生翻转,当按键P1.4按下后,P2.2引脚的电平将发生翻转。*///中断服务程序extern void PORT1_IRQHandler(void){ if(P1IFG & BIT1) { P2OUT ^= BIT1; P1IFG &= ~BIT1; } if(P1IFG & BIT4) { P2OUT ^= BIT2; P1IFG &
发表于 2022-08-10
基于<font color='red'>MSP432</font>的中断练习
MSP432-SPI主从通信
编写程序实现MSP432P401r单片机中eUSCI模块之间的三线制SPI通信。其中,一个eUSCI_B0模块作为主机,另一个eUSCI_B2模块作为主机,主机从0X01开始发送递增字节,从机将接收到正确的字节时,P1.0LED灯会闪烁。同时,从机接收到的数据又会发回给主机,主机接收到正确数据,P2.2LE灯会闪烁:要求:三线,8位数据,空闲位高电平,高位优先:#include <ti/devices/msp432p4xx/driverlib/driverlib.h>/* Standard Includes */#include <stdint.h>#include <stdbool.h>uint
发表于 2022-08-10
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved