1017|2

1458

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【CH32X035 DIY】+限位器信号检测与处理 [复制链接]

 
本帖最后由 jinglixixi 于 2024-2-3 23:28 编辑

步进丝杠套装中,通常包括滑块、步进电机、编码器、驱动器、滑块导轨、限位器等,见图1所示。

 

图1 行走装置结构

 

其中,限位器的作用是保护步进电机在异常的情况下超出行程所限定的运动范围。

在所用的步进丝杠套装中,限位器的型号为SN04-N,是一种金属型感应器,其检测距离为4mm,见图2所示。

该限位器属NPN型,即在感应状态下是输出低电平。从资料可知,其工作电压的范围是:6~36V DC,它的典型用法如图3所示。

 

 

  

图2 限位器

 

 

图3 典型用法

 

由于是打算以CH32X035进行控制,为此在5V电源的情况下对其进行了性能的检测。

经检测,它在5V电源的情况下是可以输出检测信号的,故可以同CH32X035开发板配合使用。

为了用以LED1和LED2来指示异常的位置,是使用PB0来控制LED1,以PB1来控制LED2。

 

图4  LED电路

 

对PB0和PB1的引脚配置函数为:

void GPIO_LED_INIT(void)
{
    GPIO_InitTypeDefGPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

为了实时地监视限位器的状态变化,是以中断的方式来进行判别和处理,并将PA0、PA1、PA2方便连接到限位器的信号端。

进行中断处理的初始化函数为:

void EXTI0_INT_INIT(void)
{
GPIO_InitTypeDefGPIO_InitStructure = {0};
EXTI_InitTypeDefEXTI_InitStructure = {0};
NVIC_InitTypeDefNVIC_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, NABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0|EXTI_Line1|EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI7_0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

实现中断处理的函数为:

void EXTI7_0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
  {
     printf("Run at EXTI\r\n");
     EXTI_ClearITPendingBit(EXTI_Line0);
  }
  if(EXTI_GetITStatus(EXTI_Line1)!=RESET)
  {
     printf("Run at EXTI_a\r\n");
     EXTI_ClearITPendingBit(EXTI_Line1);
     GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_RESET);
  }
  if(EXTI_GetITStatus(EXTI_Line2)!=RESET)
  {
     printf("Run at EXTI_b\r\n");
     GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);
     EXTI_ClearITPendingBit(EXTI_Line2);
  }
}

实现设计功能的主程序为:

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init(115200);
    EXTI0_INT_INIT();
    GPIO_LED_INIT();
    while(1)
    {
        Delay_Ms(1000);
        printf("Run at main\r\n");
        GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
        GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
    }
}

经程序的编译及下载,其测试结果如图5至图9所示。此外,在触发PA1时会点亮LED1,在触发PA2时会点亮LED2。

 

图5  触发PA0效果

 

 

图6  触发PA1效果

 

 

图7  触发PA2效果

 

   

图8  未触发状态

 

 

图9  触发状态

 

演示视频:

限位控制

 

 

最新回复

这个太大了,限位器也太大了,可以用小的传感器,精度可以更好一点   详情 回复 发表于 2024-2-4 10:16
点赞 关注(1)
 
 

回复
举报

277

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

这个太大了,限位器也太大了,可以用小的传感器,精度可以更好一点

点评

有道理,购置时看图被忽悠了。  详情 回复 发表于 2024-2-4 23:56
 
 
 

回复

1458

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
Verifone 发表于 2024-2-4 10:16 这个太大了,限位器也太大了,可以用小的传感器,精度可以更好一点

有道理,购置时看图被忽悠了。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表