OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
12
返回列表 发新帖
楼主: 正点原子

【正点原子产品资料】步进电机驱动器模块ATK-2MD5050资料下载和技术讨论链接

  [复制链接]

1

主题

37

帖子

0

精华

高级会员

Rank: 4

积分
592
金钱
592
注册时间
2017-6-15
在线时间
75 小时
发表于 2019-2-19 10:24:14 | 显示全部楼层
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2016-2-26
在线时间
41 小时
发表于 2019-3-12 18:32:43 | 显示全部楼层
为什么经过2k电阻后波形就失真了?
回复 支持 反对

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1031
金钱
1031
注册时间
2017-7-26
在线时间
275 小时
发表于 2019-3-13 09:39:26 | 显示全部楼层
原子哥啊,linux啥时候出来,等的花儿都谢了
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-3-13
在线时间
5 小时
发表于 2019-3-13 13:47:27 | 显示全部楼层
下载,下载, 好东西
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-3-2
在线时间
3 小时
发表于 2019-3-16 23:24:46 | 显示全部楼层
https://wenku.baidu.com/view/5565e5e31ed9ad51f01df2dc.html?qq-pf-to=pcqq.c2c
这个你们的链接,百度文库,但是我没有积分,要下载还要充值,很麻烦。能免费吗?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-4-3
在线时间
2 小时
发表于 2019-4-11 19:36:52 | 显示全部楼层
我需要驱动两个步进电机,可是我分别利用上面的程序驱动的时候,为什么只有一个轮子转呢?
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-11-4
在线时间
3 小时
发表于 2019-6-4 16:21:23 | 显示全部楼层
我的芯片没有TIME8,我按照你的例程,改成TIME1,但是电机就是不转,不知道什么原因
u8 rcr_remainder;   //Öظ′¼Æêyóàêy2¿·Ö
u8 is_rcr_finish=1; //Öظ′¼ÆêyÆ÷êÇ·ñéèÖÃíê3é
long rcr_integer;        //Öظ′¼ÆêyÕûêy2¿·Ö
long target_pos=0;  //óD·ûoÅ·½Ïò
long current_pos=0; //óD·ûoÅ·½Ïò
//DIR_Type motor_dir=CW;//Ë3ê±Õë
u8 motor_dir;
/************** Çy¶ˉÆ÷¿ØÖÆDÅoÅÏß3õê¼»ˉ ****************/
void Driver_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        //ê1ÄüPC¶Ë¿úê±Öó

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;        //PC0.2 ¶Ë¿úÅäÖÃ
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 //íÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //IO¿úËù¶èÎa50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                        //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOC
        GPIO_SetBits(GPIOA,GPIO_Pin_3);                                                         //PC0êä3ö¸ß Ë3ê±Õë·½Ïò  DRIVER_DIR
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);                                                //PC2êä3öμí ê1Äüêä3ö  DRIVER_OE
}

