5000|6

63

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

pyboardCN V2-驱动直流电机和编码器 [复制链接]

 1,手上有个自己做的L293D驱动板原理图如下

2,想试下的pyboardCN V2-驱动直流电机和编码器
把p1接到X1
ina1接到A14
ina2寄到A15
E1A接到X2
E1B接到X3
ina1,ina2 控制电机的方向和启停
E1A,E1B是电机编码器的A,B相
对了电机如下图

3,pyb程序
  1. from pyb import Pin,Timer,ExtInt,UART
  2. from pid import PID
  3. import time
  4. import _thread
  5. uart=UART(1,115200)
  6. in1=Pin(Pin.cpu.A14,Pin.OUT)
  7. in2=Pin(Pin.cpu.A15,Pin.OUT)
  8. count1=0
  9. count2=0
  10. p = Pin('X1') # X1 has TIM2, CH1
  11. tim = Timer(2, freq=1000)
  12. ch = tim.channel(1, Timer.PWM, pin=p)
  13. d=50
  14. ch.pulse_width_percent(50)
  15. pidl= PID(p=0.05, i=0.05, imax=300)
  16. def stop():
  17.     global in1,in2
  18.     in1.value(1)
  19.     in2.value(1)
  20. def callback1(p):
  21.     global  count1
  22.     count1 =count1 +1

  23. def start():
  24.     global  in1,in2
  25.     in1.value(0)
  26.     in2.value(1)
  27. e1=pyb.ExtInt(Pin('X2'),pyb.ExtInt.IRQ_RISING_FALLING,pyb.Pin.PULL_UP,callback1)
  28. e2=pyb.ExtInt(Pin('X3'),pyb.ExtInt.IRQ_RISING_FALLING,pyb.Pin.PULL_UP,callback1)

  29. def getcount(long):
  30.     global  count1
  31.     count1=0
  32.     time.sleep_ms(long)
  33.     print('count',count1)
  34.     uart.write(str(count1))
  35.     return(count1)
  36. def control(ms):
  37.     l=getcount(ms)
  38.     error=50*10-l
  39.     output=pidl.get_pid(error,d)
  40.     print('error',error)
  41.     ch.pulse_width_percent(d+output)

  42. def autoprint(long):
  43.     while(1):
  44.         control(long)
  45. start()
  46. _thread.start_new_thread(autoprint,((50,)))
复制代码

4,这里用到编码器就涉及到了闭环,所以我想试试pid
看shell的数值不够直观就想把这些值输入电脑生产图表
pybv2使用串口把这些值输入电脑,这里用到了usbttl把
pybv2的串口1与usbttl相连.
5,电脑上usb程序
  1. import serial
  2. import re
  3. import matplotlib.pyplot as plt
  4. #plt.plot([32,30,25,50])
  5. plt.ylabel('count')

  6. u = serial.Serial()
  7. u.port = '/dev/ttyUSB0'
  8. u.baudrate = 115200
  9. u.parity = 'N'
  10. u.bytesize = 8
  11. u.stopbits = 1
  12. u.timeout = 0.6
  13. s=''
  14. count=0
  15. data=[]
  16. datax=[]
  17. try:
  18.     u.open()
  19.     u.setDTR(True)
  20.     u.setRTS(True)
  21. except Exception, ex:
  22.     print ex
  23. def read_command(str):
  24.     s=re.search('CMTI:\s*"SM"\s*,\s*(\d+)',str)
  25.     if(s):
  26.         return s.group(1)
  27.     else:
  28.         return 'NONE'

  29. while(count <300):
  30.     s=str(u.read_all())
  31.     if len(s)>0:
  32.         print(s)
  33.         data.append(int(s))
  34.         datax.append(500)
  35.         count =count+1
  36. plt.plot(data)
  37. plt.plot(datax)
  38. plt.show()
复制代码


这里用到了  matplotlib.pyplot 生成图表如下图

最新回复

你好,看了你的帖子,想问一下,方便把pid的micropython程序发给我一份吗  详情 回复 发表于 2019-4-11 09:55
点赞 关注(2)
 
 

回复
举报

1万

帖子

24

TA的资源

版主

沙发
 
 
 

回复

113

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

serial?不是pyserial么?

点评

对了  详情 回复 发表于 2018-7-18 18:09
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
请问有msp430 的吗

点评

msp430 不懂了 ???  详情 回复 发表于 2018-7-18 18:09
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

5
 
47857872 发表于 2018-7-1 18:29

serial?不是pyserial么?

对了
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

6
 
LzBarry 发表于 2018-7-14 15:02
请问有msp430 的吗

msp430  不懂了 ???
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

7
 
你好,看了你的帖子,想问一下,方便把pid的micropython程序发给我一份吗
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表