【求助】用51单片机控制电调程序。

2019-07-18 15:21发布

本帖最后由 Lango. 于 2016-8-7 10:07 编辑

因为刚刚开始自学无刷电机,所以程序还有许多不懂的地方,希望能够得到解答,十分感谢!

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int  
uchar code duojishu[]= {11,12,13,14,15,16,17,19,20,21,22,23,24};/*?70us????????????***/
                                                                                 /*  0  1  2  3  4  5  6  7  8  9 10 11 12*/

sbit Sevro_moto_pwm                =        P1^5;                  
sbit Sevro_moto_pwm2        =        P1^4;                  

uchar            pwm_val_left  =        0;                                                
uchar              push_val_left =        0;                                 
uchar                 AD_CHANNEL;                                                                              

void delay1ms(uchar z)   
{
    uchar a,b,c;
    for(c = z ;c > 0 ;c--)
        for(b = 142 ; b > 0 ;b--)
            for(a = 2 ;a > 0 ;a--);
}

void pwm_Servomoto(void)
{  

        if(pwm_val_left <= push_val_left)
        {        
                Sevro_moto_pwm  = 1;
                Sevro_moto_pwm2 = 1;
        }
        else
        {         
                Sevro_moto_pwm  = 0;
                Sevro_moto_pwm2 = 0;
        }
        if(pwm_val_left >= 215)
                pwm_val_left = 0;

}

time1() interrupt 1
{         
                TH0 = (65536 - 70)/256;         
                TL0 = (65536 - 70)%256;
                pwm_val_left++;
                pwm_Servomoto();
}  
void main()
{         
        TMOD = 0x01;        
        TH0 = (65536 - 70)/256;         
        TL0 = (65536 - 70)%256;
        TR0 = 1;
        ET0 = 1;                 
        EA  = 1;            
        
        push_val_left = duojishu[0]; //???????
           
        delay1ms(5000);delay1ms(5000);delay1ms(5000);
        delay1ms(5000);delay1ms(5000);delay1ms(5000);
        delay1ms(5000);delay1ms(5000);delay1ms(5000);
        delay1ms(5000);delay1ms(5000);delay1ms(5000);
        delay1ms(5000);delay1ms(5000);delay1ms(5000);//?????????????????/??0?(????5???)

        while(1)
{         
           
         for( AD_CHANNEL = 0; AD_CHANNEL < 9; AD_CHANNEL++) //??????????!(??/???1)????9?
        {         push_val_left = duojishu[AD_CHANNEL];
                delay1ms(5000);  
                delay1ms(5000);
         }
        
        for( AD_CHANNEL = 9; AD_CHANNEL > 1; AD_CHANNEL--) //?9????????!(??/???1)????1?
        {         push_val_left = duojishu[AD_CHANNEL];
                delay1ms(5000);  
                delay1ms(5000);
         }  
        
                push_val_left = duojishu[0];
        
                while(1)
                        ;
}  
}
已经用程序将电机驱动转动起来,但是注释的部分不知为何变成了问号。
可是我还有许多不懂的地方,希望有大神能帮我注释一下。不胜感激!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
fan497172861
1楼-- · 2019-07-18 15:54
你这个没什么啊  注释部分说明数组的用处,剩下的两个不就是哥循环吗
Lango.
2楼-- · 2019-07-18 17:52
fan497172861 发表于 2016-8-8 09:31
你这个没什么啊  注释部分说明数组的用处,剩下的两个不就是哥循环吗

请问一下 我就是数组那里没看懂 能告诉我一下意思吗 为何是{11,12,13,14,15,16,17,19,20,21,22,23,24}
fan497172861
3楼-- · 2019-07-18 19:59
 精彩回答 2  元偷偷看……
fan497172861
4楼-- · 2019-07-18 21:56
fan497172861 发表于 2016-8-8 17:23
这个应该跟你的电机转的角度或什么的有关啊    你看下面的循环都是取数组里面的数然后给端口的

看了一下不是给端口的,是取数与PWM 那个相关的比较的数,这个就跟电机原理有关了,应该是PWM的占空比相关了。
Lango.
5楼-- · 2019-07-19 01:02
fan497172861 发表于 2016-8-8 17:30
看了一下不是给端口的,是取数与PWM 那个相关的比较的数,这个就跟电机原理有关了,应该是PWM的占空比相关了。

十分感谢,找到了方向!
18908804825
6楼-- · 2019-07-19 02:07
这是MDK的编码设置问题吧。。。应该,设置一下编码格式

一周热门 更多>