标题: DM542驱动器控制电机如何使其来回转动,有无大佬指导下? [打印本页]

作者: 初学者Captain    时间: 2022-10-29 09:04
标题: DM542驱动器控制电机如何使其来回转动,有无大佬指导下?
#include <REGX52.H>

unsigned char timer0;
sbit ENA=P1^0;
sbit PWM=P1^1;
sbit DIR=P1^2;

void delay(unsigned int a)
{
     unsigned char b=0;

         while(a--)
         {
            for(b=0;b<200;b++)
                {
                }
        }
}

void kongzhi_Init()
{
    TMOD|=0X11;
    TH1=0XFE;
    TL1=0X33;
    TR1=1;
    IE=0X8A;
}
void Tlzd() interrupt 3
{
    TH1=0XFE;
    TL1=0X33;
    timer0++;
}
void main()
{
     kongzhi_Init();
           while(1)
                 {
     while(1)
     {
                        
                                  DIR=1;
        if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }
                                       
     }
                      DIR=1;
                 if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }  
                                
     }
         }

步进电机2.JPG (1.6 MB, 下载次数: 57)

步进电机2.JPG

作者: 初学者Captain    时间: 2022-10-29 10:36
不知道该如何调试 使其来回转动
作者: Hephaestus    时间: 2022-10-29 12:07
改DIR就来回动了,为什么你不改?
作者: gongnn    时间: 2022-10-29 12:22
void main()
{
     kongzhi_Init();
           while(1)
                 {
     while(1)
     {
                        
                                  DIR=1;
        if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }
                                       
     }
                      DIR=0;
                 if(timer0>0.1)
        {
            timer0=0;
        }
        if(timer0<1)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
        }  
                                
     }
         }
作者: 初学者Captain    时间: 2022-10-29 18:53
Hephaestus 发表于 2022-10-29 12:07
改DIR就来回动了,为什么你不改?

我试了下  电机还是只会往一个方向运行
作者: 初学者Captain    时间: 2022-10-29 19:10
gongnn 发表于 2022-10-29 12:22
void main()
{
     kongzhi_Init();

大佬 你这个跟我的是一样的把  都是只会往一个方向转到底,并不能使其来回转动啊
作者: 初学者Captain    时间: 2022-10-29 19:19
Hephaestus 发表于 2022-10-29 12:07
改DIR就来回动了,为什么你不改?

改了 还是不行

作者: gongnn    时间: 2022-10-29 19:57
单片机有没有供电,接线对不对。单片机定时器有没有。

程序再简化点,切换dir方向后直接用delay函数延时试试。
作者: 初学者Captain    时间: 2022-10-29 20:10
gongnn 发表于 2022-10-29 19:57
单片机有没有供电,接线对不对。单片机定时器有没有。

程序再简化点,切换dir方向后直接用delay函数延时 ...

试过了 还是不太行
作者: Hephaestus    时间: 2022-10-29 21:02
初学者Captain 发表于 2022-10-29 19:19
改了 还是不行

测一下驱动器DIR+、DIR-两者之间的电压,很可能是接错了。
作者: 初学者Captain    时间: 2022-10-29 22:16
Hephaestus 发表于 2022-10-29 21:02
测一下驱动器DIR+、DIR-两者之间的电压,很可能是接错了。

用的是共阳极接法DIR+接的是正5V, DIR-接的才是I/O口 应该接线没问题吧
作者: 初学者Captain    时间: 2022-10-30 17:02
gongnn 发表于 2022-10-29 12:22
void main()
{
     kongzhi_Init();

大佬  这个程序不行 跟我的差不多 想让它来回转动的话  这样貌似不太行
作者: yzwzfyz    时间: 2022-10-31 09:43
1、前进:DIR=1,给出一个脉冲,间隔一个时间TJ,再给出一个脉冲,再间隔一个时间TJ,再……。
2、后退:DIR=0,给出一个脉冲,间隔一个时间TJ,再给出一个脉冲,再间隔一个时间TJ,再……。
3、做个定时器,时常数就是TJ,这样每间隔一个TJ,给出一个脉冲就可以了,转向只要切换DIR。
4、关键点:把TJ做成变量,让每次的TJ都可以变化。
加速:每发一个脉冲就将TJ-N。例如:起步,将TJ调到最大,如:800ms,而后每次-5:800-5,800-5*2,800-5*3,800-5*4……,直到速最快:例如=10ms。
减速:每发一个脉冲就将TJ+N。例如:当前TJ=25,而后每次+10:25+10,25+10*2,25-10*3,25+10*4……,直到你满意的速率。
换向:不要立即改变DIR,而是先减速,停止时(你认为可以了),再改变DIR,再从起动开始加速。
5、TJ的最小值(最快速)、最大值(停止前)、加减速的N量,自己根据负载大小实践一下就可以得到了。

运行离开不了物理概念,主要是牛顿的加速度定律,
记住:先做方案,再画出流程图,走通流程图、再写程序。
作者: 初学者Captain    时间: 2022-10-31 15:23
yzwzfyz 发表于 2022-10-31 09:43
1、前进:DIR=1,给出一个脉冲,间隔一个时间TJ,再给出一个脉冲,再间隔一个时间TJ,再……。
2、后退:D ...

大佬  能详细地指导下吗? 你这有点多我有点懵




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1