/***********************************************
//TIM8_CH2(PC7) μ¥Âö3åêä3ö+Öظ′¼Æêy1|Äü3õê¼»ˉ
//TIM8 ê±ÖóÆμÂê 72MHz
//arr£o×Ô¶ˉÖØ×°Öμ
//psc£oê±ÖóÔ¤·ÖÆμêy
************************************************/
void TIM1_OPM_RCR_Init(u16 arr,u16 psc)
{                                                          
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //TIM8ê±Öóê1Äü
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //ê1ÄüGPIOCíaéèê±Öóê1Äü                                                                                    
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);
        //éèÖøÃòy½ÅÎa¸′óÃêä3ö1|Äü,êä3öTIM1 CH1μ&#196WMÂö3å2¨DÎ
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM1_CH1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
       
        TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔؼÄ′æÆ÷ÖüÆúμÄÖμ         
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
        TIM_ClearITPendingBit(TIM1,TIM_IT_Update);

        TIM_UpdateRequestConfig(TIM1,TIM_UpdateSource_Regular); /********* éèÖÃÖ»óD¼Æêyòç3ö×÷Îa¸üDÂÖD¶Ï ********/
        TIM_SelectOnePulseMode(TIM1,TIM_OPMode_Single);/******* μ¥Âö3åÄ£ê½ **********/

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //Ñ¡Ôñ¶¨ê±Æ÷Ä£ê½:TIMÂö3å¿í¶èμ÷ÖÆÄ£ê½2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±è½Ïêä3ö2ê1Äü
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; /****** ±è½Ïêä3ö2Nê§Äü *******/
        TIM_OCInitStructure.TIM_Pulse = arr>>1; //éèÖÃ′y×°èë2¶»ñ±è½Ï¼Ä′æÆ÷μÄÂö3åÖμ
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ:TIMêä3ö±è½Ï¼«DÔ¸ß
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //¸ù¾YTIM_OCInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIMx

        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1ԤװÔØê1Äü         
        TIM_ARRPreloadConfig(TIM1, ENABLE); //ê1ÄüTIMxÔúARRéÏμÄԤװÔؼÄ′æÆ÷
       
        TIM_ITConfig(TIM1, TIM_IT_Update ,ENABLE);  //TIM1   ê1Äü»òÕßê§ÄüÖ¸¶¨μÄTIMÖD¶Ï

        NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM1ÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //ÏèÕ¼óÅÏ輶1¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //′óóÅÏ輶1¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
        NVIC_Init(&NVIC_InitStructure);  //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
       
        TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
        TIM_Cmd(TIM1, ENABLE);  //ê1ÄüTIM1                                                                          
}
/******* TIM8¸üDÂÖD¶Ï·tÎñ3ìDò *********/
void TIM1_UP_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM1,TIM_FLAG_Update)!=RESET)//¸üDÂÖD¶Ï
        {
                TIM_ClearITPendingBit(TIM1,TIM_FLAG_Update);//Çå3y¸üDÂÖD¶Ï±ê־λ               
                if(is_rcr_finish==0)//Öظ′¼ÆêyÆ÷Î′éèÖÃíê3é
                {
                        if(rcr_integer!=0) //Õûêy2¿·ÖÂö3å»1Î′·¢Ëííê3é
                        {
                                TIM8->RCR=RCR_VAL;//éèÖÃÖظ′¼ÆêyÖμ
                                rcr_integer--;//¼õéùRCR_VAL+1¸öÂö3å                               
                        }else if(rcr_remainder!=0)//óàêy2¿·ÖÂö3å 2»Î»0
                        {
                                TIM1->RCR=rcr_remainder-1;//éèÖÃóàêy2¿·Ö
                                rcr_remainder=0;//Çåáã
                                is_rcr_finish=1;//Öظ′¼ÆêyÆ÷éèÖÃíê3é                               
                        }else goto out;   //rcr_remainder=0£¬Ö±½óíË3ö                         
                        TIM_GenerateEvent(TIM1,TIM_EventSource_Update);//2úéúò»¸ö¸üDÂê¼t ÖØDÂ3õê¼»ˉ¼ÆêyÆ÷
                        TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE Ö÷êä3öê1Äü       
                        TIM_Cmd(TIM1, ENABLE);  //ê1ÄüTIM1                       
                        if(motor_dir==1) //èç1û·½ÏòÎaË3ê±Õë   
                                current_pos+=(TIM1->RCR+1);//¼óéÏÖظ′¼ÆêyÖμ
                        else          //·ñÔò·½ÏòÎaÄæê±Õë
                                current_pos-=(TIM1->RCR+1);//¼õè¥Öظ′¼ÆêyÖμ                       
                }else
                {
out:                is_rcr_finish=1;//Öظ′¼ÆêyÆ÷éèÖÃíê3é
                        TIM_CtrlPWMOutputs(TIM1,DISABLE);        //MOE Ö÷êä3ö1رÕ
                        TIM_Cmd(TIM1, DISABLE);  //1رÕTIM8                               
                //        printf("μ±Ç°Î»ÖÃ=%ld\r\n",current_pos);//′òó¡êä3ö
                }       
        }
}
/***************** Æô¶ˉTIM8 *****************/
void TIM1_Startup(u32 frequency)   //Æô¶ˉ¶¨ê±Æ÷8
{
        u16 temp_arr=1000000/frequency-1;
        TIM_SetAutoreload(TIM1,temp_arr);//é趨×Ô¶ˉÖØ×°Öμ       
        TIM_SetCompare1(TIM1,temp_arr>>1); //Æ¥ÅäÖμ2μèóúÖØ×°Öμò»°ë£¬êÇòÔÕ¼¿Õ±èÎa50%       
        TIM_SetCounter(TIM1,0);//¼ÆêyÆ÷Çåáã
        TIM_Cmd(TIM1, ENABLE);  //ê1ÄüTIM1
}
/********************************************
//Ïà¶Ô¶¨Î»oˉêy
//num 0¡«2147483647
//frequency: 20Hz~100KHz
//dir: CW(Ë3ê±Õë·½Ïò)  CCW(Äæê±Õë·½Ïò)
*********************************************/
void Locate_Rle(long num,u32 frequency,u8 dir) //Ïà¶Ô¶¨Î»oˉêy
{
        if(num<=0) //êy&#214;μD&#161;μèóú0 &#212;ò&#214;±&#189;ó·μ&#187;&#216;
        {
        //        printf("\r\nThe num should be greater than zero!!\r\n");
                return;
        }
        if(TIM8->CR1&0x01)//é&#207;ò&#187;′&#206;&#194;&#246;3&#229;&#187;1&#206;′·¢&#203;ííê3é  &#214;±&#189;ó·μ&#187;&#216;
        {
        //        printf("\r\nThe last time pulses is not send finished,wait please!\r\n");
                return;
        }
        if((frequency<20)||(frequency>100000))//&#194;&#246;3&#229;&#198;μ&#194;ê2&#187;&#212;ú·&#182;&#206;§&#196;ú &#214;±&#189;ó·μ&#187;&#216;
        {
        //        printf("\r\nThe frequency is out of range! please reset it!!(range:20Hz~100KHz)\r\n");
                return;
        }
        motor_dir=dir;//μ&#195;μ&#189;·&#189;&#207;ò       
        DRIVER_DIR=motor_dir;//éè&#214;&#195;·&#189;&#207;ò
       
        if(motor_dir==1)//&#203;3ê±&#213;&#235;
                target_pos=current_pos+num;//&#196;&#191;±ê&#206;&#187;&#214;&#195;
        else if(motor_dir==0)//&#196;&#230;ê±&#213;&#235;
                target_pos=current_pos-num;//&#196;&#191;±ê&#206;&#187;&#214;&#195;
       
        rcr_integer=num/(RCR_VAL+1);//&#214;&#216;&#184;′&#188;&#198;êy&#213;&#251;êy2&#191;·&#214;
        rcr_remainder=num%(RCR_VAL+1);//&#214;&#216;&#184;′&#188;&#198;êyóàêy2&#191;·&#214;
        is_rcr_finish=0;//&#214;&#216;&#184;′&#188;&#198;êy&#198;÷&#206;′éè&#214;&#195;íê3é
        TIM1_Startup(frequency);//&#191;a&#198;&#244;TIM1
}
/********************************************
//&#190;&#248;&#182;&#212;&#182;¨&#206;&#187;oˉêy
//num   -2147483648&#161;&#171;2147483647
//frequency: 20Hz~100KHz
*********************************************/
void Locate_Abs(long num,u32 frequency)//&#190;&#248;&#182;&#212;&#182;¨&#206;&#187;oˉêy
{
        if(TIM8->CR1&0x01)//é&#207;ò&#187;′&#206;&#194;&#246;3&#229;&#187;1&#206;′·¢&#203;ííê3é &#214;±&#189;ó·μ&#187;&#216;
        {
        //        printf("\r\nThe last time pulses is not send finished,wait please!\r\n");
                return;
        }
        if((frequency<20)||(frequency>100000))//&#194;&#246;3&#229;&#198;μ&#194;ê2&#187;&#212;ú·&#182;&#206;§&#196;ú &#214;±&#189;ó·μ&#187;&#216;
        {
        //        printf("\r\nThe frequency is out of range! please reset it!!(range:20Hz~100KHz)\r\n");
                return;
        }
        target_pos=num;//éè&#214;&#195;&#196;&#191;±ê&#206;&#187;&#214;&#195;
        if(target_pos!=current_pos)//&#196;&#191;±êoíμ±&#199;°&#206;&#187;&#214;&#195;2&#187;í&#172;
        {
                if(target_pos>current_pos)
                        motor_dir=1;//&#203;3ê±&#213;&#235;
                else
                        motor_dir=0;//&#196;&#230;ê±&#213;&#235;
                DRIVER_DIR=motor_dir;//éè&#214;&#195;·&#189;&#207;ò
               
                rcr_integer=abs(target_pos-current_pos)/(RCR_VAL+1);//&#214;&#216;&#184;′&#188;&#198;êy&#213;&#251;êy2&#191;·&#214;
                rcr_remainder=abs(target_pos-current_pos)%(RCR_VAL+1);//&#214;&#216;&#184;′&#188;&#198;êyóàêy2&#191;·&#214;
                is_rcr_finish=0;//&#214;&#216;&#184;′&#188;&#198;êy&#198;÷&#206;′éè&#214;&#195;íê3é
                TIM1_Startup(frequency);//&#191;a&#198;&#244;TIM1
        }
}
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-6-2
在线时间
4 小时
发表于 2019-6-4 20:25:07 | 显示全部楼层
本帖最后由 tbnet 于 2019-6-4 21:07 编辑

