模块推荐: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开发板模块实验指导--有刷直流马达速度控制实验相关推荐

  1. PCM开发板模块实验指导--有刷直流马达速度位置控制实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         44---有刷直流马达速度位置控制实验:          ...

  2. PCM开发板模块实验指导--有刷直流马达正反转实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         42---有刷直流马达正反转实验:             ...

  3. PCM开发板模块实验指导--IIC主从实验

     模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762        25---IIC主读写固定寄存器地址实验:​​​​​​​ ...

  4. PCM开发板模块实验指导--触摸屏控制步进电机速度实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         64---触摸屏控制步进电机速度实验:           ...

  5. PCM开发板模块实验指导--触摸屏控制步进电机位置实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         65---触摸屏控制步进电机位置实验:           ...

  6. PCM开发板模块实验指导--SPI读写PSRAM64实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         32---SPI读写PSRAM64实验实验:        ...

  7. ameya30代理品牌尼得科电风扇专用无刷直流马达和扇叶模组

    高能效.小型轻便.兼具风量微调功能的电风扇在当今的家电产品领域中,越来越多的电器厂商开始从"节能省电"这一角度出发,重新对产品的功能进行改良.电风扇就是其中之一.与以往搭载交流马达 ...

  8. 微型计算机原理与应用实验指导书,微机原理与应用实验指导书-20180316.doc

    微机原理与应用实验指导书-20180316 PAGE PAGE 1微型计算机原理与应用实 验 指 导 书控制科学与工程学院实验中心山东大学二零一八年三月目 录汇编语言开发环境实验实验1-1 汇编语言程 ...

  9. c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...

    C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...

最新文章

  1. android sco通信,android – startBluetoothSco()在ICS上抛出安全异常(BROADCAST_STICKY)
  2. 虚拟机vs裸金属服务器,裸金属是虚拟机还是物理机
  3. [No000018]都在背单词,为啥学霸那么厉害-如何在一天内记200个单词?
  4. python之高级的文件操作shutil模块
  5. c语言无效参数视为严重错误,C语言编译错误:错误:‘-’参数类型无效(有‘int’)...
  6. python throw_Python 生成器与它的 send,throw,close 方法(转帖以及记录)
  7. 【vue】webpack插件svg-sprite-loader---实现自己的icon组件
  8. C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
  9. python nltk book_nltk book的下载
  10. 2021-06-16异步调用 CompletableFuture
  11. 爬虫爬取视频指定秒的画面
  12. 软件测试面试的自我介绍
  13. BootStrap富文本编辑器Summernote
  14. 智能云时代,谁来守护我们的安全?
  15. android recovery 机器人,扫盲贴:关于recovery模式的机器人倒地和感叹号
  16. 第二个版图项目:CD4511
  17. 怎么恢复电脑删除的文件,误删除数据恢复
  18. SpringBoot后台管理+Uniapp(混合APP)前端 之 酒店住宿+景点下单管理系统(SpringBoot前后端分离)
  19. 外卖cps 赚钱小程序源码
  20. Python系列:二、数据类型--技术流ken

热门文章

  1. Element Black 打造 NFT 新形式
  2. 简单谈C++为什么是面向对象的程序设计
  3. java环境变量user.home详解
  4. hangfire-快速入门
  5. 【计算机网络】 课程大作业:利用Wireshark抓包并进行分析
  6. 安装mysql 配置环境变量
  7. MOSFET是什么器件,它的作用是什么
  8. 一、深度学习笔记(一)
  9. 人际关系-《你为什么不道歉》书中的精髓:道歉对于人际关系的重要性,以及怎样传达有诚意、有深度的道歉。
  10. mysql 基于ssl认证