查看“直流电机驱动”的源代码
←
直流电机驱动
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 目的 == 在运动控制技术中,DC电机的应用很多,本教程将教大家如何用一个电位器来控制DC电机的转速。改变电位器的输出电压值,通过AD转换后,PWM输出给电机。 == 设备 == *[[ Microduino-CoreSTM32]] *其他硬件设备 *面包板跳线 一盒 *面包板 一块 *3线电位器 一个 *直流电机 一个 *S8050 NPN晶体管 一个 *IN4007整流二极管 一个 *USB数据连接线 一根 [[File:advance6_1.jpg|600px|center|thumb]] == 原理 == '''PWM''' PWM(脉冲宽度调制)是按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。 [[File:advance6_2.jpg|600px|center|thumb]] '''改变占空比的方法有:''' :* 定宽调频法:即保持t1不变,只改变t2,这样使周期(或频率)也 随之改变。 :* 调宽调频法:即保持t2不变,而改变t1,这样使周期(或频率)也 随之改变。 :* 定频调宽法:保持T(或频率)不变,而同时改变t1和t2。 本教程采用定频调宽法。 '''PWM调速设计方法:''' *:软件延时法:首先求出占空比D,再根据周期T分别给电机通电N 个单位时间(t0),即N =t1 /t0,然后再断电N个单位时间,即N =t2 /t0。 *:计数法:首先求出单位延时个数N,作为给定值放在存储单元,对通电单位时间(t0)的次数计数,然后与通电给定值比较;同理,对断电单位时间计数,然后与断电给定值比较。 '''原理图''' 在连接NPN晶体管的时候,基极B与2.2K电阻相连接在[[ Microduino-CoreSTM32]]的D4引脚,发射极E连接地线,集电极C连接电机并加一整流二极管防止电感带来的影响,[[ Microduino-CoreSTM32]]得A0(14)引脚用来读取电位器的电压值。 原理图如下所示: [[File:advance6_3.jpg|600px|center|thumb]] == 程序 == <source lang="cpp"> //PWM pin: 0,1,4,11,12,14(A0),15(A1),16(A2),17(A3),18(SDA),19(SCL),20(A6),21(A7) int potPin=14; // potentiometer connected to analog pin A0(14) int motorPin=4; //PWM pin 4 int potValue=0; int motorValue=0; void setup() { pinMode(potPin, INPUT_ANALOG);//sets the potentiometer pin as analog input pinMode(motorPin,PWM); //sets the motor control pin as PWM } void loop() { potValue=analogRead(potPin); // read the input pin motorValue=map(potValue,0,4096,0,65535); // analogRead values go from 0 to 4095, // pwmWrite values from 0 to 65535 pwmWrite(motorPin,motorValue); //PWM pass motor SerialUSB.print("potentiometer = " ); SerialUSB.print(potValue); SerialUSB.print("\t motor = "); SerialUSB.println(motorValue); delay(2); } </source> 通过analogRead()函数读取电位器的电压值并把其转换为对应的数字,用map()函数把对应的数字映射到0-65535范围内对应的值,最后通过pwmWrite()函数输出对应的PWM波。 '''注意:'''motorPin的引脚要设为支持PWM输出的引脚,[[ Microduino-CoreSTM32]]支持PWM输出的引脚有0,1,4,11,12,14(A0),15(A1),16(A2),17(A3),18(SDA),19(SCL),20(A6),21(A7)。 == 调试 == 步骤一:把代码复制到IDE中,编译 步骤二:电路连接如下图: [[File:advance6_4.jpg|600px|center|thumb]] [[File:advance6_5.jpg|600px|center|thumb]] [[File:advance6_6.jpg|600px|center|thumb]] [[File:advance6_7.jpg|600px|center|thumb]] 步骤三:运行代码,打开串口监视界面。 步骤四:调整电位器,查看电机转速 == 结果 == 扭动电位器,可以调整电机转速,串口见识界面的值也随之变化。 [[File:advance6_8.jpg|600px|center|thumb]] [[File:advance6_9.jpg|600px|center|thumb]] == 视频 == 视频地址:
返回至
直流电机驱动
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息