PCM开发板模块实验指导--有刷直流马达速度控制实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
43---有刷直流马达速度控制实验:
硬件需求:PC机,PCM模块一个,microUSB线,L298N_电机驱动模块,12V/1A直流电
源,有刷直流电机1个,导线若干;
软件需求:PCM编译软件,app软件NeTorch TCP & UDP;
供电方式:12V电源供电给电机驱动模块,电机驱动模块输出的5V给PCM模块供电;
连接电路:如图65
图65 有刷直流马达速度控制实验电路
PCM模块有4个有刷直流马达控制通道,分别为马达1(A0,B0),马达2(A1,
B1),马达3(A2,B2),马达4(A3,B3). L298N_电机驱动模块可以同时驱动2个
马达。本实验使用A0,B0控制1个马达。马达上接一个速度编码器,此速度编码器只要输
出脉冲信号就可以了,此实验不判断马达旋转方向。
本实验使用的是一个小型直流马达,接了一个正交旋转编码器,720线,即旋转一
圈有720个脉冲输出,此编码器有AB相输出,因为不判断旋转方向,所以只使用A相信号
输出,即只记录脉冲信号。
编程思路:
使用一个定时器,设置为周期性定时,定时周期为0.02秒。设置马达的PWM频率为
10Khz.设置好PID的Kp,Ki,Kd值,此值要根据实际情况调试。设置好脉冲计数为最大值中
断,设置脉冲值为30000个脉冲,即脉冲计数达到30000个脉冲时会执行中断程序。设置
好WIFI,设置好TCP服务器模式,通过手机APP网络调试助手NeTorch TCP & UDP软件
改变马达的速度,单位是圈/秒。
程序运行时,会每0.02秒执行一次定时中断程序,在定时中断程序中读取脉冲计数
值,用此值减去上次的计数值,就是此周期的脉冲计数值。此计数值除以编码器线数
720,再除以周期0.02秒,即为马达的运行速度,单位圈/秒。然后使用PID指令计算设定
速度与运行速度的差异,输出值叠加到控制马达速度的占空比上,最终马达会稳定在设
定的速度上运行。
图66为手机端APP网络调试助手截图,采用HEX模式发送数据,每次发送一个字
节,表示马达的设定速度,单位为圈/秒。输入不同的值,可以观察马达的速度会相应变
化。
实验程序如下:
1 intpro int1 //定时器中断程序,定时周期0.02秒
2 pcntread 0 D3 //读通道0的计数值到D3寄存器
3 mul d4 d8 d5 //d5=d4*d8=d4*30000,脉冲计数最大值是d8=30000,d4是记录了几
//个最大值
4 add d5 d3 d5 //d5=d5+d3,加上当前脉冲计数值
5 sub d5 d6 d7 //d7=d5-d6,d6保存的是上次计数值,减去此值,即为这次计数值,
//存入D7
6 mov 0 d4 //清零最大值计数周期
7 mov d3 d6 //把当前计数值D3保存到D6,给下个周期使用
8 mov d7 f0 //把此次的计数值转换成浮点数,存入F0
9 div f0 f101 f1 //f1=f0/f101,脉冲数/720=圈数,
10 div f1 f82 f2 //f2=f1/f82,圈数/更新周期=圈数/秒,
11 pidrun 0 f2 f81 f83 //pid运算,f2实际速度,f81设定速度,f83为pid输出
12 add f83 f84 f84 //计算占空比,F84=F83+F84
13 if f84 > 100 //限制占空比最大为100%,正转
14 mov 100 f84 //超过100,存入100
15 elif f84 < -100 //限制占空比最大为-100%,反转
16 mov -100 f84 //小于-100,存入-100
17 endif
18 brushmotomove 0 f84 //马达启动0,占空比为F84,改变占空比就可以改变马达速
//度
19 endint
20 intpro int0 //脉冲计数中断程序,30000个脉冲周期
21 inc d4 //脉冲计数达到最大值30000个脉冲,把d4加1
22 endint
23 intpro wifi //WIFI站点连接中断程序
24 prints "wifi station connect\r\n" //串口输出有站点连接的信息
25 endint
26 intpro tcpserverint //有TCP客户端连接中断
//初始化TCP服务器接收数据指令,D10为客户端连接序列号,接收的数据起始寄存
//器地址为D11; 接收的字节数存入D60;接收数据后S4置位,会执行tcpserverrecv中
//断程序
27 tcpserverrecv d10 d11 d60 s4
28 endint
29 intpro tcpserverrecv //TCP服务器接收到客户端发送的数据产生中断
//这里使用的是手机客户端,16进制HEX发送方式,一次只发送一个字节,模块接
//收到的数据存 放在D11寄存器
30 mov d11 f81 //把接收到的数据---马达速度,单位:圈/秒,转换成浮点数存入
//F81
31 endint
32 main //主程序
33 intinit s2 wifi //初始化wifi站点连接中断
34 wifiap "PCM" "12345678" s2 //初始化模块为WIFI热点,wifi名:PCM;
//密码:12345678;当有站点连接时会置位S2,产生中断
35 intinit s3 tcpserverint //初始化TCP服务器连接中断
36 intinit s4 tcpserverrecv //初始化TCP服务器接收数据中断
//初始化模块为TCP服务器,端口号为8000,D10保存客户端连接序列号,当有客户
//端连接时会把 S3置位,执行tcpserverint中断程序
37 tcpserver 8000 d10 s3
/*PID设定,kp,ki,kd需要根据实际调试情况设定*/
38 mov 0.3 f90 //kp,f90=0.3
39 mov 0.0 f91 //ki,f91=0
40 mov 0.15 f92 //kd,f92=0.15
41 mov 0 f81 //f81为马达速度设定值,单位:圈/秒
42 mov 720 f101 //编码器一圈720个脉冲,马达转一圈720个脉冲
43 mov 0.02 f82 //pid运算的更新周期为0.02S
44 pidinit 0 f90 f91 f92 f82 //pid0初始化,f90-kp;f91-ki;f92-kd;f82为更新周期
/*有刷马达初始化*/
45 brushmoto 0 10000 //马达0初始化,pwm频率为10KHZ
46 mov 0 d4 //脉冲计数周期清零
47 mov 30000 d8 //设置最大值中断值为d8=30000个脉冲
48 intinit s0 int0 //中断初始化,当脉冲计数达到最大值时,s0置位,执行int0中断程
//序
/*初始化计数通道0,运行模式1,不管CTR0脚是什么电平,SIG0接收到上升沿,
就加计数。当产生中断时,S0置位,并且把中断状态值保存到D2寄存器*/
49 pcntinit 0 1 D2 S0
//通道0,3表示设置最大值,最大值为d8=30000个脉冲,注意脉冲计数最大值为
//32767,设置值不要超过这个值
50 pcntsetval 0 3 d8
51 pcntint 0 //开启通道0中断
52 intinit s1 int1 //中断初始化,当定时时间达到0.02S时,s1置位,执行int1中断程
//序
53 time 0 0 s1 //定时器0初始化为周期性定时器,定时时间到后S1会置1
54 pcntstart 0 //脉冲计数通道0开始计数
55 timestart 0 0 20000 //启动定时器0,定时周期0.02S,
56 while 1 //无限循环
57 endwhile
58 endmain
程序第1-19行为定时器定时中断程序,定时时间为0.02S,程序中,读取脉冲计数
值,然后减去上周期的值,即为此周期的脉冲数,此值除以720,为圈数,再除以周期
0.02S,就是马达的实际旋转速度,单位圈每秒,然后使用PID指令,与设定速度进行PID运
算,PID运算的输出进行最大最小值限幅后,给马达输出,这样马达就会稳定在设定的速度上
旋转;
第20-22行,为脉冲计数中断程序,程序设置为30000个脉冲产生一次中断,在中断程序
中使用D4寄存器进行累加;
第23-25行,当有站点连接上模块时,执行此中断程序,程序中输出一段信息;
第26-28行,TCP客户端连接中断程序,当有客户端连接到本机时,执行此程序,程序中
执行一个初始化TCP服务器接收数据指令;
第29-31行,TCP服务器接收数据中断程序,本实验规定,每次发送一个字节,此值代表
马达的旋转速度,单位为圈每秒,程序中把此设定速度转换成浮点数保存到F81寄存器中;
第32-58行为主程序,主程序进行了一些初始化工作;
第33,34行,初始化本机为WIFI热点,并开启中断;
第35-37行,初始化本机为TCP服务器,并开启TCP服务器连接中断,开启接收数据中
断;
第38-44行,为初始化PID参数,本实验积分I参数设置为0,只使用了PD参数,此值要根
据实际情况进行调试,本实验调试后的值KP=0.3,KD=0.15;
第45行,有刷马达通道0初始化,PWM频率为10KHz;
第46-51行,初始化脉冲计数通道0,开启通道0中断,开启计数最大值中断,脉冲计数指
令的介绍请参考指令集的脉冲计数章节,本实验通道0运行在模式1,只计数,不判断方向;
第52,53行,初始化定时器0为周期性定时器,并开启定时中断;
第54,55行,启动脉冲计数,启动定时器为0.02秒周期定时;
第56,57行,程序在此处做无限循环;
按图示接好电路,并把此程序下载到模块,上电后,用手机端网络调试助手连接上模
块,然后发送设定速度值,HEX方式发送,每次发送一个字节,此值表示马达的速度,单位
为圈每秒,发送不同的值,并观察马达的速度变化。
图66 手机端APP网络调试助手
PCM开发板模块实验指导--有刷直流马达速度控制实验相关推荐
- PCM开发板模块实验指导--有刷直流马达速度位置控制实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 44---有刷直流马达速度位置控制实验: ...
- PCM开发板模块实验指导--有刷直流马达正反转实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 42---有刷直流马达正反转实验: ...
- PCM开发板模块实验指导--IIC主从实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 25---IIC主读写固定寄存器地址实验: ...
- PCM开发板模块实验指导--触摸屏控制步进电机速度实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 64---触摸屏控制步进电机速度实验: ...
- PCM开发板模块实验指导--触摸屏控制步进电机位置实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 65---触摸屏控制步进电机位置实验: ...
- PCM开发板模块实验指导--SPI读写PSRAM64实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 32---SPI读写PSRAM64实验实验: ...
- ameya30代理品牌尼得科电风扇专用无刷直流马达和扇叶模组
高能效.小型轻便.兼具风量微调功能的电风扇在当今的家电产品领域中,越来越多的电器厂商开始从"节能省电"这一角度出发,重新对产品的功能进行改良.电风扇就是其中之一.与以往搭载交流马达 ...
- 微型计算机原理与应用实验指导书,微机原理与应用实验指导书-20180316.doc
微机原理与应用实验指导书-20180316 PAGE PAGE 1微型计算机原理与应用实 验 指 导 书控制科学与工程学院实验中心山东大学二零一八年三月目 录汇编语言开发环境实验实验1-1 汇编语言程 ...
- c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...
C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...
最新文章
- android sco通信,android – startBluetoothSco()在ICS上抛出安全异常(BROADCAST_STICKY)
- 虚拟机vs裸金属服务器,裸金属是虚拟机还是物理机
- [No000018]都在背单词,为啥学霸那么厉害-如何在一天内记200个单词?
- python之高级的文件操作shutil模块
- c语言无效参数视为严重错误,C语言编译错误:错误:‘-’参数类型无效(有‘int’)...
- python throw_Python 生成器与它的 send,throw,close 方法(转帖以及记录)
- 【vue】webpack插件svg-sprite-loader---实现自己的icon组件
- C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
- python nltk book_nltk book的下载
- 2021-06-16异步调用 CompletableFuture
- 爬虫爬取视频指定秒的画面
- 软件测试面试的自我介绍
- BootStrap富文本编辑器Summernote
- 智能云时代,谁来守护我们的安全?
- android recovery 机器人,扫盲贴:关于recovery模式的机器人倒地和感叹号
- 第二个版图项目:CD4511
- 怎么恢复电脑删除的文件,误删除数据恢复
- SpringBoot后台管理+Uniapp(混合APP)前端 之 酒店住宿+景点下单管理系统(SpringBoot前后端分离)
- 外卖cps 赚钱小程序源码
- Python系列:二、数据类型--技术流ken