pwm 驱动电机 动不了。

发布于 2019-07-25 01:29:16
include 
#include

#define LED_PIN_NUM 59 /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 PD12*/
#define PWM_DEV_NAME "pwm4" /* PWM设备名称 */
#define PWM_DEV_CHANNEL 1 /* PWM通道 */

struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */

static int pwm_led_sample(int argc, char *argv[])
{
rt_uint32_t period, pulse, dir;

period = 5000000; /* 周期为0.5ms,单位为纳秒ns */
dir = 1; /* PWM脉冲宽度值的增减方向 */
pulse = 0; /* PWM脉冲宽度值,单位为纳秒ns */

/* 设置LED引脚脚模式为输出 */
rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
/* 拉高LED引脚 */
rt_pin_write(LED_PIN_NUM, PIN_HIGH);

/* 查找设备 */
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
return RT_ERROR;
}

/* 设置PWM周期和脉冲宽度默认值 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/* 使能设备 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);

while (1)
{
rt_thread_mdelay(5000);
if (dir)
{
pulse += 5000; /* 从0值开始每次增加5000ns */
}
else
{
pulse -= 5000; /* 从最大值开始每次减少5000ns */
}
if (pulse >= period)
{
dir = 0;
}
if (0 == pulse)
{
dir = 1;
}

/* 设置PWM周期和脉冲宽度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(pwm_led_sample, pwm sample);

按这些参数 来驱动电机,为啥电机不动呢?使用pwm, 用的驱动板 四路电机.png
接线 电机控制1 正转,,pwm1 里面的外面的 都试着接pd12 的pwm 信号,发现没反应?

查看更多

关注者
0
被浏览
971
4 个回答
shadowliang
shadowliang 2019-07-25
楼主,从代码上看,你的pd12好像不是pwm的输出信号引脚,你的pd12只是配置了一个输出模式,关于pwm信号,你的是配置了channel1,应该看看pwm channel1是哪个引脚的。
小住住
小住住 认证专家 2019-07-27
注释掉这两句就可以。
/* 设置LED引脚脚模式为输出 */
rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
/* 拉高LED引脚 */
rt_pin_write(LED_PIN_NUM, PIN_HIGH);
Carry
Carry 2019-12-02
请问楼主你的这个驱动模块单个电机支持最大电流是多少?

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览