这个例程很好,但是很遗憾没有加减速功能,强烈建议原子哥将其完善!!!有哪位高手在这个基础上增加了加减速功能的麻烦分享一下,多谢!
回复 支持 反对

使用道具 举报

8

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-4-27
在线时间
87 小时
发表于 2019-6-9 11:10:20 | 显示全部楼层
打开是空白 怎么回事
回复 支持 反对

使用道具 举报

5

主题

53

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1033
金钱
1033
注册时间
2019-2-14
在线时间
187 小时
发表于 2019-7-4 15:00:44 | 显示全部楼层
fengzhicheng 发表于 2017-5-18 21:57
我怎么没法打开源代码,打开一片空白??问题已经解决,不能放在中文目录下,呵呵

就因为打开空白,我还重建了工程。看了你的评论,恍然大悟。赞
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-7-15
在线时间
30 小时
发表于 2019-7-28 10:52:17 | 显示全部楼层
原子哥,mini板例程里的drive.c文件中的void TIM8_OPM_RCR_Init(u16 arr,u16 psc)函数里为什么要加TIM_ClearITPendingBit(TIM8,TIM_IT_Update);函数,而且为什么还要加两次?

void TIM8_OPM_RCR_Init(u16 arr,u16 psc)
{                                                          
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); //TIM8时钟使能
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  //使能GPIOC外设时钟使能                                                                                    

        //设置该引脚为复用输出功能,输出TIM8 CH2的PWM脉冲波形
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM8_CH2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
       
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
        TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
        TIM_ClearITPendingBit(TIM8,TIM_IT_Update);

        TIM_UpdateRequestConfig(TIM8,TIM_UpdateSource_Regular); /********* 设置只有计数溢出作为更新中断 ********/
        TIM_SelectOnePulseMode(TIM8,TIM_OPMode_Single);/******* 单脉冲模式 **********/

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出2使能
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; /****** 比较输出2N失能 (互补)*******/
        TIM_OCInitStructure.TIM_Pulse = arr>>1; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
        TIM_OC2Init(TIM8, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

        TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);  //CH2预装载使能         
        TIM_ARRPreloadConfig(TIM8, ENABLE); //使能TIMx在ARR上的预装载寄存器
       
        TIM_ITConfig(TIM8, TIM_IT_Update ,ENABLE);  //TIM8   使能或者失能指定的TIM中断

        NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_IRQn;  //TIM8中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级1级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //从优先级1级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
       
        TIM_ClearITPendingBit(TIM8, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源
        TIM_Cmd(TIM8, ENABLE);  //使能TIM8                                                                          
}
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-4-23
在线时间
9 小时
发表于 2019-8-18 15:02:06 | 显示全部楼层
原子哥,拨码开关是怎么实现细分调节的呢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-7-31
在线时间
1 小时
发表于 2019-8-22 12:04:34 | 显示全部楼层
有视频教程吗
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2019-7-16
在线时间
22 小时
发表于 2019-9-8 16:43:14 | 显示全部楼层
请问怎么控制三个步进电机?例程里的定时器中断部分我看不懂,我现在增加了定时器8的输出通道,但是现在三个电机只能同时运动,无法做到单独控制
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2018-4-12
在线时间
16 小时
发表于 2019-9-22 21:02:29 | 显示全部楼层
指针解123 发表于 2017-8-10 17:59
**** 作者被禁止或删除 内容自动屏蔽 ****

