发 帖  
[问答]

stm32串口如何控制ULN2003驱动28BYJ-48步进电机方向、旋转角度?

头像被屏蔽
3726 STM32 步进电机 来自手机
2019-12-18 09:46:35   评论 分享淘帖 邀请回答 举报
8个回答
2019-12-18 13:48:50 1 评论

举报

1 条评论
  • 2019-12-18 14:32

    感谢 抽空回复 我是个菜鸟现在只能实现简单的串口控制正反转 能麻烦您帮忙改改嘛

    电机

    #include "motor.h"
    #include "delay.h"
    #include "usart.h"

    uint16_t phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A   
    uint16_t phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D


    void Delay_xms(u16 x)
    {
    u16 i,j;
    for(i=0;i<x;i++)
      for(j=0;j<112;j++);
    }

    void Moto_Init(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStructure);
    GPIO_ResetBits(GPIOC,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );

    }

    void Motorcw(u16 speed)
    {  
        uint8_t i;  
      
        for(i=0;i<4;i++)  
        {  
            GPIO_Write(GPIOC,phasecw);  
                                    delay_ms(speed);
        }  
    }
    void Motorccw(u16 speed)
    {  
        uint8_t i;  
        for(i=0;i<4;i++)  
        {  
            GPIO_Write(GPIOC,phaseccw);  
                                    delay_ms(speed);
        }  
    }

    void MotorStop(void)  
    {  
        GPIO_Write(GPIOC,0x0000);  
    }

    主函数

    #include "sys.h"
    #include "delay.h"
    #include "motor.h"
    #include "usart.h"

    u16 len;
    u16 t;
    u8 data=0;
    int main(void)
    {        
            NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
            uart_init(9600);         //串口初始化为115200
            delay_init();            //延时函数初始化         
            Moto_Init();
            while(1)
            {
    //                        Motorcw_angle(180,8);
    //                        MotorStop();
    //                        delay_ms(1000);
    //                        Motorccw_angle(180,8);
    //                        MotorStop();
    //                        delay_ms(1000);
                    if(USART_RX_STA&0x8000)
                    {                                            
                            data=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
                            data=USART_RX_BUF[0];
                            switch(data)
                            {                                       
                                    case 'L':printf("\r\n反转\r\n");Motorcw(10);data=0;break;
                                    case 'R':printf("\r\n正转\r\n");Motorccw(10);data=0;break;
                                    case 'S':printf("\r\n暂停\r\n");MotorStop();data=0;break;
                                    default : break;
                            }
    //                        printf("\r\n\r\n");//插入换行
                            USART_RX_STA=0;
                    }
            }
    }

2019-12-18 16:45:32 3 评论

举报

3 条评论
  • 2019-12-18 16:58

    一个脉冲0.08789度  一个周期下来是0.70312度,能麻烦您帮忙改改吗,有偿回复,感谢

    jiciwi 回复 罗帅: 2019-12-18 17:10

    你得把需要转多少角度,哪个方向,这些信息串口发下来呀,你收到后,除一下不就是多少脉冲了么

    罗帅 回复 jiciwi: 2019-12-18 17:28

    大虾  我不会啊  我现在的水品只能实现正反转,能在原有的基础上教教我吗 或者加你QQ  感谢了

2019-12-18 21:05:34 1 评论

举报

1 条评论
2019-12-22 10:47:43 1 评论

举报

1 条评论
  • 2019-12-23 09:34

    感谢大佬抽空回复  我现在用的是ULN2003驱动的28BYJ-48单四拍电机,精度要求没那么高,只是想用串口控制它的角度,但是一直没能搞定  您能帮帮我吗?可以付一定的酬劳

2020-3-13 16:48:20 评论

举报

2020-3-13 16:48:50 评论

举报

2020-3-13 16:49:11 评论

举报

2020-3-13 16:49:33 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

站长推荐 上一条 /7 下一条

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