当前位置: 首页 > news >正文

朋友要给我做网站海南网站建设哪家专业

朋友要给我做网站,海南网站建设哪家专业,上海四大设计院是哪四个,wordpress 恢复初始化本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写#xff0c;需要的同学可以在这里获取#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总#xff1a; ht…本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写需要的同学可以在这里获取 https://item.taobao.com/item.htm?id728461040949 配套资料获取https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总 https://blog.csdn.net/qq_35181236/article/details/132779862 第36章 步进电机控制实验 36.1 24BYJ-48步进电机工作原理 本书使用的步进电机型号是28BYJ-48它是一款常见的步机电机其名称的含义为外径28毫米四相八拍式永磁减速型步进电机。型号的含义如下 28步进电机的有效最大外径是28毫米B表示是步进电机Y表示是永磁式J表示是减速型减速比1:6448表示四相八拍 先说什么是“4相永磁式”的概念28BYJ-48 的内部结构示意图如下所示。 先看里圈它上面有8个齿分别标注为07这个叫做转子顾名思义它是要转动的。转子的每个齿上都带有永久的磁性是一块永磁体这就是“永磁式”的概念。 再看外圈这个是定子它是保持不动的实际上它是跟电机的外壳固定在一起的。定子有ABCD四组共32个齿每个齿上都缠上了一个线圈绕组。A组有8个线圈绕组它们是串联在一起的这8个线圈绕组会同时导通或关断。B、C、D组也是一样的如此就形成了4相在图中分别标注为 A-B-C-D这就是“4相”的概念。相邻定子之间的夹角为360/3211.25度。 步进电机一共有5根线引出红色是公共端接5v电源其他四根分别对应A,B,C ,D 四个绕组的另外一端。怎样让电机转动起来呢 假设初始状态时A导通A组的8个线圈绕组都有磁力吸引住8个转子8个转子和8个A组定子对齐如上图所示。 然后让A断开B导通此时B组的8个线圈绕组会把距离它最近的8个转子吸引过来使得转子和B组的定子对齐。以0号转子为例它从正对着A定子的位置顺时针旋转到正对着B定子的位置顺时针旋转了11.25度。 紧接着让B断开C导通此时C组的8个线圈绕组会把距离它最近的8个转子吸引过来使得转子和C组的定子对齐。以0号转子为例它从正对着B定子的位置顺时针旋转到正对着C定子的位置再次顺时针旋转了11.25度。当我们依次单独导通ABCD时电动机就顺时针转到起来了。 单独导通ABCD的某一组线圈绕组时转子旋转11.25度这个值就叫做步进角度。 而上述这种工作模式就是步进电机的单四拍模式。同样的道理如果想让转子逆时针转动可以依次单独导通DCBA。 我们再来介绍一种具有更优性能的工作模式那就是在单四拍的每两个节拍之间再插入一个双绕组导通的中间节拍组成八拍模式。 比如在顺时针转动过程中从 A 相导通到 B 相导通的中间加入一个 A 相和 B 相同时导通的节拍这个时候由于 A、B 两个绕组的定子齿对它们附近的转子齿同时产生相同的吸引力这将0号转子处于 A、B 两个定子中间也就是新插入的这个节拍使转子转过了上述单四拍模式中步进角度的一半即5.625度。这样一来就使转动精度增加了一倍而转子转动一圈则需要8*864拍了。另外新增加的这个中间节拍还会在原来单四拍的两个节拍引力之间又加了一把引力从而可以大大增加电机的整体扭力输出使电机更“有劲”了而且更平顺。 下表给出八拍模式下电机绕组激励时序电机引线颜色可能因厂家不同而不同 本文将以八拍模式展开编程演示当按照下表的数值连续给电机提供激励时电机就逆时针转起来。 28BYJ-48为减速电机电机输出的转速并不等于转子的转速。下图是这个28BYJ-48步进电机的拆解图从图中可以看到位于最中心的那个白色小齿轮才是步进电机的转子输出64个节拍只是让这个小齿轮转了一圈然后它带动那个浅蓝色的大齿轮这就是一级减速。 右上方的白色齿轮的结构除电机转子和最终输出轴外的3个传动齿轮都是这样的结构由一层多齿和一层少齿构成而每一个齿轮都用自己的少齿层去驱动下一个齿轮的多齿层这样每2个齿轮都构成一级减速一共就有了4级减速。 36.2 电机驱动板工作原理 根据28BYJ-48电机原理我们只需要将开发板的四个引脚通常为GPIO分别连接到电机再按照电机的驱动逻辑给出一定的激励信号。但是开发板的GPIO驱动能力有限需要在开发板和电机之间加入驱动电路本教程选择了双路有刷直流马达驱动芯片MX1508驱动电路原理图见下图 开发板的GPIO0~GPIO3引脚直接连接MX1508的INA1、INB1、INA2、INB2。MX1508的输出端OUTA1、OUTB1、OUTA2、OUTB2分别接到步进电机28BYJ-48的A、B、C、D四个线圈。所以可以通过开发板的4个GPIO引脚间接控制电机的ABCD。并不是使用4个GPIO简单地控制ABCD它们不是一一对应的关系。 需要先了解MX1508芯片内部电路和基本工作模式 待机模式 在待机模式下INAxINBxL。包括驱动功率管在内的所有内部电路都处于关断状态。电路消耗极低极低的电流。此时马达输出端 OUTAx 和 OUTBx 都为高阻状态记为Z。 正转模式 正转模式的定义为INAxHINBxL此时马达驱动端 OUTAx 输出高电平马达驱动端 OUTBx 输出低电平时马达驱动电流从 OUTAx 流入马达从 OUTBx 流到地端此时马达的转动定义为正转模式。 反转模式 反转模式的定义为INAxLINBxH此时马达驱动端 OUTBx 输出高电平马达驱动端 OUTAx 输出低电平时马达驱动电流从 OUTBx 流入马达从 OUTAx 流到地端此时马达的转动定义为反转模式。 刹车模式 刹车模式的定义为INAxHINBxH此时马达驱动端 OUTAx 以及 OUTBx 都输出低电平马达内存储的能量将通过 OUTAx 端 NMOS 管或者 OUTBx 端 NMOS 快速释放马达在短时间内就会停止转动。注意在刹车模式下电路将消耗静态功耗。 PWM 模式A 当输入信号 INAx 为 PWM 信号INBx0 或者 INAx0INBx 为 PWM 信号时马达的转动速度将受到 PWM信号占空比的控制。在这个模式下马达驱动电路是在导通和待机模式之间切换在待机模式下所有功率管都处于关断状态马达内部储存的能量只能通过功率 MOSFET 的体二极管缓慢释放。 当输入信号 INAx 为 PWM 信号INBx1 或者 INAx1INBx 为 PWM 信号时马达的转动速度将受到 PWM信号占空比的控制。在这个模式下马达驱动电路输出在导通和刹车模式之间在刹车模式下马达存储的能量通过低边的 NMOS 管快速释放。 综上所述MX1508的真值表如下 上述真表中OUTAx/OUTBx输出Z高阻态、H高电平时连接到的电机线圈绕组都不会导通效果是一样的。 为了让ABCD输出8个节拍可以按照下图控制GPIO0~GPIO3 以第1个节拍为例想让D输出0ABC输出高电平或是高阻态怎么办换句话说想让OUTB2LOUTA2、OUTA1、OUTB1等于H或Z怎么办 根据真值表设置INA2H、INB2L可以让OUTA2H、OUTB2L 继续根据真值表设置INA1L、INB1L可以让OUTA1Z、OUTB1Z 所以要让D输出0ABC输出高电平或是高阻态时需要INA1L、INB1L、INA2H、INB2L。即GPIO00、GPIO10、GPIO21、GPIO30用二进制表示即为0b0100即0x04。 将8个节拍对应的GPIO值存到数组中 S_CW[8] {0x04,0x0c,0x08,0x09,0x01,0x03,0x02,0x06}; 把4个GPIO配置为输出后将数组的值循环写到GPIO输出寄存器就可以让电机转动起来。按照反向的顺序循环写GPIO输出寄存器就可以实现电机反转。调节两个节拍间的周期可以改变电机转速。 根据电机的参数空载牵入频率≥600Hz 可知两个节拍之间的时间间隔不宜小于1.6ms。 36.3 模块配置 本次实验实质上驱动的外设只有一个那就是GPIO。但是为了更好的驱动电机本次实验还使用了UART让用户输入角度、速度并使用定时器来实现精准延时。 本实验使用的步进电机模块会接到扩展板的GPIO组会使用到4个GPIO来接电机驱动板的INA/B/C/D扩展板GPIO组原理图如下图所示 本实验使用的是GPIO0~3所以需要在RASC中将这4个IO对应的引脚配置为通用输出模式请读者参考本书前文对于GPIO的配置来配置这4个引脚。 36.4 外设驱动程序 本次实验使用到的IO设备、串口设备和定时器设备在《30.3 设备对象封装》中已经将结果使用到的方法基本一致请读者参考前文了解设备对象封装的概念和方法以及下载本书配套资料调阅源码学习。 36.5 电机驱动程序 36.5.1 电机设备对象 对于电机用户需要的操作是启停、设定转动角度角度、速度。根据这些需求封装出电机的结构体dev_motor.h typedef struct StepMotor{char *name;MotorStatus status;int (*Init)(struct StepMotor *ptdev);int (*Start)(struct StepMotor *ptdev);int (*Stop)(struct StepMotor *ptdev);int (*SetAngle)(struct StepMotor *ptdev, int speed, int value); }StepMotorDevice;然后在dev_motor.c里构造一个StepMotor结构体并给上层代码提高获得这个结构体的函数代码如下 static struct StepMotor gMotor {.name Step Motor,.status 0,.Init StepMotorDevInit,.Start StepMotorDevStart,.Stop StepMotorDevStop,.SetAngle StepMotorDevSetAngle };struct StepMotor *MotorGetDevice(void) {return gMotor; }36.5.2 初始化函数 初始化函数中要实现的就是获取4个IO设备对象代码如下 static int StepMotorDevInit (struct StepMotor *ptdev) {if(NULL ptdev) return -EINVAL;gINAIO IODeviceFind(Step Motor INA);if(NULL gINAIO) return -ENODEV;gINBIO IODeviceFind(Step Motor INB);if(NULL gINBIO) return -ENODEV;gINCIO IODeviceFind(Step Motor INC);if(NULL gINCIO) return -ENODEV;gINDIO IODeviceFind(Step Motor IND);if(NULL gINDIO) return -ENODEV;return ESUCCESS; }36.5.3 开启转动 本书并没有在Start函数中让步进电机转动仅仅是修改状态表示电机处于开启状态代码如下; static int StepMotorDevStart(struct StepMotor *ptdev) {if(NULL ptdev) return -EINVAL;if(ptdev-status isStop){ptdev-status isRunning;return ESUCCESS;}return -EIO; }36.5.4 停止转动 将电机状态标志赋值为0并且让步进电机的4个IO都输出低电平。代码如下 static int StepMotorDevStop (struct StepMotor *ptdev) {if(NULL ptdev) return -EINVAL;if(ptdev-status isRunning){ptdev-status isStop;gINAIO-Write(gINAIO, 0);gINBIO-Write(gINBIO, 0);gINCIO-Write(gINCIO, 0);gINDIO-Write(gINDIO, 0);return ESUCCESS;}return -EIO; }36.5.5 设定转速和转动角度 通过前面的讲解可以知道24BYJ-48步进电机内部收到64个节拍会转动1圈转子通过减速齿轮驱动输出轴转动1/64圈。那么要想输出轴转动1圈就需要给步进电机4096个节拍64*644096。如果想要转动指定角度angle那么对应的拍数计算公式就是 stepangle*4096/360 另外还可以顺序、逆序使用S_CW[8]数组的值来驱动电机以实现反转、正转。而电机转速则表现在每拍之间的间隔时间间隔越长转速越慢。 根据这些原理就可以将设置步进电机转角和转速的功能封装到一个函数中了 static const uint8_t EightBeat[8] {0x04,0x0c,0x08,0x09,0x01,0x03,0x02,0x06}; static int StepMotorDevSetAngle(struct StepMotor *ptdev, int speed, int value) {if(NULL ptdev) return -EINVAL;if(1 speed) return -EINVAL;int nAbsValue (value0)?value:-value;unsigned int step (unsigned int)(nAbsValue*4096/360);unsigned int phase 0;if(isStop ptdev-status)ptdev-Start(ptdev);for(unsigned int i0; istep; i){if(value0)phase (i0x07);elsephase (7-(i0x07));gINAIO-Write(gINAIO, ((EightBeat[phase]0x08)0)?0:1);gINBIO-Write(gINBIO, ((EightBeat[phase]0x04)0)?0:1);gINCIO-Write(gINCIO, ((EightBeat[phase]0x02)0)?0:1);gINDIO-Write(gINDIO, ((EightBeat[phase]0x01)0)?0:1);mdelay(speed);}ptdev-Stop(ptdev);return ESUCCESS; }36.6 测试程序 本次实验的方法是让用户通过串口输入角度、速度然后控制步进电机转动。代码如下 void DeviceTest(void) {UartDevicesRegister();TimerDevicesRegister();IODevicesRegister();StepMotorDevice *pMotor MotorGetDevice();if(NULL pMotor){xprintf(Failed to Find Motor Device!\r\n);return;}pMotor-Init(pMotor);pMotor-Start(pMotor);while(1){xprintf(Enter value(- 0~360 degree) and speed(Greater than 1ms) parameters you want: \r\n\t);int value 0, speed 0;scanf(%d%d, value, speed);xprintf(\tValue:%d\tSpeed:%d\r\n, value, speed);pMotor-SetAngle(pMotor, speed, value);} }36.7 测试结果 将程序烧写到开发板中运行打开串口助手插上步进电机后通过串口助手输入转角和转速 步进电机就会逆时针或者顺时针转动指定的角度 本章完
http://www.yutouwan.com/news/478114/

