PWM的使用–舵机模块和电机驱动模块
@(MSP432P401R)
PWM的配置
基本默认即可
PWM的API的使用
参数
-
periodUnits即周期的单位
-
periodValue即周期值
-
dutyUnits即占空比单位
PWM_DUTY_FRACTION_MAX为最大占空比(100%)
-
dutyValue即占空比的值
-
idleLevel即PWM未运行时的空闲输出电平
-
custom即自定义参数
函数表(略)
全局配置(略)
功能函数表
重要函数
- 设置占空比
int_fast16_t PWM_setPeriod (PWM_Handle handle, uint32_t period)
可以在PWM运行时调用
若以百分比为单位,则配置代码为(以45%为例)
uint32_t dutyCycle;
dutyCycle = (uint32_t) (((uint64_t) PWM_DUTY_FRACTION_MAX * 45) / 100);
PWM_setDuty(pwm, dutyCycle);
- 设置周期
int_fast16_t PWM_setPeriod ( PWM_Handle handle,uint32_t period )
可以在PWM运行时调用
3. 设置占空比和周期
int_fast16_t PWM_setDutyAndPeriod (PWM_Handle handle,uint32_t duty,uint32_t period)
必须在PWM运行时调用
文档链接:file:///D:/MSP%20SDK/simplelink_msp432p4_sdk_3_40_01_02/docs/tidrivers/doxygen/html/_p_w_m_8h.html#ti_drivers_PWM_Synopsis
具体代码说明
360°舵机
- 头文件
#include <stdint.h>
/* Driver Header files */
#include <ti/drivers/PWM.h>
#include <ti/drivers/apps/LED.h>
/* Driver Configuration */
#include "ti_drivers_config.h"
- 主线程函数
void *mainThread(void *arg0)
{
PWM_init();
PWM_Params_init(&pwmParams);
pwmParams.idleLevel = PWM_IDLE_LOW;
pwmParams.periodUnits = PWM_PERIOD_HZ;
pwmParams.periodValue = 50;//20ms
pwmParams.dutyUnits = PWM_DUTY_US;
pwmParams.dutyValue = 1500;//1.5ms
pwm = PWM_open(CONFIG_PWM_0, &pwmParams);
PWM_start(pwm);
Turn_Speed_Cro(2,5);
return (NULL);
}
- 控制方向和速度的函数
void Turn_Speed_Cro(uint16_t direc,uint16_t speed)
{
if(direc==Dire_Right)
{
switch(speed)
{
case 5:PWM_setDuty (pwm, 1000);break;
case 4:PWM_setDuty (pwm, 1100);break;
case 3:PWM_setDuty (pwm, 1200);break;
case 2:PWM_setDuty (pwm, 1300);break;
case 1:PWM_setDuty (pwm, 1400);break;
case 0:PWM_setDuty (pwm, 1500);break;
}
}
else
{
switch(speed)
{
case 1:PWM_setDuty (pwm, 1600);break;
case 2:PWM_setDuty (pwm, 1700);break;
case 3:PWM_setDuty (pwm, 1800);break;
case 4:PWM_setDuty (pwm, 1900);break;
case 5:PWM_setDuty (pwm, 2000);break;
}
}
}
- 变量定义和函数声明
#define Dire_Right 1//方向为顺时针
#define Dire_Left 2//方向为逆时针
/*******Variable***********/
PWM_Handle pwm;
PWM_Params pwmParams;
void Turn_Speed_Cro(uint16_t direc,uint16_t speed);
180°舵机
控制角度函数
void Angle_Control(uint16_t angle)
{
uint32_t pulse;
pulse=500+(int)(angle*100/9);
PWM_setDuty(pwm, pulse);
}
电机驱动模块
配置(以一个电机为例)
具体代码说明
- 头文件
#include <stdint.h>
/* Driver Header files */
#include <ti/drivers/PWM.h>
#include <ti/drivers/GPIO.h>
#include <ti/drivers/apps/LED.h>
/* Driver Configuration */
#include "ti_drivers_config.h"
- 主线程函数
void *mainThread(void *arg0)
{
GPIO_init();
PWM_init();
PWM_Handle pwm;
PWM_Params pwmParams;
PWM_Params_init(&pwmParams);
pwmParams.idleLevel = PWM_IDLE_LOW;
pwmParams.periodUnits = PWM_PERIOD_US;
pwmParams.periodValue = 1000;//20ms
pwmParams.dutyUnits = PWM_DUTY_US;
pwmParams.dutyValue = 400;//1.5ms
pwm = PWM_open(CONFIG_PWM_0, &pwmParams);
GPIO_write(CONFIG_GPIO_0, 1);
GPIO_write(CONFIG_GPIO_1, 0);
PWM_start(pwm);
return (NULL);
// stop watchdog timer
}
- 控制转速的函数(40%~100%可转)
void speed_Cro(uint16_t percent)
{
uint32_t dutyCycle;
dutyCycle = (uint32_t) (((uint64_t) (PWM_DUTY_FRACTION_MAX *percent )) / 100);
PWM_setDuty(pwm, dutyCycle);
}
- 变量定义和函数声明
PWM_Handle pwm;
PWM_Params pwmParams;
void speed_Cro(uint16_t percent);