想要驱动三个电机同时动作,应该怎么做您清楚不?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-6-10
在线时间
5 小时
发表于 2019-10-31 21:57:19 | 显示全部楼层
您好 请问 发送200个脉冲  在代码的哪个点确认200个脉冲全部发完
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-1-26
在线时间
0 小时
发表于 2020-1-26 16:04:21 | 显示全部楼层
感谢分享资料
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-2-3
在线时间
4 小时
发表于 2020-2-20 12:05:16 | 显示全部楼层
原子哥,我配其他驱动器可以用吗?刚试了下,电机动不了
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-29
在线时间
6 小时
发表于 2020-3-14 17:51:10 | 显示全部楼层
感谢!
回复 支持 反对

使用道具 举报

1

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2019-8-29
在线时间
31 小时
发表于 2020-4-5 11:03:26 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-5-9
在线时间
2 小时
发表于 2020-5-9 08:57:29 | 显示全部楼层
101332
回复 支持 反对

使用道具 举报

14

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-12-4
在线时间
62 小时
发表于 2020-7-30 17:56:04 | 显示全部楼层
原子哥,驱动器的源码可以开源吗
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-6-30
在线时间
11 小时
发表于 2020-7-31 09:23:18 | 显示全部楼层
参考一下
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2020-8-15
在线时间
8 小时
发表于 2020-10-27 10:50:11 | 显示全部楼层
SunnyOpen 发表于 2018-10-22 12:55
我需要控制多个电机,我用原子的源码控制一个电机,电机转的很正常,我控制第二个的时候,用了定时器3 ,把 ...

