找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4969|回复: 6
打印 上一主题 下一主题
收起左侧

51单片机如何控制电机且如何用pwm控制调速,知道占空比等理论,不知道实际操作是什...

[复制链接]
跳转到指定楼层
楼主
45黑币
新人我要控制电机运作,完全懵逼,且还要被要求用pwm调速,我知道占空比之类的理论,但不知道pwm是个什么玩意,还需要自行编写一套程序做数模转换什么的么?纯萌新

QQ截图20190311224127.png (94.46 KB, 下载次数: 44)

QQ截图20190311224127.png

QQ截图20190311224221.png (126.9 KB, 下载次数: 54)

QQ截图20190311224221.png

最佳答案

查看完整内容

呵呵呵,正好我有一个简单的,你一看就明白了: #include sbit z=P1^0;//直流电机一个脚,控制用,另一脚一定接电源正极 sbit k1=P3^1; sbit k2=P3^0; sbit k3=P3^2; sbit k4=P3^3; unsigned char i,n; void Delay10ms(unsigned char c) { unsigned char a,b; for(c;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void zd(void)//电机转动函数 { if (n==1) { z=1 ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164602 发表于 2019-3-11 22:44 | 只看该作者
呵呵呵,正好我有一个简单的,你一看就明白了:
#include<reg51.h>

sbit z=P1^0;//直流电机一个脚,控制用,另一脚一定接电源正极
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;

unsigned char i,n;

void Delay10ms(unsigned char c)
{
    unsigned char a,b;
    for(c;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

void zd(void)//电机转动函数
{
        if (n==1)
        {
                z=1;//通电
                Delay10ms(60-i);//占空比中的占的值
                z=0;//断电
                Delay10ms(i);//占空比中的空的值,周期固定为60ms
        }
        else
        {
                z=0;
        }
}

void main(void)
{
        unsigned char m;
        n=0;z=0;
        while (1)
        {

                if(k1==0)               
                {
                        Delay10ms(1);       
                        if(k1==0)               
                        {

                                n=1;
                                i=0;

                                for (m=0;((m<50)&&(k1==0));m++)       
                            {
                                    Delay10ms(1);
                            }
                        }
                }

                if(k2==0)               
                {
                        Delay10ms(1);       
                        if(k2==0)               
                        {

                                n=0;

                                for (m=0;((m<50)&&(k2==0));m++)       
                            {
                                    Delay10ms(1);
                            }
                        }
                }

                if(k3==0)               
                {
                        Delay10ms(1);       
                        if(k3==0)               
                        {

                                n=1;
                                i=i+10;
                                if (i>50)
                                {
                                        i=50;
                                }

                                for (m=0;((m<50)&&(k3==0));m++)       
                            {
                                    Delay10ms(1);
                            }
                        }
                }

                if(k4==0)               
                {
                        Delay10ms(1);       
                        if(k4==0)               
                        {

                                n=1;
                                i=i-10;
                                if (i>50)
                                {
                                        i=0;
                                }

                                for (m=0;((m<50)&&(k4==0));m++)       
                            {
                                    Delay10ms(1);
                            }
                        }
                }
                zd();
        }
}


怎么样?对应电路是这样的:




回复

使用道具 举报

板凳
ID:317383 发表于 2019-3-12 07:51 | 只看该作者
利用键盘控制直流电机转动速度,从而控制小车运动。
部分代码,具体下载附件(包括代码和仿真)
void init_time()
{
        TMOD=0X01;
        TH0=(65536-500)/256;
        TL0=(65536-500)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void time0() interrupt 1 using 1
{
        static uchar num;
        num++;
        if(num==numR) ENB=~ENB;
        if(num==numL)        ENA=~ENA;       
        if(num==100){ENA=~ENA;ENB=~ENB;num=0;}
        TH0=(65536-500)/256;
        TL0=(65536-500)%256;       
}
小车控制(PWM调节).rar (18 KB, 下载次数: 37)




pwmCon.jpg (264.88 KB, 下载次数: 47)

pwm控制仿真图

pwm控制仿真图
回复

使用道具 举报

地板
ID:438987 发表于 2019-3-12 22:48 | 只看该作者
HC6800-ES-V2.0 发表于 2019-3-11 22:44
呵呵呵,正好我有一个简单的,你一看就明白了:
#include

电机转动函数那里倒是很有启发,但键盘控制那个(m=0;((m<50)&&(k1==0));m++)  不是很能看懂,打算参考
做if选择语句+!cw(按位取反)+定时器或者延时函数  的这种模式做
回复

使用道具 举报

5#
ID:438987 发表于 2019-3-12 22:49 | 只看该作者
大体思路应该是很清晰了,细枝末节我再想想,谢谢
回复

使用道具 举报

6#
ID:164602 发表于 2019-3-13 07:20 | 只看该作者
雨夜带刀 发表于 2019-3-12 22:48
电机转动函数那里倒是很有启发,但键盘控制那个(m=0;((m

你说的这个,是松键消抖的功能,并且可以让程序不会“死于一直按着不松手”。
回复

使用道具 举报

7#
ID:438987 发表于 2019-3-13 21:23 | 只看该作者
HC6800-ES-V2.0 发表于 2019-3-13 07:20
你说的这个,是松键消抖的功能,并且可以让程序不会“死于一直按着不松手”。

松键消抖,嗯,我还是做一个                temp=P2;                              
                temp=temp&0xf0;                       
                if(temp!=0xf0)                        
                {
                        temp=P2;                           
                        {
                               case 0xbe:key=0;break;         
                                case 0xde:key=1;break;           
                                case 0xee:key=2;break;
                        }
                        while(temp!=0xf0)                  
                        {
                                temp=P2;
                                temp=temp&0xf0;                 
                        }
这种类型的消抖吧,虽然感觉方法笨了点,
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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