相关文章:

  • 广东十大排名建筑公司宁波seo在线优化方案
  • 织梦网站模板如何安装做羞羞的事的网站
  • 南京网站建站公司编程在线培训
  • 有没有男女做那个的网站nas可以做网站下载服务器吗
  • 达内网站开发培训价格做se要明白网站
  • 零代码建站网站建设资金筹措的方案
  • 深圳建个人网站wordpress攻击跳转
  • dedecms新网站 上传到万网的空间微信公众号运营方法
  • 沈阳网站优化哪家好asp建设网站
  • 网站性质iis 5.1 新建网站
  • 六安做网站公司宿迁建设局网站
  • 网站建设颊算a站网址是什么
  • html5网站wordpress二级域名建站
  • 做淘宝差不多的网站新增网站
  • 济南网站建设培训需要建设网站的
  • 内设网站网站建站公司有必要做吗
  • 网站的模板房地产行业市场分析
  • 河南建筑业城乡建设网站查询网站建设公司好做吗
  • 哪个网站可以做司考题网页版淘宝
  • 济南营销型网站建设团队个人公众号开发php
  • 站长资源平台网页游戏网页版
  • 做公司网站需要的材料有哪些开创云网站建设
  • 厦门网站建设2商务网站建设的基本步骤
  • 怎么建立一个好公司网站最吉祥的公司名字大全
  • 怎么自己做个免费网站电脑怎么制作app
  • 学校做网站买东西最便宜的软件
  • 山东济南最新消息网站更换空间对优化的影响
  • 泉州模板自助建站比较好的网站开发项目
  • 吴兴区建设局网站网站游戏网站建设
  • 成都网站建设行业分析网站报价表