Arduino 实例(十九)调速带霍尔编码器的电机
liuian 2024-12-08 16:24 43 浏览
1 带霍尔编码器的直流减速电机
2 接线示意图
3 实物连接图
4 运行情况
5 程序
/*
Bnag Bnang Control with Encoded DC Motor(霍尔编码器与起停控制直流电机)
Last Edited: Feb.27th.2021 by Mun Kim
Contact: robotix.kim@gmail.com
*/
// Motor encoder output pulse per rotation (change as required)// 每圈的脉冲数量,可以从数据手册中查找
int PPR= 3;
// Encoder output to Arduino Interrupt pin// 编码器的A相位接Arduino的D2.
int encoder_A= 2;
int encoder_B=3;
// L298n Motor Driver // 马达驱动接线:D5控制PWM, D6与D7控制转动方向
int enB= 5; int in3= 6; int in4= 7;
// Analog pin for potentiometer // 电位器接线:用来控制目标转速(不是PWM)
int pot = 0;
// Pulse count from encoder // 用来储存脉冲数量
volatile long encoderCount = 0;
// One-second interval for measurements // 每一秒进行一次测量与控制,可改小,ie: interval=100;
int interval = 1000;
// Counters for milliseconds during interval // 用来计算时间
long previousMillis = 0; long currentMillis = 0;
// Variable for RPM measuerment //rpm: 实际测到的转速, setRPM:目标转速
int rpm = 0; int setRPM=0;
// Variable for PWM motor speed output // PWM初始值, 可以设为 0-255 之间的任意值
int pwm = 50;
void setup(){
Serial.begin(9600);
pinMode(encoder_A, INPUT_PULLUP);
pinMode(encoder_B, INPUT);
attachInterrupt(digitalPinToInterrupt(encoder_A), ISR_EncoderA, CHANGE);
attachInterrupt(digitalPinToInterrupt(encoder_B), ISR_EncoderB, CHANGE);
previousMillis = millis();
}
void loop(){
// Set desired RPM // 把电位器读数转换成目标转速(2000到10000转每分钟)
setRPM = map(analogRead(pot), 0, 1023, 2000, 10000);
//Set motor direction // 马达转动方向
digitalWrite(in3, HIGH); digitalWrite(in4,LOW);
// Update RPM value every second // 每一秒更新一次测量转速
currentMillis = millis();
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
// Calculate RPM // 计算
rpm = (float)((encoderCount/PPR)*(1000/interval)*60);
// 串口监视器上显示目标,Arduino 输出的 PWM, 以及测量到的RPM
Serial.print("Set RPM: "); Serial.print(setRPM);
Serial.print('\t');
Serial.print("Measured RPM: "); Serial.print(rpm);
Serial.print('\t');
Serial.print("Crrent PWM: "); Serial.println(pwm);
//Bang Bang control // 起停式控制了
if(rpm < setRPM){ pwm++; }
if(rpm > setRPM){ pwm--; }
else{pwm=pwm;}
analogWrite(enB, pwm); //调整马达转速
//pulse count reset // 累计脉冲数量重置,为下一秒测量做准备
encoderCount = 0;
}
}
// Interupt service routine.
void ISR_Encoder(){
encoderCount++; }
void ISR_EncoderA() {
// Phase A: Low to High // A相位从低到高
if (digitalRead(encoder_A) == HIGH) {
// check phase B // 观察B相位从而判断转动方向
if (digitalRead(encoder_B) == LOW) {
encoderCount++; } // CW, 顺时针
else {
encoderCount--; } // CCW, 逆时针
}
else // Phase A: High to Low // A相位从高到低
{
// check phase B // 观察B相位从而判断转动方向
if (digitalRead(encoder_B) == HIGH) {
encoderCount++; } // CW
else {
encoderCount--; } // CCW
}
}
void ISR_EncoderB() {
if (digitalRead(encoder_B) == HIGH) {
if (digitalRead(encoder_A) == HIGH) {
encoderCount++;
}
else {
encoderCount--;
}
}
else {
if (digitalRead(encoder_A) == LOW) {
encoderCount++;}
else {
encoderCount--;}
}
}
相关推荐
- 怎么把电脑c盘格式化(怎么把c盘格式化吗)
-
1.在进行c盘格式化之前,必须备份重要的数据,以免数据丢失。2.在格式化c盘之前,确保所有的应用程序和系统文件都已经备份。否则,在进行格式化之后,将需要重新安装操作系统和所有的应用程序。3.如果...
- 中国移动赠送的wifi6路由器(192.168.10.1中国移动路由器)
-
移动tclwifi6路由器很好的。WiFi6路由器远强于WiFi5路由器,值得购买性价比不错。家庭生活中网速慢最主要的原因并非速率,而是穿墙效果。坐在离路由器很近的地方,手机网速一般不会有问题。...
- win官网网址(win官方网站)
-
具体方法如下:打开电脑,在浏览器地址栏输入window,就会进入win中文官网,然后再寻找自己需要的软件,升级包等就可以了。下面是windows官网网址:1http://www.microsoft.c...
- wifi网址登录入口(wifi网址登录入口有哪些)
-
wifi网页登录入口是网关地址192.168.1.1.1.首先检查路由器线路连接(参考前面手机设置路由器部分)2.将电脑Tnternet协议(TCP/IP)属性设置为“自动获取IP地址”和“自...
- 没有驱动程序怎么安装打印机
-
(1)启动电脑进入Windows操作系统,在桌面上单击开始-设置-打印机。(2)用鼠标右单击安装好的打印机图标,在弹出的右键菜单中选择属性,然后单击打印测试页按钮。(3)此时打印机会打出一页信息,从这...
- u盘怎么取消写保护状态(u盘如何解除写保护状态)
-
如果您的U盘被设置为写保护,您可以尝试以下方法来关闭写保护:1.检查U盘上的物理开关:一些U盘上可能有一个物理开关,用于启用或禁用写保护。请检查U盘的外壳,看看是否有这样的开关,并将其切换到未锁定的...
- 压缩文件查看器(压缩文件查看器密码是多少)
-
1,打开手机上面的文件管理器,找到要压缩的WPS文件。2,长按一下WPS文件,然后选择要压缩的文件。3,点击右下角的【更多】,选择【压缩】。4,对压缩文件进行保存,压缩完成。扩展资料:wps产品特点1...
- 键盘哪个是截图键(键盘中的截图键是哪一个)
-
1、按Prtsc键截图这样获取的是整个电脑屏幕的内容,按Prtsc键后,可以直接打开画图工具,接粘贴使用。也可以粘贴在QQ聊天框或者Word文档中,之后再选择保存即可。2、按Ctrl+Prtsc键截图...
- flash插件电脑版下载(flash插件下载安装)
-
可以不安装,不安装对电脑也不会有什么影响。友情提示,最好安装,这个也不会占用你多少内存,它是用来播放网页中的flash文件的。如果你不安装,网页中的flash动画就不能正常播放。浏览器也会提示你安装!...
- foxmail邮箱怎么设置(foxmail邮箱设置成功后点完成没反应)
-
操作步骤/方法1.打开新建界面:2.打开foxmail,在上方导航栏处找到“邮箱(B)”点开此功能,会看到一个下拉菜单,在下拉菜单中找到“新建邮箱账户(N)”。3.建立账户信息:4.点击“新建邮箱账...
- 电脑自动关机解决办法(电脑自动关机,原来是这里出了问题)
-
电脑自动关机的原因一、系统文件损坏一个完整的系统受到袭击之后,电脑就不能进行初始化,从而引起自动关机,这也是一个常见的原因。可以选择重装系统的方法来解决问题。电脑自动关机的原因二、CPU太热这是电脑自...
- m2固态硬盘安装系统教程(m2固态如何装系统)
-
加装m.2固态硬盘后,重装系统的操作步骤如下:1、下载U盘启动盘制作工具,下载一个GHOST版最新的WIN7,准备一个足够大的U盘(16G足够了),用U盘启动盘制作工具将其制作成启动U盘;2、插入新电...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
