程序员从来不缺少对新事物的好奇心和动手探索未知世界的勇气。
从听说树莓派到因好奇购买Model B已经有两年多,最近重新找出来是想实现一台简易的电火花机(电极控制模块),做电火花机是为了给高速钢打孔。
电火花机长什么样在网上可以找得到,就是取断丝锥用的型号;
电极控制模块设计思路大致如下:
初始时步进电机顺时针转动,电极逐渐靠近工件,达到临界值后开始放电产生电火花;此时工件和电极之间电流很小;
当电极和工件之间距离为零时,发生短路,此时电流会达到一个设定的极限值,传感器检测到之后将信号反馈给树莓派,然后控制步进电机逆时针转动,电极远离工件。
当电流小于某一临界值后,步进电机正转,如此往复......
步进电机和驱动版从网上购买,进电机控制代码如下,用C++编写,前期为了测试,加入了按键控制电机转动方向的逻辑。
#include "wiringPi.h" #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <sys/time.h> #include <time.h> #define CLOCKWISE 1 #define COUNTER_CLOCKWISE 2 int flag = 1; int btn_direction = 1; int direction = 1; int pin[] = {26, 27, 28, 29}; void rotate(int* pins, int direction); void btnInterrupt(); int start_timer(); int main() { if(wiringPiSetup() != -1) //初始化wiringPi库 { for(int pi = 0;pi < 4; pi++){ pinMode(pin[pi], OUTPUT); } printf("test interrput\n"); //打印提示信息 pinMode(btn_direction, INPUT); //引脚0为输入模式 pullUpDnControl(btn_direction, PUD_UP); //设置0号引脚上拉 }else{ printf("can't init wiringPi\n"); //初始化失败时,打印出提示信息,并且推出 return -1; } //注册中断程序 if(wiringPiISR(btn_direction, INT_EDGE_FALLING, &btnInterrupt) < 0) //设置引脚下降沿触发 { printf("unable ISR\n"); } start_timer(); while(1){ if(direction == 1){ rotate(pin, CLOCKWISE); }else{ rotate(pin, COUNTER_CLOCKWISE); } } return 0; } //按键服务函数 void btnInterrupt() { flag = 0; } void rotate(int* pins, int direction) { for (int i = 0; i < 4; i++) { if (CLOCKWISE == direction) { for (int j = 0; j < 4; j++) { if (j == i) { digitalWrite(pins[3 - j], 1); // output a high level } else { digitalWrite(pins[3 - j], 0); // output a low level } } } else if (COUNTER_CLOCKWISE == direction) { for (int j = 0; j < 4; j++) { if (j == i) { digitalWrite(pins[j], 1); // output a high level } else { digitalWrite(pins[j], 0); // output a low level } } } delay(2); } } void signalHandler(int signo) { switch (signo){ case SIGALRM: int kk = digitalRead(btn_direction); if(kk == 1 && flag == 0){ if(direction == 1){//值被修改并且按键已经抬起 direction = 2; }else{ direction = 1; } flag = 1; } printf("%d\n", kk); break; } } //定时轮训变量状态,以确认步进电机方向 int start_timer() { signal(SIGALRM, signalHandler); struct itimerval new_value, old_value; new_value.it_value.tv_sec = 0; new_value.it_value.tv_usec = 1; new_value.it_interval.tv_sec = 0; new_value.it_interval.tv_usec = 100000; setitimer(ITIMER_REAL, &new_value, &old_value); return 0; }
以上有一部分是为了测试时,物理按键消除抖动的,实际打孔时信号由电流传感器产生,不存在抖动问题。
相关推荐
树莓派驱动步进电机28BYJ-48-5V(C语言版)
用树莓派控制步进电机,做一个简单的门禁系统
用树莓派测步进电机加速度代码
树莓派控制步进电机,PWM,模拟三角函数
树莓派驱动步进电机28BYJ-48-5V(Python语言版)
秉承高内聚低耦合的指导思想,编写的motor_run()函数,可以指定步进电机的速度和角度。速度可正可负,角度为角度制。
matlab代码,生成python程序,用树莓派控制步进电机,PWM,模仿三角函数
树莓派对接步进电机实验,基于python3,算法很精巧,不用构造矩阵
基于树莓派的28BYJ-48步进电机的驱动代码。实现旋转一圈,可自行增加功能,实现对其控制旋转角度,循环,正反转等控制。有需要的朋友可以下载,有任何问题也可以联系我,一起交流。利用树莓派引脚控制步进电机。
【树莓派步进电机】【5】多线程篇(笔记)插值控制法【资料】
在树莓派上使用python控制步进电机实现S型加减速,能够有效减小误差,注释详细 实现原理: 假设给定条件:加速段的末速度,初速度,加速时间,以此来计算控制步进电机的每一步速度。 加速段由加加速段(IncAccel)和减...
树莓派驱动步进电机程序 通过UNL2003来驱动28BYJ-48步进电机 包括硬件连接说明、程序操作说明等。
【树莓派多线程】【ADXL345】【步进电机】步进电机联动加速度控制【资料】
树莓派全能机器人扩展板:步进电机使用教程。步进电机。
树莓派基于DRV8825进行步进电机的实验,含驱动,实际调测通过
树莓派步进带A4988电机控制器的Raspberry Pi步进电机控制
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的...基于stm32控制的步进电机机械臂物流搬运小车(设计资料)(双pid控制环+陀螺仪+树莓派视觉).zip
基于stm32控制的步进电机机械臂物流搬运小车,双pid控制环+陀螺仪+树莓派视觉,内含完整源代码 物流智能小车具有搬运、码垛、存储、拣选等多种功能,而且还能在复杂的环境中操作。智能小车的搬运能力强,可以承载...
基于stm32控制的步进电机机械臂物流搬运小车,双pid控制环+陀螺仪+树莓派视觉
树莓派。GPS模块。五合一传感器模块 温度,气压,高度,光线,湿度。瑞士军刀扩展板。树莓派全能机器人扩展板:电机使用教程,步进电机使用教程。安装3G网卡驱动。机器人板