你用的驱动器是TB6560吗  为什么我用原子的源码没转起来啊

回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2017-1-31
在线时间
14 小时
发表于 2020-11-13 18:01:36 | 显示全部楼层
有没有HAL库的啊,这里时钟配置好复杂不好移植到HAL库啊
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2017-1-31
在线时间
14 小时
发表于 2020-11-13 18:07:02 | 显示全部楼层
一毛零Logo 发表于 2020-11-13 18:01
有没有HAL库的啊,这里时钟配置好复杂不好移植到HAL库啊

有没有哇,5555,标准库跟HAL太多函数不一样了,自己搞了半天都不行
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2020-11-26
在线时间
8 小时
发表于 2020-11-26 21:10:14 | 显示全部楼层
有视频讲解吗?
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-7-14
在线时间
6 小时
发表于 2021-7-15 21:32:31 | 显示全部楼层
一毛零Logo 发表于 2020-11-13 18:01
有没有HAL库的啊,这里时钟配置好复杂不好移植到HAL库啊

对啊,时钟配置太复杂了,希望能出HAL库的步进电机
回复 支持 反对

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2018-9-6
在线时间
35 小时
发表于 2023-6-21 09:04:09 | 显示全部楼层
原子哥    正点原子步进电机驱动器模块ATK-2MD5050模块资料下载  链接 没有了   能否更新一下呢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-29 16:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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