发球机的制作
来源:互联网 发布:tiny core linux 7.1 编辑:程序博客网 时间:2024/05/16 18:15
发球机项目总结
项目的共能实现:1.能够实现控制5个电机的调速功能
2.能够在迪文dgus屏幕上显示
3.能够实现掉电存储的模式
4.具有闭环反馈的功能
一、 实现过程
(1) 首先要解决的是直流电机的闭环反馈的难题。
<1>:首先选择了一款驱动器,成都爱控电子科技的AQMD3630.此控制器带有闭环反馈的功能。采用的硬件的链接方法如下图
<2>:由于考虑到成本要替换掉测速发电机,采用的是霍尔传感器。下面是霍尔传感器的描述
使用的是三线制的PNP型霍尔传感器,24V供电。(工作电压的范围是 6-36V大约的),属于常闭。
红(棕)接正,蓝接负,(黄)黑色信号。当接通时,输出信号为24V
<3>:使用霍尔开关代替测速发电机的思路是,通过霍尔开关测量出不同的转速,通过单片机转换成相应的电压。把电压0-5v送给直流驱动器。
软件的解决方法:
1. 首先使用到定时器,配置定时器7,记录出没记录一周的计数,通过设置的时钟,计算出没计数一个所用的时间,这样就可以计算出,不同的转读转动一周所用的时间了。
2. 上述所得出的是r/s,*60后得出每分钟的转速。
3. 这样就实现了测量的转速。
4. 由于设定的计数值是1000;二转速的最大值有2700左右,所以2700/2.7=1000;对应的是pwm的最大,输出的电压时4.7V。这样就实现了闭环反馈的部分。
(2) 下面就是要实现通信来控制转速了,由于爱控的驱动器支持485通信,而且支持的是modbus协议,所以下一步使用485通信来实现控制转速。
<1>首先使用驱动器本身的上位机软件,获取调速的指令
地址 +0x06 0x00 0x40 0x数据 0x数据 0xCRC校验
地址是选择驱动器的地址,可以通过拨码开关来进行设置。
例如 0x02 0x06 0x00 0x40 0x00 0x64 0xCRC校验
就是控制02的电机,调试时100(十进制)。
<2>接下来使用串口助手来进行调试,发送指令后是否会进行调速,如果按照串口助手最初的设置是进行不了调速的,方法是要设置成偶校验,波特率是9600才可也。
<3>接下来就是使用单片机来进行调速。
首先就要使用串口发送上述的一条字符串。参考代码如下
在发送的时候出现了几个问题;
数据的发送不准,那是因为奇偶校验的时候,没有配置对。改过后可以了,
其次就是每次发送在开始都会发送一个字符,原因是硬件的问题,不是软件的问题,每次重启后每次发送条数据。即可
<3>串口程序写好后就可以使用单片机控制调速了。每次发送不同的数,会有不同的转速。(0-500是调速的范围)
<4>一个的调速电机写好后,其他的三个电机调速方法只是需要改变地址即可。
所有驱动器的 485 的信号线A、B分别并联后与 485 主机 485 的信号线A、B连接。并连的每一个驱动器的设定的地址应唯一,不能与其它驱动器相同,如下图
接下来解要使用迪文的Dgus屏触控调速了。
(3) 首先要会使用Dgus的上位机软件。下图是使用界面4.9版本
5.3版本内容更丰富些,更好用些。但是作者只是用了4.9的。
<1>这里有变量图标,文本,按键返回等,他们的特点就是都有一个地址,这是单片机处理额重要依据,其实和单片的操作也很相似,每个数据都有个地址,先要改变数值,只要到设定的地址处,改变大小即可。
<2>:迪文默认的115200波特率对应的是A5 5A,这个是可以修改的。我们按照默认值。使用Dgus软件要下载图片和生成配置文件,可以通过SD卡下载,和串口下载两种方式(很慢),SD卡要至少1G,太小用不了,使用迪文的方法进行格式化。
<3>:关节在与串口中断接收的软件书写。
串口每次接受一个字节,所以要有接收结束的判断。
在软件上的处理是,2Ms没有串口中断就认为是接收完成。此处应该做好几个标志位,方便主程序中使用。
其中在调试的时候遇到了几个问题,上电后不断的进入串口中断就收,原因在于硬件的链接没有连接好导致的。
<3>另外的两个电机使用的是类似l298N的直流电机驱动,能够驱动wth3615.。它的引脚定义如图
。只要控制PWM和ENA即可控制直流电机了
PWM使用的还是tim8的通道,ENA通过控制引脚的高低电平,来控制。
(4)实现掉电存储,五个电机的速度参数
<1>使用了二维数组作为缓冲区。
5行 100列
往flash中写入数据,一定要写入缓冲区,然后统一的写入到falsh中,因为flash的擦写次数是有限的。
下面是对Flash 小结
FLASh 必须是先擦 后 写
下面的函数是分析案例
voidFLASH_WriteByte(u32 addr ,u16 flashdata1)
{
FLASH_Unlock();//解锁FLASH编程擦除控制器
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
//********************************************************************
// FLASH_FLAG_BSY 1.FLASH忙标志位. 因为BSY位为1时,不能对任何FPEC
寄存器执行写操作,所以必须要等BSY位为0时,才 能执行闪存操作
// FLASH_FLAG_EOP 2. FLASH操作结束标志位
// FLASH_FLAG_PGERR 3. FLASH编写错误标志位
STM32在执行编程操作前,会先检查要编程的地址 是否被擦除,如果没有,则不进行编程,并置 FLASH_SR寄存器的PGERR位为1。唯一例外的是, 当要编程的数据为0X0000时,即使未擦除,也会 进行编程,因为0X0000即使擦除也可以正确编程
// FLASH_FLAG_WRPRTERR FLASH页面写保护错误标净
//***********************************************************************/
FLASH_ErasePage(FLASH_START_ADDR);
FLASH_ProgramHalfWord(FLASH_START_ADDR+(addr+i)*2,dat);
FLASH_Lock();//锁定FLASH编程擦除控制
}
基本顺序:解锁->清除标志位(可以不要)->擦除->写半字->清楚标志位(也可以不要)->上锁。
+++++使用如下步骤对选项字节进行擦除
1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作。
2.解锁FLASH_CR寄存器的OPTWRE位。即,打开写使能。
3.设置FLASH_CR寄存器的OPTER位为1。选择选项字节擦除操作。
4.设置FLASH_CR寄存器的STRT位为1。
5.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
6.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。
+++++7.读出选项字节并验证数据。
++++++++如下步骤对选项字节进行编程
1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作。
2.解锁FLASH_CR寄存器的OPTWRE位。即打开写使能。
3.设置FLASH_CR寄存器的OPTPG位为1。选择编程操作。
4.写入要编程的半字到指定的地址。启动编程操作。
5.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
6.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。
7.读出写入的选项字节并验证数据。对选项字节编程时,FPEC使用半字中的低字节并自动地 计算出高字节(高字节为低字节的反码),并开始编程操作,这将保证选项字节和它的反码 始终是正确的。
如果 FLASH_START_ADDR是宏定义的0x8000000+2048*255
1. 0x8000000是Flash的起始地址
2. 2048是因为我用的是大容量芯片,根据上一笔记Flash地址可以看出芯片每页容量2K,即2048字节,
3. 255表示芯片的最后一页,这个根据不同芯片而定。之所以从后面页写起可以防止储存数据破坏用户程序。
4. addr*2是因为每个数据占用2字节(半字),虽然写入的是1字节数据,但是编程是2字节为单位,
也就是说一个字节的数据也会占用两个字节地址。
- 发球机的制作
- 网球的发球规则
- 羽毛球--关于发球的问题
- 我的发球录像,大家指导
- 羽毛球发球接发球
- 发球水平取得重大突破!
- 乒乓唐-发球
- 接发球 抢攻
- 乒乓球发球机器
- 该谁发球了
- 羽毛球单打比赛中谁先发球以及在哪个区域发球?
- 发球进入有感觉阶段
- 网球之发球技术解析
- 制作JDebugTool的授权文件制作机
- 练到600个发球了
- 练到720个发球了
- 昨天被人纠正发球动作了
- 练到800个发球了
- System.exit(0)和System.exit(1)区别 .
- 分享10款优雅动人的HTML5教程及源码
- Java 错误:java.io.EOFException
- 网站加速方案
- 安装qt的使用总结
- 发球机的制作
- 快速解读GC日志
- 排查logstash2.4升级到5.0版本后kafka不兼容问题
- 升级sdk导致打开eclipse出现this Android sdk requires Android developer toolkit version 22.6.2 or above
- 安装ODTwithODAC1020221到98%出错gacutil.exe
- 弧度制转化
- C语言复杂定义的示例
- Android 字体的展开与收缩
- spring中通过静态工厂方法获取bean实例化对象