OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6117|回复: 5

PWM调节问题

[复制链接]

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2018-1-28
在线时间
52 小时
发表于 2018-7-24 18:20:59 | 显示全部楼层 |阅读模式
15金钱
PWM调速后,小车黑线寻迹两个电机一起开动时调速起到作用,一个电机开动时未起到调速作用。
请问大家这是什么原因?   附上程序源码.

track.h
#ifndef __congig_H__
#define __config_H__





sbit IN1 = P1^2; //为1 左电机反转
sbit IN2 = P1^3; //为1 左电机正转
sbit IN3 = P1^6; //为1 右电机正转
sbit IN4 = P1^7; //为1 右电机反转
sbit EN1 = P1^4; //为1 左电机使能
sbit EN2 = P1^5; //为1 右电机使能

sbit left_led = P3^4;
sbit right_led = P3^2;


#define  left_motor_en           EN1 = 1  
#define         right_motor_en     EN2 = 1  
#define         left_motor_back    IN1 = 1;IN2 = 0
#define         left_motor_go      IN1 = 0;IN2 = 1
#define         right_motor_go     IN3 = 1;IN4 = 0
#define  right_motor_back        IN3 = 0;IN4 = 1
#define  left_motor_stop        EN1 = 0  
#define         right_motor_stop   EN2 = 0


#define  unit  unsigned int
#define  uchar unsigned char

#endif





track.c
#include <reg52.h>//包含51头文件
#include <track.h>

uchar pwm_left_val = 200;
uchar pwm_right_val = 200;
uchar pwm_t;

void timer0()  interrupt 1
{
        pwm_t++;
        if(pwm_t == 255)
                pwm_t = EN1 = EN2 = 0;
        if(pwm_left_val == pwm_t)
                EN1 = 1;
        if(pwm_right_val == pwm_t)
                EN2 = 1;
}


void forward()
{
        left_motor_go;
        right_motor_go;
}


void left_run()
{
        left_motor_stop;
        right_motor_en;
        right_motor_go;
}

void right_run()
{
        right_motor_stop;
        left_motor_en;
        left_motor_go;
}

void main()
{
        TMOD = 0x02;
        TH0 = 220;
        TL0 = 220;
        TR0 = 1;
        ET0 = 1;
        EA = 1;
        while(1)
        {
                if(right_led == 0&&left_led == 0)
                        forward();
                if(right_led == 0&&left_led == 1)
                        left_run();
                if(right_led == 1&&left_led == 0)
                        right_run();
        }

}


最佳答案

查看完整内容[请看2#楼]

这样吧,建议先不用定时器部分,直接在主函数中调速其中一个电机,如: void main(void) { unsigned int i=20,j=10; while(1) { i+=10; if(i>255) { i=20; } j=100; while(j--) { delay(i); //启动电机 delay(255-i); //失 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-5-19
在线时间
10 小时
发表于 2018-7-24 18:21:00 | 显示全部楼层
本帖最后由 pcbzy 于 2018-8-6 12:09 编辑

这样吧,建议先不用定时器部分,直接在主函数中调速其中一个电机,如:
void main(void)
{     unsigned int i=20,j=10;
     while(1)
     {
            i+=10;
            if(i>255)
            {
                    i=20;
            }
            j=100;
            while(j--)
           {
                delay(i);                //启动电机
                delay(255-i);
                //失能电机
            }
     }
}



回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-7-25 01:39:45 | 显示全部楼层
看波形。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2018-1-28
在线时间
52 小时
 楼主| 发表于 2018-7-25 08:05:10 | 显示全部楼层

还是不懂,两个电机驱动时电机速度调节到慢速,但此时当一个电机驱动时,转速很快,调速没有起到作用。。?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-7-26 02:03:25 | 显示全部楼层
展缓ZvN4e 发表于 2018-7-25 08:05
还是不懂,两个电机驱动时电机速度调节到慢速,但此时当一个电机驱动时,转速很快,调速没有起到作用。。 ...

看了波形么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-5-19
在线时间
10 小时
发表于 2018-8-6 12:08:43 | 显示全部楼层
delay()函数你自己定个合适的单位,看看单个电机是否可调速,如果这样可以的话,那就查程序逻辑问题,等你的试验结果,微信:baofeng_zouyu
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 18:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表