一种定力夹具控制系统
题目背景:
涉及一款加持力保持不变的机械手,有参数要求,这里只展示原理。
解决方案:
采用离传感器和PID算法,单片机为STM32F4系列,力传感器采用应变式,电机采用无刷电机加减速器。控制效果好。机械上采用滚珠丝杠传动,非标零件3D打印。
传感器做了卡尔曼滤波,不过参数调不好,运算速度还慢。
图片效果:
实物图片丢失,只剩模型了,模型中只有一个机械手,另一个对称,没有画出。
代码:
需要引入arm的数学库,想加速运算,还可以开启浮点运算单元。
主函数
初始化一些外设,按键、电机、压力传感器。
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "key.h"
#include "motor.h"
#include "sensor.h"
#include "timer.h"
#include "arm_math.h"
u16 EXPECT=2000;
extern float32_t xkh;
int main(void)
{ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2uart_init(115200); delay_init(168); printf("kaishi\r\n");motorinit();Init_HX711pin(); delay_ms(500);Get_Maopi(); manualoperation_init(); //手动操作相关初始化automode_init();
// KEY_Init(); //忘了啥程序了 好像没用
// motorstart(); //这是回零程序
// limitswitch_init();TIM3_Int_Init(1000-1,8400-1); //定时器时钟84M,分频系数8400,所以84M/8400=10Khz的计数频率,计1000次为100msprintf("kai123shi\r\n");while(1){// Get_Weight();
// motorpid();printf("F=%d,PWM=%d,E=%d\r\n",zout,pwmout,iError);delay_ms(10); }
}
按键的初始化
设置了四个按键,分别控制:加紧、松开、紧急停止、自动加紧。
key.c
#include "key.h"
#include "delay.h"
#include "motor.h"
#include "timer.h"
#include "sensor.h"
#include "usart.h"
//按键初始化函数
void KEY_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //KEY0 KEY1 KEY2对应引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4
}
void manualoperation_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA,GPIOE时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOA,GPIOE时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_2;//对应引脚PA0~2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//下拉 (不一定 要看买回来的按键模块)GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA0GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//对应引脚PA0~2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//下拉 (不一定 要看买回来的按键模块)GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOA0SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource2);//PA3 连接到中断线3SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource1);//PA1 连接到中断线4SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource3);//PA0 连接到中断线0/* 配置EXTI_Line0 */EXTI_InitStructure.EXTI_Line = EXTI_Line3|EXTI_Line1|EXTI_Line2 ;//LINE0~2EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE0EXTI_Init(&EXTI_InitStructure);//配置NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断3 急停NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道NVIC_Init(&NVIC_InitStructure);//配置NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//外部中断1NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道NVIC_Init(&NVIC_InitStructure);//配置NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中断2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道NVIC_Init(&NVIC_InitStructure);//配置
}
//外部中断3服务程序,,停车
void EXTI3_IRQHandler(void)
{delay_ms(10); //消抖if(STOPKEY==1) {printf("ting\r\n");TIM_Cmd(TIM3,DISABLE); TIM_SetCompare1(TIM14,1); //停车} EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
} //中断1 手动前进程序,
void EXTI1_IRQHandler(void)
{delay_ms(10); //消抖if(FOEWARDKEY==1) {// if(KEYFORWARD==1)
// {printf("qian\r\n");TIM_Cmd(TIM3,DISABLE);MOTORDIRECTION=FORWARD;TIM_SetCompare1(TIM14,arr); //
// }} EXTI_ClearITPendingBit(EXTI_Line1); //清的中断标志位
}
//中断2 手动后退程序
void EXTI2_IRQHandler(void)
{delay_ms(10); //消抖if(BACKWARDKEY==1) {// if(KEYBACK==1)
// { printf("hou\r\n");TIM_Cmd(TIM3,DISABLE);MOTORDIRECTION=BACKWORD;TIM_SetCompare1(TIM14,arr);
// } } EXTI_ClearITPendingBit(EXTI_Line2); //清诚的中断标志位
}
void limitswitch_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能,GPIOE时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;//对应引脚Pe3~4GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;//上拉 (不一定 要看买回来的按键模块)GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOe0
//
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//对应引脚Pe3~4
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;//下拉 (不一定 要看买回来的按键模块)
// GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOe0SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource6);//PE4 连接到中断线4SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource5);//PE5 连接到中断5EXTI_InitStructure.EXTI_Line = EXTI_Line6|EXTI_Line5;//LINEEXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = DISABLE;//使能LINEEXTI_Init(&EXTI_InitStructure);//配置
// NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//外部中断
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级0
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
// NVIC_Init(&NVIC_InitStructure);//配置
// NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;//外部中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级0NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;//使能外部中断通道NVIC_Init(&NVIC_InitStructure);//配置}
// 已经回到零位停车程序
void EXTI4_IRQHandler(void)
{delay_ms(10); //消抖printf("hLL\r\n");if(KEYFORWARD==1) {TIM_Cmd(TIM3,DISABLE);TIM_SetCompare1(TIM14,1); //停车 } EXTI_ClearITPendingBit(EXTI_Line4); //清诚的中断标志位
}
//走到最前方了停车程序,
void EXTI9_5_IRQHandler(void)
{delay_ms(10); //消抖if(KEYBACK==0||KEYFORWARD==0) {TIM_Cmd(TIM3,DISABLE);TIM_SetCompare1(TIM14,1); //停车 } EXTI_ClearITPendingBit(EXTI_Line5); //清诚的中断标志位 EXTI_ClearITPendingBit(EXTI_Line6); //清诚的中断标志位
}
void automode_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//对应引脚Pe3~4GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//下拉 (不一定 要看买回来的按键模块)GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOA0SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource0);//PE4 连接到中断线4EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINEEXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINEEXTI_Init(&EXTI_InitStructure);//配置NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道NVIC_Init(&NVIC_InitStructure);//配置
}
extern u8 timerstate;
//自动程序
void EXTI0_IRQHandler(void)
{delay_ms(10); //消抖if(AUTOSTARTKEY==1) { EXTI_ClearITPendingBit(EXTI_Line0); //清诚的中断标志位
// timerstate=0;// printf("11");TIM_Cmd(TIM3,ENABLE); }
}
void Reciprocatingmotion(void)
{u16 i;if(KEYFORWARD==0){printf("11");for(i=arr;i>1;i--){TIM_SetCompare1(TIM14,i);delay_ms(3);}MOTORDIRECTION=BACKWORD;delay_ms(1000);for(i=1;i<arr;i++){TIM_SetCompare1(TIM14,i);delay_ms(3);} //delay_ms(1000);}if(KEYBACK==0){printf("22");for(i=arr;i>1;i--){TIM_SetCompare1(TIM14,i);delay_ms(3);}MOTORDIRECTION=FORWARD;delay_ms(1000);for(i=1;i<arr;i++){TIM_SetCompare1(TIM14,i);delay_ms(3);} delay_ms(1000);}
}
key.h
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
#include "sensor.h"
#define KEYFORWARD PEin(5) //PE4 回零接近开关
#define KEYBACK PEin(6) //PE3
#define KEY2 PEin(2) //P32
#define AUTOSTARTKEY PEin(0) //启动自动程序按键,是PE0,
#define STOPKEY PAin(3) //pa3作为急停按钮
#define FOEWARDKEY PCin(1) //pa1作为前进按钮
#define BACKWARDKEY PAin(2) //PA2作为后退按钮
void KEY_Init(void); //IO初始化
u8 KEY_Scan(u8); //按键扫描函数
void manualoperation_init(void);
void limitswitch_init(void);
void automode_init(void);
extern void Get_Weight(void);
#endif
电机
电机采用PWM控制,PWM对应着电机电流
motor.h
#ifndef __MOTOR_H
#define __MOTOR_H
#include "sys.h"
#define BACKNOTOVER 1 //格根据限位开关决定01
#define MOTORDIRECTION PFout(10) // DS1
#define FORWARD 0
#define BACKWORD 1
定时器时钟是84mhz
#define psc 20 //分频系数7-1
#define arr 399 //计数初值1200-1
#define KP 5
#define KI 2
#define KD 0
void motorinit(void);
void motorstart(void);
void motorpid(void);
#endif
motor.c
#include "delay.h"
#include "motor.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "sensor.h"
#include "arm_math.h"
u16 pwmval=1;//pwm比较值最大是arr,有效是119-1199
void motorinit(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//GPIOF9,MOTORDIRECTIONGPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_Init(GPIOF, &GPIO_InitStructure);GPIOF10,MOTORDIRECTION
///MOTORSPEED pwm得设置//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); // GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //端口复用GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //服用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉GPIO_Init(GPIOF,&GPIO_InitStructure); //???PF9TIM_TimeBaseStructure.TIM_Prescaler=psc; //TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseStructure.TIM_Period=arr; //TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);////TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性是:急性第TIM_OC1Init(TIM14, &TIM_OCInitStructure); /、TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); //TIM_ARRPreloadConfig(TIM14,ENABLE);// TIM_Cmd(TIM14, ENABLE); //TIM_SetCompare1(TIM14,pwmval);// 修改占空比比较值
}
void motorstart(void)
{//回零程序while(KEYBACK==BACKNOTOVER) //回零程序{MOTORDIRECTION = FORWARD;TIM_SetCompare1(TIM14,300);}TIM_SetCompare1(TIM14,1); //停车
}struct PID
{s32 setpoint;//设定目标s32 sum_error;//误差累计s32 proportion;//比例常数s32 integral;//积分常数s32 derivative;//微分常数s32 last_error;//e[-1]s32 prev_error;//e[-2]
}PID1={900,0,KP,KI,KD,0,0};
extern float32_t xkh;
int pwm;
int pwmout;
s32 iError;
void motorpid(void)
{s32 now;/*pwm的范围适50-500数值,要注意各个量的转化*/now=(s32)(zout*0.01); //传感器50以内的返回值都是杂波iError=PID1.setpoint-now; //当前误差PID1.sum_error+=iError;if(PID1.sum_error>150)PID1.sum_error=150;if(PID1.sum_error<-150)PID1.sum_error=-150; //积分项限制pwm =(int) (PID1.proportion * iError + PID1.integral * PID1.sum_error + PID1.derivative * (PID1.last_error-iError));PID1.prev_error=PID1.last_error; //存储误差,便于下次计算PID1.last_error=iError;pwm =pwm*0.06;pwmout=pwm;if(pwm>0) {MOTORDIRECTION = FORWARD;pwm+=40;}if(pwm<0){ MOTORDIRECTION=BACKWORD;pwm=(-pwm)+40;}if(pwm>250) pwm=250;TIM_SetCompare1(TIM14,pwm);
}
力传感器
直接输出的是电压信号,一般都外接模块转成数字信号,其读数并非什么通信协议,逻辑参见淘宝。
本人尝试引入arm数学库,开启浮点运算单元,加速运算。
sensor.h
#ifndef __HX711_H
#define __HX711_H
#include "sys.h"
#define HX711_SCK PBout(0)// PB0
#define HX711_DOUT PBin(1)// PB1
extern void Init_HX711pin(void);
extern u32 HX711_Read(void);
extern s32 my_HX711_Read(u8);
void Get_Weight(void);
void Get_Maopi(void);
extern s32 HX711_Buffer;
extern s32 Weight_Maopi[4];
extern s32 Weight_Shiwu;
extern u8 Flag_Error;
#endif
sensor.c
#ifndef __HX711_H
#define __HX711_H
#include "sys.h"
#define HX711_SCK PBout(0)// PB0
#define HX711_DOUT PBin(1)// PB1
extern void Init_HX711pin(void);
extern u32 HX711_Read(void);
extern s32 my_HX711_Read(u8);
void Get_Weight(void);
void Get_Maopi(void);
extern s32 HX711_Buffer;
extern s32 Weight_Maopi[4];
extern s32 Weight_Shiwu;
extern u8 Flag_Error;
#endif
定时器
控制PID周期,略。
说明手稿:
全部资料下载:
https://download.csdn.net/download/renzemingcsdn/16387516
一种定力夹具控制系统相关推荐
- 三种代码版本控制系统的简介 以及 SVN的安装
三种代码版本控制系统的简介 以及 SVN的安装 一.三种代码版本控制系统 1.1 CVS 什么是cvs??? 1.2.Git 什么是Git??? 1.3.SVN 什么是SVN??? SVN的作用??? ...
- 计算机器人夹具的方向,一种机器人夹具抓取算法的制作方法
本发明涉及机械设备领域,具体涉及一种机器人夹具抓取算法. 背景技术: 随着现代机械化程度的提高,在工业生产中大量使用搬运机器人对货物(以板材为例)进行拆垛码垛,机器人夹具夹取及放置物品时需根据参数设置 ...
- 如图所示是一种轧钢计算机控制系统,高速线材厂轧钢工艺培训(活套)
原标题:高速线材厂轧钢工艺培训(活套) 活套 现代高速线材轧机为保证产品尺寸精度,采用微张力及无张力轧制,以消除轧制过程中各种动态干扰引起的张力波动和由此引起的轧件尺寸波动.由于精轧机组为集体传动,故 ...
- 计算机控制系统的五种类型,计算机控制系统习题(1-5章
<计算机控制系统习题(1-5章>由会员分享,可在线阅读,更多相关<计算机控制系统习题(1-5章(9页珍藏版)>请在人人文库网上搜索. 1.计算机控制系复习题(1-5章)第一章 ...
- 计算机控制系统三种主机,计算机控制系统a试卷带答案.doc
*********** 2015-2016 学年第一学期 出题教师: [计算机控制系统]课程 试题 (A卷) [闭卷考试] 姓名 学号 专业及班级 本试卷共有4道大题 题号 一 二 三 四 总分 得分 ...
- 几种VCS(版本控制系统)的特点和异同
原文地址:http://www.jianshu.com/p/f27a7ae1117b CVS : Git : Mercurial : Subversion 的异同特征 是否原子提交 CVS: 没有. ...
- 如图所示是一种轧钢计算机控制系统,轧钢工理论知识复习题
轧钢工理论知识复习题 1.选择题 1.用来表示轧制一吨合格钢材所需要的原料吨数,称为.A A .金属消耗系数B综合利用系数C.成材率D.延伸系数 2.将实心热管坯穿成空心毛管,然后在将其轧制成所要求尺 ...
- 黑龙江工业机器人夹爪_一种工业机器人专用夹爪的制作方法
本实用新型涉及机械技术领域,具体为一种工业机器人专用夹爪. 背景技术: cnc(数控机床)是计算机数字控制机床的简称,是一种装有程序控制系统的自动化机床,该控制系统能够逻辑地处理具有控制编码或其他符号 ...
- 微型计算机文献,微型计算机控制系统期刊文章参考文献 哪里有微型计算机控制系统参考文献...
为论文写作提供[100个]微型计算机控制系统期刊文章参考文献,海量微型计算机控制系统相关论文参考文献,包括期刊,专著,外文参考文献,解决您的哪里有微型计算机控制系统参考文献的相关难题! 一.微型计算机 ...
最新文章
- 小程序统一服务消息_[miniblog]小程序订阅消息踩坑记
- 网工协议基础(2) TCP/IP四层模型
- ES6中解构赋值深入解读
- 一张图看清自然语言处理脉络
- 【AWVS12】安全漏洞扫描工具,使用详解
- 考题篇(6.2) 07 ❀ FortiGate ❀ Fortinet 网络安全专家 NSE 4
- 一名普通医护人员的抗疫日志
- python 豆瓣电影top250_python 爬豆瓣电影top250
- 单身程序狗解决了一个技术难题后,没有妹子可以炫耀,怎么办?
- Lumiprobe核酸定量丨QuDye dsDNA BR 检测试剂盒
- 2019年TI杯 简易电路特性测试仪 制作过程(9)——实际测试效果 20/05/24
- k8s笔记0--k8s资料大全
- android 环境一键,一键切换Android应用环境(Environment Switcher)
- 牛逼!java程序设计慕课版课后答案浪潮优派
- Tushare了解并使用
- Board (染色思想)
- 解决:RecyclerView 滑动后布局错乱
- 在混乱的数字货币世界里,如何掌握你的思维避免掉进陷阱?
- 【ODOO】Docker Compose 编排ODOO应用
- 4 年前端狗 2 年 CTO
热门文章
- mysql开发平台_搭建mysql编程平台
- oracle sql去差集,Oracle 两个逗号分割的字符串,获取交集、差集的sql实现过程解析...
- verilog实现多周期处理器之——(零)GUN工具链的安装
- 自己总结一下wpf image source 绑定的几种方式
- android 内存泄漏分析工具,Android内存泄漏终极解决篇(上)
- Ora-12505 故障
- hiprint使用初体验,模板设计经验分享
- 如何使用命令强制DC的复制
- 2.2 The Environment Abstraction Layer (EAL)
- Python+Visual Studio